Merge "Create new display rotation compat toast string for multi-window" into udc-dev

This commit is contained in:
Eghosa Ewansiha-Vlachavas
2023-06-05 17:04:13 +00:00
committed by Android (Google) Code Review
5 changed files with 50 additions and 8 deletions

View File

@@ -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>

View File

@@ -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" />

View File

@@ -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",

View File

@@ -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.",

View File

@@ -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