diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java
index c3b2687de..4cd7522a4 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/Constants.java
@@ -118,6 +118,7 @@ public final class Constants {
public static final class NotificationChannels {
public static final String KEYSERVER_SYNC = "keyserverSync";
+ public static final String PASSPHRASE_CACHE = "passphraseCache";
}
public static final class Pref {
diff --git a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java
index 8451b942f..713919930 100644
--- a/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java
+++ b/OpenKeychain/src/main/java/org/sufficientlysecure/keychain/service/PassphraseCacheService.java
@@ -22,6 +22,8 @@ import java.util.Date;
import android.app.AlarmManager;
import android.app.Notification;
+import android.app.NotificationChannel;
+import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.BroadcastReceiver;
@@ -29,6 +31,7 @@ import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.os.Binder;
+import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.os.HandlerThread;
@@ -37,9 +40,12 @@ import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
import android.support.v4.app.NotificationCompat;
+import android.support.v4.app.NotificationCompat.Builder;
+import android.support.v4.app.NotificationCompat.InboxStyle;
import android.support.v4.util.LongSparseArray;
import org.sufficientlysecure.keychain.Constants;
+import org.sufficientlysecure.keychain.Constants.NotificationChannels;
import org.sufficientlysecure.keychain.Constants.NotificationIds;
import org.sufficientlysecure.keychain.R;
import org.sufficientlysecure.keychain.pgp.CanonicalizedSecretKey.SecretKeyType;
@@ -488,6 +494,7 @@ public class PassphraseCacheService extends Service {
private void updateService() {
if (mPassphraseCache.size() > 0) {
+ createNotificationChannelsIfNecessary();
startForeground(NotificationIds.PASSPHRASE_CACHE, getNotification());
} else {
// stop whole service if no cached passphrases remaining
@@ -498,15 +505,15 @@ public class PassphraseCacheService extends Service {
}
private Notification getNotification() {
- NotificationCompat.Builder builder = new NotificationCompat.Builder(this);
+ Builder builder = new Builder(this, NotificationChannels.PASSPHRASE_CACHE);
builder.setSmallIcon(R.drawable.ic_stat_notify_24dp)
.setColor(getResources().getColor(R.color.primary))
.setContentTitle(getResources().getQuantityString(R.plurals.passp_cache_notif_n_keys,
mPassphraseCache.size(), mPassphraseCache.size()))
.setContentText(getString(R.string.passp_cache_notif_touch_to_clear))
- .setPriority(NotificationCompat.PRIORITY_MIN);
+ .setPriority(NotificationCompat.PRIORITY_LOW);
- NotificationCompat.InboxStyle inboxStyle = new NotificationCompat.InboxStyle();
+ InboxStyle inboxStyle = new InboxStyle();
inboxStyle.setBigContentTitle(getString(R.string.passp_cache_notif_keys));
@@ -540,6 +547,22 @@ public class PassphraseCacheService extends Service {
return builder.build();
}
+ private void createNotificationChannelsIfNecessary() {
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) {
+ return;
+ }
+
+ NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
+ if (notificationManager == null) {
+ return;
+ }
+
+ CharSequence name = getString(R.string.notify_channel_passcache);
+ NotificationChannel channel = new NotificationChannel(
+ NotificationChannels.PASSPHRASE_CACHE, name, NotificationManager.IMPORTANCE_LOW);
+ notificationManager.createNotificationChannel(channel);
+ }
+
@Override
public void onCreate() {
super.onCreate();
diff --git a/OpenKeychain/src/main/res/values/strings.xml b/OpenKeychain/src/main/res/values/strings.xml
index 1666b84fd..88066be66 100644
--- a/OpenKeychain/src/main/res/values/strings.xml
+++ b/OpenKeychain/src/main/res/values/strings.xml
@@ -2027,6 +2027,7 @@
View
Keyserver update
+ Passphrase cache
Updating keys…
Finished updating %d keys
Key %d / %d