diff options
| author | 2022-11-07 11:36:45 +0800 | |
|---|---|---|
| committer | 2022-11-15 10:17:05 +0800 | |
| commit | a7163359ebc0c7d7bd11c8300f16c7827abf315d (patch) | |
| tree | d5789ebe92e3d546344dd392c3d741f43f5eaf0a | |
| parent | dd81e5628e4df6fcfa7b6c55dd279db8b6629b69 (diff) | |
Implement Slice Examples in Gallery
Bug: 244122804
Test: unit-test & local build gallery
Change-Id: Ia4c988a38a10241755c6b2e4a2b1111967df0924
4 files changed, 109 insertions, 4 deletions
diff --git a/packages/SettingsLib/Spa/gallery/AndroidManifest.xml b/packages/SettingsLib/Spa/gallery/AndroidManifest.xml index 50cab84e0d9d..1e52aaf72076 100644 --- a/packages/SettingsLib/Spa/gallery/AndroidManifest.xml +++ b/packages/SettingsLib/Spa/gallery/AndroidManifest.xml @@ -41,6 +41,20 @@ android:exported="false"> </provider> + <provider android:name="com.android.settingslib.spa.framework.SpaSliceProvider" + android:authorities="com.android.spa.gallery.slice.provider" + android:exported="true" > + <intent-filter> + <action android:name="android.intent.action.VIEW" /> + <category android:name="android.app.slice.category.SLICE" /> + </intent-filter> + </provider> + + <receiver + android:name="com.android.settingslib.spa.framework.SpaSliceBroadcastReceiver" + android:exported="false"> + </receiver> + <activity android:name="com.android.settingslib.spa.framework.debug.BlankActivity" android:exported="true"> diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt index 016b27f0c82c..941e7705441b 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt @@ -17,6 +17,7 @@ package com.android.settingslib.spa.gallery import android.content.Context +import com.android.settingslib.spa.framework.SpaSliceBroadcastReceiver import com.android.settingslib.spa.framework.common.LocalLogger import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository import com.android.settingslib.spa.framework.common.SpaEnvironment @@ -79,8 +80,8 @@ class GallerySpaEnvironment(context: Context) : SpaEnvironment(context) { } override val browseActivityClass = GalleryMainActivity::class.java - + override val sliceBroadcastReceiverClass = SpaSliceBroadcastReceiver::class.java override val searchProviderAuthorities = "com.android.spa.gallery.search.provider" - + override val sliceProviderAuthorities = "com.android.spa.gallery.slice.provider" override val logger = LocalLogger() } diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt index 26e59ff699a4..ff89f2b25e7d 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePage.kt @@ -27,6 +27,7 @@ import androidx.compose.runtime.remember import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import com.android.settingslib.spa.framework.common.EntrySearchData +import com.android.settingslib.spa.framework.common.EntrySliceData import com.android.settingslib.spa.framework.common.EntryStatusData import com.android.settingslib.spa.framework.common.SettingsEntry import com.android.settingslib.spa.framework.common.SettingsEntryBuilder @@ -37,6 +38,7 @@ import com.android.settingslib.spa.framework.compose.toState import com.android.settingslib.spa.framework.theme.SettingsTheme import com.android.settingslib.spa.gallery.R import com.android.settingslib.spa.gallery.SettingsPageProviderEnum +import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.ASYNC_PREFERENCE_SUMMARY import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.ASYNC_PREFERENCE_TITLE import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.AUTO_UPDATE_PREFERENCE_TITLE import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.DISABLE_PREFERENCE_SUMMARY @@ -46,10 +48,15 @@ import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Compan import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.SIMPLE_PREFERENCE_KEYWORDS import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.SIMPLE_PREFERENCE_SUMMARY import com.android.settingslib.spa.gallery.preference.PreferencePageModel.Companion.SIMPLE_PREFERENCE_TITLE +import com.android.settingslib.spa.slice.createBrowsePendingIntent +import com.android.settingslib.spa.slice.provider.createDemoActionSlice +import com.android.settingslib.spa.slice.provider.createDemoBrowseSlice +import com.android.settingslib.spa.slice.provider.createDemoSlice import com.android.settingslib.spa.widget.preference.Preference import com.android.settingslib.spa.widget.preference.PreferenceModel import com.android.settingslib.spa.widget.preference.SimplePreferenceMacro import com.android.settingslib.spa.widget.ui.SettingsIcon +import kotlinx.coroutines.delay private const val TAG = "PreferencePage" @@ -134,6 +141,26 @@ object PreferencePageProvider : SettingsPageProvider { override val enabled = model.asyncEnable } ) + } + .setSliceDataFn { sliceUri, _ -> + val createSliceImpl = { s: String -> + createDemoBrowseSlice( + sliceUri = sliceUri, + title = ASYNC_PREFERENCE_TITLE, + summary = s, + ) + } + return@setSliceDataFn object : EntrySliceData() { + init { + postValue(createSliceImpl("(loading)")) + } + + override suspend fun asyncRunner() { + spaLogger.message(TAG, "Async entry loading") + delay(2000L) + postValue(createSliceImpl(ASYNC_PREFERENCE_SUMMARY)) + } + } }.build() ) entryList.add( @@ -152,6 +179,27 @@ object PreferencePageProvider : SettingsPageProvider { } } ) + }.setSliceDataFn { sliceUri, args -> + val createSliceImpl = { v: Int -> + createDemoActionSlice( + sliceUri = sliceUri, + title = MANUAL_UPDATE_PREFERENCE_TITLE, + summary = "manual update value $v", + ) + } + + return@setSliceDataFn object : EntrySliceData() { + private var tick = args?.getString("init")?.toInt() ?: 0 + + init { + postValue(createSliceImpl(tick)) + } + + override suspend fun asyncAction() { + tick++ + postValue(createSliceImpl(tick)) + } + } }.build() ) entryList.add( @@ -170,7 +218,33 @@ object PreferencePageProvider : SettingsPageProvider { } ) } - .build() + .setSliceDataFn { sliceUri, args -> + val createSliceImpl = { v: Int -> + createDemoBrowseSlice( + sliceUri = sliceUri, + title = AUTO_UPDATE_PREFERENCE_TITLE, + summary = "auto update value $v", + ) + } + + return@setSliceDataFn object : EntrySliceData() { + private var tick = args?.getString("init")?.toInt() ?: 0 + + init { + postValue(createSliceImpl(tick)) + } + + override suspend fun asyncRunner() { + spaLogger.message(TAG, "autoUpdater.active") + while (true) { + delay(1000L) + tick++ + spaLogger.message(TAG, "autoUpdater.value $tick") + postValue(createSliceImpl(tick)) + } + } + } + }.build() ) return entryList @@ -201,6 +275,22 @@ object PreferencePageProvider : SettingsPageProvider { clickRoute = SettingsPageProviderEnum.PREFERENCE.name ) } + .setSliceDataFn { sliceUri, _ -> + val intent = owner.createBrowseIntent()?.createBrowsePendingIntent() + ?: return@setSliceDataFn null + return@setSliceDataFn object : EntrySliceData() { + init { + postValue( + createDemoSlice( + sliceUri = sliceUri, + title = PAGE_TITLE, + summary = "Injected Entry", + intent = intent, + ) + ) + } + } + } } override fun getTitle(arguments: Bundle?): String { diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePageModel.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePageModel.kt index d874417c1a56..fc6f10f79ceb 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePageModel.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/preference/PreferencePageModel.kt @@ -44,7 +44,7 @@ class PreferencePageModel : PageModel() { const val DISABLE_PREFERENCE_TITLE = "Disabled" const val DISABLE_PREFERENCE_SUMMARY = "Disabled summary" const val ASYNC_PREFERENCE_TITLE = "Async Preference" - private const val ASYNC_PREFERENCE_SUMMARY = "Async summary" + const val ASYNC_PREFERENCE_SUMMARY = "Async summary" const val MANUAL_UPDATE_PREFERENCE_TITLE = "Manual Updater" const val AUTO_UPDATE_PREFERENCE_TITLE = "Auto Updater" val SIMPLE_PREFERENCE_KEYWORDS = listOf("simple keyword1", "simple keyword2") |