64 lines
2.9 KiB
Kotlin
64 lines
2.9 KiB
Kotlin
package com.simplemobiletools.voicerecorder.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.voicerecorder.R
|
|
import com.simplemobiletools.voicerecorder.activities.BackgroundRecordActivity
|
|
import com.simplemobiletools.voicerecorder.extensions.config
|
|
import com.simplemobiletools.voicerecorder.extensions.drawableToBitmap
|
|
|
|
class MyWidgetRecordDisplayProvider : AppWidgetProvider() {
|
|
private val OPEN_APP_INTENT_ID = 1
|
|
|
|
override fun onUpdate(context: Context, appWidgetManager: AppWidgetManager, appWidgetIds: IntArray) {
|
|
changeWidgetIcon(appWidgetManager, context, Color.WHITE)
|
|
}
|
|
|
|
override fun onReceive(context: Context, intent: Intent) {
|
|
if (intent.action == TOGGLE_WIDGET_UI && intent.extras?.containsKey(IS_RECORDING) == true) {
|
|
val appWidgetManager = AppWidgetManager.getInstance(context) ?: return
|
|
val color = if (intent.extras!!.getBoolean(IS_RECORDING)) context.config.widgetBgColor else Color.WHITE
|
|
changeWidgetIcon(appWidgetManager, context, color)
|
|
} else {
|
|
super.onReceive(context, intent)
|
|
}
|
|
}
|
|
|
|
private fun changeWidgetIcon(appWidgetManager: AppWidgetManager, context: Context, color: Int) {
|
|
val alpha = Color.alpha(context.config.widgetBgColor)
|
|
val bmp = getColoredIcon(context, color, alpha)
|
|
|
|
appWidgetManager.getAppWidgetIds(getComponentName(context)).forEach {
|
|
RemoteViews(context.packageName, R.layout.widget_record_display).apply {
|
|
setupAppOpenIntent(context, this)
|
|
setImageViewBitmap(R.id.record_display_btn, bmp)
|
|
appWidgetManager.updateAppWidget(it, this)
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun getComponentName(context: Context) = ComponentName(context, MyWidgetRecordDisplayProvider::class.java)
|
|
|
|
private fun setupAppOpenIntent(context: Context, views: RemoteViews) {
|
|
Intent(context, BackgroundRecordActivity::class.java).apply {
|
|
action = BackgroundRecordActivity.RECORD_INTENT_ACTION
|
|
val pendingIntent =
|
|
PendingIntent.getActivity(context, OPEN_APP_INTENT_ID, this, PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_IMMUTABLE)
|
|
views.setOnClickPendingIntent(R.id.record_display_btn, pendingIntent)
|
|
}
|
|
}
|
|
|
|
private fun getColoredIcon(context: Context, color: Int, alpha: Int): Bitmap {
|
|
val drawable = context.resources.getColoredDrawableWithColor(com.simplemobiletools.commons.R.drawable.ic_microphone_vector, color, alpha)
|
|
return context.drawableToBitmap(drawable)
|
|
}
|
|
}
|