From 08034e0696558bc789d02ed578d3926d10944641 Mon Sep 17 00:00:00 2001 From: dkanada Date: Fri, 21 May 2021 09:06:58 +0900 Subject: [PATCH] reduce code duplication between widget styles --- .../gramophone/util/PreferenceUtil.java | 4 +-- .../views/widgets/AppWidgetAlbum.java | 31 +++-------------- .../views/widgets/AppWidgetCard.java | 32 +++--------------- .../views/widgets/AppWidgetClassic.java | 32 +++--------------- .../views/widgets/BaseAppWidget.java | 33 +++++++++++++++---- 5 files changed, 44 insertions(+), 88 deletions(-) diff --git a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java index 84005372..d5cbf547 100644 --- a/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java +++ b/app/src/main/java/com/dkanada/gramophone/util/PreferenceUtil.java @@ -390,11 +390,11 @@ public final class PreferenceUtil { } public final long getImageCacheSize() { - return Integer.parseInt(mPreferences.getString(IMAGE_CACHE_SIZE, "400000000")); + return Long.parseLong(mPreferences.getString(IMAGE_CACHE_SIZE, "400000000")); } public final long getMediaCacheSize() { - return Integer.parseInt(mPreferences.getString(MEDIA_CACHE_SIZE, "400000000")); + return Long.parseLong(mPreferences.getString(MEDIA_CACHE_SIZE, "400000000")); } public List getCategories() { diff --git a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetAlbum.java b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetAlbum.java index 6e522c49..2dfd3d4c 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetAlbum.java +++ b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetAlbum.java @@ -30,7 +30,7 @@ import com.dkanada.gramophone.util.ImageUtil; import com.dkanada.gramophone.util.Util; public class AppWidgetAlbum extends BaseAppWidget { - public static final String NAME = "app_widget_album"; + public static final String NAME = "widget.album"; private static AppWidgetAlbum mInstance; private Target target; @@ -54,7 +54,7 @@ public class AppWidgetAlbum extends BaseAppWidget { } @Override - protected void defaultAppWidget(final Context context, final int[] appWidgetIds) { + protected void reset(final Context context, final int[] appWidgetIds) { final RemoteViews appWidgetView = new RemoteViews(context.getPackageName(), R.layout.app_widget_album); appWidgetView.setViewVisibility(R.id.media_titles, View.INVISIBLE); @@ -63,12 +63,12 @@ public class AppWidgetAlbum extends BaseAppWidget { appWidgetView.setImageViewBitmap(R.id.button_prev, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getPrimaryTextColor(context, false)))); appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, MaterialValueHelper.getPrimaryTextColor(context, false)))); - linkButtons(context, appWidgetView); + linkButtons(context, appWidgetView, R.id.clickable_area); pushUpdate(context, appWidgetIds, appWidgetView); } @Override - public void performUpdate(final MusicService service, final int[] appWidgetIds) { + public void updateMeta(final MusicService service, final int[] appWidgetIds) { final RemoteViews appWidgetView = new RemoteViews(service.getPackageName(), R.layout.app_widget_album); final boolean isPlaying = service.isPlaying(); @@ -88,7 +88,7 @@ public class AppWidgetAlbum extends BaseAppWidget { appWidgetView.setImageViewBitmap(R.id.button_next, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(service, R.drawable.ic_skip_next_white_24dp, MaterialValueHelper.getPrimaryTextColor(service, false)))); appWidgetView.setImageViewBitmap(R.id.button_prev, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(service, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getPrimaryTextColor(service, false)))); - linkButtons(service, appWidgetView); + linkButtons(service, appWidgetView, R.id.clickable_area); Point p = Util.getScreenSize(service); imageSize = Math.min(p.x, p.y); @@ -133,25 +133,4 @@ public class AppWidgetAlbum extends BaseAppWidget { } }); } - - private void linkButtons(final Context context, final RemoteViews views) { - Intent action; - PendingIntent pendingIntent; - - final ComponentName serviceName = new ComponentName(context, MusicService.class); - - action = new Intent(context, MainActivity.class); - action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - pendingIntent = PendingIntent.getActivity(context, 0, action, 0); - views.setOnClickPendingIntent(R.id.clickable_area, pendingIntent); - - pendingIntent = buildPendingIntent(context, MusicService.ACTION_REWIND, serviceName); - views.setOnClickPendingIntent(R.id.button_prev, pendingIntent); - - pendingIntent = buildPendingIntent(context, MusicService.ACTION_TOGGLE, serviceName); - views.setOnClickPendingIntent(R.id.button_toggle_play_pause, pendingIntent); - - pendingIntent = buildPendingIntent(context, MusicService.ACTION_SKIP, serviceName); - views.setOnClickPendingIntent(R.id.button_next, pendingIntent); - } } diff --git a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetCard.java b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetCard.java index 2d601708..51ac92ec 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetCard.java +++ b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetCard.java @@ -30,7 +30,7 @@ import com.dkanada.gramophone.activities.MainActivity; import com.dkanada.gramophone.util.ImageUtil; public class AppWidgetCard extends BaseAppWidget { - public static final String NAME = "app_widget_card"; + public static final String NAME = "widget.card"; private static AppWidgetCard mInstance; private Target target; @@ -52,7 +52,7 @@ public class AppWidgetCard extends BaseAppWidget { } @Override - protected void defaultAppWidget(final Context context, final int[] appWidgetIds) { + protected void reset(final Context context, final int[] appWidgetIds) { final RemoteViews appWidgetView = new RemoteViews(context.getPackageName(), R.layout.app_widget_card); appWidgetView.setViewVisibility(R.id.media_titles, View.INVISIBLE); @@ -61,12 +61,12 @@ public class AppWidgetCard extends BaseAppWidget { appWidgetView.setImageViewBitmap(R.id.button_prev, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true)))); appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true)))); - linkButtons(context, appWidgetView); + linkButtons(context, appWidgetView, R.id.image, R.id.media_titles); pushUpdate(context, appWidgetIds, appWidgetView); } @Override - public void performUpdate(final MusicService service, final int[] appWidgetIds) { + public void updateMeta(final MusicService service, final int[] appWidgetIds) { final RemoteViews appWidgetView = new RemoteViews(service.getPackageName(), R.layout.app_widget_card); final boolean isPlaying = service.isPlaying(); @@ -86,7 +86,7 @@ public class AppWidgetCard extends BaseAppWidget { appWidgetView.setImageViewBitmap(R.id.button_next, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(service, R.drawable.ic_skip_next_white_24dp, MaterialValueHelper.getSecondaryTextColor(service, true)))); appWidgetView.setImageViewBitmap(R.id.button_prev, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(service, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getSecondaryTextColor(service, true)))); - linkButtons(service, appWidgetView); + linkButtons(service, appWidgetView, R.id.image, R.id.media_titles); imageSize = service.getResources().getDimensionPixelSize(R.dimen.app_widget_card_image_size); cardRadius = service.getResources().getDimension(R.dimen.app_widget_card_radius) / 2; @@ -137,26 +137,4 @@ public class AppWidgetCard extends BaseAppWidget { } }); } - - private void linkButtons(final Context context, final RemoteViews views) { - Intent action; - PendingIntent pendingIntent; - - final ComponentName serviceName = new ComponentName(context, MusicService.class); - - action = new Intent(context, MainActivity.class); - action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - pendingIntent = PendingIntent.getActivity(context, 0, action, 0); - views.setOnClickPendingIntent(R.id.image, pendingIntent); - views.setOnClickPendingIntent(R.id.media_titles, pendingIntent); - - pendingIntent = buildPendingIntent(context, MusicService.ACTION_REWIND, serviceName); - views.setOnClickPendingIntent(R.id.button_prev, pendingIntent); - - pendingIntent = buildPendingIntent(context, MusicService.ACTION_TOGGLE, serviceName); - views.setOnClickPendingIntent(R.id.button_toggle_play_pause, pendingIntent); - - pendingIntent = buildPendingIntent(context, MusicService.ACTION_SKIP, serviceName); - views.setOnClickPendingIntent(R.id.button_next, pendingIntent); - } } diff --git a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetClassic.java b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetClassic.java index b86acbc0..99dad6f0 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetClassic.java +++ b/app/src/main/java/com/dkanada/gramophone/views/widgets/AppWidgetClassic.java @@ -30,7 +30,7 @@ import com.dkanada.gramophone.activities.MainActivity; import com.dkanada.gramophone.util.ImageUtil; public class AppWidgetClassic extends BaseAppWidget { - public static final String NAME = "app_widget_classic"; + public static final String NAME = "widget.classic"; private static AppWidgetClassic mInstance; private Target target; @@ -52,7 +52,7 @@ public class AppWidgetClassic extends BaseAppWidget { } @Override - protected void defaultAppWidget(final Context context, final int[] appWidgetIds) { + protected void reset(final Context context, final int[] appWidgetIds) { final RemoteViews appWidgetView = new RemoteViews(context.getPackageName(), R.layout.app_widget_classic); appWidgetView.setViewVisibility(R.id.media_titles, View.INVISIBLE); @@ -61,12 +61,12 @@ public class AppWidgetClassic extends BaseAppWidget { appWidgetView.setImageViewBitmap(R.id.button_prev, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(context, R.drawable.ic_skip_previous_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true)))); appWidgetView.setImageViewBitmap(R.id.button_toggle_play_pause, ImageUtil.createBitmap(ImageUtil.getTintedVectorDrawable(context, R.drawable.ic_play_arrow_white_24dp, MaterialValueHelper.getSecondaryTextColor(context, true)))); - linkButtons(context, appWidgetView); + linkButtons(context, appWidgetView, R.id.image, R.id.media_titles); pushUpdate(context, appWidgetIds, appWidgetView); } @Override - public void performUpdate(final MusicService service, final int[] appWidgetIds) { + public void updateMeta(final MusicService service, final int[] appWidgetIds) { final RemoteViews appWidgetView = new RemoteViews(service.getPackageName(), R.layout.app_widget_classic); final boolean isPlaying = service.isPlaying(); @@ -80,7 +80,7 @@ public class AppWidgetClassic extends BaseAppWidget { appWidgetView.setTextViewText(R.id.text, getSongArtistAndAlbum(song)); } - linkButtons(service, appWidgetView); + linkButtons(service, appWidgetView, R.id.image, R.id.media_titles); imageSize = service.getResources().getDimensionPixelSize(R.dimen.app_widget_classic_image_size); cardRadius = service.getResources().getDimension(R.dimen.app_widget_card_radius); @@ -131,26 +131,4 @@ public class AppWidgetClassic extends BaseAppWidget { } }); } - - private void linkButtons(final Context context, final RemoteViews views) { - Intent action; - PendingIntent pendingIntent; - - final ComponentName serviceName = new ComponentName(context, MusicService.class); - - action = new Intent(context, MainActivity.class); - action.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); - pendingIntent = PendingIntent.getActivity(context, 0, action, 0); - views.setOnClickPendingIntent(R.id.image, pendingIntent); - views.setOnClickPendingIntent(R.id.media_titles, pendingIntent); - - pendingIntent = buildPendingIntent(context, MusicService.ACTION_REWIND, serviceName); - views.setOnClickPendingIntent(R.id.button_prev, pendingIntent); - - pendingIntent = buildPendingIntent(context, MusicService.ACTION_TOGGLE, serviceName); - views.setOnClickPendingIntent(R.id.button_toggle_play_pause, pendingIntent); - - pendingIntent = buildPendingIntent(context, MusicService.ACTION_SKIP, serviceName); - views.setOnClickPendingIntent(R.id.button_next, pendingIntent); - } } diff --git a/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java b/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java index 8f63391a..5fa7265e 100644 --- a/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java +++ b/app/src/main/java/com/dkanada/gramophone/views/widgets/BaseAppWidget.java @@ -22,6 +22,7 @@ import android.widget.RemoteViews; import androidx.core.content.res.ResourcesCompat; import com.dkanada.gramophone.R; +import com.dkanada.gramophone.activities.MainActivity; import com.dkanada.gramophone.model.Song; import com.dkanada.gramophone.service.MusicService; import com.dkanada.gramophone.util.MusicUtil; @@ -37,7 +38,7 @@ public abstract class BaseAppWidget extends AppWidgetProvider { @Override public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, final int[] appWidgetIds) { Log.d(NAME, String.format("onUpdate: %s", Arrays.toString(appWidgetIds))); - defaultAppWidget(context, appWidgetIds); + reset(context, appWidgetIds); final Intent updateIntent = new Intent(MusicService.INTENT_EXTRA_WIDGET_UPDATE); @@ -48,6 +49,10 @@ public abstract class BaseAppWidget extends AppWidgetProvider { context.sendBroadcast(updateIntent); } + abstract protected void reset(final Context context, final int[] appWidgetIds); + + abstract protected void updateMeta(final MusicService service, final int[] appWidgetIds); + public void notifyChange(final MusicService service, final String what, int[] appWidgetIds) { final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(service); final ComponentName componentName = new ComponentName(service, getClass()); @@ -59,7 +64,7 @@ public abstract class BaseAppWidget extends AppWidgetProvider { Song song = service.getCurrentSong(); if (song != null && (what.equals(MusicService.STATE_CHANGED) || what.equals(MusicService.META_CHANGED))) { - performUpdate(service, appWidgetIds); + updateMeta(service, appWidgetIds); } } @@ -73,6 +78,26 @@ public abstract class BaseAppWidget extends AppWidgetProvider { } } + protected void linkButtons(Context context, RemoteViews views, Integer... clickableViews) { + ComponentName serviceName = new ComponentName(context, MusicService.class); + + Intent action = new Intent(context, MainActivity.class); + PendingIntent open = PendingIntent.getActivity(context, 0, action, 0); + + for (int id : clickableViews) { + views.setOnClickPendingIntent(id, open); + } + + PendingIntent previous = buildPendingIntent(context, MusicService.ACTION_REWIND, serviceName); + views.setOnClickPendingIntent(R.id.button_prev, previous); + + PendingIntent toggle = buildPendingIntent(context, MusicService.ACTION_TOGGLE, serviceName); + views.setOnClickPendingIntent(R.id.button_toggle_play_pause, toggle); + + PendingIntent next = buildPendingIntent(context, MusicService.ACTION_SKIP, serviceName); + views.setOnClickPendingIntent(R.id.button_next, next); + } + protected PendingIntent buildPendingIntent(Context context, final String action, final ComponentName serviceName) { Intent intent = new Intent(action); @@ -128,10 +153,6 @@ public abstract class BaseAppWidget extends AppWidgetProvider { return path; } - abstract protected void defaultAppWidget(final Context context, final int[] appWidgetIds); - - abstract protected void performUpdate(final MusicService service, final int[] appWidgetIds); - protected Drawable getAlbumArtDrawable(final Resources resources, final Bitmap bitmap) { if (bitmap == null) { return ResourcesCompat.getDrawable(resources, R.drawable.default_album_art, null);