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:
Veeti Paananen 2013-12-22 04:44:31 +02:00
parent ca92b4d904
commit eb1b762a76
3 changed files with 47 additions and 16 deletions

View File

@ -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>

View File

@ -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 -->

View File

@ -190,15 +190,29 @@ public class KeyCachingService extends Service {
private void foregroundServiceModern() {
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);
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);
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) {