From 17f1681be50e87b205fad1791b789555e7b6bf4c Mon Sep 17 00:00:00 2001 From: sspanak Date: Thu, 11 Apr 2024 13:02:21 +0300 Subject: [PATCH] notifications code cleanup --- .../sspanak/tt9/db/DictionaryLoader.java | 2 +- .../screens/languages/ItemExportAbstract.java | 8 +- .../screens/languages/ItemLoadDictionary.java | 2 +- .../DictionaryLoadingBar.java | 8 +- .../DictionaryNotification.java | 55 +---------- .../DictionaryProgressNotification.java | 96 +++++++++++++++++++ 6 files changed, 110 insertions(+), 61 deletions(-) rename app/src/main/java/io/github/sspanak/tt9/ui/{ => notifications}/DictionaryLoadingBar.java (96%) rename app/src/main/java/io/github/sspanak/tt9/ui/{ => notifications}/DictionaryNotification.java (64%) create mode 100644 app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryProgressNotification.java diff --git a/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java b/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java index 166c80f2..6291e501 100644 --- a/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java +++ b/app/src/main/java/io/github/sspanak/tt9/db/DictionaryLoader.java @@ -24,8 +24,8 @@ import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageCharactersException; import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageException; import io.github.sspanak.tt9.preferences.settings.SettingsStore; -import io.github.sspanak.tt9.ui.DictionaryLoadingBar; import io.github.sspanak.tt9.ui.dialogs.ConfirmDictionaryUpdateDialog; +import io.github.sspanak.tt9.ui.notifications.DictionaryLoadingBar; import io.github.sspanak.tt9.util.ConsumerCompat; import io.github.sspanak.tt9.util.Logger; import io.github.sspanak.tt9.util.Timer; diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/ItemExportAbstract.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/ItemExportAbstract.java index ce875e16..e6d7234f 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/ItemExportAbstract.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/ItemExportAbstract.java @@ -6,7 +6,7 @@ import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.exporter.AbstractExporter; import io.github.sspanak.tt9.preferences.PreferencesActivity; import io.github.sspanak.tt9.preferences.items.ItemClickable; -import io.github.sspanak.tt9.ui.DictionaryNotification; +import io.github.sspanak.tt9.ui.notifications.DictionaryProgressNotification; abstract class ItemExportAbstract extends ItemClickable { final protected PreferencesActivity activity; @@ -59,12 +59,12 @@ abstract class ItemExportAbstract extends ItemClickable { setReadyStatus(); if (outputFile == null) { - DictionaryNotification.getInstance(activity).showError( + DictionaryProgressNotification.getInstance(activity).showError( activity.getString(R.string.dictionary_export_failed), activity.getString(R.string.dictionary_export_failed_more_info) ); } else { - DictionaryNotification.getInstance(activity).showMessage( + DictionaryProgressNotification.getInstance(activity).showMessage( activity.getString(R.string.dictionary_export_finished), activity.getString(R.string.dictionary_export_finished_more_info, outputFile), activity.getString(R.string.dictionary_export_finished_more_info, outputFile) @@ -80,7 +80,7 @@ abstract class ItemExportAbstract extends ItemClickable { String loadingMessage = getExporter().getStatusMessage(); item.setSummary(loadingMessage); - DictionaryNotification.getInstance(activity).showLoadingMessage(loadingMessage, ""); + DictionaryProgressNotification.getInstance(activity).showLoadingMessage(loadingMessage, ""); } diff --git a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/ItemLoadDictionary.java b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/ItemLoadDictionary.java index a1bda075..275db768 100644 --- a/app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/ItemLoadDictionary.java +++ b/app/src/main/java/io/github/sspanak/tt9/preferences/screens/languages/ItemLoadDictionary.java @@ -12,8 +12,8 @@ import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageCollection; import io.github.sspanak.tt9.preferences.PreferencesActivity; import io.github.sspanak.tt9.preferences.items.ItemClickable; -import io.github.sspanak.tt9.ui.DictionaryLoadingBar; import io.github.sspanak.tt9.ui.UI; +import io.github.sspanak.tt9.ui.notifications.DictionaryLoadingBar; class ItemLoadDictionary extends ItemClickable { diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java b/app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryLoadingBar.java similarity index 96% rename from app/src/main/java/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java rename to app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryLoadingBar.java index ce07b3b9..75c69921 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/DictionaryLoadingBar.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryLoadingBar.java @@ -1,4 +1,4 @@ -package io.github.sspanak.tt9.ui; +package io.github.sspanak.tt9.ui.notifications; import android.content.Context; import android.os.Bundle; @@ -9,13 +9,13 @@ import java.util.Locale; import io.github.sspanak.tt9.R; import io.github.sspanak.tt9.db.exceptions.DictionaryImportException; -import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageCharactersException; -import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageException; import io.github.sspanak.tt9.languages.Language; import io.github.sspanak.tt9.languages.LanguageCollection; +import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageCharactersException; +import io.github.sspanak.tt9.languages.exceptions.InvalidLanguageException; -public class DictionaryLoadingBar extends DictionaryNotification { +public class DictionaryLoadingBar extends DictionaryProgressNotification { private static DictionaryLoadingBar self; diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/DictionaryNotification.java b/app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryNotification.java similarity index 64% rename from app/src/main/java/io/github/sspanak/tt9/ui/DictionaryNotification.java rename to app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryNotification.java index 82741bde..a6308490 100644 --- a/app/src/main/java/io/github/sspanak/tt9/ui/DictionaryNotification.java +++ b/app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryNotification.java @@ -1,31 +1,23 @@ -package io.github.sspanak.tt9.ui; +package io.github.sspanak.tt9.ui.notifications; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; -import android.content.Intent; import android.content.res.Resources; import android.os.Build; import androidx.annotation.NonNull; import androidx.core.app.NotificationCompat; -import io.github.sspanak.tt9.R; -import io.github.sspanak.tt9.preferences.PreferencesActivity; -import io.github.sspanak.tt9.preferences.screens.languages.LanguagesScreen; - public abstract class DictionaryNotification { - private static DictionaryNotification self; private static final int NOTIFICATION_ID = 1; private static final String NOTIFICATION_CHANNEL_ID = "dictionary-notifications"; private final NotificationManager manager; - private final NotificationCompat.Builder notificationBuilder; + protected final NotificationCompat.Builder notificationBuilder; protected final Resources resources; - protected int maxProgress = 0; - protected int progress = 0; protected boolean indeterminate = false; protected String title = ""; protected String message = ""; @@ -45,23 +37,7 @@ public abstract class DictionaryNotification { .setOnlyAlertOnce(true); } - - public static DictionaryNotification getInstance(Context context) { - if (self == null) { - self = new DictionaryNotification(context) { - }; - } - return self; - } - - - private PendingIntent createNavigationIntent(Context context) { - Intent intent = new Intent(context, PreferencesActivity.class); - intent.putExtra("screen", LanguagesScreen.NAME); - intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); - return PendingIntent.getActivity(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); - } - + protected abstract PendingIntent createNavigationIntent(Context context); private NotificationCompat.Builder getNotificationBuilderCompat(Context context) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { @@ -79,7 +55,6 @@ public abstract class DictionaryNotification { public void showMessage(@NonNull String title, @NonNull String message, @NonNull String messageLong) { - progress = maxProgress = 0; indeterminate = false; this.title = title; this.message = message; @@ -88,19 +63,7 @@ public abstract class DictionaryNotification { } - public void showLoadingMessage(@NonNull String title, @NonNull String message) { - this.title = title; - this.message = message; - messageLong = ""; - indeterminate = true; - progress = 1; - maxProgress = 2; - renderMessage(); - } - - public void showError(@NonNull String title, @NonNull String message) { - progress = maxProgress = 0; indeterminate = false; this.title = title; this.message = message; @@ -109,16 +72,10 @@ public abstract class DictionaryNotification { protected void hide() { - progress = maxProgress = 0; manager.cancel(NOTIFICATION_ID); } - public boolean inProgress() { - return progress < maxProgress; - } - - protected void renderError() { NotificationCompat.BigTextStyle bigMessage = new NotificationCompat.BigTextStyle(); bigMessage.setBigContentTitle(title); @@ -129,8 +86,7 @@ public abstract class DictionaryNotification { .setContentTitle(title) .setContentText(message) .setOngoing(false) - .setStyle(bigMessage) - .setProgress(maxProgress, progress, false); + .setStyle(bigMessage); manager.notify(NOTIFICATION_ID, notificationBuilder.build()); } @@ -142,9 +98,6 @@ public abstract class DictionaryNotification { bigMessage.bigText(messageLong.isEmpty() ? message : messageLong); notificationBuilder - .setSmallIcon(inProgress() ? android.R.drawable.stat_notify_sync : R.drawable.ic_done) - .setOngoing(inProgress()) - .setProgress(maxProgress, progress, indeterminate) .setStyle(bigMessage) .setContentTitle(title) .setContentText(message); diff --git a/app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryProgressNotification.java b/app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryProgressNotification.java new file mode 100644 index 00000000..e01e6018 --- /dev/null +++ b/app/src/main/java/io/github/sspanak/tt9/ui/notifications/DictionaryProgressNotification.java @@ -0,0 +1,96 @@ +package io.github.sspanak.tt9.ui.notifications; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; + +import androidx.annotation.NonNull; + +import io.github.sspanak.tt9.R; +import io.github.sspanak.tt9.preferences.PreferencesActivity; +import io.github.sspanak.tt9.preferences.screens.languages.LanguagesScreen; + +public class DictionaryProgressNotification extends DictionaryNotification { + private static DictionaryProgressNotification self; + + protected int maxProgress = 0; + protected int progress = 0; + + + protected DictionaryProgressNotification(Context context) { + super(context); + } + + + public static DictionaryProgressNotification getInstance(Context context) { + if (self == null) { + self = new DictionaryProgressNotification(context) { + }; + } + return self; + } + + + @Override + protected final PendingIntent createNavigationIntent(Context context) { + Intent intent = new Intent(context, PreferencesActivity.class); + intent.putExtra("screen", LanguagesScreen.NAME); + intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); + return PendingIntent.getActivity(context, 0, intent,PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); + } + + + @Override + public void showMessage(@NonNull String title, @NonNull String message, @NonNull String messageLong) { + progress = maxProgress = 0; + super.showMessage(title, message, messageLong); + } + + + public void showLoadingMessage(@NonNull String title, @NonNull String message) { + this.title = title; + this.message = message; + messageLong = ""; + indeterminate = true; + progress = 1; + maxProgress = 2; + renderMessage(); + } + + + @Override + public void showError(@NonNull String title, @NonNull String message) { + progress = maxProgress = 0; + super.showError(title, message); + } + + + @Override + protected void hide() { + progress = maxProgress = 0; + super.hide(); + } + + + public boolean inProgress() { + return progress < maxProgress; + } + + + @Override + protected void renderError() { + notificationBuilder.setProgress(maxProgress, progress, false); + super.renderError(); + } + + + @Override + protected void renderMessage() { + notificationBuilder + .setSmallIcon(inProgress() ? android.R.drawable.stat_notify_sync : R.drawable.ic_done) + .setOngoing(inProgress()) + .setProgress(maxProgress, progress, indeterminate); + + super.renderMessage(); + } +}