Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt +4 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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. Loading Loading @@ -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(), Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/EntrySearchData.kt +1 −9 Original line number Diff line number Diff line Loading @@ -22,12 +22,4 @@ package com.android.settingslib.spa.framework.common data class EntrySearchData( val title: String = "", val keyword: List<String> = emptyList(), ) { fun format(): String { val content = listOf( "search_title = $title", "search_keyword = $keyword", ) return content.joinToString("\n") } } packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt +0 −15 Original line number Diff line number Diff line Loading @@ -99,21 +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" } fun containerPage(): SettingsPage { // The Container page of the entry, which is the from-page or // the owner-page if from-page is unset. Loading packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt +35 −4 Original line number Diff line number Diff line Loading @@ -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, ) /** Loading @@ -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) Loading @@ -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) Loading Loading @@ -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()!! } } } Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt +4 −3 Original line number Diff line number Diff line Loading @@ -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 Loading @@ -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. Loading Loading @@ -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(), Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/EntryProvider.kt +2 −1 Original line number Diff line number Diff line Loading @@ -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) { Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/EntrySearchData.kt +1 −9 Original line number Diff line number Diff line Loading @@ -22,12 +22,4 @@ package com.android.settingslib.spa.framework.common data class EntrySearchData( val title: String = "", val keyword: List<String> = emptyList(), ) { fun format(): String { val content = listOf( "search_title = $title", "search_keyword = $keyword", ) return content.joinToString("\n") } }
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt +0 −15 Original line number Diff line number Diff line Loading @@ -99,21 +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" } fun containerPage(): SettingsPage { // The Container page of the entry, which is the from-page or // the owner-page if from-page is unset. Loading
packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntryRepository.kt +35 −4 Original line number Diff line number Diff line Loading @@ -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, ) /** Loading @@ -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) Loading @@ -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) Loading Loading @@ -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()!! } } }