AlwaysOnAppWidgetProvider.kt raw

   1  package io.github.domi04151309.alwayson.receivers
   2  
   3  import android.app.PendingIntent
   4  import android.appwidget.AppWidgetManager
   5  import android.appwidget.AppWidgetProvider
   6  import android.content.ComponentName
   7  import android.content.Context
   8  import android.content.Intent
   9  import android.widget.RemoteViews
  10  import io.github.domi04151309.alwayson.R
  11  import io.github.domi04151309.alwayson.helpers.Global
  12  
  13  class AlwaysOnAppWidgetProvider : AppWidgetProvider() {
  14      override fun onReceive(
  15          context: Context,
  16          intent: Intent,
  17      ) {
  18          if (intent.action == CHANGE_STATE) {
  19              Global.changeAlwaysOnState(context)
  20          } else if (intent.action == Global.ALWAYS_ON_STATE_CHANGED) {
  21              updateWidget(context)
  22          }
  23          super.onReceive(context, intent)
  24      }
  25  
  26      private fun updateWidget(context: Context) {
  27          val appWidgetManager = AppWidgetManager.getInstance(context.applicationContext)
  28          val appWidgetIds =
  29              appWidgetManager.getAppWidgetIds(
  30                  ComponentName(
  31                      context.applicationContext,
  32                      AppWidgetProvider::class.java,
  33                  ),
  34              )
  35          onUpdate(context, appWidgetManager, appWidgetIds)
  36      }
  37  
  38      override fun onUpdate(
  39          context: Context,
  40          appWidgetManager: AppWidgetManager,
  41          appWidgetIds: IntArray,
  42      ) {
  43          val views = RemoteViews(context.packageName, R.layout.always_on_widget)
  44          views.setOnClickPendingIntent(R.id.always_on_widget_image, getPendingSelfIntent(context))
  45  
  46          if (Global.currentAlwaysOnState(context)) {
  47              views.setImageViewResource(
  48                  R.id.always_on_widget_image,
  49                  R.drawable.ic_always_on_widget_on,
  50              )
  51          } else {
  52              views.setImageViewResource(
  53                  R.id.always_on_widget_image,
  54                  R.drawable.ic_always_on_widget_off,
  55              )
  56          }
  57  
  58          appWidgetManager.updateAppWidget(
  59              ComponentName(
  60                  context,
  61                  AlwaysOnAppWidgetProvider::class.java,
  62              ),
  63              views,
  64          )
  65      }
  66  
  67      private fun getPendingSelfIntent(context: Context): PendingIntent =
  68          PendingIntent.getBroadcast(
  69              context,
  70              0,
  71              Intent(context, AlwaysOnAppWidgetProvider::class.java).setAction(CHANGE_STATE),
  72              PendingIntent.FLAG_IMMUTABLE,
  73          )
  74  
  75      companion object {
  76          private const val CHANGE_STATE = "change_state"
  77      }
  78  }
  79