From 574b99098461f2c783b41a42fc2cc8a57a9ffc53 Mon Sep 17 00:00:00 2001 From: Prathamesh More Date: Mon, 22 Nov 2021 17:44:07 +0530 Subject: [PATCH] Fixed Widget and Notification crashes and added a better notification layout for Android 12 --- app/src/main/AndroidManifest.xml | 14 +-- .../retromusic/appwidgets/AppWidgetBig.kt | 6 +- .../retromusic/appwidgets/AppWidgetCard.kt | 8 +- .../retromusic/appwidgets/AppWidgetClassic.kt | 3 +- .../retromusic/appwidgets/AppWidgetSmall.kt | 4 +- .../retromusic/appwidgets/AppWidgetText.kt | 4 +- .../appwidgets/base/BaseAppWidget.kt | 4 +- .../notification/PlayingNotificationOreo.kt | 22 +++- .../layout_notification_collapsed.xml | 100 +++++++++++++++++ .../layout_notification_expanded.xml | 104 ++++++++++++++++++ .../main/res/values-v31/donottranslate.xml | 2 + app/src/main/res/values/donottranslate.xml | 2 + app/src/main/res/xml/pref_notification.xml | 1 + .../appthemehelper/util/VersionUtils.kt | 7 ++ 14 files changed, 254 insertions(+), 27 deletions(-) create mode 100644 app/src/main/res/layout-v31/layout_notification_collapsed.xml create mode 100644 app/src/main/res/layout-v31/layout_notification_expanded.xml diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index cf186ded..bf69e2ee 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -180,7 +180,7 @@ + android:exported="true"> @@ -188,7 +188,7 @@ + android:exported="true"> @@ -197,7 +197,7 @@ @@ -210,7 +210,7 @@ @@ -222,7 +222,7 @@ @@ -234,7 +234,7 @@ @@ -246,7 +246,7 @@ diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt index 461b3e27..68596c69 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetBig.kt @@ -74,7 +74,7 @@ class AppWidgetBig : BaseAppWidget() { ) ) appWidgetView.setImageViewBitmap( - R.id.button_toggle_play_pause, BaseAppWidget.Companion.createBitmap( + R.id.button_toggle_play_pause, BaseAppWidget.createBitmap( RetroUtil.getTintedVectorDrawable( context, R.drawable.ic_play_arrow_white_32dp, @@ -202,13 +202,13 @@ class AppWidgetBig : BaseAppWidget() { MainActivity.EXPAND_PANEL, PreferenceUtil.isExpandPanel ) - var pendingIntent: PendingIntent val serviceName = ComponentName(context, MusicService::class.java) // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP - pendingIntent = PendingIntent.getActivity(context, 0, action, 0) + var pendingIntent = + PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) views.setOnClickPendingIntent(R.id.clickable_area, pendingIntent) // Previous track diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt index a0729267..30bcf124 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetCard.kt @@ -141,11 +141,11 @@ class AppWidgetCard : BaseAppWidget() { if (imageSize == 0) { imageSize = - service.resources.getDimensionPixelSize(code.name.monkey.retromusic.R.dimen.app_widget_card_image_size) + service.resources.getDimensionPixelSize(R.dimen.app_widget_card_image_size) } if (cardRadius == 0f) { cardRadius = - service.resources.getDimension(code.name.monkey.retromusic.R.dimen.app_widget_card_radius) + service.resources.getDimension(R.dimen.app_widget_card_radius) } // Load the album cover async and push the update on completion @@ -225,13 +225,13 @@ class AppWidgetCard : BaseAppWidget() { MainActivity.EXPAND_PANEL, PreferenceUtil.isExpandPanel ) - var pendingIntent: PendingIntent val serviceName = ComponentName(context, MusicService::class.java) // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP - pendingIntent = PendingIntent.getActivity(context, 0, action, 0) + var pendingIntent = + PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) views.setOnClickPendingIntent(R.id.image, pendingIntent) views.setOnClickPendingIntent(R.id.media_titles, pendingIntent) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt index 3d00ee71..134938d2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetClassic.kt @@ -216,13 +216,12 @@ class AppWidgetClassic : BaseAppWidget() { MainActivity.EXPAND_PANEL, PreferenceUtil.isExpandPanel ) - var pendingIntent: PendingIntent val serviceName = ComponentName(context, MusicService::class.java) // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP - pendingIntent = PendingIntent.getActivity(context, 0, action, 0) + var pendingIntent = PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) views.setOnClickPendingIntent(R.id.image, pendingIntent) views.setOnClickPendingIntent(R.id.media_titles, pendingIntent) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt index 14795cd3..4528abce 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetSmall.kt @@ -201,13 +201,13 @@ class AppWidgetSmall : BaseAppWidget() { MainActivity.EXPAND_PANEL, PreferenceUtil.isExpandPanel ) - var pendingIntent: PendingIntent val serviceName = ComponentName(context, MusicService::class.java) // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP - pendingIntent = PendingIntent.getActivity(context, 0, action, 0) + var pendingIntent = + PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) views.setOnClickPendingIntent(R.id.image, pendingIntent) views.setOnClickPendingIntent(R.id.media_titles, pendingIntent) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt index 961717d1..b4abebf2 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/AppWidgetText.kt @@ -18,6 +18,7 @@ import android.app.PendingIntent import android.content.ComponentName import android.content.Context import android.content.Intent +import android.provider.MediaStore import android.text.TextUtils import android.view.View import android.widget.RemoteViews @@ -83,13 +84,12 @@ class AppWidgetText : BaseAppWidget() { MainActivity.EXPAND_PANEL, PreferenceUtil.isExpandPanel ) - var pendingIntent: PendingIntent val serviceName = ComponentName(context, MusicService::class.java) // Home action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP - pendingIntent = PendingIntent.getActivity(context, 0, action, 0) + var pendingIntent = PendingIntent.getActivity(context, 0, action, PendingIntent.FLAG_IMMUTABLE) views.setOnClickPendingIntent(R.id.image, pendingIntent) views.setOnClickPendingIntent(R.id.media_titles, pendingIntent) diff --git a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt index 5172a76b..03a3187e 100644 --- a/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt +++ b/app/src/main/java/code/name/monkey/retromusic/appwidgets/base/BaseAppWidget.kt @@ -97,9 +97,9 @@ abstract class BaseAppWidget : AppWidgetProvider() { val intent = Intent(action) intent.component = serviceName return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { - PendingIntent.getForegroundService(context, 0, intent, 0) + PendingIntent.getForegroundService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) } else { - PendingIntent.getService(context, 0, intent, 0) + PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) } } diff --git a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt index 7a5ce7c8..201ec963 100644 --- a/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt +++ b/app/src/main/java/code/name/monkey/retromusic/service/notification/PlayingNotificationOreo.kt @@ -26,6 +26,7 @@ import androidx.core.app.NotificationCompat import code.name.monkey.appthemehelper.util.ATHUtil.resolveColor import code.name.monkey.appthemehelper.util.ColorUtil import code.name.monkey.appthemehelper.util.MaterialValueHelper +import code.name.monkey.appthemehelper.util.VersionUtils import code.name.monkey.retromusic.R import code.name.monkey.retromusic.activities.MainActivity import code.name.monkey.retromusic.glide.GlideApp @@ -78,7 +79,12 @@ class PlayingNotificationOreo : PlayingNotification() { action.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP val clickIntent = PendingIntent - .getActivity(service, 0, action, PendingIntent.FLAG_UPDATE_CURRENT) + .getActivity( + service, + 0, + action, + PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE + ) val deleteIntent = buildPendingIntent(service, ACTION_QUIT, null) val builder = NotificationCompat.Builder(service, NOTIFICATION_CHANNEL_ID) @@ -143,10 +149,16 @@ class PlayingNotificationOreo : PlayingNotification() { ) } - if (!PreferenceUtil.isColoredNotification) { - bgColorFinal = resolveColor(service, R.attr.colorPrimary, Color.WHITE) + // Android 12 applies a standard Notification template to every notification + // which will in turn have a default background so setting a different background + // than that, looks weird + if (!VersionUtils.hasS()) { + if (!PreferenceUtil.isColoredNotification) { + bgColorFinal = + resolveColor(service, R.attr.colorPrimary, Color.WHITE) + } + setBackgroundColor(bgColorFinal) } - setBackgroundColor(bgColorFinal) setNotificationContent(ColorUtil.isColorLight(bgColorFinal)) if (stopped) { @@ -250,7 +262,7 @@ class PlayingNotificationOreo : PlayingNotification() { ): PendingIntent { val intent = Intent(action) intent.component = serviceName - return PendingIntent.getService(context, 0, intent, 0) + return PendingIntent.getService(context, 0, intent, PendingIntent.FLAG_IMMUTABLE) } diff --git a/app/src/main/res/layout-v31/layout_notification_collapsed.xml b/app/src/main/res/layout-v31/layout_notification_collapsed.xml new file mode 100644 index 00000000..ae93ac01 --- /dev/null +++ b/app/src/main/res/layout-v31/layout_notification_collapsed.xml @@ -0,0 +1,100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout-v31/layout_notification_expanded.xml b/app/src/main/res/layout-v31/layout_notification_expanded.xml new file mode 100644 index 00000000..acf39d17 --- /dev/null +++ b/app/src/main/res/layout-v31/layout_notification_expanded.xml @@ -0,0 +1,104 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values-v31/donottranslate.xml b/app/src/main/res/values-v31/donottranslate.xml index e9ef74c3..f4981725 100644 --- a/app/src/main/res/values-v31/donottranslate.xml +++ b/app/src/main/res/values-v31/donottranslate.xml @@ -2,4 +2,6 @@ true true + + false \ No newline at end of file diff --git a/app/src/main/res/values/donottranslate.xml b/app/src/main/res/values/donottranslate.xml index 3e5913bc..eff1e1c7 100755 --- a/app/src/main/res/values/donottranslate.xml +++ b/app/src/main/res/values/donottranslate.xml @@ -26,4 +26,6 @@ Material You false false + + true \ No newline at end of file diff --git a/app/src/main/res/xml/pref_notification.xml b/app/src/main/res/xml/pref_notification.xml index 77ad1b56..327e9370 100755 --- a/app/src/main/res/xml/pref_notification.xml +++ b/app/src/main/res/xml/pref_notification.xml @@ -13,6 +13,7 @@ android:defaultValue="true" android:key="colored_notification" android:layout="@layout/list_item_view_switch" + app:isPreferenceVisible="@bool/colored_notification_available" android:summary="@string/pref_summary_colored_notification" android:title="@string/pref_title_colored_notification" /> diff --git a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt index e29e9e5f..0822db40 100644 --- a/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt +++ b/appthemehelper/src/main/java/code/name/monkey/appthemehelper/util/VersionUtils.kt @@ -8,6 +8,13 @@ import android.os.Build object VersionUtils { + /** + * @return true if device is running API >= 21 + */ + fun hasLollipop(): Boolean { + return Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP + } + /** * @return true if device is running API >= 23 */