diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 39cca59..2392da2 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -40,7 +40,16 @@ android:theme="@style/AppTheme" /> + + + + + + @@ -79,7 +88,7 @@ android:parentActivityName="com.simplemobiletools.commons.activities.AboutActivity" /> @@ -90,6 +99,18 @@ android:resource="@xml/widget_torch" /> + + + + + + + + + if (wasPositivePressed) { + mWidgetColorWithoutTransparency = color + updateColors() + } + } + } + + private fun requestWidgetUpdate() { + Intent(AppWidgetManager.ACTION_APPWIDGET_UPDATE, null, this, MyWidgetTorchProvider::class.java).apply { + putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, intArrayOf(mWidgetId)) + sendBroadcast(this) + } + + updateBrightDisplayWidget() + } + + private fun updateColors() { + mWidgetColor = mWidgetColorWithoutTransparency.adjustAlpha(mWidgetAlpha) + config_widget_color.setFillWithStroke(mWidgetColor, Color.BLACK) + config_image.background.mutate().applyColorFilter(mWidgetColor) + } + + private val seekbarChangeListener = object : SeekBar.OnSeekBarChangeListener { + override fun onProgressChanged(seekBar: SeekBar, progress: Int, fromUser: Boolean) { + mWidgetAlpha = progress.toFloat() / 100.toFloat() + updateColors() + } + + override fun onStartTrackingTouch(seekBar: SeekBar) {} + + override fun onStopTrackingTouch(seekBar: SeekBar) {} + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/flashlight/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/flashlight/extensions/Context.kt index 8c710b4..d6683d7 100644 --- a/app/src/main/kotlin/com/simplemobiletools/flashlight/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/flashlight/extensions/Context.kt @@ -7,22 +7,32 @@ import android.content.Intent import android.graphics.Bitmap import android.graphics.Canvas import android.graphics.drawable.Drawable -import com.simplemobiletools.flashlight.helpers.Config -import com.simplemobiletools.flashlight.helpers.IS_ENABLED -import com.simplemobiletools.flashlight.helpers.MyWidgetProvider -import com.simplemobiletools.flashlight.helpers.TOGGLE_WIDGET_UI +import com.simplemobiletools.flashlight.helpers.* val Context.config: Config get() = Config.newInstance(applicationContext) fun Context.updateWidgets(isEnabled: Boolean) { - val widgetIDs = AppWidgetManager.getInstance(applicationContext).getAppWidgetIds(ComponentName(applicationContext, MyWidgetProvider::class.java)) + val widgetIDs = AppWidgetManager.getInstance(applicationContext).getAppWidgetIds(ComponentName(applicationContext, MyWidgetTorchProvider::class.java)) if (widgetIDs.isNotEmpty()) { - Intent(applicationContext, MyWidgetProvider::class.java).apply { + Intent(applicationContext, MyWidgetTorchProvider::class.java).apply { action = TOGGLE_WIDGET_UI putExtra(IS_ENABLED, isEnabled) sendBroadcast(this) } } + + updateBrightDisplayWidget() +} + +fun Context.updateBrightDisplayWidget() { + val widgetIDs = AppWidgetManager.getInstance(applicationContext).getAppWidgetIds(ComponentName(applicationContext, MyWidgetBrightDisplayProvider::class.java)) + if (widgetIDs.isNotEmpty()) { + Intent(applicationContext, MyWidgetBrightDisplayProvider::class.java).apply { + action = AppWidgetManager.ACTION_APPWIDGET_UPDATE + putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, widgetIDs) + sendBroadcast(this) + } + } } fun Context.drawableToBitmap(drawable: Drawable): Bitmap { diff --git a/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetBrightDisplayProvider.kt b/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetBrightDisplayProvider.kt new file mode 100644 index 0000000..2a28a48 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetBrightDisplayProvider.kt @@ -0,0 +1,50 @@ +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.widget.RemoteViews +import com.simplemobiletools.commons.extensions.getColoredDrawableWithColor +import com.simplemobiletools.flashlight.R +import com.simplemobiletools.flashlight.activities.BrightDisplayActivity +import com.simplemobiletools.flashlight.extensions.config +import com.simplemobiletools.flashlight.extensions.drawableToBitmap + +class MyWidgetBrightDisplayProvider : AppWidgetProvider() { + private val OPEN_APP_INTENT_ID = 1 + + override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { + appWidgetManager.getAppWidgetIds(getComponentName(context)).forEach { + RemoteViews(context.packageName, R.layout.widget_bright_display).apply { + setupAppOpenIntent(context, this) + + val selectedColor = context.config.widgetBgColor + val alpha = Color.alpha(selectedColor) + + val bmp = getColoredIcon(context, selectedColor, alpha) + setImageViewBitmap(R.id.bright_display_btn, bmp) + + appWidgetManager.updateAppWidget(it, this) + } + } + } + + private fun getComponentName(context: Context) = ComponentName(context, MyWidgetBrightDisplayProvider::class.java) + + private fun setupAppOpenIntent(context: Context, views: RemoteViews) { + Intent(context, BrightDisplayActivity::class.java).apply { + val pendingIntent = PendingIntent.getActivity(context, OPEN_APP_INTENT_ID, this, PendingIntent.FLAG_UPDATE_CURRENT) + views.setOnClickPendingIntent(R.id.bright_display_btn, pendingIntent) + } + } + + private fun getColoredIcon(context: Context, color: Int, alpha: Int): Bitmap { + val drawable = context.resources.getColoredDrawableWithColor(R.drawable.ic_bright_display, color, alpha) + return context.drawableToBitmap(drawable) + } +} diff --git a/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetProvider.kt b/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetTorchProvider.kt similarity index 88% rename from app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetProvider.kt rename to app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetTorchProvider.kt index a3c499f..6e2411a 100644 --- a/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetProvider.kt +++ b/app/src/main/kotlin/com/simplemobiletools/flashlight/helpers/MyWidgetTorchProvider.kt @@ -14,7 +14,7 @@ import com.simplemobiletools.flashlight.R import com.simplemobiletools.flashlight.extensions.config import com.simplemobiletools.flashlight.extensions.drawableToBitmap -class MyWidgetProvider : AppWidgetProvider() { +class MyWidgetTorchProvider : AppWidgetProvider() { override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) { performUpdate(context) } @@ -22,8 +22,8 @@ class MyWidgetProvider : AppWidgetProvider() { 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) + val bmp = getColoredIcon(context, Color.WHITE, alpha) + val intent = Intent(context, MyWidgetTorchProvider::class.java) intent.action = TOGGLE val appWidgetManager = AppWidgetManager.getInstance(context) @@ -37,7 +37,7 @@ class MyWidgetProvider : AppWidgetProvider() { } } - private fun getComponentName(context: Context) = ComponentName(context, MyWidgetProvider::class.java) + private fun getComponentName(context: Context) = ComponentName(context, MyWidgetTorchProvider::class.java) override fun onReceive(context: Context, intent: Intent) { when (intent.action) { @@ -57,7 +57,7 @@ class MyWidgetProvider : AppWidgetProvider() { val widgetBgColor = context.config.widgetBgColor val alpha = Color.alpha(widgetBgColor) val selectedColor = if (enable) widgetBgColor else Color.WHITE - val bmp = getColoredCircles(context, selectedColor, alpha) + val bmp = getColoredIcon(context, selectedColor, alpha) val appWidgetManager = AppWidgetManager.getInstance(context) appWidgetManager.getAppWidgetIds(getComponentName(context)).forEach { @@ -68,7 +68,7 @@ class MyWidgetProvider : AppWidgetProvider() { } } - private fun getColoredCircles(context: Context, color: Int, alpha: Int): Bitmap { + private fun getColoredIcon(context: Context, color: Int, alpha: Int): Bitmap { val drawable = context.resources.getColoredDrawableWithColor(R.drawable.ic_flashlight, color, alpha) return context.drawableToBitmap(drawable) } diff --git a/app/src/main/res/layout/widget_bright_display.xml b/app/src/main/res/layout/widget_bright_display.xml new file mode 100644 index 0000000..5be026d --- /dev/null +++ b/app/src/main/res/layout/widget_bright_display.xml @@ -0,0 +1,6 @@ + + diff --git a/app/src/main/res/layout/widget_bright_display_config.xml b/app/src/main/res/layout/widget_bright_display_config.xml new file mode 100644 index 0000000..c947183 --- /dev/null +++ b/app/src/main/res/layout/widget_bright_display_config.xml @@ -0,0 +1,61 @@ + + + + + + + + + + + + + + + +