From 881ae5738bbeab162f980e3281af9cae8e4a2f05 Mon Sep 17 00:00:00 2001 From: Jiaming Liu Date: Wed, 3 May 2023 03:26:07 +0000 Subject: [PATCH] Adjust Rear Display Dialog Landscape Layout Bug: 272757569 Test: Manual Change-Id: Iacd6d702944ef86a50dc56ab1cb9e8698616e02e --- ...activity_rear_display_education_opened.xml | 8 ++-- packages/SystemUI/res/values-land/dimens.xml | 6 +++ packages/SystemUI/res/values/dimens.xml | 4 ++ .../RearDisplayDialogController.java | 45 ++++++++++++++++--- .../RearDisplayDialogControllerTest.java | 23 ++++++++++ 5 files changed, 75 insertions(+), 11 deletions(-) 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,