Implement Slice Examples in Gallery
Bug: 244122804 Test: unit-test & local build gallery Change-Id: Ia4c988a38a10241755c6b2e4a2b1111967df0924
This commit is contained in:
@@ -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">
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
@@ -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")
|
||||
|
||||
Reference in New Issue
Block a user