Loading packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java +10 −2 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr private Consumer<Boolean> mMediaVisibilityChangedListener; @Orientation private int mLastOrientation; private int mLastScreenLayout; private String mCachedSpecs = ""; @Nullable private QSTileRevealController mQsTileRevealController; Loading @@ -93,15 +94,19 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr public void onConfigurationChange(Configuration newConfig) { final boolean previousSplitShadeState = mShouldUseSplitNotificationShade; final int previousOrientation = mLastOrientation; final int previousScreenLayout = mLastScreenLayout; mShouldUseSplitNotificationShade = mSplitShadeStateController .shouldUseSplitNotificationShade(getResources()); mLastOrientation = newConfig.orientation; mLastScreenLayout = newConfig.screenLayout; mQSLogger.logOnConfigurationChanged( /* oldOrientation= */ previousOrientation, /* newOrientation= */ mLastOrientation, /* oldShouldUseSplitShade= */ previousSplitShadeState, /* newShouldUseSplitShade= */ mShouldUseSplitNotificationShade, /* oldScreenLayout= */ previousScreenLayout, /* newScreenLayout= */ mLastScreenLayout, /* containerName= */ mView.getDumpableTag()); switchTileLayoutIfNeeded(); Loading Loading @@ -198,6 +203,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener); setTiles(); mLastOrientation = getResources().getConfiguration().orientation; mLastScreenLayout = getResources().getConfiguration().screenLayout; mQSLogger.logOnViewAttached(mLastOrientation, mView.getDumpableTag()); switchTileLayout(true); Loading Loading @@ -447,7 +453,9 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr return false; } return mUsingMediaPlayer && mMediaHost.getVisible() && mLastOrientation == Configuration.ORIENTATION_LANDSCAPE; && mLastOrientation == Configuration.ORIENTATION_LANDSCAPE && (mLastScreenLayout & Configuration.SCREENLAYOUT_LONG_MASK) == Configuration.SCREENLAYOUT_LONG_YES; } private void logTiles() { Loading packages/SystemUI/src/com/android/systemui/qs/logging/QSLogger.kt +17 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package com.android.systemui.qs.logging import android.content.res.Configuration.ORIENTATION_LANDSCAPE import android.content.res.Configuration.ORIENTATION_PORTRAIT import android.content.res.Configuration.Orientation import android.content.res.Configuration.SCREENLAYOUT_LONG_NO import android.content.res.Configuration.SCREENLAYOUT_LONG_YES import android.service.quicksettings.Tile import android.view.View import com.android.systemui.log.ConstantStringsLogger Loading Loading @@ -266,8 +268,10 @@ constructor( fun logOnConfigurationChanged( @Orientation oldOrientation: Int, @Orientation newOrientation: Int, newShouldUseSplitShade: Boolean, oldShouldUseSplitShade: Boolean, newShouldUseSplitShade: Boolean, oldScreenLayout: Int, newScreenLayout: Int, containerName: String ) { configChangedBuffer.log( Loading @@ -277,6 +281,8 @@ constructor( str1 = containerName int1 = oldOrientation int2 = newOrientation long1 = oldScreenLayout.toLong() long2 = newScreenLayout.toLong() bool1 = oldShouldUseSplitShade bool2 = newShouldUseSplitShade }, Loading @@ -284,6 +290,8 @@ constructor( "config change: " + "$str1 orientation=${toOrientationString(int2)} " + "(was ${toOrientationString(int1)}), " + "screen layout=${toScreenLayoutString(long1.toInt())} " + "(was ${toScreenLayoutString(long2.toInt())}), " + "splitShade=$bool2 (was $bool1)" } ) Loading Loading @@ -370,3 +378,11 @@ private inline fun toOrientationString(@Orientation orientation: Int): String { else -> "undefined" } } private inline fun toScreenLayoutString(screenLayout: Int): String { return when (screenLayout) { SCREENLAYOUT_LONG_YES -> "long" SCREENLAYOUT_LONG_NO -> "notlong" else -> "undefined" } } packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java +29 −3 Original line number Diff line number Diff line Loading @@ -246,8 +246,9 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { @Test public void testShouldUzeHorizontalLayout_falseForSplitShade() { public void testShouldUseHorizontalLayout_falseForSplitShade() { mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_YES; when(mMediaHost.getVisible()).thenReturn(true); when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(false); Loading @@ -270,12 +271,13 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { } @Test public void testChangeConfiguration_shouldUseHorizontalLayout() { public void testChangeConfiguration_shouldUseHorizontalLayoutInLandscape_true() { when(mMediaHost.getVisible()).thenReturn(true); mController.setUsingHorizontalLayoutChangeListener(mHorizontalLayoutListener); // When device is rotated to landscape // When device is rotated to landscape and is long mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_YES; mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration); // Then the layout changes Loading @@ -291,6 +293,29 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { verify(mHorizontalLayoutListener, times(2)).run(); } @Test public void testChangeConfiguration_shouldUseHorizontalLayoutInLongDevices_true() { when(mMediaHost.getVisible()).thenReturn(true); mController.setUsingHorizontalLayoutChangeListener(mHorizontalLayoutListener); // When device is rotated to landscape and is long mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_YES; mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration); // Then the layout changes assertThat(mController.shouldUseHorizontalLayout()).isTrue(); verify(mHorizontalLayoutListener).run(); // When device changes to not-long mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_NO; mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration); // Then the layout changes back assertThat(mController.shouldUseHorizontalLayout()).isFalse(); verify(mHorizontalLayoutListener, times(2)).run(); } @Test public void testRefreshAllTilesDoesntRefreshListeningTiles() { when(mQSHost.getTiles()).thenReturn(List.of(mQSTile, mOtherTile)); Loading @@ -310,6 +335,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { when(mMediaHost.getVisible()).thenReturn(true); when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(false); mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_YES; mController.setUsingHorizontalLayoutChangeListener(mHorizontalLayoutListener); mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration); assertThat(mController.shouldUseHorizontalLayout()).isTrue(); Loading Loading
packages/SystemUI/src/com/android/systemui/qs/QSPanelControllerBase.java +10 −2 Original line number Diff line number Diff line Loading @@ -77,6 +77,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr private Consumer<Boolean> mMediaVisibilityChangedListener; @Orientation private int mLastOrientation; private int mLastScreenLayout; private String mCachedSpecs = ""; @Nullable private QSTileRevealController mQsTileRevealController; Loading @@ -93,15 +94,19 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr public void onConfigurationChange(Configuration newConfig) { final boolean previousSplitShadeState = mShouldUseSplitNotificationShade; final int previousOrientation = mLastOrientation; final int previousScreenLayout = mLastScreenLayout; mShouldUseSplitNotificationShade = mSplitShadeStateController .shouldUseSplitNotificationShade(getResources()); mLastOrientation = newConfig.orientation; mLastScreenLayout = newConfig.screenLayout; mQSLogger.logOnConfigurationChanged( /* oldOrientation= */ previousOrientation, /* newOrientation= */ mLastOrientation, /* oldShouldUseSplitShade= */ previousSplitShadeState, /* newShouldUseSplitShade= */ mShouldUseSplitNotificationShade, /* oldScreenLayout= */ previousScreenLayout, /* newScreenLayout= */ mLastScreenLayout, /* containerName= */ mView.getDumpableTag()); switchTileLayoutIfNeeded(); Loading Loading @@ -198,6 +203,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener); setTiles(); mLastOrientation = getResources().getConfiguration().orientation; mLastScreenLayout = getResources().getConfiguration().screenLayout; mQSLogger.logOnViewAttached(mLastOrientation, mView.getDumpableTag()); switchTileLayout(true); Loading Loading @@ -447,7 +453,9 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr return false; } return mUsingMediaPlayer && mMediaHost.getVisible() && mLastOrientation == Configuration.ORIENTATION_LANDSCAPE; && mLastOrientation == Configuration.ORIENTATION_LANDSCAPE && (mLastScreenLayout & Configuration.SCREENLAYOUT_LONG_MASK) == Configuration.SCREENLAYOUT_LONG_YES; } private void logTiles() { Loading
packages/SystemUI/src/com/android/systemui/qs/logging/QSLogger.kt +17 −1 Original line number Diff line number Diff line Loading @@ -19,6 +19,8 @@ package com.android.systemui.qs.logging import android.content.res.Configuration.ORIENTATION_LANDSCAPE import android.content.res.Configuration.ORIENTATION_PORTRAIT import android.content.res.Configuration.Orientation import android.content.res.Configuration.SCREENLAYOUT_LONG_NO import android.content.res.Configuration.SCREENLAYOUT_LONG_YES import android.service.quicksettings.Tile import android.view.View import com.android.systemui.log.ConstantStringsLogger Loading Loading @@ -266,8 +268,10 @@ constructor( fun logOnConfigurationChanged( @Orientation oldOrientation: Int, @Orientation newOrientation: Int, newShouldUseSplitShade: Boolean, oldShouldUseSplitShade: Boolean, newShouldUseSplitShade: Boolean, oldScreenLayout: Int, newScreenLayout: Int, containerName: String ) { configChangedBuffer.log( Loading @@ -277,6 +281,8 @@ constructor( str1 = containerName int1 = oldOrientation int2 = newOrientation long1 = oldScreenLayout.toLong() long2 = newScreenLayout.toLong() bool1 = oldShouldUseSplitShade bool2 = newShouldUseSplitShade }, Loading @@ -284,6 +290,8 @@ constructor( "config change: " + "$str1 orientation=${toOrientationString(int2)} " + "(was ${toOrientationString(int1)}), " + "screen layout=${toScreenLayoutString(long1.toInt())} " + "(was ${toScreenLayoutString(long2.toInt())}), " + "splitShade=$bool2 (was $bool1)" } ) Loading Loading @@ -370,3 +378,11 @@ private inline fun toOrientationString(@Orientation orientation: Int): String { else -> "undefined" } } private inline fun toScreenLayoutString(screenLayout: Int): String { return when (screenLayout) { SCREENLAYOUT_LONG_YES -> "long" SCREENLAYOUT_LONG_NO -> "notlong" else -> "undefined" } }
packages/SystemUI/tests/src/com/android/systemui/qs/QSPanelControllerBaseTest.java +29 −3 Original line number Diff line number Diff line Loading @@ -246,8 +246,9 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { @Test public void testShouldUzeHorizontalLayout_falseForSplitShade() { public void testShouldUseHorizontalLayout_falseForSplitShade() { mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_YES; when(mMediaHost.getVisible()).thenReturn(true); when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(false); Loading @@ -270,12 +271,13 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { } @Test public void testChangeConfiguration_shouldUseHorizontalLayout() { public void testChangeConfiguration_shouldUseHorizontalLayoutInLandscape_true() { when(mMediaHost.getVisible()).thenReturn(true); mController.setUsingHorizontalLayoutChangeListener(mHorizontalLayoutListener); // When device is rotated to landscape // When device is rotated to landscape and is long mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_YES; mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration); // Then the layout changes Loading @@ -291,6 +293,29 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { verify(mHorizontalLayoutListener, times(2)).run(); } @Test public void testChangeConfiguration_shouldUseHorizontalLayoutInLongDevices_true() { when(mMediaHost.getVisible()).thenReturn(true); mController.setUsingHorizontalLayoutChangeListener(mHorizontalLayoutListener); // When device is rotated to landscape and is long mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_YES; mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration); // Then the layout changes assertThat(mController.shouldUseHorizontalLayout()).isTrue(); verify(mHorizontalLayoutListener).run(); // When device changes to not-long mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_NO; mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration); // Then the layout changes back assertThat(mController.shouldUseHorizontalLayout()).isFalse(); verify(mHorizontalLayoutListener, times(2)).run(); } @Test public void testRefreshAllTilesDoesntRefreshListeningTiles() { when(mQSHost.getTiles()).thenReturn(List.of(mQSTile, mOtherTile)); Loading @@ -310,6 +335,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase { when(mMediaHost.getVisible()).thenReturn(true); when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(false); mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE; mConfiguration.screenLayout = Configuration.SCREENLAYOUT_LONG_YES; mController.setUsingHorizontalLayoutChangeListener(mHorizontalLayoutListener); mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration); assertThat(mController.shouldUseHorizontalLayout()).isTrue(); Loading