diff options
| author | 2022-10-14 11:17:15 +0800 | |
|---|---|---|
| committer | 2022-10-14 14:58:17 +0800 | |
| commit | 4124f2f58f85a9d961ce8ed97485c739c3bf01f5 (patch) | |
| tree | 1f3e5ca72a783437edfe7b3ed2043a17ebc001ca | |
| parent | a44cf8829d449f27d80b136a2e8bbdbaab3d953d (diff) | |
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
| -rw-r--r-- | packages/SettingsLib/Spa/spa/src/com/android/settingslib/spa/framework/common/SettingsEntry.kt | 30 |
1 files changed, 29 insertions, 1 deletions
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 7f2af9221c45..ca75b77dabc2 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<EntryData> { 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<EntryData> { + 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 + } + } } } |