diff options
5 files changed, 50 insertions, 8 deletions
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml index fb3acbe79114..a5b2b853fddd 100644 --- a/core/res/res/values/strings.xml +++ b/core/res/res/values/strings.xml @@ -5035,8 +5035,8 @@ <string name="display_rotation_camera_compat_toast_after_rotation">Rotate for a better view</string> <!-- Text on a toast shown when a camera view is started within the app that may not be able - to display the camera preview correctly while in split screen. [CHAR LIMIT=NONE] --> - <string name="display_rotation_camera_compat_toast_in_split_screen">Exit split screen for a better view</string> + to display the camera preview correctly while in multi-window. [CHAR LIMIT=NONE] --> + <string name="display_rotation_camera_compat_toast_in_multi_window">Open <xliff:g id="name" example="MyApp">%s</xliff:g> in full screen for a better view</string> <!-- Label for button to confirm chosen date or time [CHAR LIMIT=30] --> <string name="done_label">Done</string> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 6ab671a70c3c..a8518afd7d3d 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -2533,7 +2533,7 @@ <java-symbol type="string" name="zen_mode_default_events_name" /> <java-symbol type="string" name="zen_mode_default_every_night_name" /> <java-symbol type="string" name="display_rotation_camera_compat_toast_after_rotation" /> - <java-symbol type="string" name="display_rotation_camera_compat_toast_in_split_screen" /> + <java-symbol type="string" name="display_rotation_camera_compat_toast_in_multi_window" /> <java-symbol type="array" name="config_system_condition_providers" /> <java-symbol type="string" name="muted_by" /> <java-symbol type="string" name="zen_mode_alarm" /> diff --git a/data/etc/services.core.protolog.json b/data/etc/services.core.protolog.json index e4defcfa359f..93e44f1d2f87 100644 --- a/data/etc/services.core.protolog.json +++ b/data/etc/services.core.protolog.json @@ -1813,6 +1813,12 @@ "group": "WM_DEBUG_KEEP_SCREEN_ON", "at": "com\/android\/server\/wm\/RootWindowContainer.java" }, + "-479665533": { + "message": "DisplayRotationCompatPolicy: Multi-window toast not shown as package '%s' cannot be found.", + "level": "ERROR", + "group": "WM_DEBUG_ORIENTATION", + "at": "com\/android\/server\/wm\/DisplayRotationCompatPolicy.java" + }, "-464564167": { "message": "Current transition prevents automatic focus change", "level": "VERBOSE", diff --git a/services/core/java/com/android/server/wm/DisplayRotationCompatPolicy.java b/services/core/java/com/android/server/wm/DisplayRotationCompatPolicy.java index 1fbf59301191..2b34bb22729d 100644 --- a/services/core/java/com/android/server/wm/DisplayRotationCompatPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayRotationCompatPolicy.java @@ -42,6 +42,7 @@ import android.app.servertransaction.ClientTransaction; import android.app.servertransaction.RefreshCallbackItem; import android.app.servertransaction.ResumeActivityItem; import android.content.pm.ActivityInfo.ScreenOrientation; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.hardware.camera2.CameraManager; import android.os.Handler; @@ -423,7 +424,18 @@ final class DisplayRotationCompatPolicy { // for the activity embedding case. if (topActivity.getTask().getWindowingMode() == WINDOWING_MODE_MULTI_WINDOW && isTreatmentEnabledForActivity(topActivity, /* mustBeFullscreen */ false)) { - showToast(R.string.display_rotation_camera_compat_toast_in_split_screen); + final PackageManager packageManager = mWmService.mContext.getPackageManager(); + try { + showToast( + R.string.display_rotation_camera_compat_toast_in_multi_window, + (String) packageManager.getApplicationLabel( + packageManager.getApplicationInfo(packageName, /* flags */ 0))); + } catch (PackageManager.NameNotFoundException e) { + ProtoLog.e(WM_DEBUG_ORIENTATION, + "DisplayRotationCompatPolicy: Multi-window toast not shown as " + + "package '%s' cannot be found.", + packageName); + } } } } @@ -434,6 +446,15 @@ final class DisplayRotationCompatPolicy { () -> Toast.makeText(mWmService.mContext, stringRes, Toast.LENGTH_LONG).show()); } + @VisibleForTesting + void showToast(@StringRes int stringRes, @NonNull String applicationLabel) { + UiThread.getHandler().post( + () -> Toast.makeText( + mWmService.mContext, + mWmService.mContext.getString(stringRes, applicationLabel), + Toast.LENGTH_LONG).show()); + } + private synchronized void notifyCameraClosed(@NonNull String cameraId) { ProtoLog.v(WM_DEBUG_ORIENTATION, "Display id=%d is notified that Camera %s is closed, scheduling rotation update.", diff --git a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java index 3ca35ef7cc26..8e015d4d228d 100644 --- a/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/DisplayRotationCompatPolicyTests.java @@ -40,7 +40,9 @@ import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyBoolean; +import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.ArgumentMatchers.anyLong; +import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.times; @@ -51,6 +53,8 @@ import android.app.servertransaction.RefreshCallbackItem; import android.app.servertransaction.ResumeActivityItem; import android.content.ComponentName; import android.content.pm.ActivityInfo.ScreenOrientation; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; import android.content.res.Configuration; import android.content.res.Configuration.Orientation; import android.hardware.camera2.CameraManager; @@ -84,7 +88,7 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase { private static final String TEST_PACKAGE_2 = "com.test.package.two"; private static final String CAMERA_ID_1 = "camera-1"; private static final String CAMERA_ID_2 = "camera-2"; - + private static final String TEST_PACKAGE_1_LABEL = "testPackage1"; private CameraManager mMockCameraManager; private Handler mMockHandler; private LetterboxConfiguration mLetterboxConfiguration; @@ -133,17 +137,27 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase { } @Test - public void testOpenedCameraInSplitScreen_showToast() { + public void testOpenedCameraInSplitScreen_showToast() throws Exception { configureActivity(SCREEN_ORIENTATION_PORTRAIT); spyOn(mTask); spyOn(mDisplayRotationCompatPolicy); doReturn(WINDOWING_MODE_MULTI_WINDOW).when(mActivity).getWindowingMode(); doReturn(WINDOWING_MODE_MULTI_WINDOW).when(mTask).getWindowingMode(); + final PackageManager mockPackageManager = mock(PackageManager.class); + final ApplicationInfo mockApplicationInfo = mock(ApplicationInfo.class); + when(mContext.getPackageManager()).thenReturn(mockPackageManager); + when(mockPackageManager.getApplicationInfo(anyString(), anyInt())) + .thenReturn(mockApplicationInfo); + + doReturn(TEST_PACKAGE_1_LABEL).when(mockPackageManager) + .getApplicationLabel(mockApplicationInfo); + mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1); verify(mDisplayRotationCompatPolicy).showToast( - R.string.display_rotation_camera_compat_toast_in_split_screen); + R.string.display_rotation_camera_compat_toast_in_multi_window, + TEST_PACKAGE_1_LABEL); } @Test @@ -157,7 +171,8 @@ public final class DisplayRotationCompatPolicyTests extends WindowTestsBase { mCameraAvailabilityCallback.onCameraOpened(CAMERA_ID_1, TEST_PACKAGE_1); verify(mDisplayRotationCompatPolicy, never()).showToast( - R.string.display_rotation_camera_compat_toast_in_split_screen); + R.string.display_rotation_camera_compat_toast_in_multi_window, + TEST_PACKAGE_1_LABEL); } @Test |