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

Commit 4f0c1e80 authored by Filip Gruszczynski's avatar Filip Gruszczynski Committed by Android (Google) Code Review
Browse files

Merge "Only relaunch activity on significant size configuration changes."

parents d846b723 2349332f
Loading
Loading
Loading
Loading
+45 −2
Original line number Diff line number Diff line
@@ -2653,6 +2653,24 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
            reply.writeNoException();
            return true;
        }
        case REPORT_SIZE_CONFIGURATIONS: {
            data.enforceInterface(IActivityManager.descriptor);
            IBinder token = data.readStrongBinder();
            int horizontalSize = data.readInt();
            int[] horizontal = null;
            if (horizontalSize > 0) {
                horizontal = new int[horizontalSize];
                data.readIntArray(horizontal);
            }
            int[] vertical = null;
            int verticalSize = data.readInt();
            if (verticalSize > 0) {
                vertical = new int[verticalSize];
                data.readIntArray(vertical);
            }
            reportSizeConfigurations(token, horizontal, vertical);
            return true;
        }
        }

        return super.onTransact(code, data, reply, flags);
@@ -6146,5 +6164,30 @@ class ActivityManagerProxy implements IActivityManager
        return stackId;
    }

    @Override
    public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration,
            int[] verticalSizeConfigurations) throws RemoteException {
        Parcel data = Parcel.obtain();
        Parcel reply = Parcel.obtain();
        data.writeInterfaceToken(IActivityManager.descriptor);
        data.writeStrongBinder(token);
        if (horizontalSizeConfiguration == null) {
            data.writeInt(0);
        } else {
            data.writeInt(horizontalSizeConfiguration.length);
            data.writeIntArray(horizontalSizeConfiguration);
        }
        if (verticalSizeConfigurations == null) {
            data.writeInt(0);
        } else {
            data.writeInt(verticalSizeConfigurations.length);
            data.writeIntArray(verticalSizeConfigurations);
        }
        mRemote.transact(REPORT_SIZE_CONFIGURATIONS, data, reply, 0);
        reply.readException();
        data.recycle();
        reply.recycle();
    }

    private IBinder mRemote;
}
+38 −0
Original line number Diff line number Diff line
@@ -82,6 +82,7 @@ import android.util.AndroidRuntimeException;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
import android.util.EventLog;
import android.util.IntArray;
import android.util.Log;
import android.util.LogPrinter;
import android.util.Pair;
@@ -2504,6 +2505,7 @@ public final class ActivityThread {

        if (a != null) {
            r.createdConfig = new Configuration(mConfiguration);
            reportSizeConfigurations(r);
            Bundle oldState = r.state;
            handleResumeActivity(r.token, false, r.isForward,
                    !r.activity.mFinished && !r.startsNotResumed);
@@ -2563,6 +2565,42 @@ public final class ActivityThread {
        }
    }

    private void reportSizeConfigurations(ActivityClientRecord r) {
        Configuration[] configurations = r.activity.getResources().getSizeConfigurations();
        if (configurations == null) {
            return;
        }
        IntArray horizontal = new IntArray();
        IntArray vertical = new IntArray();
        for (int i = configurations.length - 1; i >= 0; i--) {
            Configuration config = configurations[i];
            if (config.screenHeightDp != Configuration.SCREEN_HEIGHT_DP_UNDEFINED) {
                vertical.add(config.screenHeightDp);
            }
            if (config.screenWidthDp != Configuration.SCREEN_WIDTH_DP_UNDEFINED) {
                horizontal.add(config.screenWidthDp);
            }
            if (config.smallestScreenWidthDp != Configuration.SMALLEST_SCREEN_WIDTH_DP_UNDEFINED) {
                vertical.add(config.smallestScreenWidthDp);
                horizontal.add(config.smallestScreenWidthDp);
            }
        }
        int[] horizontalArray = null;
        if (horizontal.size() > 0) {
            horizontalArray = horizontal.toArray();
        }
        int[] verticalArray = null;
        if (vertical.size() > 0) {
            verticalArray = vertical.toArray();
        }
        try {
            ActivityManagerNative.getDefault().reportSizeConfigurations(r.token, horizontalArray,
                    verticalArray);
        } catch (RemoteException ex) {
        }

    }

    private void deliverNewIntents(ActivityClientRecord r, List<ReferrerIntent> intents) {
        final int N = intents.size();
        for (int i=0; i<N; i++) {
+3 −0
Original line number Diff line number Diff line
@@ -121,6 +121,8 @@ public interface IActivityManager extends IInterface {
            PersistableBundle persistentState, CharSequence description) throws RemoteException;
    public void activitySlept(IBinder token) throws RemoteException;
    public void activityDestroyed(IBinder token) throws RemoteException;
    public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration,
            int[] verticalSizeConfigurations) throws RemoteException;
    public String getCallingPackage(IBinder token) throws RemoteException;
    public ComponentName getCallingActivity(IBinder token) throws RemoteException;
    public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException;
@@ -884,4 +886,5 @@ public interface IActivityManager extends IInterface {
    int POSITION_TASK_IN_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 342;
    int GET_ACTIVITY_STACK_ID_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 343;
    int MOVE_ACTIVITY_TO_STACK_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 344;
    int REPORT_SIZE_CONFIGURATIONS = IBinder.FIRST_CALL_TRANSACTION + 345;
}
+3 −0
Original line number Diff line number Diff line
@@ -691,6 +691,9 @@ public final class AssetManager implements AutoCloseable {
     */
    public native final String[] getLocales();

    /** {@hide} */
    public native final Configuration[] getSizeConfigurations();

    /**
     * Change the configuation used when retrieving resources.  Not for use by
     * applications.
+6 −1
Original line number Diff line number Diff line
@@ -2140,6 +2140,11 @@ public class Resources {
        return mConfiguration;
    }

    /** @hide */
    public Configuration[] getSizeConfigurations() {
        return mAssets.getSizeConfigurations();
    };

    /**
     * Return the compatibility mode information for the application.
     * The returned object should be treated as read-only.
Loading