diff --git a/packages/SettingsLib/Spa/build.gradle b/packages/SettingsLib/Spa/build.gradle index f8667edb7e8c4..6384cad7d620d 100644 --- a/packages/SettingsLib/Spa/build.gradle +++ b/packages/SettingsLib/Spa/build.gradle @@ -22,7 +22,7 @@ buildscript { } } plugins { - id 'com.android.application' version '7.3.0-rc01' apply false - id 'com.android.library' version '7.3.0-rc01' apply false + id 'com.android.application' version '7.3.0' apply false + id 'com.android.library' version '7.3.0' apply false id 'org.jetbrains.kotlin.android' version '1.6.10' apply false } diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt index 1ebc5da8c5931..332d5a836c9f5 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryDebugActivity.kt @@ -18,8 +18,4 @@ package com.android.settingslib.spa.gallery import com.android.settingslib.spa.framework.DebugActivity -class GalleryDebugActivity : DebugActivity( - SpaEnvironment.EntryRepository, - browseActivityClass = MainActivity::class.java, - entryProviderAuthorities = "com.android.spa.gallery.provider", -) +class GalleryDebugActivity : DebugActivity(GallerySpaEnvironment) diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryEntryProvider.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryEntryProvider.kt index d3e0096887e61..5e048612292dc 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryEntryProvider.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GalleryEntryProvider.kt @@ -18,7 +18,4 @@ package com.android.settingslib.spa.gallery import com.android.settingslib.spa.framework.EntryProvider -class GalleryEntryProvider : EntryProvider( - SpaEnvironment.EntryRepository, - browseActivityClass = MainActivity::class.java, -) +class GalleryEntryProvider : EntryProvider(GallerySpaEnvironment) diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/SpaEnvironment.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt similarity index 89% rename from packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/SpaEnvironment.kt rename to packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt index 6fe88e1fd37cc..33c4d7712753f 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/SpaEnvironment.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/GallerySpaEnvironment.kt @@ -18,9 +18,9 @@ package com.android.settingslib.spa.gallery import android.os.Bundle import androidx.navigation.NamedNavArgument -import com.android.settingslib.spa.framework.common.SettingsEntryRepository import com.android.settingslib.spa.framework.common.SettingsPage import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository +import com.android.settingslib.spa.framework.common.SpaEnvironment import com.android.settingslib.spa.gallery.button.ActionButtonPageProvider import com.android.settingslib.spa.gallery.home.HomePageProvider import com.android.settingslib.spa.gallery.page.ArgumentPageProvider @@ -62,9 +62,8 @@ fun createSettingsPage( ) } -object SpaEnvironment { - val PageProviderRepository: SettingsPageProviderRepository by - lazy(LazyThreadSafetyMode.SYNCHRONIZED) { +object GallerySpaEnvironment : SpaEnvironment() { + override val pageProviderRepository = lazy { SettingsPageProviderRepository( allPageProviders = listOf( HomePageProvider, @@ -88,9 +87,7 @@ object SpaEnvironment { ) } - val EntryRepository: SettingsEntryRepository by lazy(LazyThreadSafetyMode.SYNCHRONIZED) { - SettingsEntryRepository(PageProviderRepository) - } + override val browseActivityClass = MainActivity::class.java - // TODO: add other environment setup here. + override val entryProviderAuthorities = "com.android.spa.gallery.provider" } diff --git a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/MainActivity.kt b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/MainActivity.kt index a063847623721..5e859ce778cf4 100644 --- a/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/MainActivity.kt +++ b/packages/SettingsLib/Spa/gallery/src/com/android/settingslib/spa/gallery/MainActivity.kt @@ -18,4 +18,4 @@ package com.android.settingslib.spa.gallery import com.android.settingslib.spa.framework.BrowseActivity -class MainActivity : BrowseActivity(SpaEnvironment.PageProviderRepository) +class MainActivity : BrowseActivity(GallerySpaEnvironment) diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt index 0bb631acf7fcc..138ea02b04d11 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt @@ -31,7 +31,7 @@ import androidx.navigation.compose.composable import androidx.navigation.compose.rememberNavController import androidx.navigation.navArgument import com.android.settingslib.spa.R -import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository +import com.android.settingslib.spa.framework.common.SpaEnvironment import com.android.settingslib.spa.framework.compose.localNavController import com.android.settingslib.spa.framework.theme.SettingsTheme import com.android.settingslib.spa.framework.util.navRoute @@ -48,9 +48,9 @@ const val NULL_PAGE_NAME = "NULL" * $ adb shell am start -n -e spa:SpaActivity:destination HOME * $ adb shell am start -n -e spa:SpaActivity:destination ARGUMENT/bar/5 */ -open class BrowseActivity( - private val sppRepository: SettingsPageProviderRepository, -) : ComponentActivity() { +open class BrowseActivity(spaEnvironment: SpaEnvironment) : ComponentActivity() { + private val sppRepository by spaEnvironment.pageProviderRepository + override fun onCreate(savedInstanceState: Bundle?) { setTheme(R.style.Theme_SpaLib_DayNight) super.onCreate(savedInstanceState) diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt index c698d9c7ca9a0..85fc366dd3f54 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/DebugActivity.kt @@ -35,8 +35,8 @@ import androidx.navigation.navArgument import com.android.settingslib.spa.R import com.android.settingslib.spa.framework.BrowseActivity.Companion.KEY_DESTINATION import com.android.settingslib.spa.framework.common.SettingsEntry -import com.android.settingslib.spa.framework.common.SettingsEntryRepository import com.android.settingslib.spa.framework.common.SettingsPage +import com.android.settingslib.spa.framework.common.SpaEnvironment import com.android.settingslib.spa.framework.compose.localNavController import com.android.settingslib.spa.framework.compose.navigator import com.android.settingslib.spa.framework.compose.toState @@ -61,11 +61,9 @@ private const val PARAM_NAME_ENTRY_ID = "eid" * For gallery, Activity = com.android.settingslib.spa.gallery/.GalleryDebugActivity * For SettingsGoogle, Activity = com.android.settings/.spa.SpaDebugActivity */ -open class DebugActivity( - private val entryRepository: SettingsEntryRepository, - private val browseActivityClass: Class<*>, - private val entryProviderAuthorities: String? = null, -) : ComponentActivity() { +open class DebugActivity(private val spaEnvironment: SpaEnvironment) : ComponentActivity() { + private val entryRepository by spaEnvironment.entryRepository + override fun onCreate(savedInstanceState: Bundle?) { setTheme(R.style.Theme_SpaLib_DayNight) super.onCreate(savedInstanceState) @@ -79,7 +77,7 @@ open class DebugActivity( } private fun displayDebugMessage() { - if (entryProviderAuthorities == null) return + val entryProviderAuthorities = spaEnvironment.entryProviderAuthorities ?: return try { val query = EntryProvider.QueryEnum.PAGE_INFO_QUERY @@ -216,7 +214,7 @@ open class DebugActivity( if (page.hasRuntimeParam()) return null val context = LocalContext.current val route = page.buildRoute() - val intent = Intent(context, browseActivityClass).apply { + val intent = Intent(context, spaEnvironment.browseActivityClass).apply { putExtra(KEY_DESTINATION, route) } return { @@ -230,7 +228,7 @@ open class DebugActivity( if (entry.hasRuntimeParam()) return null val context = LocalContext.current val route = entry.buildRoute() - val intent = Intent(context, browseActivityClass).apply { + val intent = Intent(context, spaEnvironment.browseActivityClass).apply { putExtra(KEY_DESTINATION, route) } return { diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt index d923c1ce83e8a..f0ec83b424986 100644 --- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt @@ -28,8 +28,8 @@ import android.database.Cursor import android.database.MatrixCursor import android.net.Uri import android.util.Log -import com.android.settingslib.spa.framework.common.SettingsEntryRepository import com.android.settingslib.spa.framework.common.SettingsPage +import com.android.settingslib.spa.framework.common.SpaEnvironment /** * The content provider to return entry related data, which can be used for search and hierarchy. @@ -42,10 +42,9 @@ import com.android.settingslib.spa.framework.common.SettingsPage * $ adb shell content query --uri content:///page_info * $ adb shell content query --uri content:///entry_info */ -open class EntryProvider( - private val entryRepository: SettingsEntryRepository, - private val browseActivityClass: Class<*>? = null, -) : ContentProvider() { +open class EntryProvider(spaEnvironment: SpaEnvironment) : ContentProvider() { + private val entryRepository by spaEnvironment.entryRepository + private val browseActivityClass = spaEnvironment.browseActivityClass /** * Enum to define all column names in provider. @@ -220,7 +219,7 @@ open class EntryProvider( } private fun createBrowsePageIntent(page: SettingsPage): Intent { - if (context == null || browseActivityClass == null || page.hasRuntimeParam()) + if (context == null || page.hasRuntimeParam()) return Intent() return Intent().setComponent(ComponentName(context!!, browseActivityClass)).apply { @@ -231,8 +230,7 @@ open class EntryProvider( private fun createBrowsePageAdbCommand(page: SettingsPage): String? { if (context == null || page.hasRuntimeParam()) return null val packageName = context!!.packageName - val activityName = - browseActivityClass?.name?.replace(packageName, "") ?: "" + val activityName = browseActivityClass.name.replace(packageName, "") return "adb shell am start -n $packageName/$activityName" + " -e ${BrowseActivity.KEY_DESTINATION} ${page.buildRoute()}" } diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SpaEnvironment.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SpaEnvironment.kt new file mode 100644 index 0000000000000..111555b468c1b --- /dev/null +++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SpaEnvironment.kt @@ -0,0 +1,31 @@ +/* + * 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 + +import android.app.Activity + +abstract class SpaEnvironment { + abstract val pageProviderRepository: Lazy + + val entryRepository = lazy { SettingsEntryRepository(pageProviderRepository.value) } + + abstract val browseActivityClass: Class + + open val entryProviderAuthorities: String? = null + + // TODO: add other environment setup here. +}