Merge "Reuse StateChange logic in SysUIState" into main
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/model/SysUIStateDispatcherTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/model/SysUIStateDispatcherTest.kt
index b82f5fc..ff2e13b 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/model/SysUIStateDispatcherTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/model/SysUIStateDispatcherTest.kt
@@ -81,7 +81,7 @@
private companion object {
const val DISPLAY_1 = 1
const val DISPLAY_2 = 2
- const val FLAG_1 = 10L
- const val FLAG_2 = 20L
+ const val FLAG_1 = 1L
+ const val FLAG_2 = 2L
}
}
diff --git a/packages/SystemUI/multivalentTests/src/com/android/systemui/model/SysUiStateExtTest.kt b/packages/SystemUI/multivalentTests/src/com/android/systemui/model/SysUiStateExtTest.kt
index 09588f9..d1b5529 100644
--- a/packages/SystemUI/multivalentTests/src/com/android/systemui/model/SysUiStateExtTest.kt
+++ b/packages/SystemUI/multivalentTests/src/com/android/systemui/model/SysUiStateExtTest.kt
@@ -35,10 +35,10 @@
@Test
fun updateFlags() {
- underTest.updateFlags(Display.DEFAULT_DISPLAY, 1L to true, 2L to false, 3L to true)
+ underTest.updateFlags(Display.DEFAULT_DISPLAY, 1L to true, 2L to false, 4L to true)
assertThat(underTest.flags and 1L).isNotEqualTo(0L)
assertThat(underTest.flags and 2L).isEqualTo(0L)
- assertThat(underTest.flags and 3L).isNotEqualTo(0L)
+ assertThat(underTest.flags and 4L).isNotEqualTo(0L)
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/model/SysUIStateChange.kt b/packages/SystemUI/src/com/android/systemui/model/SysUIStateChange.kt
index aaed606..cec846e 100644
--- a/packages/SystemUI/src/com/android/systemui/model/SysUIStateChange.kt
+++ b/packages/SystemUI/src/com/android/systemui/model/SysUIStateChange.kt
@@ -43,8 +43,6 @@
return this
}
- fun hasChanges() = flagsToSet != 0L || flagsToClear != 0L
-
/**
* Applies all changed flags to [sysUiState].
*
@@ -83,6 +81,7 @@
iterateBits(flagsToSet or flagsToClear) { bit -> sysUiState.setFlag(bit, false) }
}
+ /** Resets all the pending changes. */
fun clear() {
flagsToSet = 0
flagsToClear = 0
diff --git a/packages/SystemUI/src/com/android/systemui/model/SysUiState.kt b/packages/SystemUI/src/com/android/systemui/model/SysUiState.kt
index e99ee7d..71cb745 100644
--- a/packages/SystemUI/src/com/android/systemui/model/SysUiState.kt
+++ b/packages/SystemUI/src/com/android/systemui/model/SysUiState.kt
@@ -22,6 +22,7 @@
import com.android.systemui.display.data.repository.PerDisplayInstanceProviderWithTeardown
import com.android.systemui.dump.DumpManager
import com.android.systemui.model.SysUiState.SysUiStateCallback
+import com.android.systemui.shade.shared.flag.ShadeWindowGoesAround
import com.android.systemui.shared.system.QuickStepContract
import com.android.systemui.shared.system.QuickStepContract.SystemUiStateFlags
import dagger.assisted.Assisted
@@ -29,6 +30,7 @@
import dagger.assisted.AssistedInject
import dalvik.annotation.optimization.NeverCompile
import java.io.PrintWriter
+import java.lang.Long.bitCount
import javax.inject.Inject
/** Contains sysUi state flags and notifies registered listeners whenever changes happen. */
@@ -111,8 +113,7 @@
get() = _flags
private var _flags: Long = 0
- private var flagsToSet: Long = 0
- private var flagsToClear: Long = 0
+ private val stateChange = StateChange()
/**
* Add listener to be notified of changes made to SysUI state. The callback will also be called
@@ -132,13 +133,11 @@
/** Methods to this call can be chained together before calling [.commitUpdate]. */
override fun setFlag(@SystemUiStateFlags flag: Long, enabled: Boolean): SysUiState {
- val toSet = flagWithOptionalOverrides(flag, enabled, displayId, sceneContainerPlugin)
-
- if (toSet) {
- flagsToSet = flagsToSet or flag
- } else {
- flagsToClear = flagsToClear or flag
+ if (ShadeWindowGoesAround.isEnabled && bitCount(flag) > 1) {
+ error("Flags should be a single bit.")
}
+ val toSet = flagWithOptionalOverrides(flag, enabled, displayId, sceneContainerPlugin)
+ stateChange.setFlag(flag, toSet)
return this
}
@@ -147,27 +146,19 @@
ReplaceWith("commitUpdate()"),
)
override fun commitUpdate(displayId: Int) {
- // TODO b/398011576 - handle updates for different displays.
commitUpdate()
}
override fun commitUpdate() {
- updateFlags()
- flagsToSet = 0
- flagsToClear = 0
- }
-
- private fun updateFlags() {
- var newState = flags
- newState = newState or flagsToSet
- newState = newState and flagsToClear.inv()
+ val newState = stateChange.applyTo(flags)
notifyAndSetSystemUiStateChanged(newState, flags)
+ stateChange.clear()
}
/** Notify all those who are registered that the state has changed. */
private fun notifyAndSetSystemUiStateChanged(newFlags: Long, oldFlags: Long) {
if (SysUiState.DEBUG) {
- Log.d(TAG, "SysUiState changed: old=$oldFlags new=$newFlags")
+ Log.d(TAG, "SysUiState changed for displayId=$displayId: old=$oldFlags new=$newFlags")
}
if (newFlags != oldFlags) {
_flags = newFlags
@@ -185,6 +176,8 @@
pw.println(QuickStepContract.isBackGestureDisabled(flags, false /* forTrackpad */))
pw.print(" assistantGestureDisabled=")
pw.println(QuickStepContract.isAssistantGestureDisabled(flags))
+ pw.print(" pendingStateChanges=")
+ pw.println(stateChange.toString())
}
override fun destroy() {