summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Zekan Qian <pierreqian@google.com> 2023-01-31 10:17:20 +0800
committer Zekan Qian <pierreqian@google.com> 2023-01-31 11:58:27 +0800
commita2df5eddefe4790c0bd9f6c166f4cec82f7304d0 (patch)
tree3ba1cabc77ead9bfef8610b6d2283d07e5666fc7
parentf00201114c57fb11fd9f2d3948e5521e09d59993 (diff)
Add UiLayout function in SettingsPage
Bug: 244122804 Test: unit-test & local build gallery Change-Id: I084cb05b79726eb3bac09f40f4a4469beeb097fb
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/BrowseActivity.kt9
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt1
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsPage.kt19
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SpaEnvironment.kt6
-rw-r--r--packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt15
5 files changed, 33 insertions, 17 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 4d8b89bf12aa..a8432d60065a 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
@@ -32,6 +32,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.remember
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.unit.IntOffset
import androidx.core.view.WindowCompat
@@ -42,6 +43,7 @@ import com.android.settingslib.spa.framework.common.SettingsPage
import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SettingsPageProviderRepository
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
+import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.compose.AnimatedNavHost
import com.android.settingslib.spa.framework.compose.LocalNavController
import com.android.settingslib.spa.framework.compose.NavControllerWrapperImpl
@@ -136,7 +138,12 @@ private fun NavControllerWrapperImpl.NavContent(allProvider: Collection<Settings
AnimatedContentScope.SlideDirection.Right, animationSpec = slideEffect
) + fadeOut(animationSpec = fadeEffect)
},
- ) { navBackStackEntry -> spp.PageWithEvent(navBackStackEntry.arguments) }
+ ) { navBackStackEntry ->
+ val page = remember(navBackStackEntry.arguments) {
+ spp.createSettingsPage(navBackStackEntry.arguments)
+ }
+ page.PageWithEvent()
+ }
}
}
}
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 2175e55cd49e..44714ab19ee2 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
@@ -198,6 +198,7 @@ class SettingsEntryBuilder(private val name: String, private val owner: Settings
toPage = toPage,
// attributes
+ // TODO: set isEnabled & (isAllowSearch, hasSliceSupport) separately
isAllowSearch = isEnabled && isAllowSearch,
isSearchDataDynamic = isSearchDataDynamic,
hasMutableStatus = hasMutableStatus,
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 a362877fe88c..8bbeb628b3de 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
@@ -17,6 +17,7 @@
package com.android.settingslib.spa.framework.common
import android.os.Bundle
+import androidx.compose.runtime.Composable
import androidx.navigation.NamedNavArgument
import com.android.settingslib.spa.framework.util.isRuntimeParam
import com.android.settingslib.spa.framework.util.navLink
@@ -91,14 +92,22 @@ data class SettingsPage(
}
fun isBrowsable(): Boolean {
- return !isCreateBy(NULL_PAGE_NAME) &&
- !hasRuntimeParam()
+ return !isCreateBy(NULL_PAGE_NAME) && !hasRuntimeParam()
}
- fun isEnabled(): Boolean {
- if (!SpaEnvironmentFactory.isReady()) return false
+ private fun getProvider(): SettingsPageProvider? {
+ if (!SpaEnvironmentFactory.isReady()) return null
val pageProviderRepository by SpaEnvironmentFactory.instance.pageProviderRepository
- return pageProviderRepository.getProviderOrNull(sppName)?.isEnabled(arguments) ?: false
+ return pageProviderRepository.getProviderOrNull(sppName)
+ }
+
+ fun isEnabled(): Boolean {
+ return getProvider()?.isEnabled(arguments) ?: false
+ }
+
+ @Composable
+ fun UiLayout() {
+ getProvider()?.Page(arguments)
}
}
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
index f672ee01d070..02962a5815a2 100644
--- 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
@@ -71,11 +71,15 @@ abstract class SpaEnvironment(context: Context) {
val sliceDataRepository = lazy { SettingsSliceDataRepository(entryRepository.value) }
- // In Robolectric test, applicationContext is not available. Use context as fallback.
+ // The application context. Use local context as fallback when applicationContext is not
+ // available (e.g. in Robolectric test).
val appContext: Context = context.applicationContext ?: context
+ // Set your SpaLogger implementation, for any SPA events logging.
open val logger: SpaLogger = object : SpaLogger {}
+ // Specify class name of browse activity and slice broadcast receiver, which is used to
+ // generate the necessary intents.
open val browseActivityClass: Class<out Activity>? = null
open val sliceBroadcastReceiverClass: Class<out BroadcastReceiver>? = null
diff --git a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt
index 22a4563748d5..dde4e0464597 100644
--- a/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt
+++ b/packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/util/PageLogger.kt
@@ -16,32 +16,27 @@
package com.android.settingslib.spa.framework.util
-import android.os.Bundle
import androidx.compose.runtime.Composable
-import androidx.compose.runtime.remember
import androidx.core.os.bundleOf
import com.android.settingslib.spa.framework.common.LOG_DATA_DISPLAY_NAME
import com.android.settingslib.spa.framework.common.LOG_DATA_SESSION_NAME
import com.android.settingslib.spa.framework.common.LogCategory
import com.android.settingslib.spa.framework.common.LogEvent
import com.android.settingslib.spa.framework.common.SettingsPage
-import com.android.settingslib.spa.framework.common.SettingsPageProvider
import com.android.settingslib.spa.framework.common.SpaEnvironmentFactory
-import com.android.settingslib.spa.framework.common.createSettingsPage
import com.android.settingslib.spa.framework.compose.LifecycleEffect
import com.android.settingslib.spa.framework.compose.LocalNavController
import com.android.settingslib.spa.framework.compose.NavControllerWrapper
@Composable
-internal fun SettingsPageProvider.PageWithEvent(arguments: Bundle? = null) {
- if (!isEnabled(arguments)) return
- val page = remember(arguments) { createSettingsPage(arguments) }
+internal fun SettingsPage.PageWithEvent() {
+ if (!isEnabled()) return
val navController = LocalNavController.current
LifecycleEffect(
- onStart = { page.logPageEvent(LogEvent.PAGE_ENTER, navController) },
- onStop = { page.logPageEvent(LogEvent.PAGE_LEAVE, navController) },
+ onStart = { logPageEvent(LogEvent.PAGE_ENTER, navController) },
+ onStop = { logPageEvent(LogEvent.PAGE_LEAVE, navController) },
)
- Page(arguments)
+ UiLayout()
}
private fun SettingsPage.logPageEvent(event: LogEvent, navController: NavControllerWrapper) {