diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index c9899e0e..2ef07273 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -23,7 +23,7 @@ Removing this would otherwise cause a Manifest merger issue. See https://developer.android.com/build/manage-manifests#merge_conflict_heuristics --> - + + + @@ -196,6 +198,20 @@ android:name="android.appwidget.provider" android:resource="@xml/app_widget_weather_forecast_glance" /> + + + + + + + + + \ No newline at end of file diff --git a/samples/user-interface/appwidgets/src/main/java/com/example/platform/ui/appwidgets/remote_compose/AndroidPetWidget.kt b/samples/user-interface/appwidgets/src/main/java/com/example/platform/ui/appwidgets/remote_compose/AndroidPetWidget.kt new file mode 100644 index 00000000..20025f33 --- /dev/null +++ b/samples/user-interface/appwidgets/src/main/java/com/example/platform/ui/appwidgets/remote_compose/AndroidPetWidget.kt @@ -0,0 +1,66 @@ +/* + * Copyright 2026 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.example.platform.ui.appwidgets.remote_compose + +import android.annotation.SuppressLint +import android.appwidget.AppWidgetManager +import android.content.Context +import android.os.Build +import androidx.annotation.RequiresApi +import androidx.compose.remote.creation.compose.layout.RemoteAlignment +import androidx.compose.remote.creation.compose.layout.RemoteBox +import androidx.compose.remote.creation.compose.layout.RemoteComposable +import androidx.compose.remote.creation.compose.layout.RemoteText +import androidx.compose.remote.creation.compose.modifier.RemoteModifier +import androidx.compose.remote.creation.compose.modifier.background +import androidx.compose.remote.creation.compose.modifier.fillMaxSize +import androidx.compose.remote.creation.compose.state.rc +import androidx.compose.remote.creation.compose.state.rs +import androidx.compose.remote.creation.compose.widgets.RemoteComposeWidget +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color + +@SuppressLint("RestrictedApiAndroidX", "RestrictedApi") +class AndroidPetWidget : RemoteComposeWidget() { + + @RequiresApi(Build.VERSION_CODES.VANILLA_ICE_CREAM) + override fun onUpdate( + context: Context, + appWidgetManager: AppWidgetManager, + appWidgetIds: IntArray + ) { + super.onUpdate(context, appWidgetManager, appWidgetIds) + appWidgetIds.forEach { id -> + widget.updateRemoteView(context, appWidgetManager, this, id, -1) + } + } + + @SuppressLint("RestrictedApiAndroidX", "RestrictedApi") + @RemoteComposable + @Composable + override fun Content(context: Context, widgetId: Int) { + RemoteBox( + modifier = RemoteModifier.fillMaxSize().background(Color.White.rc), + contentAlignment = RemoteAlignment.Center + ) { + RemoteText( + text = "Android Pet Coming Soon".rs, + color = Color.Black.rc + ) + } + } +} diff --git a/samples/user-interface/appwidgets/src/main/res/layout/android_pet_widget_fallback.xml b/samples/user-interface/appwidgets/src/main/res/layout/android_pet_widget_fallback.xml new file mode 100644 index 00000000..457cb4b8 --- /dev/null +++ b/samples/user-interface/appwidgets/src/main/res/layout/android_pet_widget_fallback.xml @@ -0,0 +1,32 @@ + + + + + + diff --git a/samples/user-interface/appwidgets/src/main/res/values/strings.xml b/samples/user-interface/appwidgets/src/main/res/values/strings.xml index f15b4ea3..b8af365a 100644 --- a/samples/user-interface/appwidgets/src/main/res/values/strings.xml +++ b/samples/user-interface/appwidgets/src/main/res/values/strings.xml @@ -25,6 +25,11 @@ Glance Weather Widget for weather forecast Mostly cloudy + + + Android Pet + An animated interactive pet widget powered by Remote Compose. + Remote Compose widgets work on Android 17 and higher devices. Use an Android 17 device. LayoutSamples Settings diff --git a/samples/user-interface/appwidgets/src/main/res/xml/android_pet_widget_info.xml b/samples/user-interface/appwidgets/src/main/res/xml/android_pet_widget_info.xml new file mode 100644 index 00000000..656d0ef7 --- /dev/null +++ b/samples/user-interface/appwidgets/src/main/res/xml/android_pet_widget_info.xml @@ -0,0 +1,25 @@ + + +