mirror of
https://github.com/oxen-io/session-android.git
synced 2024-11-30 13:35:18 +00:00
Improve password caching notification UI & UX
On Jelly Bean and above: - Use the standard notification style for a better and consistent visual appearance - Use the JB notification actions API for the locking action - Use a lower notification priority to prioritize other notifications over TextSecure On ICS: - Use the existing custom notification layout Everywhere: - Allow opening the app itself from the notification - Simplify strings: don't talk about a "cached passphrase" but about the app being "unlocked"/"locked"
This commit is contained in:
parent
ca92b4d904
commit
eb1b762a76
@ -28,7 +28,7 @@
|
||||
android:singleLine="true"
|
||||
android:fadingEdge="horizontal"
|
||||
android:ellipsize="marquee"
|
||||
android:text="@string/KeyCachingService_textsecure_passphrase_cached"
|
||||
android:text="@string/KeyCachingService_textsecure_passphrase_cached_with_lock"
|
||||
/>
|
||||
</LinearLayout>
|
||||
|
||||
|
@ -246,8 +246,10 @@
|
||||
<string name="ApplicationMigrationService_importing_text_messages">Importing Text Messages</string>
|
||||
|
||||
<!-- KeyCachingService -->
|
||||
<string name="KeyCachingService_textsecure_passphrase_cached">TextSecure Passphrase Cached</string>
|
||||
<string name="KeyCachingService_passphrase_cached">Passphrase Cached</string>
|
||||
<string name="KeyCachingService_textsecure_passphrase_cached">Touch to open.</string>
|
||||
<string name="KeyCachingService_textsecure_passphrase_cached_with_lock">Touch to open, or touch the lock to close.</string>
|
||||
<string name="KeyCachingService_passphrase_cached">TextSecure is unlocked</string>
|
||||
<string name="KeyCachingService_lock">Lock with passphrase</string>
|
||||
|
||||
<!-- MessageNotifier -->
|
||||
<string name="MessageNotifier_d_new_messages">%d new messages</string>
|
||||
@ -547,7 +549,7 @@
|
||||
<!-- text_secure_normal -->
|
||||
<string name="text_secure_normal__menu_new_message">New Message</string>
|
||||
<string name="text_secure_normal__menu_settings">Settings</string>
|
||||
<string name="text_secure_normal__menu_clear_passphrase">Clear Passphrase</string>
|
||||
<string name="text_secure_normal__menu_clear_passphrase">Lock</string>
|
||||
<string name="text_secure_normal__mark_all_as_read">Mark All Read</string>
|
||||
|
||||
<!-- verify_keys -->
|
||||
|
@ -190,15 +190,29 @@ public class KeyCachingService extends Service {
|
||||
|
||||
private void foregroundServiceModern() {
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
|
||||
|
||||
builder.setContentTitle(getString(R.string.KeyCachingService_passphrase_cached));
|
||||
builder.setContentText(getString(R.string.KeyCachingService_textsecure_passphrase_cached));
|
||||
builder.setSmallIcon(R.drawable.icon_cached);
|
||||
builder.setWhen(0);
|
||||
builder.setPriority(Notification.PRIORITY_LOW);
|
||||
|
||||
builder.addAction(R.drawable.ic_menu_lock_holo_dark, getString(R.string.KeyCachingService_lock), buildLockIntent());
|
||||
builder.setContentIntent(buildLaunchIntent());
|
||||
|
||||
stopForeground(true);
|
||||
startForeground(SERVICE_RUNNING_ID, builder.build());
|
||||
}
|
||||
|
||||
private void foregroundServiceICS() {
|
||||
NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
|
||||
RemoteViews remoteViews = new RemoteViews(getPackageName(), R.layout.key_caching_notification);
|
||||
|
||||
Intent intent = new Intent(this, KeyCachingService.class);
|
||||
intent.setAction(PASSPHRASE_EXPIRED_EVENT);
|
||||
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);
|
||||
remoteViews.setOnClickPendingIntent(R.id.lock_cache_icon, pendingIntent);
|
||||
remoteViews.setOnClickPendingIntent(R.id.lock_cache_icon, buildLockIntent());
|
||||
|
||||
builder.setSmallIcon(R.drawable.icon_cached);
|
||||
builder.setContent(remoteViews);
|
||||
builder.setContentIntent(buildLaunchIntent());
|
||||
|
||||
stopForeground(true);
|
||||
startForeground(SERVICE_RUNNING_ID, builder.build());
|
||||
@ -208,14 +222,11 @@ public class KeyCachingService extends Service {
|
||||
Notification notification = new Notification(R.drawable.icon_cached,
|
||||
getString(R.string.KeyCachingService_textsecure_passphrase_cached),
|
||||
System.currentTimeMillis());
|
||||
Intent intent = new Intent(this, RoutingActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
|
||||
PendingIntent launchIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
|
||||
notification.setLatestEventInfo(getApplicationContext(),
|
||||
getString(R.string.KeyCachingService_passphrase_cached),
|
||||
getString(R.string.KeyCachingService_textsecure_passphrase_cached),
|
||||
launchIntent);
|
||||
buildLaunchIntent());
|
||||
notification.tickerText = null;
|
||||
|
||||
stopForeground(true);
|
||||
startForeground(SERVICE_RUNNING_ID, notification);
|
||||
@ -227,8 +238,13 @@ public class KeyCachingService extends Service {
|
||||
return;
|
||||
}
|
||||
|
||||
if (Build.VERSION.SDK_INT >= 11) foregroundServiceModern();
|
||||
else foregroundServiceLegacy();
|
||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
|
||||
foregroundServiceModern();
|
||||
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
|
||||
foregroundServiceICS();
|
||||
} else {
|
||||
foregroundServiceLegacy();
|
||||
}
|
||||
}
|
||||
|
||||
private void broadcastNewSecret() {
|
||||
@ -246,6 +262,19 @@ public class KeyCachingService extends Service {
|
||||
.getBoolean(ApplicationPreferencesActivity.DISABLE_PASSPHRASE_PREF, false);
|
||||
}
|
||||
|
||||
private PendingIntent buildLockIntent() {
|
||||
Intent intent = new Intent(this, KeyCachingService.class);
|
||||
intent.setAction(PASSPHRASE_EXPIRED_EVENT);
|
||||
PendingIntent pendingIntent = PendingIntent.getService(getApplicationContext(), 0, intent, 0);
|
||||
return pendingIntent;
|
||||
}
|
||||
|
||||
private PendingIntent buildLaunchIntent() {
|
||||
Intent intent = new Intent(this, RoutingActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
|
||||
PendingIntent launchIntent = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0);
|
||||
return launchIntent;
|
||||
}
|
||||
|
||||
@Override
|
||||
public IBinder onBind(Intent arg0) {
|
||||
|
Loading…
Reference in New Issue
Block a user