Loading packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl +10 −0 Original line number Diff line number Diff line Loading @@ -100,4 +100,14 @@ oneway interface IOverviewProxy { * Sent when the desired dark intensity of the nav buttons has changed */ void onNavButtonsDarkIntensityChanged(float darkIntensity) = 22; /** * Sent when screen started turning on. */ void onScreenTurningOn() = 23; /** * Sent when screen started turning off. */ void onScreenTurningOff() = 24; } packages/SystemUI/src/com/android/systemui/keyguard/LifecycleScreenStatusProvider.kt +8 −0 Original line number Diff line number Diff line Loading @@ -41,4 +41,12 @@ class LifecycleScreenStatusProvider @Inject constructor(screenLifecycle: ScreenL override fun onScreenTurnedOn() { listeners.forEach(ScreenListener::onScreenTurnedOn) } override fun onScreenTurningOff() { listeners.forEach(ScreenListener::onScreenTurningOff) } override fun onScreenTurningOn(ignored: Runnable) { listeners.forEach(ScreenListener::onScreenTurningOn) } } packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +48 −18 Original line number Diff line number Diff line Loading @@ -638,12 +638,7 @@ public class OverviewProxyService extends CurrentUserTracker implements // Listen for user setup startTracking(); screenLifecycle.addObserver(new ScreenLifecycle.Observer() { @Override public void onScreenTurnedOn() { notifyScreenTurnedOn(); } }); screenLifecycle.addObserver(mLifecycleObserver); // Connect to the service updateEnabledState(); Loading Loading @@ -951,10 +946,12 @@ public class OverviewProxyService extends CurrentUserTracker implements } } private final ScreenLifecycle.Observer mLifecycleObserver = new ScreenLifecycle.Observer() { /** * Notifies the Launcher that screen turned on and ready to use */ public void notifyScreenTurnedOn() { @Override public void onScreenTurnedOn() { try { if (mOverviewProxy != null) { mOverviewProxy.onScreenTurnedOn(); Loading @@ -962,10 +959,43 @@ public class OverviewProxyService extends CurrentUserTracker implements Log.e(TAG_OPS, "Failed to get overview proxy for screen turned on event."); } } catch (RemoteException e) { Log.e(TAG_OPS, "Failed to call notifyScreenTurnedOn()", e); Log.e(TAG_OPS, "Failed to call onScreenTurnedOn()", e); } } /** * Notifies the Launcher that screen is starting to turn on. */ @Override public void onScreenTurningOff() { try { if (mOverviewProxy != null) { mOverviewProxy.onScreenTurningOff(); } else { Log.e(TAG_OPS, "Failed to get overview proxy for screen turning off event."); } } catch (RemoteException e) { Log.e(TAG_OPS, "Failed to call onScreenTurningOff()", e); } } /** * Notifies the Launcher that screen is starting to turn on. */ @Override public void onScreenTurningOn(@NonNull Runnable ignored) { try { if (mOverviewProxy != null) { mOverviewProxy.onScreenTurningOn(); } else { Log.e(TAG_OPS, "Failed to get overview proxy for screen turning on event."); } } catch (RemoteException e) { Log.e(TAG_OPS, "Failed to call onScreenTurningOn()", e); } } }; void notifyToggleRecentApps() { for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) { mConnectionCallbacks.get(i).onToggleRecentApps(); Loading packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt +53 −4 Original line number Diff line number Diff line Loading @@ -30,13 +30,13 @@ import com.android.systemui.unfold.updates.screen.ScreenStatusProvider import com.android.systemui.unfold.updates.screen.ScreenStatusProvider.ScreenListener import com.android.systemui.util.mockito.any import com.google.common.truth.Truth.assertThat import java.util.concurrent.Executor import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.MockitoAnnotations import java.util.concurrent.Executor import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations @RunWith(AndroidTestingRunner::class) @SmallTest Loading Loading @@ -331,6 +331,47 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_CLOSING) } @Test fun screenOff_whileFolded_hingeAngleProviderRemainsOff() { setFoldState(folded = true) assertThat(testHingeAngleProvider.isStarted).isFalse() screenOnStatusProvider.notifyScreenTurningOff() assertThat(testHingeAngleProvider.isStarted).isFalse() } @Test fun screenOff_whileUnfolded_hingeAngleProviderStops() { setFoldState(folded = false) assertThat(testHingeAngleProvider.isStarted).isTrue() screenOnStatusProvider.notifyScreenTurningOff() assertThat(testHingeAngleProvider.isStarted).isFalse() } @Test fun screenOn_whileUnfoldedAndScreenOff_hingeAngleProviderStarted() { setFoldState(folded = false) screenOnStatusProvider.notifyScreenTurningOff() assertThat(testHingeAngleProvider.isStarted).isFalse() screenOnStatusProvider.notifyScreenTurningOn() assertThat(testHingeAngleProvider.isStarted).isTrue() } @Test fun screenOn_whileFolded_hingeAngleRemainsOff() { setFoldState(folded = true) assertThat(testHingeAngleProvider.isStarted).isFalse() screenOnStatusProvider.notifyScreenTurningOn() assertThat(testHingeAngleProvider.isStarted).isFalse() } private fun setupForegroundActivityType(isHomeActivity: Boolean?) { whenever(activityTypeProvider.isHomeActivity).thenReturn(isHomeActivity) } Loading Loading @@ -391,6 +432,14 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { fun notifyScreenTurnedOn() { callbacks.forEach { it.onScreenTurnedOn() } } fun notifyScreenTurningOn() { callbacks.forEach { it.onScreenTurningOn() } } fun notifyScreenTurningOff() { callbacks.forEach { it.onScreenTurningOff() } } } private class TestHingeAngleProvider : HingeAngleProvider { Loading @@ -398,11 +447,11 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { var isStarted: Boolean = false override fun start() { isStarted = true; isStarted = true } override fun stop() { isStarted = false; isStarted = false } override fun addCallback(listener: Consumer<Float>) { Loading packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt +20 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ constructor( private val halfOpenedTimeoutMillis: Int = config.halfFoldedTimeoutMillis private var isFolded = false private var isScreenOn = false private var isUnfoldHandled = true override fun start() { Loading Loading @@ -198,6 +199,25 @@ constructor( isUnfoldHandled = true } } override fun onScreenTurningOn() { isScreenOn = true updateHingeAngleProviderState() } override fun onScreenTurningOff() { isScreenOn = false updateHingeAngleProviderState() } } /** While the screen is off or the device is folded, hinge angle updates are not needed. */ private fun updateHingeAngleProviderState() { if (isScreenOn && !isFolded) { hingeAngleProvider.start() } else { hingeAngleProvider.stop() } } private inner class HingeAngleListener : Consumer<Float> { Loading Loading
packages/SystemUI/shared/src/com/android/systemui/shared/recents/IOverviewProxy.aidl +10 −0 Original line number Diff line number Diff line Loading @@ -100,4 +100,14 @@ oneway interface IOverviewProxy { * Sent when the desired dark intensity of the nav buttons has changed */ void onNavButtonsDarkIntensityChanged(float darkIntensity) = 22; /** * Sent when screen started turning on. */ void onScreenTurningOn() = 23; /** * Sent when screen started turning off. */ void onScreenTurningOff() = 24; }
packages/SystemUI/src/com/android/systemui/keyguard/LifecycleScreenStatusProvider.kt +8 −0 Original line number Diff line number Diff line Loading @@ -41,4 +41,12 @@ class LifecycleScreenStatusProvider @Inject constructor(screenLifecycle: ScreenL override fun onScreenTurnedOn() { listeners.forEach(ScreenListener::onScreenTurnedOn) } override fun onScreenTurningOff() { listeners.forEach(ScreenListener::onScreenTurningOff) } override fun onScreenTurningOn(ignored: Runnable) { listeners.forEach(ScreenListener::onScreenTurningOn) } }
packages/SystemUI/src/com/android/systemui/recents/OverviewProxyService.java +48 −18 Original line number Diff line number Diff line Loading @@ -638,12 +638,7 @@ public class OverviewProxyService extends CurrentUserTracker implements // Listen for user setup startTracking(); screenLifecycle.addObserver(new ScreenLifecycle.Observer() { @Override public void onScreenTurnedOn() { notifyScreenTurnedOn(); } }); screenLifecycle.addObserver(mLifecycleObserver); // Connect to the service updateEnabledState(); Loading Loading @@ -951,10 +946,12 @@ public class OverviewProxyService extends CurrentUserTracker implements } } private final ScreenLifecycle.Observer mLifecycleObserver = new ScreenLifecycle.Observer() { /** * Notifies the Launcher that screen turned on and ready to use */ public void notifyScreenTurnedOn() { @Override public void onScreenTurnedOn() { try { if (mOverviewProxy != null) { mOverviewProxy.onScreenTurnedOn(); Loading @@ -962,10 +959,43 @@ public class OverviewProxyService extends CurrentUserTracker implements Log.e(TAG_OPS, "Failed to get overview proxy for screen turned on event."); } } catch (RemoteException e) { Log.e(TAG_OPS, "Failed to call notifyScreenTurnedOn()", e); Log.e(TAG_OPS, "Failed to call onScreenTurnedOn()", e); } } /** * Notifies the Launcher that screen is starting to turn on. */ @Override public void onScreenTurningOff() { try { if (mOverviewProxy != null) { mOverviewProxy.onScreenTurningOff(); } else { Log.e(TAG_OPS, "Failed to get overview proxy for screen turning off event."); } } catch (RemoteException e) { Log.e(TAG_OPS, "Failed to call onScreenTurningOff()", e); } } /** * Notifies the Launcher that screen is starting to turn on. */ @Override public void onScreenTurningOn(@NonNull Runnable ignored) { try { if (mOverviewProxy != null) { mOverviewProxy.onScreenTurningOn(); } else { Log.e(TAG_OPS, "Failed to get overview proxy for screen turning on event."); } } catch (RemoteException e) { Log.e(TAG_OPS, "Failed to call onScreenTurningOn()", e); } } }; void notifyToggleRecentApps() { for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) { mConnectionCallbacks.get(i).onToggleRecentApps(); Loading
packages/SystemUI/tests/src/com/android/systemui/unfold/updates/DeviceFoldStateProviderTest.kt +53 −4 Original line number Diff line number Diff line Loading @@ -30,13 +30,13 @@ import com.android.systemui.unfold.updates.screen.ScreenStatusProvider import com.android.systemui.unfold.updates.screen.ScreenStatusProvider.ScreenListener import com.android.systemui.util.mockito.any import com.google.common.truth.Truth.assertThat import java.util.concurrent.Executor import org.junit.Before import org.junit.Test import org.junit.runner.RunWith import org.mockito.Mock import org.mockito.MockitoAnnotations import java.util.concurrent.Executor import org.mockito.Mockito.`when` as whenever import org.mockito.MockitoAnnotations @RunWith(AndroidTestingRunner::class) @SmallTest Loading Loading @@ -331,6 +331,47 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { assertThat(foldUpdates).containsExactly(FOLD_UPDATE_START_CLOSING) } @Test fun screenOff_whileFolded_hingeAngleProviderRemainsOff() { setFoldState(folded = true) assertThat(testHingeAngleProvider.isStarted).isFalse() screenOnStatusProvider.notifyScreenTurningOff() assertThat(testHingeAngleProvider.isStarted).isFalse() } @Test fun screenOff_whileUnfolded_hingeAngleProviderStops() { setFoldState(folded = false) assertThat(testHingeAngleProvider.isStarted).isTrue() screenOnStatusProvider.notifyScreenTurningOff() assertThat(testHingeAngleProvider.isStarted).isFalse() } @Test fun screenOn_whileUnfoldedAndScreenOff_hingeAngleProviderStarted() { setFoldState(folded = false) screenOnStatusProvider.notifyScreenTurningOff() assertThat(testHingeAngleProvider.isStarted).isFalse() screenOnStatusProvider.notifyScreenTurningOn() assertThat(testHingeAngleProvider.isStarted).isTrue() } @Test fun screenOn_whileFolded_hingeAngleRemainsOff() { setFoldState(folded = true) assertThat(testHingeAngleProvider.isStarted).isFalse() screenOnStatusProvider.notifyScreenTurningOn() assertThat(testHingeAngleProvider.isStarted).isFalse() } private fun setupForegroundActivityType(isHomeActivity: Boolean?) { whenever(activityTypeProvider.isHomeActivity).thenReturn(isHomeActivity) } Loading Loading @@ -391,6 +432,14 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { fun notifyScreenTurnedOn() { callbacks.forEach { it.onScreenTurnedOn() } } fun notifyScreenTurningOn() { callbacks.forEach { it.onScreenTurningOn() } } fun notifyScreenTurningOff() { callbacks.forEach { it.onScreenTurningOff() } } } private class TestHingeAngleProvider : HingeAngleProvider { Loading @@ -398,11 +447,11 @@ class DeviceFoldStateProviderTest : SysuiTestCase() { var isStarted: Boolean = false override fun start() { isStarted = true; isStarted = true } override fun stop() { isStarted = false; isStarted = false } override fun addCallback(listener: Consumer<Float>) { Loading
packages/SystemUI/unfold/src/com/android/systemui/unfold/updates/DeviceFoldStateProvider.kt +20 −0 Original line number Diff line number Diff line Loading @@ -65,6 +65,7 @@ constructor( private val halfOpenedTimeoutMillis: Int = config.halfFoldedTimeoutMillis private var isFolded = false private var isScreenOn = false private var isUnfoldHandled = true override fun start() { Loading Loading @@ -198,6 +199,25 @@ constructor( isUnfoldHandled = true } } override fun onScreenTurningOn() { isScreenOn = true updateHingeAngleProviderState() } override fun onScreenTurningOff() { isScreenOn = false updateHingeAngleProviderState() } } /** While the screen is off or the device is folded, hinge angle updates are not needed. */ private fun updateHingeAngleProviderState() { if (isScreenOn && !isFolded) { hingeAngleProvider.start() } else { hingeAngleProvider.stop() } } private inner class HingeAngleListener : Consumer<Float> { Loading