[tor-commits] [tor-browser/tor-browser-60.3.0esr-8.5-1] Bug 28051 - Use Orbot's notification-builder wrapper class

gk at torproject.org gk at torproject.org
Thu Nov 29 09:24:28 UTC 2018


commit e6c7c8b6022a3d9e5c1dab2966ab45b467d84630
Author: Matthew Finkel <Matthew.Finkel at 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);



More information about the tor-commits mailing list