DEV Community

myougaTheAxo
myougaTheAxo

Posted on

Android App Widgets: Configuration and Updates with Jetpack Glance

App Widgets provide quick access to app functionality from the home screen. Jetpack Glance simplifies widget development with a Compose-like API.

Declaring a Widget

<appwidget-provider xmlns:android="http://schemas.android.com/apk/res/android"
    android:minWidth="180dp"
    android:minHeight="180dp"
    android:updatePeriodMillis="3600000"
    android:widgetCategory="home_screen"
    android:initialLayout="@layout/widget_layout"
    android:previewImage="@drawable/widget_preview" />
Enter fullscreen mode Exit fullscreen mode

Creating a Glance App Widget

class MyAppWidget : GlanceAppWidget() {
    override suspend fun provideGlance(context: Context, id: GlanceId) {
        provideContent {
            WidgetContent()
        }
    }
}

@Composable
private fun WidgetContent() {
    Column(
        modifier = GlanceModifier.fillMaxSize().padding(12.dp),
        verticalAlignment = Alignment.CenterVertically
    ) {
        Text(
            text = "My Widget",
            style = TextStyle(fontSize = 18.sp, fontWeight = FontWeight.Bold)
        )

        Button(
            text = "Click Me",
            onClick = actionRunCallback(::onWidgetClick)
        )
    }
}

suspend fun onWidgetClick() {
    // Handle widget click
}
Enter fullscreen mode Exit fullscreen mode

Widget Configuration Activity

class WidgetConfigureActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContent {
            Column(modifier = Modifier.padding(16.dp)) {
                Text("Configure Widget")
                Button(
                    onClick = {
                        val resultValue = Intent().apply {
                            putExtra(AppWidgetManager.EXTRA_APPWIDGET_ID, appWidgetId)
                        }
                        setResult(RESULT_OK, resultValue)
                        finish()
                    }
                ) {
                    Text("Save")
                }
            }
        }
    }
}
Enter fullscreen mode Exit fullscreen mode

Updating Widgets Periodically

class WidgetUpdateReceiver : GlanceAppWidgetReceiver() {
    override val glanceAppWidget: GlanceAppWidget = MyAppWidget()
}
Enter fullscreen mode Exit fullscreen mode

App Widgets extend your app's reach and provide value directly on the home screen.


8 Android app templates available on Gumroad

Top comments (0)