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

Commit 6e6cfaf9 authored by Zekan Qian's avatar Zekan Qian Committed by Android (Google) Code Review
Browse files

Merge changes If6be5c08,I405def96

* changes:
  Move all debug message to debug/ folder.
  Add entryPath support.
parents 0458fa92 5a0d15fd
Loading
Loading
Loading
Loading
+4 −3
Original line number Diff line number Diff line
@@ -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(),
+2 −1
Original line number Diff line number Diff line
@@ -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) {
+1 −9
Original line number Diff line number Diff line
@@ -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")
    }
}
+0 −15
Original line number Diff line number Diff line
@@ -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.
+35 −4
Original line number Diff line number Diff line
@@ -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()!!
        }
    }
}
Loading