Refactor SPA framework code:

1. rename framework/api folder to framework/common
2. rename SettingsPageRepository to SettingsPageProviderRepository
3. rename spa/MainActivity to spa/BrowseActivity
4. Add SpaEnvironment for all environment related setup for gallery

Bug: 244122804
Test: manual - build Spa gallery
Test: refactoring CL. Existing unit tests still pass.

Change-Id: I81fb60e46ef19b5176a4c2fa6e67a4f2bf0e328c
This commit is contained in:
Zekan Qian
2022-08-29 13:17:32 +08:00
parent 77689d1997
commit 92e7c98936
16 changed files with 66 additions and 45 deletions

View File

@@ -16,6 +16,6 @@
package com.android.settingslib.spa.gallery
import com.android.settingslib.spa.framework.SpaActivity
import com.android.settingslib.spa.framework.BrowseActivity
class MainActivity : SpaActivity(galleryPageRepository)
class MainActivity : BrowseActivity(galleryPageProviders)

View File

@@ -16,7 +16,7 @@
package com.android.settingslib.spa.gallery
import com.android.settingslib.spa.framework.api.SettingsPageRepository
import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository
import com.android.settingslib.spa.gallery.home.HomePageProvider
import com.android.settingslib.spa.gallery.page.ArgumentPageProvider
import com.android.settingslib.spa.gallery.page.FooterPageProvider
@@ -25,8 +25,8 @@ import com.android.settingslib.spa.gallery.page.SettingsPagerPageProvider
import com.android.settingslib.spa.gallery.page.SliderPageProvider
import com.android.settingslib.spa.gallery.page.SwitchPreferencePageProvider
val galleryPageRepository = SettingsPageRepository(
allPages = listOf(
val galleryPageProviders = SettingsPageProviderRepository(
allPagesList = listOf(
HomePageProvider,
PreferencePageProvider,
SwitchPreferencePageProvider,
@@ -35,5 +35,7 @@ val galleryPageRepository = SettingsPageRepository(
SettingsPagerPageProvider,
FooterPageProvider,
),
startDestination = HomePageProvider.name,
rootPages = listOf(HomePageProvider.name)
)
// TODO: add other environment setup here.

View File

@@ -20,7 +20,7 @@ import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.gallery.R
import com.android.settingslib.spa.gallery.page.ArgumentPageProvider

View File

@@ -21,7 +21,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import androidx.navigation.NavType
import androidx.navigation.navArgument
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.toState
import com.android.settingslib.spa.framework.theme.SettingsTheme

View File

@@ -20,7 +20,7 @@ import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.runtime.remember
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
import com.android.settingslib.spa.framework.theme.SettingsTheme

View File

@@ -29,7 +29,7 @@ import androidx.compose.runtime.produceState
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.toState
import com.android.settingslib.spa.framework.theme.SettingsTheme

View File

@@ -19,7 +19,7 @@ package com.android.settingslib.spa.gallery.page
import android.os.Bundle
import androidx.compose.runtime.Composable
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.widget.preference.Preference

View File

@@ -27,7 +27,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.widget.preference.Preference

View File

@@ -23,7 +23,7 @@ import androidx.compose.runtime.produceState
import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.tooling.preview.Preview
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.stateOf
import com.android.settingslib.spa.framework.theme.SettingsTheme

View File

@@ -25,13 +25,13 @@ import androidx.navigation.compose.NavHost
import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.android.settingslib.spa.R
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.api.SettingsPageRepository
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository
import com.android.settingslib.spa.framework.compose.localNavController
import com.android.settingslib.spa.framework.theme.SettingsTheme
open class SpaActivity(
private val settingsPageRepository: SettingsPageRepository,
open class BrowseActivity(
private val sppRepository: SettingsPageProviderRepository,
) : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
setTheme(R.style.Theme_SpaLib_DayNight)
@@ -47,12 +47,12 @@ open class SpaActivity(
@Composable
private fun MainContent() {
val startDestination =
intent?.getStringExtra(KEY_START_DESTINATION) ?: settingsPageRepository.startDestination
intent?.getStringExtra(KEY_START_DESTINATION) ?: sppRepository.getDefaultStartPageName()
val navController = rememberNavController()
CompositionLocalProvider(navController.localNavController()) {
NavHost(navController, startDestination) {
for (page in settingsPageRepository.allPages) {
for (page in sppRepository.getAllProviders()) {
composable(
route = page.route,
arguments = page.arguments,

View File

@@ -1,22 +0,0 @@
/*
* 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.framework.api
data class SettingsPageRepository(
val allPages: List<SettingsPageProvider>,
val startDestination: String,
)

View File

@@ -14,7 +14,7 @@
* limitations under the License.
*/
package com.android.settingslib.spa.framework.api
package com.android.settingslib.spa.framework.common
import android.os.Bundle
import androidx.compose.runtime.Composable
@@ -35,4 +35,6 @@ interface SettingsPageProvider {
/** The [Composable] used to render this page. */
@Composable
fun Page(arguments: Bundle?)
// fun buildEntry( arguments: Bundle?) : List<entry>
}

View File

@@ -0,0 +1,39 @@
/*
* 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.framework.common
class SettingsPageProviderRepository(
allPagesList: List<SettingsPageProvider>,
private val rootPages: List<String>
) {
// Maintains all SPA page providers.
private val allPages: Map<String, SettingsPageProvider> = allPagesList.associateBy { it.name }
fun getDefaultStartPageName(): String {
return rootPages.getOrElse(0) {
return ""
}
}
fun getAllProviders(): Collection<SettingsPageProvider> {
return allPages.values
}
fun getProviderOrNull(name: String): SettingsPageProvider? {
return allPages[name]
}
}

View File

@@ -28,7 +28,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavType
import androidx.navigation.navArgument
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spa.framework.compose.rememberContext
import com.android.settingslib.spa.widget.preference.SwitchPreference

View File

@@ -21,7 +21,7 @@ import android.content.pm.ApplicationInfo
import androidx.compose.runtime.Composable
import androidx.compose.runtime.State
import androidx.compose.ui.res.stringResource
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.rememberContext
import com.android.settingslib.spa.framework.util.asyncMapItem
import com.android.settingslib.spa.widget.preference.Preference

View File

@@ -27,7 +27,7 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.navigation.NavType
import androidx.navigation.navArgument
import com.android.settingslib.spa.framework.api.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.compose.navigator
import com.android.settingslib.spaprivileged.R
import com.android.settingslib.spaprivileged.model.app.AppListModel