mirror of
https://github.com/SimpleMobileTools/Simple-Flashlight.git
synced 2025-06-05 21:59:19 +02:00
77 lines
3.1 KiB
Kotlin
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)
|
|
}
|
|
}
|