Merge "Dump threads for troubleshooting when catalyst test timeout" into main
diff --git a/core/api/current.txt b/core/api/current.txt
index 6f60378..f59b575 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -56623,7 +56623,7 @@
method public java.util.Map<android.view.inputmethod.InputMethodInfo,java.util.List<android.view.inputmethod.InputMethodSubtype>> getShortcutInputMethodsAndSubtypes();
method @Deprecated public void hideSoftInputFromInputMethod(android.os.IBinder, int);
method public boolean hideSoftInputFromWindow(android.os.IBinder, int);
- method public boolean hideSoftInputFromWindow(android.os.IBinder, int, android.os.ResultReceiver);
+ method @Deprecated public boolean hideSoftInputFromWindow(android.os.IBinder, int, android.os.ResultReceiver);
method @Deprecated public void hideStatusIcon(android.os.IBinder);
method public void invalidateInput(@NonNull android.view.View);
method public boolean isAcceptingText();
@@ -56647,7 +56647,7 @@
method public void showInputMethodAndSubtypeEnabler(@Nullable String);
method public void showInputMethodPicker();
method public boolean showSoftInput(android.view.View, int);
- method public boolean showSoftInput(android.view.View, int, android.os.ResultReceiver);
+ method @Deprecated public boolean showSoftInput(android.view.View, int, android.os.ResultReceiver);
method @Deprecated public void showSoftInputFromInputMethod(android.os.IBinder, int);
method @Deprecated public void showStatusIcon(android.os.IBinder, String, @DrawableRes int);
method @FlaggedApi("android.view.inputmethod.connectionless_handwriting") public void startConnectionlessStylusHandwriting(@NonNull android.view.View, @Nullable android.view.inputmethod.CursorAnchorInfo, @NonNull java.util.concurrent.Executor, @NonNull android.view.inputmethod.ConnectionlessHandwritingCallback);
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 1e5c6d8..47fc437 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -2352,6 +2352,13 @@
* {@link #RESULT_HIDDEN}.
* @return {@code true} if a request was sent to system_server, {@code false} otherwise. Note:
* this does not return result of the request. For result use {@param resultReceiver} instead.
+ *
+ * @deprecated The {@link ResultReceiver} is not a reliable way of determining whether the
+ * Input Method is actually shown or hidden. If result is needed, use
+ * {@link android.view.WindowInsetsController#show} instead and set a
+ * {@link View.OnApplyWindowInsetsListener} and verify the provided {@link WindowInsets} for
+ * the visibility of IME. If result is not needed, use {@link #showSoftInput(View, int)}
+ * instead.
*/
public boolean showSoftInput(View view, @ShowFlags int flags, ResultReceiver resultReceiver) {
return showSoftInput(view, flags, resultReceiver, SoftInputShowHideReason.SHOW_SOFT_INPUT);
@@ -2399,6 +2406,14 @@
& WindowInsets.Type.ime()) == 0) {
ImeTracker.forLogging().onProgress(statsToken,
ImeTracker.PHASE_CLIENT_NO_ONGOING_USER_ANIMATION);
+ if (resultReceiver != null) {
+ final boolean imeReqVisible =
+ (viewRootImpl.getInsetsController().getRequestedVisibleTypes()
+ & WindowInsets.Type.ime()) != 0;
+ resultReceiver.send(
+ imeReqVisible ? InputMethodManager.RESULT_UNCHANGED_SHOWN
+ : InputMethodManager.RESULT_SHOWN, null);
+ }
// TODO(b/322992891) handle case of SHOW_IMPLICIT
viewRootImpl.getInsetsController().show(WindowInsets.Type.ime(),
false /* fromIme */, statsToken);
@@ -2531,6 +2546,13 @@
* {@link #RESULT_HIDDEN}.
* @return {@code true} if a request was sent to system_server, {@code false} otherwise. Note:
* this does not return result of the request. For result use {@param resultReceiver} instead.
+ *
+ * @deprecated The {@link ResultReceiver} is not a reliable way of determining whether the
+ * Input Method is actually shown or hidden. If result is needed, use
+ * {@link android.view.WindowInsetsController#hide} instead and set a
+ * {@link View.OnApplyWindowInsetsListener} and verify the provided {@link WindowInsets} for
+ * the visibility of IME. If result is not needed, use
+ * {@link #hideSoftInputFromView(View, int)} instead.
*/
public boolean hideSoftInputFromWindow(IBinder windowToken, @HideFlags int flags,
ResultReceiver resultReceiver) {
@@ -2569,6 +2591,14 @@
// TODO(b/322992891) handle case of HIDE_IMPLICIT_ONLY
final var viewRootImpl = servedView.getViewRootImpl();
if (viewRootImpl != null) {
+ if (resultReceiver != null) {
+ final boolean imeReqVisible =
+ (viewRootImpl.getInsetsController().getRequestedVisibleTypes()
+ & WindowInsets.Type.ime()) != 0;
+ resultReceiver.send(
+ !imeReqVisible ? InputMethodManager.RESULT_UNCHANGED_HIDDEN
+ : InputMethodManager.RESULT_HIDDEN, null);
+ }
viewRootImpl.getInsetsController().hide(WindowInsets.Type.ime());
}
return true;
diff --git a/core/java/android/view/inputmethod/flags.aconfig b/core/java/android/view/inputmethod/flags.aconfig
index bae8aff..aa4927e 100644
--- a/core/java/android/view/inputmethod/flags.aconfig
+++ b/core/java/android/view/inputmethod/flags.aconfig
@@ -73,6 +73,17 @@
}
flag {
+ name: "consistent_get_current_input_method_info"
+ namespace: "input_method"
+ description: "Use BindingController as the source of truth in getCurrentInputMethodInfo"
+ bug: "355034523"
+ is_fixed_read_only: true
+ metadata {
+ purpose: PURPOSE_BUGFIX
+ }
+}
+
+flag {
name: "ime_switcher_revamp"
is_exported: true
namespace: "input_method"
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowModule.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowModule.java
index 43ade5c..4feb78a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowModule.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/NotificationRowModule.java
@@ -18,6 +18,7 @@
import com.android.systemui.dagger.SysUISingleton;
import com.android.systemui.statusbar.notification.row.icon.AppIconProviderModule;
+import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProviderModule;
import com.android.systemui.statusbar.notification.row.shared.NotificationRowContentBinderRefactor;
import dagger.Binds;
@@ -29,7 +30,7 @@
/**
* Dagger Module containing notification row and view inflation implementations.
*/
-@Module(includes = {AppIconProviderModule.class})
+@Module(includes = {AppIconProviderModule.class, NotificationIconStyleProviderModule.class})
public abstract class NotificationRowModule {
/**
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationIconStyleProvider.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationIconStyleProvider.kt
new file mode 100644
index 0000000..165c1a7
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationIconStyleProvider.kt
@@ -0,0 +1,90 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.icon
+
+import android.annotation.WorkerThread
+import android.app.Flags
+import android.content.Context
+import android.content.pm.ApplicationInfo
+import android.service.notification.StatusBarNotification
+import android.util.Log
+import com.android.systemui.dagger.SysUISingleton
+import dagger.Module
+import dagger.Provides
+import javax.inject.Inject
+import javax.inject.Provider
+
+/**
+ * A provider used to cache and fetch information about which icon should be displayed by
+ * notifications.
+ */
+interface NotificationIconStyleProvider {
+ @WorkerThread
+ fun shouldShowAppIcon(notification: StatusBarNotification, context: Context): Boolean
+}
+
+@SysUISingleton
+class NotificationIconStyleProviderImpl @Inject constructor() : NotificationIconStyleProvider {
+ override fun shouldShowAppIcon(notification: StatusBarNotification, context: Context): Boolean {
+ val packageContext = notification.getPackageContext(context)
+ return !belongsToHeadlessSystemApp(packageContext)
+ }
+
+ @WorkerThread
+ private fun belongsToHeadlessSystemApp(context: Context): Boolean {
+ val info = context.applicationInfo
+ if (info != null) {
+ if ((info.flags and ApplicationInfo.FLAG_SYSTEM) == 0) {
+ // It's not a system app at all.
+ return false
+ } else {
+ // If there's no launch intent, it's probably a headless app.
+ val pm = context.packageManager
+ return (pm.getLaunchIntentForPackage(info.packageName) == null)
+ }
+ } else {
+ // If for some reason we don't have the app info, we don't know; best assume it's
+ // not a system app.
+ return false
+ }
+ }
+}
+
+class NoOpIconStyleProvider : NotificationIconStyleProvider {
+ companion object {
+ const val TAG = "NoOpIconStyleProvider"
+ }
+
+ override fun shouldShowAppIcon(notification: StatusBarNotification, context: Context): Boolean {
+ Log.wtf(TAG, "NoOpIconStyleProvider should not be used anywhere.")
+ return true
+ }
+}
+
+@Module
+class NotificationIconStyleProviderModule {
+ @Provides
+ @SysUISingleton
+ fun provideImpl(
+ realImpl: Provider<NotificationIconStyleProviderImpl>
+ ): NotificationIconStyleProvider =
+ if (Flags.notificationsRedesignAppIcons()) {
+ realImpl.get()
+ } else {
+ NoOpIconStyleProvider()
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationRowIconViewInflaterFactory.kt b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationRowIconViewInflaterFactory.kt
index 2522e58..79defd2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationRowIconViewInflaterFactory.kt
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/row/icon/NotificationRowIconViewInflaterFactory.kt
@@ -32,7 +32,10 @@
*/
class NotificationRowIconViewInflaterFactory
@Inject
-constructor(private val appIconProvider: AppIconProvider) : NotifRemoteViewsFactory {
+constructor(
+ private val appIconProvider: AppIconProvider,
+ private val iconStyleProvider: NotificationIconStyleProvider,
+) : NotifRemoteViewsFactory {
override fun instantiate(
row: ExpandableNotificationRow,
@NotificationRowContentBinder.InflationFlag layoutType: Int,
@@ -48,8 +51,7 @@
view.setIconProvider(
object : NotificationRowIconView.NotificationIconProvider {
override fun shouldShowAppIcon(): Boolean {
- // TODO(b/371174789): implement me
- return true
+ return iconStyleProvider.shouldShowAppIcon(row.entry.sbn, context)
}
override fun getAppIcon(): Drawable {
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowBuilder.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowBuilder.kt
index a7a6195..7f4c670 100644
--- a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowBuilder.kt
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/ExpandableNotificationRowBuilder.kt
@@ -70,6 +70,7 @@
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.FLAG_CONTENT_VIEW_HEADS_UP
import com.android.systemui.statusbar.notification.row.NotificationRowContentBinder.InflationFlag
import com.android.systemui.statusbar.notification.row.icon.AppIconProviderImpl
+import com.android.systemui.statusbar.notification.row.icon.NotificationIconStyleProviderImpl
import com.android.systemui.statusbar.notification.row.icon.NotificationRowIconViewInflaterFactory
import com.android.systemui.statusbar.notification.row.shared.NotificationRowContentBinderRefactor
import com.android.systemui.statusbar.notification.stack.NotificationChildrenContainerLogger
@@ -287,7 +288,10 @@
BigPictureLayoutInflaterFactory(),
NotificationOptimizedLinearLayoutFactory(),
{ Mockito.mock(NotificationViewFlipperFactory::class.java) },
- NotificationRowIconViewInflaterFactory(AppIconProviderImpl(context)),
+ NotificationRowIconViewInflaterFactory(
+ AppIconProviderImpl(context),
+ NotificationIconStyleProviderImpl(),
+ ),
)
}
diff --git a/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/icon/NotificationIconStyleProviderKosmos.kt b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/icon/NotificationIconStyleProviderKosmos.kt
new file mode 100644
index 0000000..611c90a
--- /dev/null
+++ b/packages/SystemUI/tests/utils/src/com/android/systemui/statusbar/notification/row/icon/NotificationIconStyleProviderKosmos.kt
@@ -0,0 +1,21 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.systemui.statusbar.notification.row.icon
+
+import com.android.systemui.kosmos.Kosmos
+
+val Kosmos.notificationIconStyleProvider by Kosmos.Fixture { NotificationIconStyleProviderImpl() }
diff --git a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
index 939aad4..83044c2 100644
--- a/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/inputmethod/InputMethodManagerService.java
@@ -1536,7 +1536,16 @@
Manifest.permission.INTERACT_ACROSS_USERS_FULL, null);
}
final InputMethodSettings settings = InputMethodSettingsRepository.get(userId);
- return settings.getMethodMap().get(settings.getSelectedInputMethod());
+ final String selectedImeId;
+ if (Flags.consistentGetCurrentInputMethodInfo()) {
+ final var bindingController = getInputMethodBindingController(userId);
+ synchronized (ImfLock.class) {
+ selectedImeId = bindingController.getSelectedMethodId();
+ }
+ } else {
+ selectedImeId = settings.getSelectedInputMethod();
+ }
+ return settings.getMethodMap().get(selectedImeId);
}
@BinderThread
diff --git a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
index 6a23aaa..e9c6e93 100644
--- a/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
+++ b/services/core/java/com/android/server/wm/ImeInsetsSourceProvider.java
@@ -274,34 +274,7 @@
if (caller != controlTarget) {
if (Flags.refactorInsetsController()) {
if (isImeInputTarget(caller)) {
- // In case of the multi window mode, update the requestedVisibleTypes from
- // the controlTarget (=RemoteInsetsControlTarget) via DisplayImeController.
- // Then, trigger onRequestedVisibleTypesChanged for the controlTarget with
- // its new requested visibility for the IME
- boolean imeVisible = caller.isRequestedVisible(WindowInsets.Type.ime());
- if (controlTarget != null) {
- ImeTracker.forLogging().onProgress(statsToken,
- ImeTracker.PHASE_WM_SET_REMOTE_TARGET_IME_VISIBILITY);
- controlTarget.setImeInputTargetRequestedVisibility(imeVisible);
- } else if (caller instanceof InsetsControlTarget) {
- // In case of a virtual display that cannot show the IME, the
- // controlTarget will be null here, as no controlTarget was set yet. In
- // that case, proceed similar to the multi window mode (fallback =
- // RemoteInsetsControlTarget of the default display)
- controlTarget = mDisplayContent.getImeHostOrFallback(
- ((InsetsControlTarget) caller).getWindow());
-
- if (controlTarget != caller) {
- ImeTracker.forLogging().onProgress(statsToken,
- ImeTracker.PHASE_WM_SET_REMOTE_TARGET_IME_VISIBILITY);
- controlTarget.setImeInputTargetRequestedVisibility(imeVisible);
- } else {
- ImeTracker.forLogging().onFailed(statsToken,
- ImeTracker.PHASE_WM_SET_REMOTE_TARGET_IME_VISIBILITY);
- }
- }
-
- invokeOnImeRequestedChangedListener(caller, statsToken);
+ reportImeInputTargetStateToControlTarget(caller, controlTarget, statsToken);
} else {
// TODO(b/353463205) add ImeTracker?
}
@@ -332,16 +305,44 @@
if (Flags.refactorInsetsController() && target != null) {
InsetsControlTarget imeControlTarget = getControlTarget();
if (target != imeControlTarget) {
- // If the targetWin is not the imeControlTarget (=RemoteInsetsControlTarget) let it
- // know about the new requestedVisibleTypes for the IME.
- if (imeControlTarget != null) {
- imeControlTarget.setImeInputTargetRequestedVisibility(
- (target.getRequestedVisibleTypes() & WindowInsets.Type.ime()) != 0);
- }
+ // TODO(b/353463205): start new request here?
+ reportImeInputTargetStateToControlTarget(target, imeControlTarget,
+ null /* statsToken */);
}
}
}
+ private void reportImeInputTargetStateToControlTarget(@NonNull InsetsTarget imeInsetsTarget,
+ InsetsControlTarget controlTarget, @Nullable ImeTracker.Token statsToken) {
+ // In case of the multi window mode, update the requestedVisibleTypes from
+ // the controlTarget (=RemoteInsetsControlTarget) via DisplayImeController.
+ // Then, trigger onRequestedVisibleTypesChanged for the controlTarget with
+ // its new requested visibility for the IME
+ boolean imeVisible = imeInsetsTarget.isRequestedVisible(WindowInsets.Type.ime());
+ if (controlTarget != null) {
+ ImeTracker.forLogging().onProgress(statsToken,
+ ImeTracker.PHASE_WM_SET_REMOTE_TARGET_IME_VISIBILITY);
+ controlTarget.setImeInputTargetRequestedVisibility(imeVisible);
+ } else if (imeInsetsTarget instanceof InsetsControlTarget) {
+ // In case of a virtual display that cannot show the IME, the
+ // controlTarget will be null here, as no controlTarget was set yet. In
+ // that case, proceed similar to the multi window mode (fallback =
+ // RemoteInsetsControlTarget of the default display)
+ controlTarget = mDisplayContent.getImeHostOrFallback(
+ ((InsetsControlTarget) imeInsetsTarget).getWindow());
+
+ if (controlTarget != imeInsetsTarget) {
+ ImeTracker.forLogging().onProgress(statsToken,
+ ImeTracker.PHASE_WM_SET_REMOTE_TARGET_IME_VISIBILITY);
+ controlTarget.setImeInputTargetRequestedVisibility(imeVisible);
+ } else {
+ ImeTracker.forLogging().onFailed(statsToken,
+ ImeTracker.PHASE_WM_SET_REMOTE_TARGET_IME_VISIBILITY);
+ }
+ }
+ invokeOnImeRequestedChangedListener(imeInsetsTarget, statsToken);
+ }
+
// TODO(b/353463205) check callers to see if we can make statsToken @NonNull
private void invokeOnImeRequestedChangedListener(InsetsTarget insetsTarget,
@Nullable ImeTracker.Token statsToken) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
index c1edae9..c30f70e 100644
--- a/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/SizeCompatTests.java
@@ -183,15 +183,32 @@
DeviceConfig.setProperties(mInitialConstrainDisplayApisFlags);
}
- private void setUpApp(DisplayContent display) {
- mTask = new TaskBuilder(mSupervisor).setDisplay(display).setCreateActivity(true).build();
- mActivity = mTask.getTopNonFinishingActivity();
- doReturn(false).when(mActivity).isImmersiveMode(any());
+ private ActivityRecord setUpApp(DisplayContent display) {
+ return setUpApp(display, null /* appBuilder */);
}
- private void setUpDisplaySizeWithApp(int dw, int dh) {
+ private ActivityRecord setUpApp(DisplayContent display, ActivityBuilder appBuilder) {
+ // Use the real package name (com.android.frameworks.wmtests) so that
+ // EnableCompatChanges/DisableCompatChanges can take effect.
+ // Otherwise the fake WindowTestsBase.DEFAULT_COMPONENT_PACKAGE_NAME will make
+ // PlatformCompat#isChangeEnabledByPackageName always return default value.
+ final ComponentName componentName = ComponentName.createRelative(
+ mContext, SizeCompatTests.class.getName());
+ mTask = new TaskBuilder(mSupervisor).setDisplay(display).setComponent(componentName)
+ .build();
+ final ActivityBuilder builder = appBuilder != null ? appBuilder : new ActivityBuilder(mAtm);
+ mActivity = builder.setTask(mTask).setComponent(componentName).build();
+ doReturn(false).when(mActivity).isImmersiveMode(any());
+ return mActivity;
+ }
+
+ private ActivityRecord setUpDisplaySizeWithApp(int dw, int dh) {
+ return setUpDisplaySizeWithApp(dw, dh, null /* appBuilder */);
+ }
+
+ private ActivityRecord setUpDisplaySizeWithApp(int dw, int dh, ActivityBuilder appBuilder) {
final TestDisplayContent.Builder builder = new TestDisplayContent.Builder(mAtm, dw, dh);
- setUpApp(builder.build());
+ return setUpApp(builder.build(), appBuilder);
}
@Test
@@ -352,15 +369,13 @@
.setCanRotate(false)
.setNotch(cutoutHeight)
.build();
- setUpApp(display);
display.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
mWm.mAppCompatConfiguration.setLetterboxVerticalPositionMultiplier(0.5f);
mWm.mAppCompatConfiguration.setIsVerticalReachabilityEnabled(true);
- final ActivityRecord activity = getActivityBuilderOnSameTask()
+ final ActivityRecord activity = setUpApp(display, new ActivityBuilder(mAtm)
.setScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE)
- .setMinAspectRatio(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE)
- .build();
+ .setMinAspectRatio(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE));
doReturn(true).when(activity).isImmersiveMode(any());
addWindowToActivity(activity);
@@ -424,17 +439,16 @@
@Test
@DisableCompatChanges({ActivityInfo.INSETS_DECOUPLED_CONFIGURATION_ENFORCED})
public void testFixedAspectRatioBoundsWithDecorInSquareDisplay() {
- final int notchHeight = 100;
- setUpApp(new TestDisplayContent.Builder(mAtm, 600, 800).setNotch(notchHeight).build());
-
- final Rect displayBounds = mActivity.mDisplayContent.getWindowConfiguration().getBounds();
final float aspectRatio = 1.2f;
- final ActivityRecord activity = getActivityBuilderOnSameTask()
+ final ActivityBuilder activityBuilder = new ActivityBuilder(mAtm)
.setScreenOrientation(SCREEN_ORIENTATION_UNSPECIFIED)
.setMinAspectRatio(aspectRatio)
.setMaxAspectRatio(aspectRatio)
- .setResizeMode(RESIZE_MODE_UNRESIZEABLE)
- .build();
+ .setResizeMode(RESIZE_MODE_UNRESIZEABLE);
+ final int notchHeight = 100;
+ final ActivityRecord activity = setUpApp(new TestDisplayContent.Builder(mAtm, 600, 800)
+ .setNotch(notchHeight).build(), activityBuilder);
+ final Rect displayBounds = activity.mDisplayContent.getWindowConfiguration().getBounds();
final Rect appBounds = activity.getWindowConfiguration().getAppBounds();
// The parent configuration doesn't change since the first resolved configuration, so the
@@ -1327,12 +1341,8 @@
public void testOverrideMinAspectRatioSmall_overridden() {
final int dh = 1200;
final int dw = 1000;
- setUpDisplaySizeWithApp(dw, dh);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(dw, dh, new ActivityBuilder(mAtm)
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT));
final Rect bounds = activity.getBounds();
assertEquals(dh, bounds.height());
@@ -1346,13 +1356,9 @@
public void testOverrideMinAspectRatioSmall_notOverridden() {
final int dh = 1200;
final int dw = 1000;
- setUpDisplaySizeWithApp(dw, dh);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .setMinAspectRatio(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(dw, dh, new ActivityBuilder(mAtm)
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
+ .setMinAspectRatio(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE));
// Activity's requested aspect ratio is larger than OVERRIDE_MIN_ASPECT_RATIO_SMALL,
// so OVERRIDE_MIN_ASPECT_RATIO_SMALL is ignored.
@@ -1366,12 +1372,8 @@
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM})
public void testOverrideMinAspectRatioMedium() {
- setUpDisplaySizeWithApp(1000, 1200);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1000, 1200,
+ new ActivityBuilder(mAtm).setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT));
// The per-package override forces the activity into a 3:2 aspect ratio
assertEquals(1200, activity.getBounds().height());
@@ -1388,13 +1390,8 @@
final int notchHeight = 200;
final DisplayContent display = new TestDisplayContent.Builder(mAtm, 1400, dh)
.setNotch(notchHeight).setSystemDecorations(true).build();
- mTask = new TaskBuilder(mSupervisor).setDisplay(display).build();
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .setMinAspectRatio(2f)
- .build();
+ final ActivityRecord activity = setUpApp(display, new ActivityBuilder(mAtm)
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT).setMinAspectRatio(2f));
// The per-package override should have no effect, because the manifest aspect ratio is
// larger (2:1)
@@ -1411,13 +1408,9 @@
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE})
public void testOverrideMinAspectRatioLargerThanManifest() {
- setUpDisplaySizeWithApp(1400, 1600);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .setMinAspectRatio(1.1f)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1400, 1600,
+ new ActivityBuilder(mAtm).setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
+ .setMinAspectRatio(1.1f));
// The per-package override should have no effect, because the manifest aspect ratio is
// larger (2:1)
@@ -1430,12 +1423,8 @@
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE})
public void testOverrideMinAspectRatioLarge() {
- setUpDisplaySizeWithApp(1500, 1600);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1500, 1600,
+ new ActivityBuilder(mAtm).setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT));
// The per-package override forces the activity into a 16:9 aspect ratio
assertEquals(1600, activity.getBounds().height());
@@ -1449,13 +1438,8 @@
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE})
public void testOverrideMinAspectRatio_Both() {
// If multiple override aspect ratios are set, we should use the largest one
-
- setUpDisplaySizeWithApp(1400, 1600);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1400, 1600,
+ new ActivityBuilder(mAtm).setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT));
// The per-package override forces the activity into a 16:9 aspect ratio
assertEquals(1600, activity.getBounds().height());
@@ -1470,11 +1454,7 @@
public void testOverrideMinAspectRatioScreenOrientationNotSetThenChangedToPortrait() {
// In this test, the activity's orientation isn't fixed to portrait, therefore the override
// isn't applied.
-
- setUpDisplaySizeWithApp(1000, 1200);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask().build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1000, 1200);
// The per-package override should have no effect
assertEquals(1200, activity.getBounds().height());
@@ -1497,13 +1477,8 @@
public void testOverrideMinAspectRatioScreenOrientationLandscapeThenChangedToPortrait() {
// In this test, the activity's orientation isn't fixed to portrait, therefore the override
// isn't applied.
-
- setUpDisplaySizeWithApp(1000, 1200);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1000, 1200,
+ new ActivityBuilder(mAtm).setScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE));
// The per-package override should have no effect
assertEquals(1200, activity.getBounds().height());
@@ -1524,12 +1499,8 @@
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM})
public void testOverrideMinAspectRatioScreenOrientationPortraitThenChangedToUnspecified() {
- setUpDisplaySizeWithApp(1000, 1200);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1000, 1200,
+ new ActivityBuilder(mAtm).setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT));
// The per-package override forces the activity into a 3:2 aspect ratio
assertEquals(1200, activity.getBounds().height());
@@ -1550,10 +1521,7 @@
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM})
@DisableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_ONLY})
public void testOverrideMinAspectRatioPortraitOnlyDisabledScreenOrientationNotSet() {
- setUpDisplaySizeWithApp(1000, 1200);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask().build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1000, 1200);
// The per-package override forces the activity into a 3:2 aspect ratio
assertEquals(1200, activity.getBounds().height());
@@ -1568,13 +1536,8 @@
public void testOverrideMinAspectRatioPortraitOnlyDisabledScreenOrientationLandscape() {
// In this test, the activity's orientation isn't fixed to portrait, therefore the override
// isn't applied.
-
- setUpDisplaySizeWithApp(1000, 1200);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1000, 1200,
+ new ActivityBuilder(mAtm).setScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE));
// The per-package override forces the activity into a 3:2 aspect ratio
assertEquals(1000 / ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_MEDIUM_VALUE,
@@ -1588,12 +1551,8 @@
// In this test, only OVERRIDE_MIN_ASPECT_RATIO_1_5 is set, which has no effect without
// OVERRIDE_MIN_ASPECT_RATIO being also set.
- setUpDisplaySizeWithApp(1000, 1200);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(1000, 1200,
+ new ActivityBuilder(mAtm).setScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE));
// The per-package override should have no effect
assertEquals(1200, activity.getBounds().height());
@@ -1604,12 +1563,8 @@
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE})
public void testOverrideMinAspectRatioLargeForResizableAppInSplitScreen() {
- setUpDisplaySizeWithApp(/* dw= */ 1000, /* dh= */ 2800);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(/* dw= */ 1000, /* dh= */ 2800,
+ new ActivityBuilder(mAtm).setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT));
final TestSplitOrganizer organizer =
new TestSplitOrganizer(mAtm, activity.getDisplayContent());
@@ -2462,10 +2417,8 @@
public void testOverrideSplitScreenAspectRatioForUnresizablePortraitApps() {
final int displayWidth = 1400;
final int displayHeight = 1600;
- setUpDisplaySizeWithApp(displayWidth, displayHeight);
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setMinAspectRatio(1.1f)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(displayWidth, displayHeight,
+ new ActivityBuilder(mAtm).setMinAspectRatio(1.1f));
// Setup Letterbox Configuration
activity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
activity.mWmService.mAppCompatConfiguration.setFixedOrientationLetterboxAspectRatio(1.5f);
@@ -2483,10 +2436,8 @@
public void testOverrideSplitScreenAspectRatioForUnresizablePortraitAppsFromLandscape() {
final int displayWidth = 1600;
final int displayHeight = 1400;
- setUpDisplaySizeWithApp(displayWidth, displayHeight);
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setMinAspectRatio(1.1f)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(displayWidth, displayHeight,
+ new ActivityBuilder(mAtm).setMinAspectRatio(1.1f));
// Setup Letterbox Configuration
activity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
activity.mWmService.mAppCompatConfiguration.setFixedOrientationLetterboxAspectRatio(1.5f);
@@ -2505,10 +2456,8 @@
public void testOverrideSplitScreenAspectRatioForUnresizableLandscapeApps() {
final int displayWidth = 1400;
final int displayHeight = 1600;
- setUpDisplaySizeWithApp(displayWidth, displayHeight);
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setMinAspectRatio(1.1f)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(displayWidth, displayHeight,
+ new ActivityBuilder(mAtm).setMinAspectRatio(1.1f));
// Setup Letterbox Configuration
activity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
activity.mWmService.mAppCompatConfiguration.setFixedOrientationLetterboxAspectRatio(1.5f);
@@ -2527,10 +2476,8 @@
public void testOverrideSplitScreenAspectRatioForUnresizableLandscapeAppsFromLandscape() {
final int displayWidth = 1600;
final int displayHeight = 1400;
- setUpDisplaySizeWithApp(displayWidth, displayHeight);
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setMinAspectRatio(1.1f)
- .build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(displayWidth, displayHeight,
+ new ActivityBuilder(mAtm).setMinAspectRatio(1.1f));
// Setup Letterbox Configuration
activity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
activity.mWmService.mAppCompatConfiguration.setFixedOrientationLetterboxAspectRatio(1.5f);
@@ -2549,8 +2496,7 @@
mAtm.mDevEnableNonResizableMultiWindow = true;
final int screenWidth = 1800;
final int screenHeight = 1000;
- setUpDisplaySizeWithApp(screenWidth, screenHeight);
- final ActivityRecord activity = getActivityBuilderOnSameTask().build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(screenWidth, screenHeight);
activity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
// Simulate real display with top insets.
@@ -2585,8 +2531,7 @@
mAtm.mDevEnableNonResizableMultiWindow = true;
final int screenWidth = 1000;
final int screenHeight = 1800;
- setUpDisplaySizeWithApp(screenWidth, screenHeight);
- final ActivityRecord activity = getActivityBuilderOnSameTask().build();
+ final ActivityRecord activity = setUpDisplaySizeWithApp(screenWidth, screenHeight);
activity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
// Simulate real display with top insets.
@@ -2616,18 +2561,18 @@
@Test
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
+ ActivityInfo.OVERRIDE_ENABLE_INSETS_DECOUPLED_CONFIGURATION,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN})
public void testOverrideMinAspectRatioExcludePortraitFullscreen() {
- setUpDisplaySizeWithApp(2600, 1600);
- mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- mActivity.mWmService.mAppCompatConfiguration.setFixedOrientationLetterboxAspectRatio(1.33f);
-
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask().build();
+ resizeDisplay(mDisplayContent, 2600, 1600);
+ mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+ mWm.mAppCompatConfiguration.setFixedOrientationLetterboxAspectRatio(1.33f);
// Non-resizable portrait activity
- prepareUnresizable(activity, 0f, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
+ final ActivityRecord activity = setUpApp(mDisplayContent, new ActivityBuilder(mAtm)
+ .setResizeMode(RESIZE_MODE_UNRESIZEABLE)
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT));
// At first, OVERRIDE_MIN_ASPECT_RATIO_PORTRAIT_FULLSCREEN does not apply, because the
// display is in landscape
@@ -2645,16 +2590,16 @@
@Test
@EnableCompatChanges({ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO,
+ ActivityInfo.OVERRIDE_ENABLE_INSETS_DECOUPLED_CONFIGURATION,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_LARGE,
ActivityInfo.OVERRIDE_MIN_ASPECT_RATIO_EXCLUDE_PORTRAIT_FULLSCREEN})
public void testOverrideMinAspectRatioExcludePortraitFullscreenNotApplied() {
// In this test, the activity is not in fullscreen, so the override is not applied
- setUpDisplaySizeWithApp(2600, 1600);
- mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- mActivity.mWmService.mAppCompatConfiguration.setFixedOrientationLetterboxAspectRatio(1.33f);
+ resizeDisplay(mDisplayContent, 2600, 1600);
+ mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
+ mWm.mAppCompatConfiguration.setFixedOrientationLetterboxAspectRatio(1.33f);
- // Create a size compat activity on the same task.
- final ActivityRecord activity = getActivityBuilderOnSameTask().build();
+ final ActivityRecord activity = setUpApp(mDisplayContent);
final TestSplitOrganizer organizer =
new TestSplitOrganizer(mAtm, activity.getDisplayContent());
@@ -2983,6 +2928,7 @@
}
@Test
+ @EnableCompatChanges({ActivityInfo.OVERRIDE_ENABLE_INSETS_DECOUPLED_CONFIGURATION})
public void testDisplayIgnoreOrientationRequest_orientationChangedToUnspecified() {
// Set up a display in landscape and ignoring orientation request.
setUpDisplaySizeWithApp(2800, 1400);
@@ -3437,6 +3383,7 @@
}
@Test
+ @EnableCompatChanges({ActivityInfo.OVERRIDE_ENABLE_INSETS_DECOUPLED_CONFIGURATION})
public void testSupportsNonResizableInSplitScreen_letterboxForAspectRatioRestriction() {
// Support non resizable in multi window
mAtm.mDevEnableNonResizableMultiWindow = true;
@@ -4050,9 +3997,9 @@
@Test
@EnableCompatChanges({ActivityInfo.OVERRIDE_ENABLE_INSETS_DECOUPLED_CONFIGURATION})
public void testPortraitCloseToSquareDisplayWithTaskbar_insetsOverridden_notLetterboxed() {
+ final DisplayContent display = mDisplayContent;
// Set up portrait close to square display.
- setUpDisplaySizeWithApp(2200, 2280);
- final DisplayContent display = mActivity.mDisplayContent;
+ resizeDisplay(display, 2200, 2280);
display.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
// Simulate insets, final app bounds are (0, 0, 2200, 2130) - landscape.
final WindowState navbar = createWindow(null, TYPE_NAVIGATION_BAR, mDisplayContent,
@@ -4067,9 +4014,8 @@
display.sendNewConfiguration();
}
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
- .build();
+ final ActivityRecord activity = setUpApp(display, new ActivityBuilder(mAtm)
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT));
// Activity should not be letterboxed and should have portrait app bounds even though
// orientation is not respected with insets as insets have been decoupled.
@@ -4085,9 +4031,9 @@
@Test
@DisableCompatChanges({ActivityInfo.INSETS_DECOUPLED_CONFIGURATION_ENFORCED})
public void testPortraitCloseToSquareDisplayWithTaskbar_letterboxed() {
+ final DisplayContent display = mDisplayContent;
// Set up portrait close to square display
- setUpDisplaySizeWithApp(2200, 2280);
- final DisplayContent display = mActivity.mDisplayContent;
+ resizeDisplay(display, 2200, 2280);
display.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
// Simulate taskbar, final app bounds are (0, 0, 2200, 2130) - landscape
final WindowState navbar = createWindow(null, TYPE_NAVIGATION_BAR, mDisplayContent,
@@ -4102,9 +4048,8 @@
display.sendNewConfiguration();
}
- final ActivityRecord activity = getActivityBuilderOnSameTask()
- .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT)
- .build();
+ final ActivityRecord activity = setUpApp(display, new ActivityBuilder(mAtm)
+ .setScreenOrientation(SCREEN_ORIENTATION_PORTRAIT));
final Rect bounds = activity.getBounds();
// Activity should be letterboxed and should have portrait app bounds
@@ -4116,9 +4061,9 @@
@Test
@DisableCompatChanges({ActivityInfo.INSETS_DECOUPLED_CONFIGURATION_ENFORCED})
public void testFixedAspectRatioAppInPortraitCloseToSquareDisplay_notInSizeCompat() {
- setUpDisplaySizeWithApp(2200, 2280);
- mActivity.mDisplayContent.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
- final DisplayContent dc = mActivity.mDisplayContent;
+ final DisplayContent dc = mDisplayContent;
+ resizeDisplay(dc, 2200, 2280);
+ dc.setIgnoreOrientationRequest(true /* ignoreOrientationRequest */);
// Simulate taskbar, final app bounds are (0, 0, 2200, 2130) - landscape
final WindowState navbar = createWindow(null, TYPE_NAVIGATION_BAR, mDisplayContent,
"navbar");
@@ -4132,11 +4077,10 @@
dc.sendNewConfiguration();
}
- final ActivityRecord activity = getActivityBuilderOnSameTask()
+ final ActivityRecord activity = setUpApp(dc, new ActivityBuilder(mAtm)
.setResizeMode(RESIZE_MODE_UNRESIZEABLE)
.setScreenOrientation(SCREEN_ORIENTATION_LANDSCAPE)
- .setMinAspectRatio(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE)
- .build();
+ .setMinAspectRatio(OVERRIDE_MIN_ASPECT_RATIO_LARGE_VALUE));
// To force config to update again but with the same landscape orientation.
activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
@@ -4174,13 +4118,10 @@
.setCutout(0, 100, 0, 150)
.build();
- setUpApp(display);
-
- final ActivityRecord activity = getActivityBuilderOnSameTask()
+ final ActivityRecord activity = setUpApp(display, new ActivityBuilder(mAtm)
.setResizeMode(RESIZE_MODE_UNRESIZEABLE)
.setMaxAspectRatio(2.1f)
- .setScreenOrientation(SCREEN_ORIENTATION_UNSPECIFIED)
- .build();
+ .setScreenOrientation(SCREEN_ORIENTATION_UNSPECIFIED));
// The activity height is 2100 and the display's app bounds height is 2050, so the activity
// cannot be aligned inside parentAppBounds and it will fill the parentBounds of the display
@@ -4196,13 +4137,10 @@
.setCutout(100, 0, 150, 0)
.build();
- setUpApp(display);
-
- final ActivityRecord activity = getActivityBuilderOnSameTask()
+ final ActivityRecord activity = setUpApp(display, new ActivityBuilder(mAtm)
.setResizeMode(RESIZE_MODE_UNRESIZEABLE)
.setMaxAspectRatio(2.1f)
- .setScreenOrientation(SCREEN_ORIENTATION_UNSPECIFIED)
- .build();
+ .setScreenOrientation(SCREEN_ORIENTATION_UNSPECIFIED));
// The activity width is 2100 and the display's app bounds width is 2250, so the activity
// can be aligned inside parentAppBounds
assertEquals(activity.getBounds(), new Rect(175, 0, 2275, 1000));
@@ -4216,12 +4154,10 @@
.setCutout(100, 0, 150, 0)
.build();
- setUpApp(display);
- final ActivityRecord activity = getActivityBuilderOnSameTask()
+ final ActivityRecord activity = setUpApp(display, new ActivityBuilder(mAtm)
.setResizeMode(RESIZE_MODE_UNRESIZEABLE)
.setMaxAspectRatio(2.1f)
- .setScreenOrientation(SCREEN_ORIENTATION_UNSPECIFIED)
- .build();
+ .setScreenOrientation(SCREEN_ORIENTATION_UNSPECIFIED));
// The activity width is 2100 and the display's app bounds width is 2050, so the activity
// cannot be aligned inside parentAppBounds and it will fill the parentBounds of the display
assertEquals(activity.getBounds(), display.getBounds());
@@ -5032,17 +4968,13 @@
*/
private ActivityRecord buildActivityRecord(boolean supportsSizeChanges, int resizeMode,
@ScreenOrientation int screenOrientation) {
- return getActivityBuilderOnSameTask()
+ return getActivityBuilderWithoutTask().setTask(mTask)
.setResizeMode(resizeMode)
.setSupportsSizeChanges(supportsSizeChanges)
.setScreenOrientation(screenOrientation)
.build();
}
- private ActivityBuilder getActivityBuilderOnSameTask() {
- return getActivityBuilderWithoutTask().setTask(mTask);
- }
-
private ActivityBuilder getActivityBuilderWithoutTask() {
return new ActivityBuilder(mAtm)
.setComponent(ComponentName.createRelative(mContext,