Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 83301a93 authored by Wale Ogunwale's avatar Wale Ogunwale
Browse files

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
parent 6e3cc291
Loading
Loading
Loading
Loading
+15 −0
Original line number Original line Diff line number Diff line
@@ -163,6 +163,7 @@ public class Am extends BaseCommand {
                "       am task drag-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS] \n" +
                "       am task drag-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS] \n" +
                "       am task size-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS] \n" +
                "       am task size-task-test <TASK_ID> <STEP_SIZE> [DELAY_MS] \n" +
                "       am get-config\n" +
                "       am get-config\n" +
                "       am suppress-resize-config-changes <true|false>\n" +
                "       am set-inactive [--user <USER_ID>] <PACKAGE> true|false\n" +
                "       am set-inactive [--user <USER_ID>] <PACKAGE> true|false\n" +
                "       am get-inactive [--user <USER_ID>] <PACKAGE>\n" +
                "       am get-inactive [--user <USER_ID>] <PACKAGE>\n" +
                "       am send-trim-memory [--user <USER_ID>] <PROCESS>\n" +
                "       am send-trim-memory [--user <USER_ID>] <PROCESS>\n" +
@@ -326,6 +327,8 @@ public class Am extends BaseCommand {
                "\n" +
                "\n" +
                "am get-config: retrieve the configuration and any recent configurations\n" +
                "am get-config: retrieve the configuration and any recent configurations\n" +
                "  of the device.\n" +
                "  of the device.\n" +
                "am suppress-resize-config-changes: suppresses configuration changes due to\n" +
                "  user resizing an activity/task.\n" +
                "\n" +
                "\n" +
                "am set-inactive: sets the inactive state of an app.\n" +
                "am set-inactive: sets the inactive state of an app.\n" +
                "\n" +
                "\n" +
@@ -453,6 +456,8 @@ public class Am extends BaseCommand {
            runTask();
            runTask();
        } else if (op.equals("get-config")) {
        } else if (op.equals("get-config")) {
            runGetConfig();
            runGetConfig();
        } else if (op.equals("suppress-resize-config-changes")) {
            runSuppressResizeConfigChanges();
        } else if (op.equals("set-inactive")) {
        } else if (op.equals("set-inactive")) {
            runSetInactive();
            runSetInactive();
        } else if (op.equals("get-inactive")) {
        } 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 {
    private void runSetInactive() throws Exception {
        int userId = UserHandle.USER_CURRENT;
        int userId = UserHandle.USER_CURRENT;


+19 −0
Original line number Original line Diff line number Diff line
@@ -2682,6 +2682,13 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
            reportSizeConfigurations(token, horizontal, vertical);
            reportSizeConfigurations(token, horizontal, vertical);
            return true;
            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);
        return super.onTransact(code, data, reply, flags);
@@ -6216,5 +6223,17 @@ class ActivityManagerProxy implements IActivityManager
        reply.recycle();
        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;
    private IBinder mRemote;
}
}
+3 −0
Original line number Original line Diff line number Diff line
@@ -535,6 +535,8 @@ public interface IActivityManager extends IInterface {
    public int getActivityStackId(IBinder token) throws RemoteException;
    public int getActivityStackId(IBinder token) throws RemoteException;
    public void moveActivityToStack(IBinder token, int stackId) throws RemoteException;
    public void moveActivityToStack(IBinder token, int stackId) throws RemoteException;


    public void suppressResizeConfigChanges(boolean suppress) throws RemoteException;

    /*
    /*
     * Private non-Binder interfaces
     * 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 MOVE_ACTIVITY_TO_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 344;
    int REPORT_SIZE_CONFIGURATIONS = IBinder.FIRST_CALL_TRANSACTION + 345;
    int REPORT_SIZE_CONFIGURATIONS = IBinder.FIRST_CALL_TRANSACTION + 345;
    int MOVE_TASK_TO_DOCKED_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 346;
    int MOVE_TASK_TO_DOCKED_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 346;
    int SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 347;
}
}
+11 −0
Original line number Original line Diff line number Diff line
@@ -994,6 +994,8 @@ public final class ActivityManagerService extends ActivityManagerNative
     */
     */
    int mConfigurationSeq = 0;
    int mConfigurationSeq = 0;
    boolean mSuppressResizeConfigChanges = false;
    /**
    /**
     * Hardware-reported OpenGLES version.
     * Hardware-reported OpenGLES version.
     */
     */
@@ -17514,6 +17516,15 @@ public final class ActivityManagerService extends ActivityManagerNative
        return ci;
        return ci;
    }
    }
    @Override
    public void suppressResizeConfigChanges(boolean suppress) throws RemoteException {
        enforceCallingPermission(android.Manifest.permission.MANAGE_ACTIVITY_STACKS,
                "suppressResizeConfigChanges()");
        synchronized (this) {
            mSuppressResizeConfigChanges = suppress;
        }
    }
    @Override
    @Override
    public void updatePersistentConfiguration(Configuration values) {
    public void updatePersistentConfiguration(Configuration values) {
        enforceCallingPermission(android.Manifest.permission.CHANGE_CONFIGURATION,
        enforceCallingPermission(android.Manifest.permission.CHANGE_CONFIGURATION,
+6 −4
Original line number Original line Diff line number Diff line
@@ -4181,8 +4181,12 @@ final class ActivityStack {
                | ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE | ActivityInfo.CONFIG_ORIENTATION)) == 0;
                | ActivityInfo.CONFIG_SMALLEST_SCREEN_SIZE | ActivityInfo.CONFIG_ORIENTATION)) == 0;
    }
    }


    private boolean relaunchActivityLocked(ActivityRecord r, int changes, boolean andResume,
    private void relaunchActivityLocked(
            boolean preserveWindow) {
            ActivityRecord r, int changes, boolean andResume, boolean preserveWindow) {
        if (mService.mSuppressResizeConfigChanges && preserveWindow) {
            return;
        }

        List<ResultInfo> results = null;
        List<ResultInfo> results = null;
        List<ReferrerIntent> newIntents = null;
        List<ReferrerIntent> newIntents = null;
        if (andResume) {
        if (andResume) {
@@ -4222,8 +4226,6 @@ final class ActivityStack {
            mHandler.removeMessages(PAUSE_TIMEOUT_MSG, r);
            mHandler.removeMessages(PAUSE_TIMEOUT_MSG, r);
            r.state = ActivityState.PAUSED;
            r.state = ActivityState.PAUSED;
        }
        }

        return true;
    }
    }


    boolean willActivityBeVisibleLocked(IBinder token) {
    boolean willActivityBeVisibleLocked(IBinder token) {