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) } }