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

Commit ff769c7e authored by Yuchen's avatar Yuchen Committed by Yuchen Sun
Browse files

Remove SpaSliceProvider and SpaSliceBroadcastReceiver.

Test: Existing tests passed.
Bug: 352442832
Flag: stanza
Change-Id: I1be67c53947819f578f231d50989d88f0aa14893
parent 58dbc145
Loading
Loading
Loading
Loading
+0 −14
Original line number Diff line number Diff line
@@ -46,20 +46,6 @@
            </intent-filter>
        </provider>

        <provider android:name="com.android.settingslib.spa.slice.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.slice.SpaSliceBroadcastReceiver"
            android:exported="false">
        </receiver>

        <activity
            android:name="com.android.settingslib.spa.debug.BlankActivity"
            android:exported="true">
+0 −3
Original line number Diff line number Diff line
@@ -55,7 +55,6 @@ import com.android.settingslib.spa.gallery.ui.CategoryPageProvider
import com.android.settingslib.spa.gallery.ui.CopyablePageProvider
import com.android.settingslib.spa.gallery.scaffold.ScrollablePagerPageProvider
import com.android.settingslib.spa.gallery.ui.SpinnerPageProvider
import com.android.settingslib.spa.slice.SpaSliceBroadcastReceiver

/**
 * Enum to define all SPP name here.
@@ -120,9 +119,7 @@ class GallerySpaEnvironment(context: Context) : SpaEnvironment(context) {
    override val logger = DebugLogger()

    override val browseActivityClass = GalleryMainActivity::class.java
    override val sliceBroadcastReceiverClass = SpaSliceBroadcastReceiver::class.java

    // For debugging
    override val searchProviderAuthorities = "com.android.spa.gallery.search.provider"
    override val sliceProviderAuthorities = "com.android.spa.gallery.slice.provider"
}
+0 −93
Original line number Diff line number Diff line
@@ -27,7 +27,6 @@ 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
@@ -35,10 +34,8 @@ import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.createIntent
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
@@ -48,15 +45,10 @@ 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"

@@ -139,26 +131,6 @@ object PreferencePageProvider : SettingsPageProvider {
                            override val enabled = { model.asyncEnable.value }
                        }
                    )
                }
                .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(
@@ -176,28 +148,6 @@ 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(
@@ -216,33 +166,6 @@ object PreferencePageProvider : SettingsPageProvider {
                            }
                        }
                    )
                }
                .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()
        )

@@ -272,22 +195,6 @@ object PreferencePageProvider : SettingsPageProvider {
                    clickRoute = SettingsPageProviderEnum.PREFERENCE.name
                )
            }
            .setSliceDataFn { sliceUri, _ ->
                val intent = owner.createIntent()?.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 {
+0 −6
Original line number Diff line number Diff line
@@ -17,12 +17,10 @@
package com.android.settingslib.spa.framework.common

import android.app.Activity
import android.content.BroadcastReceiver
import android.content.Context
import android.util.Log
import androidx.compose.runtime.Composable
import androidx.compose.ui.platform.LocalContext
import com.android.settingslib.spa.slice.SettingsSliceDataRepository

private const val TAG = "SpaEnvironment"

@@ -69,8 +67,6 @@ abstract class SpaEnvironment(context: Context) {

    val entryRepository = lazy { SettingsEntryRepository(pageProviderRepository.value) }

    val sliceDataRepository = lazy { SettingsSliceDataRepository(entryRepository.value) }

    // The application context. Use local context as fallback when applicationContext is not
    // available (e.g. in Robolectric test).
    val appContext: Context = context.applicationContext ?: context
@@ -81,11 +77,9 @@ abstract class SpaEnvironment(context: Context) {
    // Specify class name of browse activity and slice broadcast receiver, which is used to
    // generate the necessary intents.
    open val browseActivityClass: Class<out Activity>? = null
    open val sliceBroadcastReceiverClass: Class<out BroadcastReceiver>? = null

    // Specify provider authorities for debugging purpose.
    open val searchProviderAuthorities: String? = null
    open val sliceProviderAuthorities: String? = null

    // TODO: add other environment setup here.
    companion object {
+0 −57
Original line number Diff line number Diff line
/*
 * Copyright (C) 2022 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.settingslib.spa.slice

import android.net.Uri
import android.util.Log
import com.android.settingslib.spa.framework.common.EntrySliceData
import com.android.settingslib.spa.framework.common.SettingsEntryRepository
import com.android.settingslib.spa.framework.util.getEntryId

private const val TAG = "SliceDataRepository"

class SettingsSliceDataRepository(private val entryRepository: SettingsEntryRepository) {
    // The map of slice uri to its EntrySliceData, a.k.a. LiveData<Slice?>
    private val sliceDataMap: MutableMap<String, EntrySliceData> = mutableMapOf()

    // Note: mark this function synchronized, so that we can get the same livedata during the
    // whole lifecycle of a Slice.
    @Synchronized
    fun getOrBuildSliceData(sliceUri: Uri): EntrySliceData? {
        val sliceString = sliceUri.getSliceId() ?: return null
        return sliceDataMap[sliceString] ?: buildLiveDataImpl(sliceUri)?.let {
            sliceDataMap[sliceString] = it
            it
        }
    }

    fun getActiveSliceData(sliceUri: Uri): EntrySliceData? {
        val sliceString = sliceUri.getSliceId() ?: return null
        val sliceData = sliceDataMap[sliceString] ?: return null
        return if (sliceData.isActive()) sliceData else null
    }

    private fun buildLiveDataImpl(sliceUri: Uri): EntrySliceData? {
        Log.d(TAG, "buildLiveData: $sliceUri")

        val entryId = sliceUri.getEntryId() ?: return null
        val entry = entryRepository.getEntry(entryId) ?: return null
        if (!entry.hasSliceSupport) return null
        val arguments = sliceUri.getRuntimeArguments()
        return entry.getSliceData(runtimeArguments = arguments, sliceUri = sliceUri)
    }
}
Loading