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 44325d46..007f5a2e 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetCard.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/AppWidgetCard.java @@ -6,6 +6,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.annotation.Nullable; import android.support.v7.graphics.Palette; @@ -177,11 +178,18 @@ public class AppWidgetCard extends BaseAppWidget { appWidgetView.setImageViewBitmap(R.id.button_next, createBitmap(Util.getTintedVectorDrawable(service, R.drawable.ic_skip_next_white_24dp, color), 1f)); appWidgetView.setImageViewBitmap(R.id.button_prev, createBitmap(Util.getTintedVectorDrawable(service, R.drawable.ic_skip_previous_white_24dp, color), 1f)); + Drawable image; + if (bitmap == null) { - appWidgetView.setImageViewResource(R.id.image, R.drawable.default_album_art); + image = appContext.getResources().getDrawable(R.drawable.default_album_art); } else { - appWidgetView.setImageViewBitmap(R.id.image, bitmap); + image = new BitmapDrawable(bitmap); } + + float radius = appContext.getResources().getDimension(R.dimen.app_widget_card_radius); + int size = appContext.getResources().getDimensionPixelSize(R.dimen.app_widget_card_image_size); + appWidgetView.setImageViewBitmap(R.id.image, createRoundedBitmap(image, size, size, radius, 0, radius, 0)); + pushUpdate(appContext, appWidgetIds, appWidgetView); } }); 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 1ba0e4b9..4de0b811 100644 --- a/app/src/main/java/com/kabouzeid/gramophone/appwidgets/BaseAppWidget.java +++ b/app/src/main/java/com/kabouzeid/gramophone/appwidgets/BaseAppWidget.java @@ -6,7 +6,11 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; +import android.graphics.BitmapShader; import android.graphics.Canvas; +import android.graphics.Paint; +import android.graphics.Path; +import android.graphics.RectF; import android.graphics.drawable.Drawable; /** @@ -22,6 +26,46 @@ public class BaseAppWidget extends AppWidgetProvider { return bitmap; } + protected static Bitmap createRoundedBitmap(Drawable drawable, int width, int height, float tl, float tr, float bl, float br) { + if (drawable == null) return null; + + Bitmap bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + Canvas c = new Canvas(bitmap); + drawable.setBounds(0, 0, width, height); + drawable.draw(c); + + Bitmap rounded = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888); + + Canvas canvas = new Canvas(rounded); + Paint paint = new Paint(); + paint.setShader(new BitmapShader(bitmap, BitmapShader.TileMode.CLAMP, BitmapShader.TileMode.CLAMP)); + paint.setAntiAlias(true); + canvas.drawPath(composeRoundedRectPath(new RectF(0, 0, width, height), tl, tr, bl, br), paint); + + return rounded; + } + + protected static Path composeRoundedRectPath(RectF rect, float tl, float tr, float bl, float br) { + Path path = new Path(); + tl = tl < 0 ? 0 : tl; + tr = tr < 0 ? 0 : tr; + bl = bl < 0 ? 0 : bl; + br = br < 0 ? 0 : br; + + path.moveTo(rect.left + tl, rect.top); + path.lineTo(rect.right - tr, rect.top); + path.quadTo(rect.right, rect.top, rect.right, rect.top + tr); + path.lineTo(rect.right, rect.bottom - br); + path.quadTo(rect.right, rect.bottom, rect.right - br, rect.bottom); + path.lineTo(rect.left + bl, rect.bottom); + path.quadTo(rect.left, rect.bottom, rect.left, rect.bottom - bl); + path.lineTo(rect.left, rect.top + tl); + path.quadTo(rect.left, rect.top, rect.left + tl, rect.top); + path.close(); + + return path; + } + protected PendingIntent buildPendingIntent(Context context, final String action, final ComponentName serviceName) { Intent intent = new Intent(action); intent.setComponent(serviceName); diff --git a/app/src/main/res/drawable/card.xml b/app/src/main/res/drawable/card.xml index 2fc967fe..69e9986d 100644 --- a/app/src/main/res/drawable/card.xml +++ b/app/src/main/res/drawable/card.xml @@ -19,8 +19,8 @@ android:right="0dp" android:bottom="1dp" android:left="0dp"/> - - + + @@ -30,15 +30,15 @@ android:right="0dp" android:bottom="1dp" android:left="0dp"/> - - + + - + - + diff --git a/app/src/main/res/layout/app_widget_card.xml b/app/src/main/res/layout/app_widget_card.xml index eba8957b..32ba2063 100644 --- a/app/src/main/res/layout/app_widget_card.xml +++ b/app/src/main/res/layout/app_widget_card.xml @@ -15,10 +15,6 @@ android:id="@+id/image" android:layout_width="@dimen/app_widget_card_image_size" android:layout_height="@dimen/app_widget_card_image_size" - android:layout_marginTop="2dp" - android:layout_marginLeft="2dp" - android:layout_marginRight="2dp" - android:layout_marginBottom="1dp" android:scaleType="centerInside" tools:src="@drawable/default_album_art" tools:ignore="ContentDescription"/> diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index 7a4c26f2..2014bb92 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -76,6 +76,7 @@ http://developer.android.com/guide/topics/appwidgets/index.html#CreatingLayout 48dp 250dp 56dp - 96dp + 128dp + 2dp