diff options
| author | 2017-07-26 14:26:18 +0000 | |
|---|---|---|
| committer | 2017-07-26 14:26:18 +0000 | |
| commit | a9ba9c3ed61f75f6712ae60ab77c3bafdd638b90 (patch) | |
| tree | 058060d9d7ea6935b26dd7dbd03ce6472c46a13d | |
| parent | 6b46beea25325db6c1b1054d38a40f53c1de7ff7 (diff) | |
| parent | 512e5d1b9b2312e25a4db59e33502f7e6b043137 (diff) | |
Merge "Do not report app bound differences as a Configuration change." into oc-dr1-dev
am: 512e5d1b9b
Change-Id: I2853f3545e7250d2d6f0a17399e4073c83d431a7
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 f098f2a7c143..16c834d18b9e 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 @@ -775,6 +773,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 7a00a549a293..c09947c402fb 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; @@ -2601,6 +2602,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 |