Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a7163359 authored by Zekan Qian's avatar Zekan Qian
Browse files

Implement Slice Examples in Gallery

Bug: 244122804
Test: unit-test & local build gallery
Change-Id: Ia4c988a38a10241755c6b2e4a2b1111967df0924
parent dd81e562
Loading
Loading
Loading
Loading
+14 −0
Original line number Diff line number Diff line
@@ -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">
+3 −2
Original line number Diff line number Diff line
@@ -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()
}
+91 −1
Original line number Diff line number Diff line
@@ -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 {
+1 −1
Original line number Diff line number Diff line
@@ -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")