mirror of
https://github.com/rebelonion/Dantotsu.git
synced 2026-01-29 02:51:01 +00:00
feat: rounded corners compat
This commit is contained in:
@@ -22,8 +22,8 @@ class BitmapUtil {
|
|||||||
return output
|
return output
|
||||||
}
|
}
|
||||||
|
|
||||||
fun convertDrawableToBitmap(drawable: Drawable): Bitmap {
|
fun convertDrawableToBitmap(drawable: Drawable, width: Int, height: Int): Bitmap {
|
||||||
val bitmap = Bitmap.createBitmap(100, 300, Bitmap.Config.ARGB_8888)
|
val bitmap = Bitmap.createBitmap(width, height, Bitmap.Config.ARGB_8888)
|
||||||
val canvas = Canvas(bitmap)
|
val canvas = Canvas(bitmap)
|
||||||
drawable.setBounds(0, 0, canvas.width, canvas.height)
|
drawable.setBounds(0, 0, canvas.width, canvas.height)
|
||||||
drawable.draw(canvas)
|
drawable.draw(canvas)
|
||||||
|
|||||||
40
app/src/main/java/ani/dantotsu/widgets/WidgetSizeProvider.kt
Normal file
40
app/src/main/java/ani/dantotsu/widgets/WidgetSizeProvider.kt
Normal file
@@ -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<Int, Int> {
|
||||||
|
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()
|
||||||
|
|
||||||
|
}
|
||||||
@@ -14,6 +14,7 @@ import androidx.core.content.res.ResourcesCompat
|
|||||||
import ani.dantotsu.MainActivity
|
import ani.dantotsu.MainActivity
|
||||||
import ani.dantotsu.R
|
import ani.dantotsu.R
|
||||||
import ani.dantotsu.util.BitmapUtil.Companion.convertDrawableToBitmap
|
import ani.dantotsu.util.BitmapUtil.Companion.convertDrawableToBitmap
|
||||||
|
import ani.dantotsu.widgets.WidgetSizeProvider
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Implementation of App Widget functionality.
|
* Implementation of App Widget functionality.
|
||||||
@@ -70,13 +71,16 @@ class UpcomingWidget : AppWidgetProvider() {
|
|||||||
null
|
null
|
||||||
) as GradientDrawable
|
) as GradientDrawable
|
||||||
gradientDrawable.colors = intArrayOf(backgroundColor, backgroundFade)
|
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)
|
val intentTemplate = Intent(context, MainActivity::class.java)
|
||||||
intentTemplate.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
intentTemplate.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
|
||||||
intentTemplate.putExtra("fromWidget", true)
|
intentTemplate.putExtra("fromWidget", true)
|
||||||
|
|
||||||
val views = RemoteViews(context.packageName, R.layout.upcoming_widget).apply {
|
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_title, titleTextColor)
|
||||||
setTextColor(R.id.text_show_countdown, countdownTextColor)
|
setTextColor(R.id.text_show_countdown, countdownTextColor)
|
||||||
setTextColor(R.id.widgetTitle, titleTextColor)
|
setTextColor(R.id.widgetTitle, titleTextColor)
|
||||||
@@ -103,9 +107,7 @@ class UpcomingWidget : AppWidgetProvider() {
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
return views
|
return views
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
const val PREFS_NAME = "ani.dantotsu.widgets.UpcomingWidget"
|
const val PREFS_NAME = "ani.dantotsu.widgets.UpcomingWidget"
|
||||||
|
|||||||
Reference in New Issue
Block a user