diff --git a/mobile/android/app/build.gradle b/mobile/android/app/build.gradle index 0d07228252..eb179ae2d4 100644 --- a/mobile/android/app/build.gradle +++ b/mobile/android/app/build.gradle @@ -3,6 +3,8 @@ plugins { id "kotlin-android" id "dev.flutter.flutter-gradle-plugin" id 'com.google.devtools.ksp' + id 'org.jetbrains.kotlin.plugin.compose' version '2.0.20' // this version matches your Kotlin version + } def localProperties = new Properties() @@ -45,6 +47,10 @@ android { main.java.srcDirs += 'src/main/kotlin' } + buildFeatures { + compose true + } + defaultConfig { applicationId "app.alextran.immich" minSdkVersion 26 @@ -102,6 +108,9 @@ dependencies { ksp "com.github.bumptech.glide:ksp:$glide_version" coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs:2.1.2' + + //Glance Widget + implementation "androidx.glance:glance-appwidget:1.1.1" } // This is uncommented in F-Droid build script diff --git a/mobile/android/app/src/main/AndroidManifest.xml b/mobile/android/app/src/main/AndroidManifest.xml index 6a96aa68e4..b9ccf8201a 100644 --- a/mobile/android/app/src/main/AndroidManifest.xml +++ b/mobile/android/app/src/main/AndroidManifest.xml @@ -141,6 +141,19 @@ android:name="androidx.startup.InitializationProvider" android:authorities="${applicationId}.androidx-startup" tools:node="remove" /> + + + + + + + + + diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/widget/RandomReceiver.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/widget/RandomReceiver.kt new file mode 100644 index 0000000000..8e019c48e8 --- /dev/null +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/widget/RandomReceiver.kt @@ -0,0 +1,8 @@ +package app.alextran.immich.widget + +import HomeWidgetGlanceWidgetReceiver + +class RandomReceiver : HomeWidgetGlanceWidgetReceiver() { + override val glanceAppWidget = RandomWidget() +} + diff --git a/mobile/android/app/src/main/kotlin/app/alextran/immich/widget/RandomWidget.kt b/mobile/android/app/src/main/kotlin/app/alextran/immich/widget/RandomWidget.kt new file mode 100644 index 0000000000..9f6db5c835 --- /dev/null +++ b/mobile/android/app/src/main/kotlin/app/alextran/immich/widget/RandomWidget.kt @@ -0,0 +1,37 @@ +package app.alextran.immich.widget + +import HomeWidgetGlanceState +import HomeWidgetGlanceStateDefinition +import android.content.Context +import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.unit.dp +import androidx.glance.appwidget.* +import androidx.glance.* +import androidx.glance.layout.* +import androidx.glance.state.* +import androidx.glance.text.* + +class RandomWidget : GlanceAppWidget() { + override val stateDefinition: GlanceStateDefinition<*> + get() = HomeWidgetGlanceStateDefinition() + + override suspend fun provideGlance(context: Context, id: GlanceId) { + provideContent { + GlanceContent(context, currentState()) + } + } + + @Composable + private fun GlanceContent(context: Context, currentState: HomeWidgetGlanceState) { + val prefs = currentState.preferences + val counter = prefs.getInt("counter", 0) + Box(modifier = GlanceModifier.background(Color.White).padding(16.dp)) { + Column() { + Text( + counter.toString() + ) + } + } + } +} diff --git a/mobile/android/app/src/main/res/xml/widget.xml b/mobile/android/app/src/main/res/xml/widget.xml new file mode 100644 index 0000000000..7b461bf324 --- /dev/null +++ b/mobile/android/app/src/main/res/xml/widget.xml @@ -0,0 +1,7 @@ + \ No newline at end of file