Incorrect panel layout after rotation

-Handle onConfigurationChanged and force to update layout
-Add test case

Bug: 144751509
Test: make -j42 RunSettingsRoboTests
Change-Id: Ic170d4f6f045299c0520e899e06b5b4e9f009643
This commit is contained in:
Tim Peng
2020-04-15 10:49:35 +08:00
committed by tim peng
parent e13a54c438
commit e54e0296ca
3 changed files with 20 additions and 2 deletions

View File

@@ -3180,6 +3180,7 @@
android:theme="@style/Theme.Panel" android:theme="@style/Theme.Panel"
android:launchMode="singleInstance" android:launchMode="singleInstance"
android:excludeFromRecents="true" android:excludeFromRecents="true"
android:configChanges="orientation|keyboardHidden|screenSize"
android:exported="true"> android:exported="true">
<intent-filter> <intent-filter>
<action android:name="android.settings.panel.action.INTERNET_CONNECTIVITY" /> <action android:name="android.settings.panel.action.INTERNET_CONNECTIVITY" />

View File

@@ -19,12 +19,14 @@ package com.android.settings.panel;
import static com.android.settingslib.media.MediaOutputSliceConstants.EXTRA_PACKAGE_NAME; import static com.android.settingslib.media.MediaOutputSliceConstants.EXTRA_PACKAGE_NAME;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.Gravity; import android.view.Gravity;
import android.view.Window; import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentActivity; import androidx.fragment.app.FragmentActivity;
@@ -43,6 +45,8 @@ public class SettingsPanelActivity extends FragmentActivity {
@VisibleForTesting @VisibleForTesting
final Bundle mBundle = new Bundle(); final Bundle mBundle = new Bundle();
@VisibleForTesting
boolean mForceCreation = false;
/** /**
* Key specifying which Panel the app is requesting. * Key specifying which Panel the app is requesting.
@@ -59,8 +63,6 @@ public class SettingsPanelActivity extends FragmentActivity {
*/ */
public static final String KEY_MEDIA_PACKAGE_NAME = "PANEL_MEDIA_PACKAGE_NAME"; public static final String KEY_MEDIA_PACKAGE_NAME = "PANEL_MEDIA_PACKAGE_NAME";
private boolean mForceCreation = false;
@Override @Override
protected void onCreate(@Nullable Bundle savedInstanceState) { protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState); super.onCreate(savedInstanceState);
@@ -87,6 +89,12 @@ public class SettingsPanelActivity extends FragmentActivity {
mForceCreation = true; mForceCreation = true;
} }
@Override
public void onConfigurationChanged(@NonNull Configuration newConfig) {
super.onConfigurationChanged(newConfig);
mForceCreation = true;
}
private void createOrUpdatePanel(boolean shouldForceCreation) { private void createOrUpdatePanel(boolean shouldForceCreation) {
final Intent callingIntent = getIntent(); final Intent callingIntent = getIntent();
if (callingIntent == null) { if (callingIntent == null) {

View File

@@ -31,6 +31,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when; import static org.mockito.Mockito.when;
import android.content.Intent; import android.content.Intent;
import android.content.res.Configuration;
import android.os.Build; import android.os.Build;
import android.view.Window; import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
@@ -139,4 +140,12 @@ public class SettingsPanelActivityTest {
assertThat(paramCaptor.getValue().privateFlags assertThat(paramCaptor.getValue().privateFlags
& SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isEqualTo(0); & SYSTEM_FLAG_HIDE_NON_SYSTEM_OVERLAY_WINDOWS).isEqualTo(0);
} }
@Test
public void onConfigurationChanged_shouldForceUpdate() {
mSettingsPanelActivity.mForceCreation = false;
mSettingsPanelActivity.onConfigurationChanged(new Configuration());
assertThat(mSettingsPanelActivity.mForceCreation).isTrue();
}
} }