From eb2dfa86a6c369e968fe23b0f9463b44baea3468 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Fri, 13 Mar 2020 16:59:58 +0300 Subject: [PATCH] NotificationHelper: add a way to test legacy notification channels on new devices --- .../preference/AccountPreferencesFragment.kt | 3 ++- .../tusky/service/SendTootService.kt | 4 ++-- .../tusky/util/NotificationHelper.java | 18 ++++++++++++------ .../tusky/viewdata/StatusViewData.java | 2 +- 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/com/keylesspalace/tusky/fragment/preference/AccountPreferencesFragment.kt b/app/src/main/java/com/keylesspalace/tusky/fragment/preference/AccountPreferencesFragment.kt index 093f1b40..c155c995 100644 --- a/app/src/main/java/com/keylesspalace/tusky/fragment/preference/AccountPreferencesFragment.kt +++ b/app/src/main/java/com/keylesspalace/tusky/fragment/preference/AccountPreferencesFragment.kt @@ -35,6 +35,7 @@ import com.keylesspalace.tusky.entity.Filter import com.keylesspalace.tusky.entity.Status import com.keylesspalace.tusky.network.MastodonApi import com.keylesspalace.tusky.util.ThemeUtils +import com.keylesspalace.tusky.util.NotificationHelper import com.mikepenz.google_material_typeface_library.GoogleMaterial import com.mikepenz.iconics.IconicsDrawable import retrofit2.Call @@ -171,7 +172,7 @@ class AccountPreferencesFragment : PreferenceFragmentCompat(), return when (preference) { notificationPreference -> { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (NotificationHelper.NOTIFICATION_USE_CHANNELS) { val intent = Intent() intent.action = "android.settings.APP_NOTIFICATION_SETTINGS" intent.putExtra("android.provider.extra.APP_PACKAGE", BuildConfig.APPLICATION_ID) diff --git a/app/src/main/java/com/keylesspalace/tusky/service/SendTootService.kt b/app/src/main/java/com/keylesspalace/tusky/service/SendTootService.kt index 7a9913bf..e2bb1aad 100644 --- a/app/src/main/java/com/keylesspalace/tusky/service/SendTootService.kt +++ b/app/src/main/java/com/keylesspalace/tusky/service/SendTootService.kt @@ -26,6 +26,7 @@ import com.keylesspalace.tusky.entity.NewStatus import com.keylesspalace.tusky.entity.Status import com.keylesspalace.tusky.network.MastodonApi import com.keylesspalace.tusky.util.SaveTootHelper +import com.keylesspalace.tusky.util.NotificationHelper import dagger.android.AndroidInjection import kotlinx.android.parcel.Parcelize import retrofit2.Call @@ -72,10 +73,9 @@ class SendTootService : Service(), Injectable { val tootToSend = intent.getParcelableExtra(KEY_TOOT) ?: throw IllegalStateException("SendTootService started without $KEY_TOOT extra") - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (NotificationHelper.NOTIFICATION_USE_CHANNELS) { val channel = NotificationChannel(CHANNEL_ID, getString(R.string.send_toot_notification_channel_name), NotificationManager.IMPORTANCE_LOW) notificationManager.createNotificationChannel(channel) - } var notificationText = tootToSend.warningText diff --git a/app/src/main/java/com/keylesspalace/tusky/util/NotificationHelper.java b/app/src/main/java/com/keylesspalace/tusky/util/NotificationHelper.java index 83adfcfb..4882693f 100644 --- a/app/src/main/java/com/keylesspalace/tusky/util/NotificationHelper.java +++ b/app/src/main/java/com/keylesspalace/tusky/util/NotificationHelper.java @@ -124,6 +124,12 @@ public class NotificationHelper { */ private static final int NOTIFICATION_CHECK_INTERVAL_MINUTES = 15; + /** + * by setting this as false, it's possible to test legacy notification channels on newer devices + */ + //public static final boolean NOTIFICATION_USE_CHANNELS = false; + public static final boolean NOTIFICATION_USE_CHANNELS = Build.VERSION.SDK_INT >= Build.VERSION_CODES.O; + /** * Takes a given Mastodon notification and either creates a new Android notification or updates @@ -353,7 +359,7 @@ public class NotificationHelper { } public static void createNotificationChannelsForAccount(@NonNull AccountEntity account, @NonNull Context context) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (NOTIFICATION_USE_CHANNELS) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); @@ -411,7 +417,7 @@ public class NotificationHelper { } public static void deleteNotificationChannelsForAccount(@NonNull AccountEntity account, @NonNull Context context) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (NOTIFICATION_USE_CHANNELS) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); @@ -422,7 +428,7 @@ public class NotificationHelper { } public static void deleteLegacyNotificationChannels(@NonNull Context context, @NonNull AccountManager accountManager) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (NOTIFICATION_USE_CHANNELS) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); @@ -441,7 +447,7 @@ public class NotificationHelper { } public static boolean areNotificationsEnabled(@NonNull Context context, @NonNull AccountManager accountManager) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (NOTIFICATION_USE_CHANNELS) { // on Android >= O, notifications are enabled, if at least one channel is enabled NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); @@ -505,7 +511,7 @@ public class NotificationHelper { private static boolean filterNotification(AccountEntity account, Notification notification, Context context) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (NOTIFICATION_USE_CHANNELS) { NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); String channelId = getChannelId(account, notification); @@ -559,7 +565,7 @@ public class NotificationHelper { private static void setupPreferences(AccountEntity account, NotificationCompat.Builder builder) { - if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + if (NOTIFICATION_USE_CHANNELS) { return; //do nothing on Android O or newer, the system uses the channel settings anyway } diff --git a/app/src/main/java/com/keylesspalace/tusky/viewdata/StatusViewData.java b/app/src/main/java/com/keylesspalace/tusky/viewdata/StatusViewData.java index d1c27727..3f2fbaed 100644 --- a/app/src/main/java/com/keylesspalace/tusky/viewdata/StatusViewData.java +++ b/app/src/main/java/com/keylesspalace/tusky/viewdata/StatusViewData.java @@ -110,7 +110,7 @@ public abstract class StatusViewData { boolean isUserMuted, boolean isThreadMutedOnBackend, int conversationId, @Nullable List emojiReactions) { this.id = id; - if (Build.VERSION.SDK_INT == 23) { + if (Build.VERSION.SDK_INT == Build.VERSION_CODES.M) { // https://github.com/tuskyapp/Tusky/issues/563 this.content = replaceCrashingCharacters(content); this.spoilerText = spoilerText == null ? null : replaceCrashingCharacters(spoilerText).toString();