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

Commit 20aa0aed authored by Filip Gruszczynski's avatar Filip Gruszczynski
Browse files

More granular reporting of size configurations.

There are two improvements in reporting size configurations:
1) duplicates are removed;
2) smallest width is reported separately;

Change-Id: I8f8235c99e6eefcae178e8d61e79ad0c4d6f1144
parent 8462bad5
Loading
Loading
Loading
Loading
+28 −26
Original line number Diff line number Diff line
@@ -2680,19 +2680,10 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
        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);
            int[] horizontal = readIntArray(data);
            int[] vertical = readIntArray(data);
            int[] smallest = readIntArray(data);
            reportSizeConfigurations(token, horizontal, vertical, smallest);
            return true;
        }
        case SUPPRESS_RESIZE_CONFIG_CHANGES_TRANSACTION: {
@@ -2714,6 +2705,16 @@ public abstract class ActivityManagerNative extends Binder implements IActivityM
        return super.onTransact(code, data, reply, flags);
    }

    private int[] readIntArray(Parcel data) {
        int[] smallest = null;
        int smallestSize = data.readInt();
        if (smallestSize > 0) {
            smallest = new int[smallestSize];
            data.readIntArray(smallest);
        }
        return smallest;
    }

    public IBinder asBinder() {
        return this;
    }
@@ -6240,29 +6241,30 @@ class ActivityManagerProxy implements IActivityManager

    @Override
    public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration,
            int[] verticalSizeConfigurations) throws RemoteException {
            int[] verticalSizeConfigurations, int[] smallestSizeConfigurations)
            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);
        }
        writeIntArray(horizontalSizeConfiguration, data);
        writeIntArray(verticalSizeConfigurations, data);
        writeIntArray(smallestSizeConfigurations, data);
        mRemote.transact(REPORT_SIZE_CONFIGURATIONS, data, reply, 0);
        reply.readException();
        data.recycle();
        reply.recycle();
    }

    private static void writeIntArray(int[] array, Parcel data) {
        if (array == null) {
            data.writeInt(0);
        } else {
            data.writeInt(array.length);
            data.writeIntArray(array);
        }
    }

    @Override
    public void suppressResizeConfigChanges(boolean suppress) throws RemoteException {
        Parcel data = Parcel.obtain();
+9 −16
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@ import android.util.LogPrinter;
import android.util.Pair;
import android.util.PrintWriterPrinter;
import android.util.Slog;
import android.util.SparseIntArray;
import android.util.SuperNotCalledException;
import android.view.Display;
import android.view.HardwareRenderer;
@@ -2638,32 +2639,24 @@ public final class ActivityThread {
        if (configurations == null) {
            return;
        }
        IntArray horizontal = new IntArray();
        IntArray vertical = new IntArray();
        SparseIntArray horizontal = new SparseIntArray();
        SparseIntArray vertical = new SparseIntArray();
        SparseIntArray smallest = new SparseIntArray();
        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);
                vertical.put(config.screenHeightDp, 0);
            }
            if (config.screenWidthDp != Configuration.SCREEN_WIDTH_DP_UNDEFINED) {
                horizontal.add(config.screenWidthDp);
                horizontal.put(config.screenWidthDp, 0);
            }
            if (config.smallestScreenWidthDp != Configuration.SMALLEST_SCREEN_WIDTH_DP_UNDEFINED) {
                vertical.add(config.smallestScreenWidthDp);
                horizontal.add(config.smallestScreenWidthDp);
                smallest.put(config.smallestScreenWidthDp, 0);
            }
        }
        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);
            ActivityManagerNative.getDefault().reportSizeConfigurations(r.token,
                    horizontal.copyKeys(), vertical.copyKeys(), smallest.copyKeys());
        } catch (RemoteException ex) {
        }

+2 −1
Original line number Diff line number Diff line
@@ -123,7 +123,8 @@ public interface IActivityManager extends IInterface {
    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;
            int[] verticalSizeConfigurations, int[] smallestWidthConfigurations)
            throws RemoteException;
    public String getCallingPackage(IBinder token) throws RemoteException;
    public ComponentName getCallingActivity(IBinder token) throws RemoteException;
    public List<IAppTask> getAppTasks(String callingPackage) throws RemoteException;
+14 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ package android.util;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.GrowingArrayUtils;

import java.util.Arrays;

import libcore.util.EmptyArray;

/**
@@ -238,6 +240,18 @@ public class SparseIntArray implements Cloneable {
        mSize++;
    }

    /**
     * Provides a copy of keys.
     *
     * @hide
     * */
    public int[] copyKeys() {
        if (size() == 0) {
            return null;
        }
        return Arrays.copyOf(mKeys, size());
    }

    /**
     * {@inheritDoc}
     *
+2 −2
Original line number Diff line number Diff line
@@ -6527,7 +6527,7 @@ public final class ActivityManagerService extends ActivityManagerNative
    @Override
    public void reportSizeConfigurations(IBinder token, int[] horizontalSizeConfiguration,
            int[] verticalSizeConfigurations) {
            int[] verticalSizeConfigurations, int[] smallestSizeConfigurations) {
        if (DEBUG_CONFIGURATION) Slog.v(TAG, "Report configuration: " + token + " "
                + horizontalSizeConfiguration + " " + verticalSizeConfigurations);
        synchronized (this) {
@@ -6537,7 +6537,7 @@ public final class ActivityManagerService extends ActivityManagerNative
                        + "found for: " + token);
            }
            record.setSizeConfigurations(horizontalSizeConfiguration,
                    verticalSizeConfigurations);
                    verticalSizeConfigurations, smallestSizeConfigurations);
        }
    }
Loading