diff options
4 files changed, 32 insertions, 3 deletions
diff --git a/core/java/android/content/pm/ActivityInfo.java b/core/java/android/content/pm/ActivityInfo.java index bab39802da3f..fec284716edc 100644 --- a/core/java/android/content/pm/ActivityInfo.java +++ b/core/java/android/content/pm/ActivityInfo.java @@ -28,8 +28,6 @@ import android.util.Printer; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; -import static android.view.WindowManager.LayoutParams.ROTATION_ANIMATION_ROTATE; - /** * Information you can retrieve about a particular application * activity or receiver. This corresponds to information collected @@ -792,6 +790,16 @@ public class ActivityInfo extends ComponentInfo * {@link Configuration}. */ public static final int CONFIG_ROTATION = 0x20000000; + /** + * Bit in {@link #configChanges} that indicates that the activity + * can itself handle changes to the app bounds. Set from the + * {@link android.R.attr#configChanges} attribute. This is + * not a core resource configuration, but a higher-level value, so its + * constant starts at the high bits. + * @hide We do not want apps to handle this. It will eventually be moved out of + * {@link Configuration}. + */ + public static final int CONFIG_APP_BOUNDS = 0x10000000; /** @hide * Unfortunately the constants for config changes in native code are diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 68d4cd8c5f7d..7b96c6a3b5f5 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -1445,7 +1445,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration if ((compareUndefined || delta.appBounds != null) && appBounds != delta.appBounds && (appBounds == null || !appBounds.equals(delta.appBounds))) { - changed |= ActivityInfo.CONFIG_SCREEN_SIZE; + changed |= ActivityInfo.CONFIG_APP_BOUNDS; } return changed; diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java index 410824e01e35..3c84941cf72e 100644 --- a/services/core/java/com/android/server/am/ActivityRecord.java +++ b/services/core/java/com/android/server/am/ActivityRecord.java @@ -41,6 +41,7 @@ import static android.content.Intent.CATEGORY_HOME; import static android.content.Intent.CATEGORY_LAUNCHER; import static android.content.Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS; import static android.content.Intent.FLAG_ACTIVITY_NO_HISTORY; +import static android.content.pm.ActivityInfo.CONFIG_APP_BOUNDS; import static android.content.pm.ActivityInfo.CONFIG_ORIENTATION; import static android.content.pm.ActivityInfo.CONFIG_ROTATION; import static android.content.pm.ActivityInfo.CONFIG_SCREEN_LAYOUT; @@ -2576,6 +2577,12 @@ final class ActivityRecord extends ConfigurationContainer implements AppWindowCo if ((changes & CONFIG_ROTATION) != 0) { changes &= ~CONFIG_ROTATION; } + + // We don't want app bound changes to cause relaunches. + if ((changes & CONFIG_APP_BOUNDS) != 0) { + changes &= ~CONFIG_APP_BOUNDS; + } + return changes; } diff --git a/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java b/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java index 520666b6ab8d..f7ea0c47b874 100644 --- a/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java +++ b/services/tests/servicestests/src/com/android/server/wm/AppBoundsTests.java @@ -17,6 +17,7 @@ package com.android.server.wm; import android.app.ActivityManager; +import android.content.pm.ActivityInfo; import android.content.res.Configuration; import android.graphics.Rect; import android.view.DisplayInfo; @@ -49,6 +50,19 @@ public class AppBoundsTests extends WindowTestsBase { } /** + * Ensures that appBounds causes {@link android.content.pm.ActivityInfo.CONFIG_APP_BOUNDS} diff. + */ + @Test + public void testAppBoundsConfigurationDiff() { + final Configuration config = new Configuration(); + final Configuration config2 = new Configuration(); + config.appBounds = new Rect(0, 1, 1, 0); + config2.appBounds = new Rect(0, 2, 2, 0); + + assertEquals(ActivityInfo.CONFIG_APP_BOUNDS, config.diff(config2)); + } + + /** * Ensures the configuration app bounds at the root level match the app dimensions. */ @Test |