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