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

Commit 682ea3cc authored by Adam He's avatar Adam He Committed by Android (Google) Code Review
Browse files

Merge changes from topic "aa_whitelist"

* changes:
  Check for empty arguments in setWhitelist().
  Implemented a WhitelistHelper for whitelisting packages/activities for Augmented Autofill and Content Capture.
parents ede37208 70ebc5a5
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -563,11 +563,13 @@ package android.content {
    ctor public AutofillOptions(int, boolean);
    method public int describeContents();
    method public static android.content.AutofillOptions forWhitelistingItself();
    method public boolean isAugmentedAutofillEnabled(@NonNull android.content.Context);
    method public void writeToParcel(android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.content.AutofillOptions> CREATOR;
    field public boolean augmentedEnabled;
    field public boolean augmentedAutofillEnabled;
    field public final boolean compatModeEnabled;
    field public final int loggingLevel;
    field @Nullable public android.util.ArraySet<android.content.ComponentName> whitelistedActivitiesForAugmentedAutofill;
  }

  public final class ContentCaptureOptions implements android.os.Parcelable {
+14 −1
Original line number Diff line number Diff line
@@ -127,6 +127,7 @@ import android.view.autofill.AutofillPopupWindow;
import android.view.autofill.IAutofillWindowPresenter;
import android.view.contentcapture.ContentCaptureContext;
import android.view.contentcapture.ContentCaptureManager;
import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient;
import android.widget.AdapterView;
import android.widget.Toast;
import android.widget.Toolbar;
@@ -717,7 +718,7 @@ public class Activity extends ContextThemeWrapper
        Window.Callback, KeyEvent.Callback,
        OnCreateContextMenuListener, ComponentCallbacks2,
        Window.OnWindowDismissedCallback, WindowControllerCallback,
        AutofillManager.AutofillClient {
        AutofillManager.AutofillClient, ContentCaptureManager.ContentCaptureClient {
    private static final String TAG = "Activity";
    private static final boolean DEBUG_LIFECYCLE = false;

@@ -1119,6 +1120,12 @@ public class Activity extends ContextThemeWrapper
        return this;
    }

    /** @hide */
    @Override
    public final ContentCaptureClient getContentCaptureClient() {
        return this;
    }

    /**
     * Register an {@link Application.ActivityLifecycleCallbacks} instance that receives
     * lifecycle callbacks for only this Activity.
@@ -6464,6 +6471,12 @@ public class Activity extends ContextThemeWrapper
        return getComponentName();
    }

    /** @hide */
    @Override
    public final ComponentName contentCaptureClientGetComponentName() {
        return getComponentName();
    }

    /**
     * Retrieve a {@link SharedPreferences} object for accessing preferences
     * that are private to this activity.  This simply calls the underlying
+37 −8
Original line number Diff line number Diff line
@@ -16,12 +16,15 @@
package android.content;

import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.TestApi;
import android.app.ActivityThread;
import android.os.Parcel;
import android.os.Parcelable;
import android.util.ArraySet;
import android.util.Log;
import android.view.autofill.AutofillManager;
import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient;

import java.io.PrintWriter;

@@ -51,14 +54,33 @@ public final class AutofillOptions implements Parcelable {
    /**
     * Whether package is whitelisted for augmented autofill.
     */
    public boolean augmentedEnabled;
    // TODO(b/123100824): add (optional) list of activities
    public boolean augmentedAutofillEnabled;

    /**
     * List of whitelisted activities.
     */
    @Nullable
    public ArraySet<ComponentName> whitelistedActivitiesForAugmentedAutofill;

    public AutofillOptions(int loggingLevel, boolean compatModeEnabled) {
        this.loggingLevel = loggingLevel;
        this.compatModeEnabled = compatModeEnabled;
    }

    /**
     * Returns whether activity is whitelisted for augmented autofill.
     */
    public boolean isAugmentedAutofillEnabled(@NonNull Context context) {
        if (!augmentedAutofillEnabled) return false;

        final ContentCaptureClient contentCaptureClient = context.getContentCaptureClient();
        if (contentCaptureClient == null) return false;

        final ComponentName component = contentCaptureClient.contentCaptureClientGetComponentName();
        return whitelistedActivitiesForAugmentedAutofill == null
                || whitelistedActivitiesForAugmentedAutofill.contains(component);
    }

    /**
     * @hide
     */
@@ -78,7 +100,7 @@ public final class AutofillOptions implements Parcelable {

        final AutofillOptions options = new AutofillOptions(
                AutofillManager.FLAG_ADD_CLIENT_VERBOSE, /* compatModeAllowed= */ true);
        options.augmentedEnabled = true;
        options.augmentedAutofillEnabled = true;
        // Always log, as it's used by test only
        Log.i(TAG, "forWhitelistingItself(" + packageName + "): " + options);

@@ -87,15 +109,19 @@ public final class AutofillOptions implements Parcelable {

    @Override
    public String toString() {
        return "AutofillOptions [loggingLevel=" + loggingLevel + ", compatMode="
                + compatModeEnabled + ", augmentedEnabled=" + augmentedEnabled + "]";
        return "AutofillOptions [loggingLevel=" + loggingLevel + ", compatMode=" + compatModeEnabled
                + ", augmentedAutofillEnabled=" + augmentedAutofillEnabled + "]";
    }

    /** @hide */
    public void dumpShort(@NonNull PrintWriter pw) {
        pw.print("logLvl="); pw.print(loggingLevel);
        pw.print(", compatMode="); pw.print(compatModeEnabled);
        pw.print(", augmented="); pw.print(augmentedEnabled);
        pw.print(", augmented="); pw.print(augmentedAutofillEnabled);
        if (whitelistedActivitiesForAugmentedAutofill != null) {
            pw.print(", whitelistedActivitiesForAugmentedAutofill=");
            pw.print(whitelistedActivitiesForAugmentedAutofill);
        }
    }

    @Override
@@ -107,7 +133,8 @@ public final class AutofillOptions implements Parcelable {
    public void writeToParcel(Parcel parcel, int flags) {
        parcel.writeInt(loggingLevel);
        parcel.writeBoolean(compatModeEnabled);
        parcel.writeBoolean(augmentedEnabled);
        parcel.writeBoolean(augmentedAutofillEnabled);
        parcel.writeArraySet(whitelistedActivitiesForAugmentedAutofill);
    }

    public static final @android.annotation.NonNull Parcelable.Creator<AutofillOptions> CREATOR =
@@ -118,7 +145,9 @@ public final class AutofillOptions implements Parcelable {
                    final int loggingLevel = parcel.readInt();
                    final boolean compatMode = parcel.readBoolean();
                    final AutofillOptions options = new AutofillOptions(loggingLevel, compatMode);
                    options.augmentedEnabled = parcel.readBoolean();
                    options.augmentedAutofillEnabled = parcel.readBoolean();
                    options.whitelistedActivitiesForAugmentedAutofill =
                            (ArraySet<ComponentName>) parcel.readArraySet(null);
                    return options;
                }

+9 −0
Original line number Diff line number Diff line
@@ -69,6 +69,7 @@ import android.view.View;
import android.view.ViewDebug;
import android.view.WindowManager;
import android.view.autofill.AutofillManager.AutofillClient;
import android.view.contentcapture.ContentCaptureManager.ContentCaptureClient;
import android.view.textclassifier.TextClassificationManager;

import java.io.File;
@@ -5340,6 +5341,14 @@ public abstract class Context {
    public void setAutofillClient(@SuppressWarnings("unused") AutofillClient client) {
    }

    /**
     * @hide
     */
    @Nullable
    public ContentCaptureClient getContentCaptureClient() {
        return null;
    }

    /**
     * @hide
     */
+1 −2
Original line number Diff line number Diff line
@@ -9530,8 +9530,7 @@ public class View implements Drawable.Callback, KeyEvent.Callback,
            // View is not important for "regular" autofill, so we must check if Augmented Autofill
            // is enabled for the activity
            final AutofillOptions options = mContext.getAutofillOptions();
            if (options == null || !options.augmentedEnabled) {
                // TODO(b/123100824): should also check if activity is whitelisted
            if (options == null || !options.isAugmentedAutofillEnabled(mContext)) {
                return false;
            }
            final AutofillManager afm = getAutofillManager();
Loading