Merge "Fix QSPanel horizontal layout issue after unfolding" into tm-qpr-dev

This commit is contained in:
TreeHugger Robot
2022-10-07 12:05:50 +00:00
committed by Android (Google) Code Review
2 changed files with 36 additions and 16 deletions

View File

@@ -23,8 +23,8 @@ import android.annotation.NonNull;
import android.annotation.Nullable;
import android.content.ComponentName;
import android.content.res.Configuration;
import android.content.res.Configuration.Orientation;
import android.metrics.LogMaker;
import android.util.Log;
import android.view.View;
import com.android.internal.annotations.VisibleForTesting;
@@ -75,6 +75,7 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
@Nullable
private Consumer<Boolean> mMediaVisibilityChangedListener;
@Orientation
private int mLastOrientation;
private String mCachedSpecs = "";
@Nullable
@@ -88,21 +89,16 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
new QSPanel.OnConfigurationChangedListener() {
@Override
public void onConfigurationChange(Configuration newConfig) {
mQSLogger.logOnConfigurationChanged(
/* lastOrientation= */ mLastOrientation,
/* newOrientation= */ newConfig.orientation,
/* containerName= */ mView.getDumpableTag());
mShouldUseSplitNotificationShade =
LargeScreenUtils.shouldUseSplitNotificationShade(getResources());
// Logging to aid the investigation of b/216244185.
Log.d(TAG,
"onConfigurationChange: "
+ "mShouldUseSplitNotificationShade="
+ mShouldUseSplitNotificationShade + ", "
+ "newConfig.windowConfiguration="
+ newConfig.windowConfiguration);
mQSLogger.logOnConfigurationChanged(mLastOrientation, newConfig.orientation,
mView.getDumpableTag());
if (newConfig.orientation != mLastOrientation) {
mLastOrientation = newConfig.orientation;
switchTileLayout(false);
}
LargeScreenUtils.shouldUseSplitNotificationShade(getResources());
mLastOrientation = newConfig.orientation;
switchTileLayoutIfNeeded();
onConfigurationChanged();
}
};
@@ -334,6 +330,10 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
}
}
private void switchTileLayoutIfNeeded() {
switchTileLayout(/* force= */ false);
}
boolean switchTileLayout(boolean force) {
/* Whether or not the panel currently contains a media player. */
boolean horizontal = shouldUseHorizontalLayout();

View File

@@ -277,7 +277,7 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
// Then the layout changes
assertThat(mController.shouldUseHorizontalLayout()).isTrue();
verify(mHorizontalLayoutListener).run(); // not invoked
verify(mHorizontalLayoutListener).run();
// When it is rotated back to portrait
mConfiguration.orientation = Configuration.ORIENTATION_PORTRAIT;
@@ -300,4 +300,24 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
verify(mQSTile).refreshState();
verify(mOtherTile, never()).refreshState();
}
@Test
public void configurationChange_onlySplitShadeConfigChanges_horizontalLayoutStatusUpdated() {
// Preconditions for horizontal layout
when(mMediaHost.getVisible()).thenReturn(true);
when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(false);
mConfiguration.orientation = Configuration.ORIENTATION_LANDSCAPE;
mController.setUsingHorizontalLayoutChangeListener(mHorizontalLayoutListener);
mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration);
assertThat(mController.shouldUseHorizontalLayout()).isTrue();
reset(mHorizontalLayoutListener);
// Only split shade status changes
when(mResources.getBoolean(R.bool.config_use_split_notification_shade)).thenReturn(true);
mController.mOnConfigurationChangedListener.onConfigurationChange(mConfiguration);
// Horizontal layout is updated accordingly.
assertThat(mController.shouldUseHorizontalLayout()).isFalse();
verify(mHorizontalLayoutListener).run();
}
}