From 4124f2f58f85a9d961ce8ed97485c739c3bf01f5 Mon Sep 17 00:00:00 2001 From: Kelly Date: Fri, 14 Oct 2022 11:17:15 +0800 Subject: [PATCH] Introduce an EntryData interface to manage entry, page and highlight info. Based on CompositionLocal version of EntryData, we pass the info to UI implementations for pages. Test: Manually test on deivce Bug: 253536111 Change-Id: I81f4b8b3f3f799bc472ec19d196f56c8b1f756e0 --- .../spa/framework/common/SettingsEntry.kt | 30 ++++++++++++++++++- 1 file changed, 29 insertions(+), 1 deletion(-) 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 7f2af9221c45d..ca75b77dabc23 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 @@ -19,6 +19,9 @@ package com.android.settingslib.spa.framework.common import android.os.Bundle import android.widget.Toast import androidx.compose.runtime.Composable +import androidx.compose.runtime.CompositionLocalProvider +import androidx.compose.runtime.ProvidedValue +import androidx.compose.runtime.compositionLocalOf import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable @@ -28,6 +31,16 @@ import com.android.settingslib.spa.framework.compose.LocalNavController const val INJECT_ENTRY_NAME = "INJECT" const val ROOT_ENTRY_NAME = "ROOT" +interface EntryData { + val pageId: String + val entryId: String + val isHighlighted: Boolean + get() = false +} + +val LocalEntryDataProvider = + compositionLocalOf { error("LocalEntryDataProvider: No Default Value!") } + /** * Defines data of a Settings entry. */ @@ -121,7 +134,22 @@ data class SettingsEntry( // TODO: Add highlight entry logic Toast.makeText(context, "entry $id highlighted", Toast.LENGTH_SHORT).show() } - uiLayoutImpl(fullArgument(runtimeArguments)) + + CompositionLocalProvider(provideLocalEntryData()) { + uiLayoutImpl(fullArgument(runtimeArguments)) + } + } + + @Composable + fun provideLocalEntryData(): ProvidedValue { + val controller = LocalNavController.current + return LocalEntryDataProvider provides remember { + object : EntryData { + override val pageId = containerPage().id + override val entryId = id + override val isHighlighted = controller.highlightEntryId == id + } + } } }