diff --git a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetBig.java b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetBig.java index 7445cb47..f19626d0 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetBig.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetBig.java @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.appwidgets; import android.app.PendingIntent; -import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -25,9 +24,6 @@ import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.ui.activities.MainActivity; import com.kabouzeid.gramophone.util.Util; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class AppWidgetBig extends BaseAppWidget { public static final String NAME = "app_widget_big"; @@ -41,25 +37,11 @@ public class AppWidgetBig extends BaseAppWidget { return mInstance; } - /** - * {@inheritDoc} - */ - @Override - public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, - final int[] appWidgetIds) { - defaultAppWidget(context, appWidgetIds); - final Intent updateIntent = new Intent(MusicService.APP_WIDGET_UPDATE); - updateIntent.putExtra(MusicService.EXTRA_APP_WIDGET_NAME, NAME); - updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); - updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - context.sendBroadcast(updateIntent); - } - /** * Initialize given widgets to default state, where we launch Music on * default click and hide actions if service not running. */ - private void defaultAppWidget(final Context context, final int[] appWidgetIds) { + protected void defaultAppWidget(final Context context, final int[] appWidgetIds) { final RemoteViews appWidgetView = new RemoteViews(context.getPackageName(), R.layout.app_widget_big); appWidgetView.setViewVisibility(R.id.media_titles, View.INVISIBLE); @@ -72,38 +54,6 @@ public class AppWidgetBig extends BaseAppWidget { pushUpdate(context, appWidgetIds, appWidgetView); } - private void pushUpdate(final Context context, final int[] appWidgetIds, final RemoteViews views) { - final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - if (appWidgetIds != null) { - appWidgetManager.updateAppWidget(appWidgetIds, views); - } else { - appWidgetManager.updateAppWidget(new ComponentName(context, getClass()), views); - } - } - - /** - * Check against {@link AppWidgetManager} if there are any instances of this - * widget. - */ - private boolean hasInstances(final Context context) { - final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - final int[] mAppWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, - getClass())); - return mAppWidgetIds.length > 0; - } - - /** - * Handle a change notification coming over from - * {@link MusicService} - */ - public void notifyChange(final MusicService service, final String what) { - if (hasInstances(service)) { - if (MusicService.META_CHANGED.equals(what) || MusicService.PLAY_STATE_CHANGED.equals(what)) { - performUpdate(service, null); - } - } - } - /** * Update all active widget instances by pushing changes */ diff --git a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetCard.java b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetCard.java index 5504e8b4..2d8a9830 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetCard.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetCard.java @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.appwidgets; import android.app.PendingIntent; -import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -31,10 +30,9 @@ public class AppWidgetCard extends BaseAppWidget { public static final String NAME = "app_widget_card"; private static AppWidgetCard mInstance; - private Target target; // for cancellation - private static int imageSize = 0; private static float cardRadius = 0f; + private Target target; // for cancellation public static synchronized AppWidgetCard getInstance() { if (mInstance == null) { @@ -43,25 +41,11 @@ public class AppWidgetCard extends BaseAppWidget { return mInstance; } - /** - * {@inheritDoc} - */ - @Override - public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, - final int[] appWidgetIds) { - defaultAppWidget(context, appWidgetIds); - final Intent updateIntent = new Intent(MusicService.APP_WIDGET_UPDATE); - updateIntent.putExtra(MusicService.EXTRA_APP_WIDGET_NAME, NAME); - updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); - updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - context.sendBroadcast(updateIntent); - } - /** * Initialize given widgets to default state, where we launch Music on * default click and hide actions if service not running. */ - private void defaultAppWidget(final Context context, final int[] appWidgetIds) { + protected void defaultAppWidget(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); @@ -74,38 +58,6 @@ public class AppWidgetCard extends BaseAppWidget { pushUpdate(context, appWidgetIds, appWidgetView); } - private void pushUpdate(final Context context, final int[] appWidgetIds, final RemoteViews views) { - final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - if (appWidgetIds != null) { - appWidgetManager.updateAppWidget(appWidgetIds, views); - } else { - appWidgetManager.updateAppWidget(new ComponentName(context, getClass()), views); - } - } - - /** - * Check against {@link AppWidgetManager} if there are any instances of this - * widget. - */ - private boolean hasInstances(final Context context) { - final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - final int[] mAppWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, - getClass())); - return mAppWidgetIds.length > 0; - } - - /** - * Handle a change notification coming over from - * {@link MusicService} - */ - public void notifyChange(final MusicService service, final String what) { - if (hasInstances(service)) { - if (MusicService.META_CHANGED.equals(what) || MusicService.PLAY_STATE_CHANGED.equals(what)) { - performUpdate(service, null); - } - } - } - /** * Update all active widget instances by pushing changes */ diff --git a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetClassic.java b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetClassic.java index bdbc01f0..3ed7961c 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetClassic.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetClassic.java @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.appwidgets; import android.app.PendingIntent; -import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -24,9 +23,6 @@ import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.ui.activities.MainActivity; import com.kabouzeid.gramophone.util.Util; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class AppWidgetClassic extends BaseAppWidget { public static final String NAME = "app_widget_classic"; @@ -40,25 +36,11 @@ public class AppWidgetClassic extends BaseAppWidget { return mInstance; } - /** - * {@inheritDoc} - */ - @Override - public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, - final int[] appWidgetIds) { - defaultAppWidget(context, appWidgetIds); - final Intent updateIntent = new Intent(MusicService.APP_WIDGET_UPDATE); - updateIntent.putExtra(MusicService.EXTRA_APP_WIDGET_NAME, NAME); - updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); - updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - context.sendBroadcast(updateIntent); - } - /** * Initialize given widgets to default state, where we launch Music on * default click and hide actions if service not running. */ - private void defaultAppWidget(final Context context, final int[] appWidgetIds) { + protected void defaultAppWidget(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); @@ -71,38 +53,6 @@ public class AppWidgetClassic extends BaseAppWidget { pushUpdate(context, appWidgetIds, appWidgetView); } - private void pushUpdate(final Context context, final int[] appWidgetIds, final RemoteViews views) { - final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - if (appWidgetIds != null) { - appWidgetManager.updateAppWidget(appWidgetIds, views); - } else { - appWidgetManager.updateAppWidget(new ComponentName(context, getClass()), views); - } - } - - /** - * Check against {@link AppWidgetManager} if there are any instances of this - * widget. - */ - private boolean hasInstances(final Context context) { - final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - final int[] mAppWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, - getClass())); - return mAppWidgetIds.length > 0; - } - - /** - * Handle a change notification coming over from - * {@link MusicService} - */ - public void notifyChange(final MusicService service, final String what) { - if (hasInstances(service)) { - if (MusicService.META_CHANGED.equals(what) || MusicService.PLAY_STATE_CHANGED.equals(what)) { - performUpdate(service, null); - } - } - } - /** * Update all active widget instances by pushing changes */ diff --git a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetSmall.java b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetSmall.java index de54ac0b..6a16462d 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetSmall.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetSmall.java @@ -1,7 +1,6 @@ package com.kabouzeid.gramophone.appwidgets; import android.app.PendingIntent; -import android.appwidget.AppWidgetManager; import android.content.ComponentName; import android.content.Context; import android.content.Intent; @@ -24,9 +23,6 @@ import com.kabouzeid.gramophone.service.MusicService; import com.kabouzeid.gramophone.ui.activities.MainActivity; import com.kabouzeid.gramophone.util.Util; -/** - * @author Karim Abou Zeid (kabouzeid) - */ public class AppWidgetSmall extends BaseAppWidget { public static final String NAME = "app_widget_small"; @@ -40,25 +36,11 @@ public class AppWidgetSmall extends BaseAppWidget { return mInstance; } - /** - * {@inheritDoc} - */ - @Override - public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, - final int[] appWidgetIds) { - defaultAppWidget(context, appWidgetIds); - final Intent updateIntent = new Intent(MusicService.APP_WIDGET_UPDATE); - updateIntent.putExtra(MusicService.EXTRA_APP_WIDGET_NAME, NAME); - updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); - updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); - context.sendBroadcast(updateIntent); - } - /** * Initialize given widgets to default state, where we launch Music on * default click and hide actions if service not running. */ - private void defaultAppWidget(final Context context, final int[] appWidgetIds) { + protected void defaultAppWidget(final Context context, final int[] appWidgetIds) { final RemoteViews appWidgetView = new RemoteViews(context.getPackageName(), R.layout.app_widget_small); appWidgetView.setViewVisibility(R.id.media_titles, View.INVISIBLE); @@ -71,38 +53,6 @@ public class AppWidgetSmall extends BaseAppWidget { pushUpdate(context, appWidgetIds, appWidgetView); } - private void pushUpdate(final Context context, final int[] appWidgetIds, final RemoteViews views) { - final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - if (appWidgetIds != null) { - appWidgetManager.updateAppWidget(appWidgetIds, views); - } else { - appWidgetManager.updateAppWidget(new ComponentName(context, getClass()), views); - } - } - - /** - * Check against {@link AppWidgetManager} if there are any instances of this - * widget. - */ - private boolean hasInstances(final Context context) { - final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); - final int[] mAppWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, - getClass())); - return mAppWidgetIds.length > 0; - } - - /** - * Handle a change notification coming over from - * {@link MusicService} - */ - public void notifyChange(final MusicService service, final String what) { - if (hasInstances(service)) { - if (MusicService.META_CHANGED.equals(what) || MusicService.PLAY_STATE_CHANGED.equals(what)) { - performUpdate(service, null); - } - } - } - /** * Update all active widget instances by pushing changes */ diff --git a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/BaseAppWidget.java b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/BaseAppWidget.java index 4de0b811..2e09ef6a 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/BaseAppWidget.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/BaseAppWidget.java @@ -1,6 +1,7 @@ package com.kabouzeid.gramophone.appwidgets; import android.app.PendingIntent; +import android.appwidget.AppWidgetManager; import android.appwidget.AppWidgetProvider; import android.content.ComponentName; import android.content.Context; @@ -12,11 +13,12 @@ import android.graphics.Paint; import android.graphics.Path; import android.graphics.RectF; import android.graphics.drawable.Drawable; +import android.widget.RemoteViews; -/** - * @author Karim Abou Zeid (kabouzeid) - */ -public class BaseAppWidget extends AppWidgetProvider { +import com.kabouzeid.gramophone.service.MusicService; + +public abstract class BaseAppWidget extends AppWidgetProvider { + public static final String NAME = "app_widget"; protected static Bitmap createBitmap(Drawable drawable, float sizeMultiplier) { Bitmap bitmap = Bitmap.createBitmap((int) (drawable.getIntrinsicWidth() * sizeMultiplier), (int) (drawable.getIntrinsicHeight() * sizeMultiplier), Bitmap.Config.ARGB_8888); @@ -66,6 +68,56 @@ public class BaseAppWidget extends AppWidgetProvider { return path; } + abstract protected void defaultAppWidget(final Context context, final int[] appWidgetIds); + + abstract public void performUpdate(final MusicService service, final int[] appWidgetIds); + + /** + * {@inheritDoc} + */ + @Override + public void onUpdate(final Context context, final AppWidgetManager appWidgetManager, + final int[] appWidgetIds) { + defaultAppWidget(context, appWidgetIds); + final Intent updateIntent = new Intent(MusicService.APP_WIDGET_UPDATE); + updateIntent.putExtra(MusicService.EXTRA_APP_WIDGET_NAME, NAME); + updateIntent.putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, appWidgetIds); + updateIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY); + context.sendBroadcast(updateIntent); + } + + /** + * Handle a change notification coming over from + * {@link MusicService} + */ + public void notifyChange(final MusicService service, final String what) { + if (hasInstances(service)) { + if (MusicService.META_CHANGED.equals(what) || MusicService.PLAY_STATE_CHANGED.equals(what)) { + performUpdate(service, null); + } + } + } + + protected void pushUpdate(final Context context, final int[] appWidgetIds, final RemoteViews views) { + final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + if (appWidgetIds != null) { + appWidgetManager.updateAppWidget(appWidgetIds, views); + } else { + appWidgetManager.updateAppWidget(new ComponentName(context, getClass()), views); + } + } + + /** + * Check against {@link AppWidgetManager} if there are any instances of this + * widget. + */ + protected boolean hasInstances(final Context context) { + final AppWidgetManager appWidgetManager = AppWidgetManager.getInstance(context); + final int[] mAppWidgetIds = appWidgetManager.getAppWidgetIds(new ComponentName(context, + getClass())); + return mAppWidgetIds.length > 0; + } + protected PendingIntent buildPendingIntent(Context context, final String action, final ComponentName serviceName) { Intent intent = new Intent(action); intent.setComponent(serviceName);