Implement Slice Examples in Gallery

Bug: 244122804
Test: unit-test & local build gallery
Change-Id: Ia4c988a38a10241755c6b2e4a2b1111967df0924
This commit is contained in:
Zekan Qian
2022-11-07 11:36:45 +08:00
parent dd81e5628e
commit a7163359eb
4 changed files with 109 additions and 4 deletions

View File

@@ -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">

View File

@@ -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()
}

View File

@@ -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 {

View File

@@ -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")