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