mirror of
https://github.com/oxen-io/session-android.git
synced 2025-10-20 14:54:09 +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:
@@ -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) {
|
||||
|
Reference in New Issue
Block a user