Merge changes from topic "am-e78dd5f36dfc4491b11bd1600b0dca17" into main
* changes:
[automerger skipped] Merge "Bugfix: Allow shortcut and widget services to update shortcuts and widgets across all launchers during archival." into 24D1-dev am: e7a400e9f2 -s ours
[automerger skipped] Bugfix: Allow shortcut and widget services to update shortcuts and widgets across all launchers during archival. am: 991a6dff14 -s ours
diff --git a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt
index 078da1c86..ec48f24 100644
--- a/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt
+++ b/packages/SystemUI/compose/features/src/com/android/systemui/communal/ui/compose/CommunalHub.kt
@@ -66,6 +66,7 @@
import androidx.compose.material3.OutlinedButton
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.State
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.derivedStateOf
@@ -74,6 +75,7 @@
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
+import androidx.compose.runtime.snapshotFlow
import androidx.compose.ui.Alignment
import androidx.compose.ui.ExperimentalComposeUiApi
import androidx.compose.ui.Modifier
@@ -150,6 +152,8 @@
val contentPadding = gridContentPadding(viewModel.isEditMode, toolbarSize)
val contentOffset = beforeContentPadding(contentPadding).toOffset()
+ ScrollOnNewSmartspaceEffect(viewModel, gridState)
+
Box(
modifier =
modifier
@@ -266,6 +270,34 @@
}
}
+@Composable
+private fun ScrollOnNewSmartspaceEffect(
+ viewModel: BaseCommunalViewModel,
+ gridState: LazyGridState
+) {
+ val communalContent by viewModel.communalContent.collectAsState(initial = emptyList())
+ var smartspaceCount by remember { mutableStateOf(0) }
+
+ LaunchedEffect(communalContent) {
+ snapshotFlow { gridState.firstVisibleItemIndex }
+ .collect { index ->
+ val existingSmartspaceCount = smartspaceCount
+ smartspaceCount = communalContent.count { it.isSmartspace() }
+ val firstIndex = communalContent.indexOfFirst { it.isSmartspace() }
+
+ // Scroll to the beginning of the smartspace area whenever the number of
+ // smartspace elements grows
+ if (
+ existingSmartspaceCount < smartspaceCount &&
+ !viewModel.isEditMode &&
+ index > firstIndex
+ ) {
+ gridState.animateScrollToItem(firstIndex)
+ }
+ }
+ }
+}
+
@OptIn(ExperimentalFoundationApi::class)
@Composable
private fun BoxScope.CommunalHubLazyGrid(
diff --git a/packages/SystemUI/src/com/android/systemui/communal/domain/model/CommunalContentModel.kt b/packages/SystemUI/src/com/android/systemui/communal/domain/model/CommunalContentModel.kt
index c64f666..12576d4 100644
--- a/packages/SystemUI/src/com/android/systemui/communal/domain/model/CommunalContentModel.kt
+++ b/packages/SystemUI/src/com/android/systemui/communal/domain/model/CommunalContentModel.kt
@@ -152,4 +152,6 @@
}
fun isWidgetContent() = this is WidgetContent
+
+ fun isSmartspace() = this is Smartspace
}