Use permission to limit the app to use app's autofill
Based on the feedback from 1p app, to limit the usage of the new Client
Suggestions API so that apps don't degrade the current autofill
experience. And introduce a permission that will be automatically
granted to the browser role. So browsers can hold this permission to
have an AutofillRequestCallback.
Bug: 272398880
Test: atest PermissionPolicyTest#platformPermissionPolicyIsUnaltered
atest android.autofillservice.cts.client.ClientSuggestionsInlineTest
atest android.autofillservice.cts.client.ClientSuggestionsTest
Change-Id: I32b58ca24d3e73735591fb6409ce34106896df4f
This commit is contained in:
@@ -224,6 +224,7 @@ package android {
|
||||
field @Deprecated public static final String PERSISTENT_ACTIVITY = "android.permission.PERSISTENT_ACTIVITY";
|
||||
field public static final String POST_NOTIFICATIONS = "android.permission.POST_NOTIFICATIONS";
|
||||
field @Deprecated public static final String PROCESS_OUTGOING_CALLS = "android.permission.PROCESS_OUTGOING_CALLS";
|
||||
field public static final String PROVIDE_OWN_AUTOFILL_SUGGESTIONS = "android.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS";
|
||||
field public static final String PROVIDE_REMOTE_CREDENTIALS = "android.permission.PROVIDE_REMOTE_CREDENTIALS";
|
||||
field public static final String QUERY_ALL_PACKAGES = "android.permission.QUERY_ALL_PACKAGES";
|
||||
field public static final String READ_ASSISTANT_APP_SEARCH_DATA = "android.permission.READ_ASSISTANT_APP_SEARCH_DATA";
|
||||
@@ -55072,7 +55073,7 @@ package android.view.autofill {
|
||||
method public void registerCallback(@Nullable android.view.autofill.AutofillManager.AutofillCallback);
|
||||
method public void requestAutofill(@NonNull android.view.View);
|
||||
method public void requestAutofill(@NonNull android.view.View, int, @NonNull android.graphics.Rect);
|
||||
method public void setAutofillRequestCallback(@NonNull java.util.concurrent.Executor, @NonNull android.view.autofill.AutofillRequestCallback);
|
||||
method @RequiresPermission(android.Manifest.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS) public void setAutofillRequestCallback(@NonNull java.util.concurrent.Executor, @NonNull android.view.autofill.AutofillRequestCallback);
|
||||
method public void setUserData(@Nullable android.service.autofill.UserData);
|
||||
method public boolean showAutofillDialog(@NonNull android.view.View);
|
||||
method public boolean showAutofillDialog(@NonNull android.view.View, int);
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package android.view.autofill;
|
||||
|
||||
import static android.Manifest.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS;
|
||||
import static android.service.autofill.FillRequest.FLAG_IME_SHOWING;
|
||||
import static android.service.autofill.FillRequest.FLAG_MANUAL_REQUEST;
|
||||
import static android.service.autofill.FillRequest.FLAG_PASSWORD_INPUT_TYPE;
|
||||
@@ -34,6 +35,7 @@ import android.annotation.IntDef;
|
||||
import android.annotation.NonNull;
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.RequiresFeature;
|
||||
import android.annotation.RequiresPermission;
|
||||
import android.annotation.SystemApi;
|
||||
import android.annotation.SystemService;
|
||||
import android.annotation.TestApi;
|
||||
@@ -2223,8 +2225,14 @@ public final class AutofillManager {
|
||||
* @param executor specifies the thread upon which the callbacks will be invoked.
|
||||
* @param callback which handles autofill request to provide client's suggestions.
|
||||
*/
|
||||
@RequiresPermission(PROVIDE_OWN_AUTOFILL_SUGGESTIONS)
|
||||
public void setAutofillRequestCallback(@NonNull @CallbackExecutor Executor executor,
|
||||
@NonNull AutofillRequestCallback callback) {
|
||||
if (mContext.checkSelfPermission(PROVIDE_OWN_AUTOFILL_SUGGESTIONS)
|
||||
!= PackageManager.PERMISSION_GRANTED) {
|
||||
throw new SecurityException("Requires USE_APP_AUTOFILL permission!");
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
mRequestCallbackExecutor = executor;
|
||||
mAutofillRequestCallback = callback;
|
||||
|
||||
@@ -7436,6 +7436,13 @@
|
||||
<permission android:name="android.permission.EXECUTE_APP_ACTION"
|
||||
android:protectionLevel="internal|role" />
|
||||
|
||||
<!-- Allows an application to display its suggestions using the autofill framework.
|
||||
<p>For now, this permission is only granted to the Browser application.
|
||||
<p>Protection level: internal|role
|
||||
-->
|
||||
<permission android:name="android.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS"
|
||||
android:protectionLevel="internal|role" />
|
||||
|
||||
<!-- @SystemApi Allows an application to create virtual devices in VirtualDeviceManager.
|
||||
@hide -->
|
||||
<permission android:name="android.permission.CREATE_VIRTUAL_DEVICE"
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
package com.android.server.autofill;
|
||||
|
||||
import static android.Manifest.permission.PROVIDE_OWN_AUTOFILL_SUGGESTIONS;
|
||||
import static android.service.autofill.AutofillFieldClassificationService.EXTRA_SCORES;
|
||||
import static android.service.autofill.AutofillService.EXTRA_FILL_RESPONSE;
|
||||
import static android.service.autofill.FillEventHistory.Event.UI_TYPE_DIALOG;
|
||||
@@ -72,6 +73,7 @@ import android.content.Intent;
|
||||
import android.content.IntentFilter;
|
||||
import android.content.IntentSender;
|
||||
import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.content.pm.ServiceInfo;
|
||||
import android.graphics.Bitmap;
|
||||
import android.graphics.Rect;
|
||||
@@ -1286,8 +1288,11 @@ final class Session implements RemoteFillService.FillServiceCallbacks, ViewState
|
||||
mSessionFlags = new SessionFlags();
|
||||
mSessionFlags.mAugmentedAutofillOnly = forAugmentedAutofillOnly;
|
||||
mSessionFlags.mInlineSupportedByService = mService.isInlineSuggestionsEnabledLocked();
|
||||
mSessionFlags.mClientSuggestionsEnabled =
|
||||
(mFlags & FLAG_ENABLED_CLIENT_SUGGESTIONS) != 0;
|
||||
if (mContext.checkCallingPermission(PROVIDE_OWN_AUTOFILL_SUGGESTIONS)
|
||||
== PackageManager.PERMISSION_GRANTED) {
|
||||
mSessionFlags.mClientSuggestionsEnabled =
|
||||
(mFlags & FLAG_ENABLED_CLIENT_SUGGESTIONS) != 0;
|
||||
}
|
||||
setClientLocked(client);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user