package com.vgmlr.wedge
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.widget.RemoteViews
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.flow.firstOrNull
import androidx.core.graphics.toColorInt
import androidx.core.net.toUri
class NoteWidgetProvider : AppWidgetProvider() {
override fun onUpdate(
context: Context,
appWidgetManager: AppWidgetManager,
appWidgetIds: IntArray
) {
val prefs = PreferenceManager(context)
CoroutineScope(Dispatchers.IO).launch {
val bgColor = prefs.widgetBgColor.firstOrNull() ?: "#000000"
for (appWidgetId in appWidgetIds) {
val views = RemoteViews(context.packageName, R.layout.widget_layout)
val serviceIntent = Intent(context, WedgeWidgetService::class.java).apply {
putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
data = this.toUri(Intent.URI_INTENT_SCHEME).toUri()
}
@Suppress("DEPRECATION")
views.setRemoteAdapter(R.id.widget_list, serviceIntent)
val clickIntent = Intent(context, MainActivity::class.java)
val clickPI = PendingIntent.getActivity(
context, 0, clickIntent,
PendingIntent.FLAG_UPDATE_CURRENT or PendingIntent.FLAG_MUTABLE
)
views.setPendingIntentTemplate(R.id.widget_list, clickPI)
try {
views.setInt(R.id.widget_root, "setBackgroundColor", bgColor.toColorInt())
} catch (_: Exception) {
views.setInt(R.id.widget_root, "setBackgroundColor", "#000000".toColorInt())
}
@Suppress("DEPRECATION")
appWidgetManager.notifyAppWidgetViewDataChanged(appWidgetId, R.id.widget_list)
appWidgetManager.updateAppWidget(appWidgetId, views)
}
}
}
companion object {
fun triggerUpdate(context: Context) {
val appWidgetManager = AppWidgetManager.getInstance(context)
val componentName = ComponentName(context, NoteWidgetProvider::class.java)
val ids = appWidgetManager.getAppWidgetIds(componentName)
for (id in ids) {
@Suppress("DEPRECATION")
appWidgetManager.notifyAppWidgetViewDataChanged(id, R.id.widget_list)
}
val intent = Intent(context, NoteWidgetProvider::class.java).apply {
action = AppWidgetManager.ACTION_APPWIDGET_UPDATE
putExtra(AppWidgetManager.EXTRA_APPWIDGET_IDS, ids)
}
context.sendBroadcast(intent)
}
}
}