diff options
4 files changed, 36 insertions, 47 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java index 3c68438ff61b..0ec7a36b5a6d 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java +++ b/packages/SystemUI/src/com/android/systemui/shade/QuickSettingsController.java @@ -65,7 +65,6 @@ import com.android.keyguard.FaceAuthApiRequestReason; import com.android.keyguard.KeyguardUpdateMonitor; import com.android.systemui.DejankUtils; import com.android.systemui.Dumpable; -import com.android.systemui.res.R; import com.android.systemui.classifier.Classifier; import com.android.systemui.dagger.SysUISingleton; import com.android.systemui.dump.DumpManager; @@ -77,6 +76,7 @@ import com.android.systemui.media.controls.pipeline.MediaDataManager; import com.android.systemui.media.controls.ui.MediaHierarchyManager; import com.android.systemui.plugins.FalsingManager; import com.android.systemui.plugins.qs.QS; +import com.android.systemui.res.R; import com.android.systemui.screenrecord.RecordingController; import com.android.systemui.shade.data.repository.ShadeRepository; import com.android.systemui.shade.domain.interactor.ShadeInteractor; @@ -1026,7 +1026,6 @@ public class QuickSettingsController implements Dumpable { && mPanelViewControllerLazy.get().mAnimateBack) { mPanelViewControllerLazy.get().adjustBackAnimationScale(adjustedExpansionFraction); } - mShadeExpansionStateManager.onQsExpansionFractionChanged(qsExpansionFraction); mMediaHierarchyManager.setQsExpansion(qsExpansionFraction); int qsPanelBottomY = calculateBottomPosition(qsExpansionFraction); mScrimController.setQsPosition(qsExpansionFraction, qsPanelBottomY); diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt index 533927d5bf0a..949398969d67 100644 --- a/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt +++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeExpansionStateManager.kt @@ -37,8 +37,6 @@ class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents { private val expansionListeners = CopyOnWriteArrayList<ShadeExpansionListener>() private val qsExpansionListeners = CopyOnWriteArrayList<ShadeQsExpansionListener>() - private val qsExpansionFractionListeners = - CopyOnWriteArrayList<ShadeQsExpansionFractionListener>() private val stateListeners = CopyOnWriteArrayList<ShadeStateListener>() private val shadeStateEventsListeners = CopyOnWriteArrayList<ShadeStateEventsListener>() @@ -75,15 +73,6 @@ class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents { qsExpansionListeners.remove(listener) } - fun addQsExpansionFractionListener(listener: ShadeQsExpansionFractionListener) { - qsExpansionFractionListeners.add(listener) - listener.onQsExpansionFractionChanged(qsExpansionFraction) - } - - fun removeQsExpansionFractionListener(listener: ShadeQsExpansionFractionListener) { - qsExpansionFractionListeners.remove(listener) - } - /** Adds a listener that will be notified when the panel state has changed. */ fun addStateListener(listener: ShadeStateListener) { stateListeners.add(listener) @@ -172,15 +161,6 @@ class ShadeExpansionStateManager @Inject constructor() : ShadeStateEvents { qsExpansionListeners.forEach { it.onQsExpansionChanged(qsExpanded) } } - fun onQsExpansionFractionChanged(qsExpansionFraction: Float) { - this.qsExpansionFraction = qsExpansionFraction - - debugLog("qsExpansionFraction=$qsExpansionFraction") - qsExpansionFractionListeners.forEach { - it.onQsExpansionFractionChanged(qsExpansionFraction) - } - } - /** Updates the panel state if necessary. */ fun updateState(@PanelState state: Int) { debugLog( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateViewController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateViewController.kt index eaae0f0c4f75..fa6ea4cdc2e1 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateViewController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/VariableDateViewController.kt @@ -30,10 +30,13 @@ import android.text.TextUtils import android.util.Log import android.view.View.MeasureSpec import androidx.annotation.VisibleForTesting +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.repeatOnLifecycle import com.android.systemui.Dependency import com.android.systemui.broadcast.BroadcastDispatcher -import com.android.systemui.shade.ShadeExpansionStateManager +import com.android.systemui.lifecycle.repeatWhenAttached import com.android.systemui.shade.ShadeLogger +import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.util.ViewController import com.android.systemui.util.time.SystemClock import java.text.FieldPosition @@ -83,7 +86,7 @@ private const val TAG = "VariableDateViewController" class VariableDateViewController( private val systemClock: SystemClock, private val broadcastDispatcher: BroadcastDispatcher, - private val shadeExpansionStateManager: ShadeExpansionStateManager, + private val shadeInteractor: ShadeInteractor, private val shadeLogger: ShadeLogger, private val timeTickHandler: Handler, view: VariableDateView @@ -174,8 +177,11 @@ class VariableDateViewController( broadcastDispatcher.registerReceiver(intentReceiver, filter, HandlerExecutor(timeTickHandler), UserHandle.SYSTEM) - - shadeExpansionStateManager.addQsExpansionFractionListener(::onQsExpansionFractionChanged) + mView.repeatWhenAttached { + repeatOnLifecycle(Lifecycle.State.STARTED) { + shadeInteractor.qsExpansion.collect(::onQsExpansionFractionChanged) + } + } post(::updateClock) mView.onAttach(onMeasureListener) } @@ -183,7 +189,6 @@ class VariableDateViewController( override fun onViewDetached() { dateFormat = null mView.onAttach(null) - shadeExpansionStateManager.removeQsExpansionFractionListener(::onQsExpansionFractionChanged) broadcastDispatcher.unregisterReceiver(intentReceiver) } @@ -237,18 +242,18 @@ class VariableDateViewController( class Factory @Inject constructor( private val systemClock: SystemClock, private val broadcastDispatcher: BroadcastDispatcher, - private val shadeExpansionStateManager: ShadeExpansionStateManager, + private val shadeInteractor: ShadeInteractor, private val shadeLogger: ShadeLogger, @Named(Dependency.TIME_TICK_HANDLER_NAME) private val handler: Handler ) { fun create(view: VariableDateView): VariableDateViewController { return VariableDateViewController( - systemClock, - broadcastDispatcher, - shadeExpansionStateManager, - shadeLogger, - handler, - view + systemClock, + broadcastDispatcher, + shadeInteractor, + shadeLogger, + handler, + view ) } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt index b78e83990411..63de0685ea96 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/VariableDateViewControllerTest.kt @@ -23,26 +23,27 @@ import android.view.View import androidx.test.filters.SmallTest import com.android.systemui.SysuiTestCase import com.android.systemui.broadcast.BroadcastDispatcher -import com.android.systemui.shade.ShadeExpansionStateManager +import com.android.systemui.shade.domain.interactor.ShadeInteractor import com.android.systemui.util.mockito.any import com.android.systemui.util.mockito.capture import com.android.systemui.util.mockito.mock import com.android.systemui.util.time.FakeSystemClock import com.google.common.truth.Truth.assertThat +import kotlinx.coroutines.flow.MutableStateFlow import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.ArgumentCaptor import org.mockito.Captor import org.mockito.Mock -import org.mockito.Mockito.`when` import org.mockito.Mockito.anyString import org.mockito.Mockito.verify +import org.mockito.Mockito.`when` import org.mockito.MockitoAnnotations import java.util.Date @RunWith(AndroidTestingRunner::class) -@TestableLooper.RunWithLooper +@TestableLooper.RunWithLooper(setAsMainLooper = true) @SmallTest class VariableDateViewControllerTest : SysuiTestCase() { @@ -57,12 +58,15 @@ class VariableDateViewControllerTest : SysuiTestCase() { private lateinit var broadcastDispatcher: BroadcastDispatcher @Mock private lateinit var view: VariableDateView + @Mock + private lateinit var shadeInteractor: ShadeInteractor @Captor private lateinit var onMeasureListenerCaptor: ArgumentCaptor<VariableDateView.OnMeasureListener> + private val qsExpansion = MutableStateFlow(0F) + private var lastText: String? = null - private lateinit var shadeExpansionStateManager: ShadeExpansionStateManager private lateinit var systemClock: FakeSystemClock private lateinit var testableLooper: TestableLooper private lateinit var testableHandler: Handler @@ -80,7 +84,7 @@ class VariableDateViewControllerTest : SysuiTestCase() { systemClock = FakeSystemClock() systemClock.setCurrentTimeMillis(TIME_STAMP) - shadeExpansionStateManager = ShadeExpansionStateManager() + `when`(shadeInteractor.qsExpansion).thenReturn(qsExpansion) `when`(view.longerPattern).thenReturn(LONG_PATTERN) `when`(view.shorterPattern).thenReturn(SHORT_PATTERN) @@ -91,6 +95,7 @@ class VariableDateViewControllerTest : SysuiTestCase() { Unit } `when`(view.isAttachedToWindow).thenReturn(true) + `when`(view.viewTreeObserver).thenReturn(mock()) val date = Date(TIME_STAMP) longText = getTextForFormat(date, getFormatFromPattern(LONG_PATTERN)) @@ -103,12 +108,12 @@ class VariableDateViewControllerTest : SysuiTestCase() { } controller = VariableDateViewController( - systemClock, - broadcastDispatcher, - shadeExpansionStateManager, - mock(), - testableHandler, - view + systemClock, + broadcastDispatcher, + shadeInteractor, + mock(), + testableHandler, + view ) controller.init() @@ -180,7 +185,7 @@ class VariableDateViewControllerTest : SysuiTestCase() { @Test fun testQsExpansionTrue_ignoreAtMostMeasureRequests() { - shadeExpansionStateManager.onQsExpansionFractionChanged(0f) + qsExpansion.value = 0f onMeasureListenerCaptor.value.onMeasureAction( getTextLength(shortText).toInt(), @@ -195,7 +200,7 @@ class VariableDateViewControllerTest : SysuiTestCase() { @Test fun testQsExpansionFalse_acceptAtMostMeasureRequests() { - shadeExpansionStateManager.onQsExpansionFractionChanged(1f) + qsExpansion.value = 1f onMeasureListenerCaptor.value.onMeasureAction( getTextLength(shortText).toInt(), |