commit e6c7c8b6022a3d9e5c1dab2966ab45b467d84630 Author: Matthew Finkel Matthew.Finkel@gmail.com Date: Fri Nov 23 20:39:24 2018 +0000
Bug 28051 - Use Orbot's notification-builder wrapper class
This allows for notifications on all supported versions of Android. --- .../gecko/notifications/NotificationClient.java | 39 ++++++++++++++++++++-- .../gecko/notifications/NotificationHelper.java | 5 +-- 2 files changed, 40 insertions(+), 4 deletions(-)
diff --git a/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationClient.java b/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationClient.java index d8392a801e13..b2312b8780d2 100644 --- a/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationClient.java +++ b/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationClient.java @@ -7,12 +7,15 @@ package org.mozilla.gecko.notifications;
import android.app.Activity; import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; import android.app.PendingIntent; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; +import android.os.Build; import android.support.v4.app.NotificationCompat; import android.support.v4.app.NotificationManagerCompat; import android.util.Log; @@ -28,6 +31,8 @@ import org.mozilla.gecko.NotificationListener; import org.mozilla.gecko.R; import org.mozilla.gecko.util.BitmapUtils;
+import org.torproject.android.service.util.NotificationBuilderCompat; + /** * Client for posting notifications. */ @@ -37,8 +42,11 @@ public final class NotificationClient implements NotificationListener { /* package */ static final String CLOSE_ACTION = AppConstants.ANDROID_PACKAGE_NAME + ".NOTIFICATION_CLOSE"; /* package */ static final String PERSISTENT_INTENT_EXTRA = "persistentIntent";
+ private static final String NOTIFICATION_CHANNEL_ID = NotificationBuilderCompat.DEFAULT_CHANNEL_ID; + private final Context mContext; private final NotificationManagerCompat mNotificationManager; + private NotificationManager mNativeNotificationManager;
private final HashMap<String, Notification> mNotifications = new HashMap<>();
@@ -57,6 +65,8 @@ public final class NotificationClient implements NotificationListener { public NotificationClient(Context context) { mContext = context.getApplicationContext(); mNotificationManager = NotificationManagerCompat.from(mContext); + + createNotificationChannel(); }
@Override // NotificationListener @@ -72,6 +82,31 @@ public final class NotificationClient implements NotificationListener { showNotification(name, cookie, title, text, host, imageUrl, data != null ? data : ""); }
+ /* Only create the notification channel if we're running on Android O or later. + * The notification channel is required for notifications on new Android versions. + */ + private void createNotificationChannel() { + if (Build.VERSION.SDK_INT < Build.VERSION_CODES.O) { + return; + } + + NotificationManager mNativeNotificationManager = + (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE); + + CharSequence name = mContext.getString(R.string.app_name); + String description = mContext.getString(R.string.app_description); + int importance = NotificationManager.IMPORTANCE_LOW; + + NotificationChannel mChannel = new NotificationChannel(NOTIFICATION_CHANNEL_ID, name, importance); + mChannel.setDescription(description); + mChannel.enableLights(false); + mChannel.enableVibration(false); + mChannel.setShowBadge(false); + mChannel.setLockscreenVisibility(Notification.VISIBILITY_SECRET); + + mNativeNotificationManager.createNotificationChannel(mChannel); + } + private void showNotification(String name, String cookie, String title, String text, String host, String imageUrl, String persistentData) { @@ -142,7 +177,7 @@ public final class NotificationClient implements NotificationListener { private void add(final String name, final String imageUrl, final String host, final String alertTitle, final String alertText, final PendingIntent contentIntent, final PendingIntent deleteIntent) { - final NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext) + final NotificationBuilderCompat builder = new NotificationBuilderCompat(mContext) .setContentTitle(alertTitle) .setContentText(alertText) .setSmallIcon(R.drawable.ic_status_logo) @@ -150,7 +185,7 @@ public final class NotificationClient implements NotificationListener { .setDeleteIntent(deleteIntent) .setAutoCancel(true) .setDefaults(Notification.DEFAULT_SOUND) - .setStyle(new NotificationCompat.BigTextStyle() + .setStyle(new Notification.BigTextStyle() .bigText(alertText) .setSummaryText(host));
diff --git a/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationHelper.java b/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationHelper.java index 34ea99882d9a..35366609da49 100644 --- a/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationHelper.java +++ b/mobile/android/base/java/org/mozilla/gecko/notifications/NotificationHelper.java @@ -32,10 +32,11 @@ import android.content.pm.PackageManager; import android.content.pm.ResolveInfo; import android.graphics.Bitmap; import android.net.Uri; -import android.support.v4.app.NotificationCompat; import android.support.v4.util.SimpleArrayMap; import android.util.Log;
+import org.torproject.android.service.util.NotificationBuilderCompat; + public final class NotificationHelper implements BundleEventListener { public static final String HELPER_BROADCAST_ACTION = AppConstants.ANDROID_PACKAGE_NAME + ".helperBroadcastAction";
@@ -233,7 +234,7 @@ public final class NotificationHelper implements BundleEventListener { private void showNotification(final GeckoBundle message) { ThreadUtils.assertOnUiThread();
- final NotificationCompat.Builder builder = new NotificationCompat.Builder(mContext); + final NotificationBuilderCompat builder = new NotificationBuilderCompat(mContext);
// These attributes are required final String id = message.getString(ID_ATTR);
tor-commits@lists.torproject.org