Files
Simple-Flashlight/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetProvider.kt

77 lines
3.1 KiB
Kotlin

package com.simplemobiletools.flashlight.helpers
import android.app.PendingIntent
import android.appwidget.AppWidgetManager
import android.appwidget.AppWidgetProvider
import android.content.ComponentName
import android.content.Context
import android.content.Intent
import android.graphics.Bitmap
import android.graphics.Color
import android.graphics.PorterDuff
import android.widget.RemoteViews
import com.simplemobiletools.flashlight.R
import com.simplemobiletools.flashlight.extensions.config
class MyWidgetProvider : AppWidgetProvider() {
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
performUpdate(context)
}
private fun performUpdate(context: Context) {
val selectedColor = context.config.widgetBgColor
val alpha = Color.alpha(selectedColor)
val bmp = getColoredCircles(context, Color.WHITE, alpha)
val intent = Intent(context, MyWidgetProvider::class.java)
intent.action = TOGGLE
val pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0)
val appWidgetManager = AppWidgetManager.getInstance(context)
appWidgetManager.getAppWidgetIds(getComponentName(context)).forEach {
val views = RemoteViews(context.packageName, R.layout.widget)
views.setOnClickPendingIntent(R.id.toggle_btn, pendingIntent)
views.setImageViewBitmap(R.id.toggle_btn, bmp)
appWidgetManager.updateAppWidget(it, views)
}
}
private fun getComponentName(context: Context) = ComponentName(context, MyWidgetProvider::class.java)
override fun onReceive(context: Context, intent: Intent) {
when (intent.action) {
TOGGLE -> toggleActualFlashlight(context)
TOGGLE_WIDGET_UI -> toggleFlashlight(context, intent)
else -> super.onReceive(context, intent)
}
}
private fun toggleActualFlashlight(context: Context) {
MyCameraImpl.newInstance(context).toggleFlashlight()
}
private fun toggleFlashlight(context: Context, intent: Intent) {
if (intent.extras?.containsKey(IS_ENABLED) == true) {
val enable = intent.extras.getBoolean(IS_ENABLED)
val selectedColor = if (enable) context.config.widgetBgColor else Color.WHITE
val alpha = Color.alpha(selectedColor)
val bmp = getColoredCircles(context, selectedColor, alpha)
val appWidgetManager = AppWidgetManager.getInstance(context)
appWidgetManager.getAppWidgetIds(getComponentName(context)).forEach {
val views = RemoteViews(context.packageName, R.layout.widget)
views.setImageViewBitmap(R.id.toggle_btn, bmp)
appWidgetManager.updateAppWidget(it, views)
}
}
}
private fun getColoredCircles(context: Context, color: Int, alpha: Int): Bitmap {
val drawable = context.resources.getDrawable(R.drawable.circles_small)
drawable.mutate().setColorFilter(color, PorterDuff.Mode.SRC_ATOP)
drawable.mutate().alpha = alpha
return Utils.drawableToBitmap(drawable)
}
}