diff --git a/app/src/main/java/ani/dantotsu/util/BitmapUtil.kt b/app/src/main/java/ani/dantotsu/util/BitmapUtil.kt index b3592291..a4c4e7b6 100644 --- a/app/src/main/java/ani/dantotsu/util/BitmapUtil.kt +++ b/app/src/main/java/ani/dantotsu/util/BitmapUtil.kt @@ -22,8 +22,8 @@ class BitmapUtil { return output } - fun convertDrawableToBitmap(drawable: Drawable): Bitmap { - val bitmap = Bitmap.createBitmap(100, 300, Bitmap.Config.ARGB_8888) + fun convertDrawableToBitmap(drawable: Drawable, width: Int, height: Int): Bitmap { + val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888) val canvas = Canvas(bitmap) drawable.setBounds(0, 0, canvas.width, canvas.height) drawable.draw(canvas) diff --git a/app/src/main/java/ani/dantotsu/widgets/WidgetSizeProvider.kt b/app/src/main/java/ani/dantotsu/widgets/WidgetSizeProvider.kt new file mode 100644 index 00000000..3b5af9ca --- /dev/null +++ b/app/src/main/java/ani/dantotsu/widgets/WidgetSizeProvider.kt @@ -0,0 +1,40 @@ +package ani.dantotsu.widgets + +import android.appwidget.AppWidgetManager +import android.content.Context + +class WidgetSizeProvider( + private val context: Context // Do not pass Application context +) { + + private val appWidgetManager = AppWidgetManager.getInstance(context) + + fun getWidgetsSize(widgetId: Int): Pair { + val isPortrait = context.resources.configuration.orientation == 1 + val width = getWidgetWidth(isPortrait, widgetId) + val height = getWidgetHeight(isPortrait, widgetId) + val widthInPx = context.dip(width) + val heightInPx = context.dip(height) + return widthInPx to heightInPx + } + + private fun getWidgetWidth(isPortrait: Boolean, widgetId: Int): Int = + if (isPortrait) { + getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MIN_WIDTH) + } else { + getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MAX_WIDTH) + } + + private fun getWidgetHeight(isPortrait: Boolean, widgetId: Int): Int = + if (isPortrait) { + getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MAX_HEIGHT) + } else { + getWidgetSizeInDp(widgetId, AppWidgetManager.OPTION_APPWIDGET_MIN_HEIGHT) + } + + private fun getWidgetSizeInDp(widgetId: Int, key: String): Int = + appWidgetManager.getAppWidgetOptions(widgetId).getInt(key, 0) + + private fun Context.dip(value: Int): Int = (value * resources.displayMetrics.density).toInt() + +} \ No newline at end of file diff --git a/app/src/main/java/ani/dantotsu/widgets/upcoming/UpcomingWidget.kt b/app/src/main/java/ani/dantotsu/widgets/upcoming/UpcomingWidget.kt index f9d6735c..8e009c13 100644 --- a/app/src/main/java/ani/dantotsu/widgets/upcoming/UpcomingWidget.kt +++ b/app/src/main/java/ani/dantotsu/widgets/upcoming/UpcomingWidget.kt @@ -14,6 +14,7 @@ import androidx.core.content.res.ResourcesCompat import ani.dantotsu.MainActivity import ani.dantotsu.R import ani.dantotsu.util.BitmapUtil.Companion.convertDrawableToBitmap +import ani.dantotsu.widgets.WidgetSizeProvider /** * Implementation of App Widget functionality. @@ -70,13 +71,16 @@ class UpcomingWidget : AppWidgetProvider() { null ) as GradientDrawable gradientDrawable.colors = intArrayOf(backgroundColor, backgroundFade) + val widgetSizeProvider = WidgetSizeProvider(context) + val (width, height) = widgetSizeProvider.getWidgetsSize(appWidgetId) + gradientDrawable.cornerRadius = 50f val intentTemplate = Intent(context, MainActivity::class.java) intentTemplate.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK intentTemplate.putExtra("fromWidget", true) val views = RemoteViews(context.packageName, R.layout.upcoming_widget).apply { - setImageViewBitmap(R.id.backgroundView, convertDrawableToBitmap(gradientDrawable)) + setImageViewBitmap(R.id.backgroundView, convertDrawableToBitmap(gradientDrawable, width, height)) setTextColor(R.id.text_show_title, titleTextColor) setTextColor(R.id.text_show_countdown, countdownTextColor) setTextColor(R.id.widgetTitle, titleTextColor) @@ -103,9 +107,7 @@ class UpcomingWidget : AppWidgetProvider() { ) ) } - return views - } const val PREFS_NAME = "ani.dantotsu.widgets.UpcomingWidget"