From dbbedc7ab1fce5202be7a52bd6bc971e0228f907 Mon Sep 17 00:00:00 2001 From: Isira Seneviratne Date: Tue, 22 Sep 2020 05:35:48 +0530 Subject: [PATCH] Create and use notification channels on Android Oreo and higher. --- .../org/fdroid/fdroid/nearby/SwapService.java | 3 +- .../org/fdroid/fdroid/NotificationHelper.java | 46 +++++++++++++++---- .../java/org/fdroid/fdroid/UpdateService.java | 2 +- app/src/main/res/values/strings.xml | 7 +++ 4 files changed, 47 insertions(+), 11 deletions(-) diff --git a/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java b/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java index c8d8a1a17..896959dfc 100644 --- a/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java +++ b/app/src/full/java/org/fdroid/fdroid/nearby/SwapService.java @@ -24,6 +24,7 @@ import android.text.TextUtils; import android.util.Log; import cc.mvdan.accesspoint.WifiApControl; import org.fdroid.fdroid.FDroidApp; +import org.fdroid.fdroid.NotificationHelper; import org.fdroid.fdroid.Preferences; import org.fdroid.fdroid.R; import org.fdroid.fdroid.UpdateService; @@ -468,7 +469,7 @@ public class SwapService extends Service { Intent intent = new Intent(this, SwapWorkflowActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP); PendingIntent contentIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT); - return new NotificationCompat.Builder(this) + return new NotificationCompat.Builder(this, NotificationHelper.CHANNEL_SWAPS) .setContentTitle(getText(R.string.local_repo_running)) .setContentText(getText(R.string.touch_to_configure_local_repo)) .setSmallIcon(R.drawable.ic_nearby) diff --git a/app/src/main/java/org/fdroid/fdroid/NotificationHelper.java b/app/src/main/java/org/fdroid/fdroid/NotificationHelper.java index db7e3cc29..0e74f8dbc 100644 --- a/app/src/main/java/org/fdroid/fdroid/NotificationHelper.java +++ b/app/src/main/java/org/fdroid/fdroid/NotificationHelper.java @@ -1,6 +1,8 @@ package org.fdroid.fdroid; import android.app.Notification; +import android.app.NotificationChannel; +import android.app.NotificationManager; import android.app.PendingIntent; import android.content.BroadcastReceiver; import android.content.Context; @@ -12,28 +14,35 @@ import android.graphics.Point; import android.graphics.Typeface; import android.graphics.drawable.Drawable; import android.os.Build; -import androidx.core.app.NotificationCompat; -import androidx.core.app.NotificationManagerCompat; -import androidx.core.content.ContextCompat; -import androidx.localbroadcastmanager.content.LocalBroadcastManager; import android.text.SpannableStringBuilder; import android.text.Spanned; import android.text.TextUtils; import android.text.style.StyleSpan; import android.view.View; + +import androidx.core.app.NotificationCompat; +import androidx.core.app.NotificationManagerCompat; +import androidx.core.content.ContextCompat; +import androidx.localbroadcastmanager.content.LocalBroadcastManager; + import com.nostra13.universalimageloader.core.ImageLoader; import com.nostra13.universalimageloader.core.assist.FailReason; import com.nostra13.universalimageloader.core.assist.ImageSize; import com.nostra13.universalimageloader.core.listener.ImageLoadingListener; import com.nostra13.universalimageloader.utils.DiskCacheUtils; + import org.fdroid.fdroid.data.App; import org.fdroid.fdroid.views.AppDetailsActivity; import org.fdroid.fdroid.views.main.MainActivity; import java.util.ArrayList; +import java.util.Arrays; @SuppressWarnings("LineLength") -class NotificationHelper { +public class NotificationHelper { + public static final String CHANNEL_SWAPS = "swap-channel"; + public static final String CHANNEL_INSTALLS = "install-channel"; + public static final String CHANNEL_UPDATES = "update-channel"; static final String BROADCAST_NOTIFICATIONS_ALL_UPDATES_CLEARED = "org.fdroid.fdroid.installer.notifications.allupdates.cleared"; static final String BROADCAST_NOTIFICATIONS_ALL_INSTALLED_CLEARED = "org.fdroid.fdroid.installer.notifications.allinstalled.cleared"; @@ -60,6 +69,25 @@ class NotificationHelper { appUpdateStatusManager = AppUpdateStatusManager.getInstance(context); notificationManager = NotificationManagerCompat.from(context); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + final NotificationChannel installChannel = new NotificationChannel(CHANNEL_INSTALLS, + context.getString(R.string.notification_channel_installs_title), + NotificationManager.IMPORTANCE_LOW); + installChannel.setDescription(context.getString(R.string.notification_channel_installs_description)); + + final NotificationChannel swapChannel = new NotificationChannel(CHANNEL_SWAPS, + context.getString(R.string.notification_channel_swaps_title), + NotificationManager.IMPORTANCE_LOW); + swapChannel.setDescription(context.getString(R.string.notification_channel_swaps_description)); + + final NotificationChannel updateChannel = new NotificationChannel(CHANNEL_UPDATES, + context.getString(R.string.notification_channel_updates_title), + NotificationManager.IMPORTANCE_LOW); + updateChannel.setDescription(context.getString(R.string.notification_channel_updates_description)); + + notificationManager.createNotificationChannels(Arrays.asList(installChannel, swapChannel, updateChannel)); + } + IntentFilter filter = new IntentFilter(); filter.addAction(AppUpdateStatusManager.BROADCAST_APPSTATUS_LIST_CHANGED); filter.addAction(AppUpdateStatusManager.BROADCAST_APPSTATUS_ADDED); @@ -299,7 +327,7 @@ class NotificationHelper { Bitmap iconLarge = getLargeIconForEntry(entry); NotificationCompat.Builder builder = - new NotificationCompat.Builder(context) + new NotificationCompat.Builder(context, CHANNEL_UPDATES) .setAutoCancel(true) .setContentTitle(getSingleItemTitleString(app, status)) .setContentText(getSingleItemContentString(app, status)) @@ -384,7 +412,7 @@ class NotificationHelper { PendingIntent piAction = PendingIntent.getActivity(context, 0, intentObject, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = - new NotificationCompat.Builder(context) + new NotificationCompat.Builder(context, CHANNEL_UPDATES) .setAutoCancel(!useStackedNotifications()) .setSmallIcon(R.drawable.ic_notification) .setColor(ContextCompat.getColor(context, R.color.fdroid_blue)) @@ -412,7 +440,7 @@ class NotificationHelper { Bitmap iconLarge = getLargeIconForEntry(entry); NotificationCompat.Builder builder = - new NotificationCompat.Builder(context) + new NotificationCompat.Builder(context, CHANNEL_INSTALLS) .setAutoCancel(true) .setLargeIcon(iconLarge) .setSmallIcon(R.drawable.ic_notification) @@ -464,7 +492,7 @@ class NotificationHelper { PendingIntent piAction = PendingIntent.getActivity(context, 0, intentObject, PendingIntent.FLAG_UPDATE_CURRENT); NotificationCompat.Builder builder = - new NotificationCompat.Builder(context) + new NotificationCompat.Builder(context, CHANNEL_INSTALLS) .setAutoCancel(!useStackedNotifications()) .setSmallIcon(R.drawable.ic_notification) .setColor(ContextCompat.getColor(context, R.color.fdroid_blue)) diff --git a/app/src/main/java/org/fdroid/fdroid/UpdateService.java b/app/src/main/java/org/fdroid/fdroid/UpdateService.java index f97dff024..30595745c 100644 --- a/app/src/main/java/org/fdroid/fdroid/UpdateService.java +++ b/app/src/main/java/org/fdroid/fdroid/UpdateService.java @@ -258,7 +258,7 @@ public class UpdateService extends JobIntentService { notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); - notificationBuilder = new NotificationCompat.Builder(this) + notificationBuilder = new NotificationCompat.Builder(this, NotificationHelper.CHANNEL_UPDATES) .setSmallIcon(R.drawable.ic_refresh_white) .setOngoing(true) .setCategory(NotificationCompat.CATEGORY_SERVICE) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 183ac612c..bd4d4b384 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -642,6 +642,13 @@ This often occurs with apps installed via Google Play or other sources, if they Cancel Install + Installations + Displays app installation notifications. + Swaps + Displays P2P app swapping notifications. + Updates + Displays app and repository update notifications. + Category %1$s