From 83301a933ff28eed978b16b54bc569fbe76ef499 Mon Sep 17 00:00:00 2001 From: Wale Ogunwale Date: Thu, 24 Sep 2015 15:54:08 -0700 Subject: Added am command to suppress config. changes during task resize. This command is useful for testing during development, but at some point we will decide if allowing configuration changes during resizing is okay or merge in http://ag/759766 to suppress configuration changes during resizing and deliver the new config. to the app. This functionality will be reverted once we decide. Bug: 24380097 Change-Id: I223c08bc939e564a78e70994b599770be9d4730d --- cmds/am/src/com/android/commands/am/Am.java | 15 +++++++++++++++ core/java/android/app/ActivityManagerNative.java | 19 +++++++++++++++++++ core/java/android/app/IActivityManager.java | 3 +++ .../com/android/server/am/ActivityManagerService.java | 11 +++++++++++ .../java/com/android/server/am/ActivityStack.java | 10 ++++++---- 5 files changed, 54 insertions(+), 4 deletions(-) diff --git a/cmds/am/src/com/android/commands/am/Am.java b/cmds/am/src/com/android/commands/am/Am.java index 20ac8d83ebad..5c9fd51d606d 100644 --- a/cmds/am/src/com/android/commands/am/Am.java +++ b/cmds/am/src/com/android/commands/am/Am.java @@ -163,6 +163,7 @@ public class Am extends BaseCommand { " am task drag-task-test [DELAY_MS] \n" + " am task size-task-test [DELAY_MS] \n" + " am get-config\n" + + " am suppress-resize-config-changes \n" + " am set-inactive [--user ] true|false\n" + " am get-inactive [--user ] \n" + " am send-trim-memory [--user ] \n" + @@ -326,6 +327,8 @@ public class Am extends BaseCommand { "\n" + "am get-config: retrieve the configuration and any recent configurations\n" + " of the device.\n" + + "am suppress-resize-config-changes: suppresses configuration changes due to\n" + + " user resizing an activity/task.\n" + "\n" + "am set-inactive: sets the inactive state of an app.\n" + "\n" + @@ -453,6 +456,8 @@ public class Am extends BaseCommand { runTask(); } else if (op.equals("get-config")) { runGetConfig(); + } else if (op.equals("suppress-resize-config-changes")) { + runSuppressResizeConfigChanges(); } else if (op.equals("set-inactive")) { runSetInactive(); } else if (op.equals("get-inactive")) { @@ -2606,6 +2611,16 @@ public class Am extends BaseCommand { } } + private void runSuppressResizeConfigChanges() throws Exception { + boolean suppress = Boolean.valueOf(nextArgRequired()); + + try { + mAm.suppressResizeConfigChanges(suppress); + } catch (RemoteException e) { + System.err.println("Error suppressing resize config changes: " + e); + } + } + private void runSetInactive() throws Exception { int userId = UserHandle.USER_CURRENT; diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java index 3864a4bba1f9..cb1a89fd6601 100644 --- a/core/java/android/app/ActivityManagerNative.java +++ b/core/java/android/app/ActivityManagerNative.java @@ -2682,6 +2682,13 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM reportSizeConfigurations(token, horizontal, vertical); return true; } + case SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION: { + data.enforceInterface(IActivityManager.descriptor); + final boolean suppress = data.readInt() == 1; + suppressResizeConfigChanges(suppress); + reply.writeNoException(); + return true; + } } return super.onTransact(code, data, reply, flags); @@ -6216,5 +6223,17 @@ class ActivityManagerProxy implements IActivityManager reply.recycle(); } + @Override + public void suppressResizeConfigChanges(boolean suppress) throws RemoteException { + Parcel data = Parcel.obtain(); + Parcel reply = Parcel.obtain(); + data.writeInterfaceToken(IActivityManager.descriptor); + data.writeInt(suppress ? 1 : 0); + mRemote.transact(SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION, data, reply, 0); + reply.readException(); + data.recycle(); + reply.recycle(); + } + private IBinder mRemote; } diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java index 2180bcc1e4b9..478fdd14e093 100644 --- a/core/java/android/app/IActivityManager.java +++ b/core/java/android/app/IActivityManager.java @@ -535,6 +535,8 @@ public interface IActivityManager extends IInterface { public int getActivityStackId(IBinder token) throws RemoteException; public void moveActivityToStack(IBinder token, int stackId) throws RemoteException; + public void suppressResizeConfigChanges(boolean suppress) throws RemoteException; + /* * Private non-Binder interfaces */ @@ -891,4 +893,5 @@ public interface IActivityManager extends IInterface { int MOVE_ACTIVITY_TO_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 344; int REPORT_SIZE_CONFIGURATIONS = IBinder.FIRST_CALL_TRANSACTION + 345; int MOVE_TASK_TO_DOCKED_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 346; + int SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 347; } diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java index 07a7af46e265..bd10c63edbda 100644 --- a/services/core/java/com/android/server/am/ActivityManagerService.java +++ b/services/core/java/com/android/server/am/ActivityManagerService.java @@ -994,6 +994,8 @@ public final class ActivityManagerService extends ActivityManagerNative */ int mConfigurationSeq = 0; + boolean mSuppressResizeConfigChanges = false; + /** * Hardware-reported OpenGLES version. */ @@ -17514,6 +17516,15 @@ public final class ActivityManagerService extends ActivityManagerNative return ci; } + @Override + public void suppressResizeConfigChanges(boolean suppress) throws RemoteException { + enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS, + "suppressResizeConfigChanges()"); + synchronized (this) { + mSuppressResizeConfigChanges = suppress; + } + } + @Override public void updatePersistentConfiguration(Configuration values) { enforceCallingPermission(android.Manifest.permission.CHANGE_CONFIGURATION, diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java index 9809c2e4906c..5d106dce294b 100644 --- a/services/core/java/com/android/server/am/ActivityStack.java +++ b/services/core/java/com/android/server/am/ActivityStack.java @@ -4181,8 +4181,12 @@ final class ActivityStack { | ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE | ActivityInfo.CONFIG_ORIENTATION)) == 0; } - private boolean relaunchActivityLocked(ActivityRecord r, int changes, boolean andResume, - boolean preserveWindow) { + private void relaunchActivityLocked( + ActivityRecord r, int changes, boolean andResume, boolean preserveWindow) { + if (mService.mSuppressResizeConfigChanges && preserveWindow) { + return; + } + List results = null; List newIntents = null; if (andResume) { @@ -4222,8 +4226,6 @@ final class ActivityStack { mHandler.removeMessages(PAUSE_TIMEOUT_MSG, r); r.state = ActivityState.PAUSED; } - - return true; } boolean willActivityBeVisibleLocked(IBinder token) { -- cgit v1.2.3-59-g8ed1b