diff options
4 files changed, 17 insertions, 25 deletions
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 b82f5fce9e14..ff2e13b51e14 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 @@ class SysUIStateDispatcherTest : SysuiTestCase() { 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 09588f9f3751..d1b552906fbb 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 @@ class SysUiStateExtTest : SysuiTestCase() { @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 aaed606f8fb2..cec846e84f01 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 @@ class StateChange { return this } - fun hasChanges() = flagsToSet != 0L || flagsToClear != 0L - /** * Applies all changed flags to [sysUiState]. * @@ -83,6 +81,7 @@ class StateChange { 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 e99ee7ddb919..71cb74543485 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.dagger.SysUISingleton 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.AssistedFactory 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 @@ constructor( 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 @@ constructor( /** 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 @@ constructor( 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 @@ constructor( 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() { |