diff --git a/packages/SystemUI/res/layout/activity_rear_display_education_opened.xml b/packages/SystemUI/res/layout/activity_rear_display_education_opened.xml
index c12bfcca4eff4..0e6b2812a8a91 100644
--- a/packages/SystemUI/res/layout/activity_rear_display_education_opened.xml
+++ b/packages/SystemUI/res/layout/activity_rear_display_education_opened.xml
@@ -32,8 +32,8 @@
diff --git a/packages/SystemUI/res/values-land/dimens.xml b/packages/SystemUI/res/values-land/dimens.xml
index 908aac4a7b7f7..f277e8a6f02fa 100644
--- a/packages/SystemUI/res/values-land/dimens.xml
+++ b/packages/SystemUI/res/values-land/dimens.xml
@@ -67,6 +67,12 @@
12dp
16dp
+
+ 246dp
+ 180dp
+ 4dp
+ 0dp
+
0dp
0dp
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index f5c4a4e4bb525..1dba14f1d6d39 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1775,8 +1775,12 @@
273dp
200dp
+ 273dp
+ 200dp
24dp
16dp
+ 24dp
+ 16dp
0dp
diff --git a/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java b/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java
index dc3c8203d1a2d..6912114140b07 100644
--- a/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java
+++ b/packages/SystemUI/src/com/android/systemui/reardisplay/RearDisplayDialogController.java
@@ -16,12 +16,16 @@
package com.android.systemui.reardisplay;
+import android.annotation.Nullable;
import android.annotation.SuppressLint;
import android.annotation.TestApi;
import android.content.Context;
+import android.content.res.Configuration;
import android.hardware.devicestate.DeviceStateManager;
import android.hardware.devicestate.DeviceStateManagerGlobal;
import android.view.View;
+import android.view.ViewGroup.LayoutParams;
+import android.widget.LinearLayout;
import com.android.internal.annotations.VisibleForTesting;
import com.android.systemui.CoreStartable;
@@ -70,6 +74,7 @@ public class RearDisplayDialogController implements CoreStartable, CommandQueue.
@VisibleForTesting
SystemUIDialog mRearDisplayEducationDialog;
+ @Nullable LinearLayout mDialogViewContainer;
@Inject
public RearDisplayDialogController(Context context, CommandQueue commandQueue,
@@ -90,26 +95,51 @@ public class RearDisplayDialogController implements CoreStartable, CommandQueue.
createAndShowDialog();
}
+ @Override
+ public void onConfigurationChanged(Configuration newConfig) {
+ if (mRearDisplayEducationDialog != null && mRearDisplayEducationDialog.isShowing()
+ && mDialogViewContainer != null) {
+ // Refresh the dialog view when configuration is changed.
+ Context dialogContext = mRearDisplayEducationDialog.getContext();
+ View dialogView = createDialogView(dialogContext);
+ mDialogViewContainer.removeAllViews();
+ mDialogViewContainer.addView(dialogView);
+ }
+ }
+
private void createAndShowDialog() {
mServiceNotified = false;
Context dialogContext = mRearDisplayEducationDialog.getContext();
+ View dialogView = createDialogView(dialogContext);
+
+ mDialogViewContainer = new LinearLayout(dialogContext);
+ mDialogViewContainer.setLayoutParams(
+ new LinearLayout.LayoutParams(
+ LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
+ mDialogViewContainer.setOrientation(LinearLayout.VERTICAL);
+ mDialogViewContainer.addView(dialogView);
+
+ mRearDisplayEducationDialog.setView(mDialogViewContainer);
+
+ configureDialogButtons();
+
+ mRearDisplayEducationDialog.show();
+ }
+
+ private View createDialogView(Context context) {
View dialogView;
if (mStartedFolded) {
- dialogView = View.inflate(dialogContext,
+ dialogView = View.inflate(context,
R.layout.activity_rear_display_education, null);
} else {
- dialogView = View.inflate(dialogContext,
+ dialogView = View.inflate(context,
R.layout.activity_rear_display_education_opened, null);
}
LottieAnimationView animationView = dialogView.findViewById(
R.id.rear_display_folded_animation);
animationView.setRepeatCount(mAnimationRepeatCount);
- mRearDisplayEducationDialog.setView(dialogView);
-
- configureDialogButtons();
-
- mRearDisplayEducationDialog.show();
+ return dialogView;
}
/**
@@ -164,6 +194,7 @@ public class RearDisplayDialogController implements CoreStartable, CommandQueue.
mServiceNotified = true;
mDeviceStateManagerGlobal.unregisterDeviceStateCallback(mDeviceStateManagerCallback);
mDeviceStateManagerGlobal.onStateRequestOverlayDismissed(shouldCancelRequest);
+ mDialogViewContainer = null;
}
/**
diff --git a/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java b/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java
index 9acd47e4378f5..55813f60aecd5 100644
--- a/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java
+++ b/packages/SystemUI/tests/src/com/android/systemui/reardisplay/RearDisplayDialogControllerTest.java
@@ -17,8 +17,10 @@
package com.android.systemui.reardisplay;
import static junit.framework.Assert.assertEquals;
+import static junit.framework.Assert.assertNotSame;
import static junit.framework.Assert.assertTrue;
+import android.content.res.Configuration;
import android.hardware.devicestate.DeviceStateManager;
import android.testing.AndroidTestingRunner;
import android.testing.TestableLooper;
@@ -67,6 +69,27 @@ public class RearDisplayDialogControllerTest extends SysuiTestCase {
R.string.rear_display_folded_bottom_sheet_title));
}
+ @Test
+ public void testClosedDialogIsRefreshedOnConfigurationChange() {
+ RearDisplayDialogController controller = new RearDisplayDialogController(mContext,
+ mCommandQueue, mFakeExecutor);
+ controller.setDeviceStateManagerCallback(new TestDeviceStateManagerCallback());
+ controller.setFoldedStates(new int[]{0});
+ controller.setAnimationRepeatCount(0);
+
+ controller.showRearDisplayDialog(CLOSED_BASE_STATE);
+ assertTrue(controller.mRearDisplayEducationDialog.isShowing());
+ TextView deviceClosedTitleTextView = controller.mRearDisplayEducationDialog.findViewById(
+ R.id.rear_display_title_text_view);
+
+ controller.onConfigurationChanged(new Configuration());
+ assertTrue(controller.mRearDisplayEducationDialog.isShowing());
+ TextView deviceClosedTitleTextView2 = controller.mRearDisplayEducationDialog.findViewById(
+ R.id.rear_display_title_text_view);
+
+ assertNotSame(deviceClosedTitleTextView, deviceClosedTitleTextView2);
+ }
+
@Test
public void testOpenDialogIsShown() {
RearDisplayDialogController controller = new RearDisplayDialogController(mContext,