Simplify config changes and request media host layout updates

- Each QSPanelController* class had its own OnConfigurationChangeListener,
  in addition to an overridable method in the base class that was called
  in the listener - moved the child class listener code into that method
  so there's a single listener registered.
- When reattaching the media host after an orientation change,
  explicitly call setLayoutParams to ensure that a layout update is
  requested
- Add more info about current config to dumpsys

Bug: 198319256
Test: atest com.android.systemui.qs
Test: manual - verify media view looks correct when rotating
Change-Id: I5b34ba85e98b4fbf8fe3b24893d0423146aa5f75
This commit is contained in:
Beth Thibodeau
2022-09-22 18:09:44 -05:00
parent 4658046b52
commit 48cd3b609d
6 changed files with 22 additions and 30 deletions

View File

@@ -473,6 +473,8 @@ public class QSPanel extends LinearLayout implements Tunable {
? Math.max(mMediaTotalBottomMargin - getPaddingBottom(), 0) : 0;
layoutParams.topMargin = mediaNeedsTopMargin() && !horizontal
? mMediaTopMargin : 0;
// Call setLayoutParams explicitly to ensure that requestLayout happens
hostView.setLayoutParams(layoutParams);
}
}

View File

@@ -21,7 +21,6 @@ import static com.android.systemui.media.dagger.MediaModule.QS_PANEL;
import static com.android.systemui.qs.QSPanel.QS_SHOW_BRIGHTNESS;
import static com.android.systemui.qs.dagger.QSFragmentModule.QS_USING_MEDIA_PLAYER;
import android.content.res.Configuration;
import android.view.MotionEvent;
import android.view.View;
@@ -61,17 +60,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
private final BrightnessMirrorHandler mBrightnessMirrorHandler;
private final StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
private final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener =
new QSPanel.OnConfigurationChangedListener() {
@Override
public void onConfigurationChange(Configuration newConfig) {
mView.updateResources();
if (mView.isListening()) {
refreshAllTiles();
}
}
};
private View.OnTouchListener mTileLayoutTouchListener = new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
@@ -130,7 +118,6 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
if (mView.isListening()) {
refreshAllTiles();
}
mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
switchTileLayout(true);
mBrightnessMirrorHandler.onQsPanelAttached();
@@ -147,11 +134,18 @@ public class QSPanelController extends QSPanelControllerBase<QSPanel> {
@Override
protected void onViewDetached() {
mTunerService.removeTunable(mView);
mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
mBrightnessMirrorHandler.onQsPanelDettached();
super.onViewDetached();
}
@Override
protected void onConfigurationChanged() {
mView.updateResources();
if (mView.isListening()) {
refreshAllTiles();
}
}
/** */
public void setVisibility(int visibility) {
mView.setVisibility(visibility);

View File

@@ -101,11 +101,11 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
+ newConfig.windowConfiguration);
mQSLogger.logOnConfigurationChanged(mLastOrientation, newConfig.orientation,
mView.getDumpableTag());
onConfigurationChanged();
if (newConfig.orientation != mLastOrientation) {
mLastOrientation = newConfig.orientation;
switchTileLayout(false);
}
onConfigurationChanged();
}
};
@@ -422,6 +422,8 @@ public abstract class QSPanelControllerBase<T extends QSPanel> extends ViewContr
}
if (mMediaHost != null) {
pw.println(" media bounds: " + mMediaHost.getCurrentBounds());
pw.println(" horizontal layout: " + mUsingHorizontalLayout);
pw.println(" last orientation: " + mLastOrientation);
}
}

View File

@@ -46,14 +46,6 @@ import javax.inject.Provider;
@QSScope
public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel> {
private final QSPanel.OnConfigurationChangedListener mOnConfigurationChangedListener =
newConfig -> {
int newMaxTiles = getResources().getInteger(R.integer.quick_qs_panel_max_tiles);
if (newMaxTiles != mView.getNumQuickTiles()) {
setMaxTiles(newMaxTiles);
}
};
private final Provider<Boolean> mUsingCollapsedLandscapeMediaProvider;
@Inject
@@ -99,13 +91,11 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
@Override
protected void onViewAttached() {
super.onViewAttached();
mView.addOnConfigurationChangedListener(mOnConfigurationChangedListener);
}
@Override
protected void onViewDetached() {
super.onViewDetached();
mView.removeOnConfigurationChangedListener(mOnConfigurationChangedListener);
}
private void setMaxTiles(int parseNumTiles) {
@@ -115,6 +105,10 @@ public class QuickQSPanelController extends QSPanelControllerBase<QuickQSPanel>
@Override
protected void onConfigurationChanged() {
int newMaxTiles = getResources().getInteger(R.integer.quick_qs_panel_max_tiles);
if (newMaxTiles != mView.getNumQuickTiles()) {
setMaxTiles(newMaxTiles);
}
updateMediaExpansion();
}

View File

@@ -226,7 +226,9 @@ public class QSPanelControllerBaseTest extends SysuiTestCase {
+ " Tile records:\n"
+ " " + mockTileString + "\n"
+ " " + mockTileViewString + "\n"
+ " media bounds: null\n";
+ " media bounds: null\n"
+ " horizontal layout: false\n"
+ " last orientation: 0\n";
assertEquals(expected, w.getBuffer().toString());
}

View File

@@ -123,8 +123,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
@Test
fun mediaExpansion_afterConfigChange_inLandscape_collapsedInLandscapeTrue_updatesToCollapsed() {
// times(2) because both controller and base controller are registering their listeners
verify(quickQSPanel, times(2)).addOnConfigurationChangedListener(captor.capture())
verify(quickQSPanel).addOnConfigurationChangedListener(captor.capture())
// verify that media starts in the expanded state by default
verify(mediaHost).expansion = MediaHostState.EXPANDED
@@ -139,8 +138,7 @@ class QuickQSPanelControllerTest : SysuiTestCase() {
@Test
fun mediaExpansion_afterConfigChange_landscape_collapsedInLandscapeFalse_remainsExpanded() {
// times(2) because both controller and base controller are registering their listeners
verify(quickQSPanel, times(2)).addOnConfigurationChangedListener(captor.capture())
verify(quickQSPanel).addOnConfigurationChangedListener(captor.capture())
reset(mediaHost)
usingCollapsedLandscapeMedia = false