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

Commit 734d22ca authored by Zekan Qian's avatar Zekan Qian Committed by Android (Google) Code Review
Browse files

Merge "Implement Slice Examples in Gallery"

parents 9ae00a02 a7163359
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")