summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt7
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt3
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt11
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt39
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt12
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPageProvider.kt2
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugActivity.kt2
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugFormat.kt50
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugProvider.kt5
9 files changed, 109 insertions, 22 deletions
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 89daeb1ee0e6..d3efaa7480f8 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
@@ -35,6 +35,7 @@ import androidx.navigation.compose.composable
import androidx.navigation.compose.rememberNavController
import com.android.settingslib.spa.R
import com.android.settingslib.spa.framework.common.LogCategory
+import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.compose.LocalNavController
@@ -44,7 +45,6 @@ import com.android.settingslib.spa.framework.theme.SettingsTheme
import com.android.settingslib.spa.framework.util.navRoute
private const val TAG = "BrowseActivity"
-private const val NULL_PAGE_NAME = "NULL"
/**
* The Activity to render ALL SPA pages, and handles jumps between SPA pages.
@@ -81,9 +81,10 @@ open class BrowseActivity : ComponentActivity() {
private fun MainContent() {
val sppRepository by spaEnvironment.pageProviderRepository
val navController = rememberNavController()
+ val nullPage = SettingsPage.createNull()
CompositionLocalProvider(navController.localNavController()) {
- NavHost(navController, NULL_PAGE_NAME) {
- composable(NULL_PAGE_NAME) {}
+ NavHost(navController, nullPage.sppName) {
+ composable(nullPage.sppName) {}
for (spp in sppRepository.getAllProviders()) {
composable(
route = spp.name + spp.parameter.navRoute(),
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 3f25c568966c..38f41bc44a89 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
@@ -169,7 +169,8 @@ open class EntryProvider : ContentProvider() {
.add(ColumnEnum.ENTRY_INTENT_URI.id, intent.toUri(Intent.URI_INTENT_SCHEME))
.add(ColumnEnum.SEARCH_TITLE.id, searchData.title)
.add(ColumnEnum.SEARCH_KEYWORD.id, searchData.keyword)
- .add(ColumnEnum.SEARCH_PATH.id, entryRepository.getEntryPath(entry.id))
+ .add(ColumnEnum.SEARCH_PATH.id,
+ entryRepository.getEntryPathWithTitle(entry.id, searchData.title))
}
private fun fetchStatusData(entry: SettingsEntry, cursor: MatrixCursor) {
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt
index 39fd916f6019..9ba343d70d40 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt
@@ -99,17 +99,6 @@ data class SettingsEntry(
*/
private val uiLayoutImpl: (@Composable (arguments: Bundle?) -> Unit) = {},
) {
- fun formatContent(): String {
- val content = listOf(
- "id = $id",
- "owner = ${owner.formatDisplayTitle()}",
- "linkFrom = ${fromPage?.formatDisplayTitle()}",
- "linkTo = ${toPage?.formatDisplayTitle()}",
- "${getSearchData()?.format()}",
- )
- return content.joinToString("\n")
- }
-
fun displayTitle(): String {
return "${owner.displayName}:$displayName"
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt
index ea20233288b4..e63e4c9d231e 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt
@@ -21,10 +21,13 @@ import java.util.LinkedList
private const val TAG = "EntryRepository"
private const val MAX_ENTRY_SIZE = 5000
+private const val MAX_ENTRY_DEPTH = 10
data class SettingsPageWithEntry(
val page: SettingsPage,
val entries: List<SettingsEntry>,
+ // The inject entry, which to-page is current page.
+ val injectEntry: SettingsEntry,
)
/**
@@ -42,9 +45,11 @@ class SettingsEntryRepository(sppRepository: SettingsPageProviderRepository) {
entryMap = mutableMapOf()
pageWithEntryMap = mutableMapOf()
+ val nullPage = SettingsPage.createNull()
val entryQueue = LinkedList<SettingsEntry>()
for (page in sppRepository.getAllRootPages()) {
- val rootEntry = SettingsEntryBuilder.createRoot(owner = page).build()
+ val rootEntry =
+ SettingsEntryBuilder.createRoot(owner = page).setLink(fromPage = nullPage).build()
if (!entryMap.containsKey(rootEntry.id)) {
entryQueue.push(rootEntry)
entryMap.put(rootEntry.id, rootEntry)
@@ -57,7 +62,11 @@ class SettingsEntryRepository(sppRepository: SettingsPageProviderRepository) {
if (page == null || pageWithEntryMap.containsKey(page.id)) continue
val spp = sppRepository.getProviderOrNull(page.sppName) ?: continue
val newEntries = spp.buildEntry(page.arguments)
- pageWithEntryMap[page.id] = SettingsPageWithEntry(page, newEntries)
+ pageWithEntryMap[page.id] = SettingsPageWithEntry(
+ page = page,
+ entries = newEntries,
+ injectEntry = entry
+ )
for (newEntry in newEntries) {
if (!entryMap.containsKey(newEntry.id)) {
entryQueue.push(newEntry)
@@ -88,7 +97,29 @@ class SettingsEntryRepository(sppRepository: SettingsPageProviderRepository) {
return entryMap[entryId]
}
- fun getEntryPath(entryId: String): String {
- return "TODO(path_of_$entryId)"
+ private fun getEntryPath(entryId: String): List<SettingsEntry> {
+ val entryPath = ArrayList<SettingsEntry>()
+ var currentEntry = entryMap[entryId]
+ while (currentEntry != null && entryPath.size < MAX_ENTRY_DEPTH) {
+ entryPath.add(currentEntry)
+ val currentPage = currentEntry.containerPage()
+ currentEntry = pageWithEntryMap[currentPage.id]?.injectEntry
+ }
+ return entryPath
+ }
+
+ fun getEntryPathWithDisplayName(entryId: String): List<String> {
+ val entryPath = getEntryPath(entryId)
+ return entryPath.map { it.displayName }
+ }
+
+ fun getEntryPathWithTitle(entryId: String, defaultTitle: String): List<String> {
+ val entryPath = getEntryPath(entryId)
+ return entryPath.map {
+ if (it.toPage == null)
+ defaultTitle
+ else
+ it.toPage.getTitle()!!
+ }
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt
index 07df96e778c4..56522f9bd7da 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt
@@ -27,6 +27,8 @@ import com.android.settingslib.spa.framework.util.isRuntimeParam
import com.android.settingslib.spa.framework.util.navLink
import com.android.settingslib.spa.framework.util.normalize
+private const val NULL_PAGE_NAME = "NULL"
+
/**
* Defines data to identify a Settings page.
*/
@@ -47,6 +49,10 @@ data class SettingsPage(
val arguments: Bundle? = null,
) {
companion object {
+ fun createNull(): SettingsPage {
+ return create(NULL_PAGE_NAME)
+ }
+
fun create(
name: String,
displayName: String? = null,
@@ -99,6 +105,11 @@ data class SettingsPage(
return false
}
+ fun getTitle(): String? {
+ val sppRepository by SpaEnvironmentFactory.instance.pageProviderRepository
+ return sppRepository.getProviderOrNull(sppName)?.getTitle(arguments)
+ }
+
fun enterPage() {
SpaEnvironmentFactory.instance.logger.event(
id,
@@ -149,6 +160,7 @@ data class SettingsPage(
fun isBrowsable(context: Context?, browseActivityClass: Class<out Activity>?): Boolean {
return context != null &&
browseActivityClass != null &&
+ !isCreateBy(NULL_PAGE_NAME) &&
!hasRuntimeParam()
}
}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPageProvider.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPageProvider.kt
index e8a44119ba84..f8963b2a8837 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPageProvider.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPageProvider.kt
@@ -41,6 +41,8 @@ interface SettingsPageProvider {
fun Page(arguments: Bundle?)
fun buildEntry(arguments: Bundle?): List<SettingsEntry> = emptyList()
+
+ fun getTitle(arguments: Bundle?): String = displayName ?: name
}
fun SettingsPageProvider.createSettingsPage(arguments: Bundle? = null): SettingsPage {
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugActivity.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugActivity.kt
index 301508074f30..bde2b0a747fe 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugActivity.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugActivity.kt
@@ -167,7 +167,7 @@ class DebugActivity : ComponentActivity() {
val entryRepository by spaEnvironment.entryRepository
val id = arguments!!.getString(PARAM_NAME_ENTRY_ID, "")
val entry = entryRepository.getEntry(id)!!
- val entryContent = remember { entry.formatContent() }
+ val entryContent = remember { entry.debugContent(entryRepository) }
RegularScaffold(title = "Entry - ${entry.displayTitle()}") {
Preference(model = object : PreferenceModel {
override val title = "open entry"
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugFormat.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugFormat.kt
new file mode 100644
index 000000000000..f3d89f4ac9e3
--- /dev/null
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugFormat.kt
@@ -0,0 +1,50 @@
+/*
+ * 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.debug
+
+import com.android.settingslib.spa.framework.common.EntryStatusData
+import com.android.settingslib.spa.framework.common.SettingsEntry
+import com.android.settingslib.spa.framework.common.SettingsEntryRepository
+
+fun EntryStatusData.debugContent(): String {
+ val content = listOf(
+ "is_disabled = $isDisabled",
+ "is_switch_off = $isSwitchOff",
+ )
+ return content.joinToString("\n")
+}
+
+fun SettingsEntry.debugContent(entryRepository: SettingsEntryRepository): String {
+ val searchData = getSearchData()
+ val statusData = getStatusData()
+ val entryPathWithName = entryRepository.getEntryPathWithDisplayName(id)
+ val entryPathWithTitle = entryRepository.getEntryPathWithTitle(id,
+ searchData?.title ?: displayName)
+ val content = listOf(
+ "------ STATIC ------",
+ "id = $id",
+ "owner = ${owner.formatDisplayTitle()}",
+ "linkFrom = ${fromPage?.formatDisplayTitle()}",
+ "linkTo = ${toPage?.formatDisplayTitle()}",
+ "hierarchy_path = $entryPathWithName",
+ "------ SEARCH ------",
+ "search_path = $entryPathWithTitle",
+ "${searchData?.format()}",
+ "${statusData?.debugContent()}"
+ )
+ return content.joinToString("\n")
+}
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugProvider.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugProvider.kt
index e4cb3edb9ab2..399278ded648 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugProvider.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/debug/DebugProvider.kt
@@ -151,9 +151,9 @@ class DebugProvider : ContentProvider() {
.add(ColumnEnum.PAGE_ID.id, page.id)
.add(ColumnEnum.PAGE_NAME.id, page.displayName)
.add(ColumnEnum.PAGE_ROUTE.id, page.buildRoute())
+ .add(ColumnEnum.PAGE_INTENT_URI.id, intent.toUri(URI_INTENT_SCHEME))
.add(ColumnEnum.PAGE_ENTRY_COUNT.id, pageWithEntry.entries.size)
.add(ColumnEnum.HAS_RUNTIME_PARAM.id, if (page.hasRuntimeParam()) 1 else 0)
- .add(ColumnEnum.PAGE_INTENT_URI.id, intent.toUri(URI_INTENT_SCHEME))
}
return cursor
}
@@ -170,7 +170,8 @@ class DebugProvider : ContentProvider() {
.add(ColumnEnum.ENTRY_NAME.id, entry.displayName)
.add(ColumnEnum.ENTRY_ROUTE.id, entry.containerPage().buildRoute())
.add(ColumnEnum.ENTRY_INTENT_URI.id, intent.toUri(URI_INTENT_SCHEME))
- .add(ColumnEnum.ENTRY_HIERARCHY_PATH.id, entryRepository.getEntryPath(entry.id))
+ .add(ColumnEnum.ENTRY_HIERARCHY_PATH.id,
+ entryRepository.getEntryPathWithDisplayName(entry.id))
}
return cursor
}