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

Commit 1ac8aa5a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Changing IntentSender to become a listener." into sc-dev

parents 27b89a6d 6f80c512
Loading
Loading
Loading
Loading
+5 −2
Original line number Diff line number Diff line
@@ -12298,7 +12298,7 @@ package android.content.pm {
    method @Deprecated public abstract void removePackageFromPreferred(@NonNull String);
    method public abstract void removePermission(@NonNull String);
    method @RequiresPermission(value="android.permission.WHITELIST_RESTRICTED_PERMISSIONS", conditional=true) public boolean removeWhitelistedRestrictedPermission(@NonNull String, @NonNull String, int);
    method public void requestChecksums(@NonNull String, boolean, int, @NonNull java.util.List<java.security.cert.Certificate>, @NonNull android.content.IntentSender) throws java.security.cert.CertificateEncodingException, android.content.pm.PackageManager.NameNotFoundException;
    method public void requestChecksums(@NonNull String, boolean, int, @NonNull java.util.List<java.security.cert.Certificate>, @NonNull android.content.pm.PackageManager.OnChecksumsReadyListener) throws java.security.cert.CertificateEncodingException, android.content.pm.PackageManager.NameNotFoundException;
    method @Nullable public abstract android.content.pm.ResolveInfo resolveActivity(@NonNull android.content.Intent, int);
    method @Nullable public abstract android.content.pm.ProviderInfo resolveContentProvider(@NonNull String, int);
    method @Nullable public abstract android.content.pm.ResolveInfo resolveService(@NonNull android.content.Intent, int);
@@ -12318,7 +12318,6 @@ package android.content.pm {
    field public static final int COMPONENT_ENABLED_STATE_DISABLED_USER = 3; // 0x3
    field public static final int COMPONENT_ENABLED_STATE_ENABLED = 1; // 0x1
    field public static final int DONT_KILL_APP = 1; // 0x1
    field public static final String EXTRA_CHECKSUMS = "android.content.pm.extra.CHECKSUMS";
    field public static final String EXTRA_VERIFICATION_ID = "android.content.pm.extra.VERIFICATION_ID";
    field public static final String EXTRA_VERIFICATION_RESULT = "android.content.pm.extra.VERIFICATION_RESULT";
    field public static final String FEATURE_ACTIVITIES_ON_SECONDARY_DISPLAYS = "android.software.activities_on_secondary_displays";
@@ -12504,6 +12503,10 @@ package android.content.pm {
    ctor public PackageManager.NameNotFoundException(String);
  }
  @java.lang.FunctionalInterface public static interface PackageManager.OnChecksumsReadyListener {
    method public void onChecksumsReady(@NonNull java.util.List<android.content.pm.ApkChecksum>);
  }
  public static final class PackageManager.Property implements android.os.Parcelable {
    method public int describeContents();
    method public boolean getBoolean();
+14 −3
Original line number Diff line number Diff line
@@ -39,11 +39,13 @@ import android.content.Intent;
import android.content.IntentFilter;
import android.content.IntentSender;
import android.content.pm.ActivityInfo;
import android.content.pm.ApkChecksum;
import android.content.pm.ApplicationInfo;
import android.content.pm.ChangedPackages;
import android.content.pm.Checksum;
import android.content.pm.ComponentInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IOnChecksumsReadyListener;
import android.content.pm.IPackageDataObserver;
import android.content.pm.IPackageDeleteObserver;
import android.content.pm.IPackageManager;
@@ -880,10 +882,10 @@ public class ApplicationPackageManager extends PackageManager {
    @Override
    public void requestChecksums(@NonNull String packageName, boolean includeSplits,
            @Checksum.Type int required, @NonNull List<Certificate> trustedInstallers,
            @NonNull IntentSender statusReceiver)
            @NonNull OnChecksumsReadyListener onChecksumsReadyListener)
            throws CertificateEncodingException, NameNotFoundException {
        Objects.requireNonNull(packageName);
        Objects.requireNonNull(statusReceiver);
        Objects.requireNonNull(onChecksumsReadyListener);
        Objects.requireNonNull(trustedInstallers);
        try {
            if (trustedInstallers == TRUST_ALL) {
@@ -895,8 +897,17 @@ public class ApplicationPackageManager extends PackageManager {
                        "trustedInstallers has to be one of TRUST_ALL/TRUST_NONE or a non-empty "
                                + "list of certificates.");
            }
            IOnChecksumsReadyListener onChecksumsReadyListenerDelegate =
                    new IOnChecksumsReadyListener.Stub() {
                        @Override
                        public void onChecksumsReady(List<ApkChecksum> checksums)
                                throws RemoteException {
                            onChecksumsReadyListener.onChecksumsReady(checksums);
                        }
                    };
            mPM.requestChecksums(packageName, includeSplits, DEFAULT_CHECKSUMS, required,
                    encodeCertificates(trustedInstallers), statusReceiver, getUserId());
                    encodeCertificates(trustedInstallers), onChecksumsReadyListenerDelegate,
                    getUserId());
        } catch (ParcelableException e) {
            e.maybeRethrow(PackageManager.NameNotFoundException.class);
            throw new RuntimeException(e);
+27 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2021 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package android.content.pm;

import android.content.pm.ApkChecksum;

/**
 * Listener that gets notified when checksums are available.
 * {@hide}
 */
oneway interface IOnChecksumsReadyListener {
    void onChecksumsReady(in List<ApkChecksum> checksums);
}
+2 −1
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.pm.InstantAppInfo;
import android.content.pm.FeatureInfo;
import android.content.pm.IDexModuleRegisterCallback;
import android.content.pm.InstallSourceInfo;
import android.content.pm.IOnChecksumsReadyListener;
import android.content.pm.IPackageInstaller;
import android.content.pm.IPackageDeleteObserver;
import android.content.pm.IPackageDeleteObserver2;
@@ -754,7 +755,7 @@ interface IPackageManager {

    void notifyPackagesReplacedReceived(in String[] packages);

    void requestChecksums(in String packageName, boolean includeSplits, int optional, int required, in List trustedInstallers, in IntentSender statusReceiver, int userId);
    void requestChecksums(in String packageName, boolean includeSplits, int optional, int required, in List trustedInstallers, in IOnChecksumsReadyListener onChecksumsReadyListener, int userId);

    //------------------------------------------------------------------------
    //
+14 −11
Original line number Diff line number Diff line
@@ -3858,13 +3858,6 @@ public abstract class PackageManager {
    public static final String EXTRA_FAILURE_EXISTING_PERMISSION
            = "android.content.pm.extra.FAILURE_EXISTING_PERMISSION";

    /**
     * Extra field name for the ID of a package pending verification. Passed to
     * a package verifier and is used to call back to
     * @see #requestChecksums
     */
    public static final String EXTRA_CHECKSUMS = "android.content.pm.extra.CHECKSUMS";

   /**
    * Permission flag: The permission is set in its current state
    * by the user and apps can still request it at runtime.
@@ -8709,9 +8702,20 @@ public abstract class PackageManager {
     */
    public static final @NonNull List<Certificate> TRUST_NONE = Collections.singletonList(null);

    /** Listener that gets notified when checksums are available. */
    @FunctionalInterface
    public interface OnChecksumsReadyListener {
        /**
         * Called when the checksums are available.
         *
         * @param checksums array of checksums.
         */
        void onChecksumsReady(@NonNull List<ApkChecksum> checksums);
    }

    /**
     * Requesting the checksums for APKs within a package.
     * The checksums will be returned asynchronously via statusReceiver.
     * The checksums will be returned asynchronously via onChecksumsReadyListener.
     *
     * By default returns all readily available checksums:
     * - enforced by platform,
@@ -8730,15 +8734,14 @@ public abstract class PackageManager {
     *                          {@link #TRUST_ALL} will return checksums from any installer,
     *                          {@link #TRUST_NONE} disables optimized installer-enforced checksums,
     *                          otherwise the list has to be non-empty list of certificates.
     * @param statusReceiver called once when the results are available as
     *                       {@link #EXTRA_CHECKSUMS} of type {@link ApkChecksum}[].
     * @param onChecksumsReadyListener called once when the results are available.
     * @throws CertificateEncodingException if an encoding error occurs for trustedInstallers.
     * @throws IllegalArgumentException if the list of trusted installer certificates is empty.
     * @throws NameNotFoundException if a package with the given name cannot be found on the system.
     */
    public void requestChecksums(@NonNull String packageName, boolean includeSplits,
            @Checksum.Type int required, @NonNull List<Certificate> trustedInstallers,
            @NonNull IntentSender statusReceiver)
            @NonNull OnChecksumsReadyListener onChecksumsReadyListener)
            throws CertificateEncodingException, NameNotFoundException {
        throw new UnsupportedOperationException("requestChecksums not implemented in subclass");
    }
Loading