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

Commit b4a028b7 authored by Anna Trostanetski's avatar Anna Trostanetski Committed by Automerger Merge Worker
Browse files

Merge "Introduce listUIChanges API for developer UI" into rvc-dev am: 6b408f80

Change-Id: Ia360cfc1f7a4a8ad168275f8ba715fd5c27abdbf
parents df73e3f2 6b408f80
Loading
Loading
Loading
Loading
+37 −0
Original line number Original line Diff line number Diff line
@@ -93,6 +93,43 @@ public class CompatibilityChangeInfo implements Parcelable {
        dest.writeString(mDescription);
        dest.writeString(mDescription);
    }
    }


    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder("CompatibilityChangeInfo(")
                .append(getId());
        if (getName() != null) {
            sb.append("; name=").append(getName());
        }
        if (getEnableAfterTargetSdk() != -1) {
            sb.append("; enableAfterTargetSdk=").append(getEnableAfterTargetSdk());
        }
        if (getDisabled()) {
            sb.append("; disabled");
        }
        if (getLoggingOnly()) {
            sb.append("; loggingOnly");
        }
        return sb.append(")").toString();
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || !(o instanceof CompatibilityChangeInfo)) {
            return false;
        }
        CompatibilityChangeInfo that = (CompatibilityChangeInfo) o;
        return this.mChangeId == that.mChangeId
                && this.mName.equals(that.mName)
                && this.mEnableAfterTargetSdk == that.mEnableAfterTargetSdk
                && this.mDisabled == that.mDisabled
                && this.mLoggingOnly == that.mLoggingOnly
                && this.mDescription.equals(that.mDescription);

    }

    public static final Parcelable.Creator<CompatibilityChangeInfo> CREATOR =
    public static final Parcelable.Creator<CompatibilityChangeInfo> CREATOR =
            new Parcelable.Creator<CompatibilityChangeInfo>() {
            new Parcelable.Creator<CompatibilityChangeInfo>() {


+8 −0
Original line number Original line Diff line number Diff line
@@ -221,6 +221,14 @@ interface IPlatformCompat
     */
     */
    CompatibilityChangeInfo[] listAllChanges();
    CompatibilityChangeInfo[] listAllChanges();


    /**
    * List the compatibility changes that should be present in the UI.
    * Filters out certain changes like e.g. logging only.
    *
    * @return An array of {@link CompatChangeInfo}.
    */
    CompatibilityChangeInfo[] listUIChanges();

    /**
    /**
     * Get an instance that can determine whether a changeid can be overridden for a package name.
     * Get an instance that can determine whether a changeid can be overridden for a package name.
     */
     */
+24 −0
Original line number Original line Diff line number Diff line
@@ -28,6 +28,7 @@ import android.content.Context;
import android.content.pm.ApplicationInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageManagerInternal;
import android.os.Binder;
import android.os.Binder;
import android.os.Build;
import android.os.RemoteException;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserHandle;
import android.util.Slog;
import android.util.Slog;
@@ -44,6 +45,7 @@ import com.android.server.LocalServices;


import java.io.FileDescriptor;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.io.PrintWriter;
import java.util.Arrays;


/**
/**
 * System server internal API for gating and reporting compatibility changes.
 * System server internal API for gating and reporting compatibility changes.
@@ -56,6 +58,9 @@ public class PlatformCompat extends IPlatformCompat.Stub {
    private final ChangeReporter mChangeReporter;
    private final ChangeReporter mChangeReporter;
    private final CompatConfig mCompatConfig;
    private final CompatConfig mCompatConfig;


    private static int sMinTargetSdk = Build.VERSION_CODES.P;
    private static int sMaxTargetSdk = Build.VERSION_CODES.Q;

    public PlatformCompat(Context context) {
    public PlatformCompat(Context context) {
        mContext = context;
        mContext = context;
        mChangeReporter = new ChangeReporter(
        mChangeReporter = new ChangeReporter(
@@ -220,6 +225,12 @@ public class PlatformCompat extends IPlatformCompat.Stub {
        return mCompatConfig.dumpChanges();
        return mCompatConfig.dumpChanges();
    }
    }


    @Override
    public CompatibilityChangeInfo[] listUIChanges() {
        return Arrays.stream(listAllChanges()).filter(
                x -> isShownInUI(x)).toArray(CompatibilityChangeInfo[]::new);
    }

    /**
    /**
     * Check whether the change is known to the compat config.
     * Check whether the change is known to the compat config.
     *
     *
@@ -339,4 +350,17 @@ public class PlatformCompat extends IPlatformCompat.Stub {
        checkCompatChangeReadPermission();
        checkCompatChangeReadPermission();
        checkCompatChangeLogPermission();
        checkCompatChangeLogPermission();
    }
    }

    private boolean isShownInUI(CompatibilityChangeInfo change) {
        if (change.getLoggingOnly()) {
            return false;
        }
        if (change.getEnableAfterTargetSdk() != 0) {
            if (change.getEnableAfterTargetSdk() < sMinTargetSdk
                    || change.getEnableAfterTargetSdk() > sMaxTargetSdk) {
                return false;
            }
        }
        return true;
    }
}
}
+43 −0
Original line number Original line Diff line number Diff line
@@ -30,10 +30,12 @@ import static org.testng.Assert.assertThrows;
import android.content.Context;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager;
import android.content.pm.PackageManagerInternal;
import android.content.pm.PackageManagerInternal;
import android.os.Build;


import androidx.test.runner.AndroidJUnit4;
import androidx.test.runner.AndroidJUnit4;


import com.android.internal.compat.AndroidBuildClassifier;
import com.android.internal.compat.AndroidBuildClassifier;
import com.android.internal.compat.CompatibilityChangeInfo;
import com.android.server.LocalServices;
import com.android.server.LocalServices;


import org.junit.Before;
import org.junit.Before;
@@ -77,6 +79,47 @@ public class PlatformCompatTest {
        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal);
        LocalServices.addService(PackageManagerInternal.class, mPackageManagerInternal);
    }
    }


    @Test
    public void testListAllChanges() {
        mCompatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext)
                .addEnabledChangeWithId(1L)
                .addDisabledChangeWithIdAndName(2L, "change2")
                .addTargetSdkChangeWithIdAndDescription(Build.VERSION_CODES.O, 3L, "description")
                .addTargetSdkChangeWithId(Build.VERSION_CODES.P, 4L)
                .addTargetSdkChangeWithId(Build.VERSION_CODES.Q, 5L)
                .addTargetSdkChangeWithId(Build.VERSION_CODES.R, 6L)
                .addLoggingOnlyChangeWithId(7L)
                .build();
        mPlatformCompat = new PlatformCompat(mContext, mCompatConfig);
        assertThat(mPlatformCompat.listAllChanges()).asList().containsExactly(
                new CompatibilityChangeInfo(1L, "", -1, false, false, ""),
                new CompatibilityChangeInfo(2L, "change2", -1, true, false, ""),
                new CompatibilityChangeInfo(3L, "", Build.VERSION_CODES.O, false, false,
                        "description"),
                new CompatibilityChangeInfo(4L, "", Build.VERSION_CODES.P, false, false, ""),
                new CompatibilityChangeInfo(5L, "", Build.VERSION_CODES.Q, false, false, ""),
                new CompatibilityChangeInfo(6L, "", Build.VERSION_CODES.R, false, false, ""),
                new CompatibilityChangeInfo(7L, "", -1, false, true, ""));
    }

    public void testListUIChanges() {
        mCompatConfig = CompatConfigBuilder.create(mBuildClassifier, mContext)
                .addEnabledChangeWithId(1L)
                .addDisabledChangeWithIdAndName(2L, "change2")
                .addTargetSdkChangeWithIdAndDescription(Build.VERSION_CODES.O, 3L, "description")
                .addTargetSdkChangeWithId(Build.VERSION_CODES.P, 4L)
                .addTargetSdkChangeWithId(Build.VERSION_CODES.Q, 5L)
                .addTargetSdkChangeWithId(Build.VERSION_CODES.R, 6L)
                .addLoggingOnlyChangeWithId(7L)
                .build();
        mPlatformCompat = new PlatformCompat(mContext, mCompatConfig);
        assertThat(mPlatformCompat.listUIChanges()).asList().containsExactly(
                new CompatibilityChangeInfo(1L, "", -1, false, false, ""),
                new CompatibilityChangeInfo(2L, "change2", -1, true, false, ""),
                new CompatibilityChangeInfo(4L, "", Build.VERSION_CODES.P, false, false, ""),
                new CompatibilityChangeInfo(5L, "", Build.VERSION_CODES.Q, false, false, ""));
    }

    @Test
    @Test
    public void testRegisterListenerToSameIdThrows() throws Exception {
    public void testRegisterListenerToSameIdThrows() throws Exception {
        // Registering a listener to change 1 is successful.
        // Registering a listener to change 1 is successful.