Merge "Add API for virtual view is ready to user"
This commit is contained in:
@@ -54248,6 +54248,7 @@ package android.view.autofill {
|
||||
method public void notifyViewExited(@NonNull android.view.View, int);
|
||||
method public void notifyViewVisibilityChanged(@NonNull android.view.View, boolean);
|
||||
method public void notifyViewVisibilityChanged(@NonNull android.view.View, int, boolean);
|
||||
method public void notifyVirtualViewsReady(@NonNull android.view.View, @NonNull android.util.SparseArray<android.view.autofill.VirtualViewFillInfo>);
|
||||
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);
|
||||
@@ -54294,6 +54295,16 @@ package android.view.autofill {
|
||||
field @NonNull public static final android.os.Parcelable.Creator<android.view.autofill.AutofillValue> CREATOR;
|
||||
}
|
||||
|
||||
public final class VirtualViewFillInfo {
|
||||
method @Nullable public String[] getAutofillHints();
|
||||
}
|
||||
|
||||
public static final class VirtualViewFillInfo.Builder {
|
||||
ctor public VirtualViewFillInfo.Builder();
|
||||
method @NonNull public android.view.autofill.VirtualViewFillInfo build();
|
||||
method @NonNull public android.view.autofill.VirtualViewFillInfo.Builder setAutofillHints(@NonNull java.lang.String...);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
package android.view.contentcapture {
|
||||
|
||||
@@ -1234,6 +1234,42 @@ public final class AutofillManager {
|
||||
notifyViewEntered(view, 0);
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when the virtual views are ready to the user for autofill.
|
||||
*
|
||||
* This method is used to notify autofill system the views are ready to the user. And then
|
||||
* Autofill can do initialization if needed before the user starts to input. For example, do
|
||||
* a pre-fill request for the
|
||||
* <a href="/reference/android/service/autofill/Dataset.html#FillDialogUI">fill dialog</a>.
|
||||
*
|
||||
* @param view the host view that holds a virtual view hierarchy.
|
||||
* @param infos extra information for the virtual views. The key is virtual id which represents
|
||||
* the virtual view in the host view.
|
||||
*
|
||||
* @throws IllegalArgumentException if the {@code infos} was empty
|
||||
*/
|
||||
public void notifyVirtualViewsReady(
|
||||
@NonNull View view, @NonNull SparseArray<VirtualViewFillInfo> infos) {
|
||||
Objects.requireNonNull(infos);
|
||||
if (infos.size() == 0) {
|
||||
throw new IllegalArgumentException("No VirtualViewInfo found");
|
||||
}
|
||||
if (AutofillFeatureFlags.isFillDialogDisabledForCredentialManager()
|
||||
&& view.isCredential()) {
|
||||
if (sDebug) {
|
||||
Log.d(TAG, "Ignoring Fill Dialog request since important for credMan:"
|
||||
+ view.getAutofillId().toString());
|
||||
}
|
||||
return;
|
||||
}
|
||||
for (int i = 0; i < infos.size(); i++) {
|
||||
final VirtualViewFillInfo info = infos.valueAt(i);
|
||||
final int virtualId = infos.indexOfKey(i);
|
||||
notifyViewReadyInner(getAutofillId(view, virtualId),
|
||||
(info == null) ? null : info.getAutofillHints());
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The {@link AutofillFeatureFlags#DEVICE_CONFIG_AUTOFILL_DIALOG_ENABLED} is {@code true} or
|
||||
* the view have the allowed autofill hints, performs a fill request to know there is any field
|
||||
@@ -1245,9 +1281,6 @@ public final class AutofillManager {
|
||||
if (sDebug) {
|
||||
Log.d(TAG, "notifyViewEnteredForFillDialog:" + v.getAutofillId());
|
||||
}
|
||||
if (!hasAutofillFeature()) {
|
||||
return;
|
||||
}
|
||||
if (AutofillFeatureFlags.isFillDialogDisabledForCredentialManager()
|
||||
&& v.isCredential()) {
|
||||
if (sDebug) {
|
||||
@@ -1256,6 +1289,13 @@ public final class AutofillManager {
|
||||
}
|
||||
return;
|
||||
}
|
||||
notifyViewReadyInner(v.getAutofillId(), v.getAutofillHints());
|
||||
}
|
||||
|
||||
private void notifyViewReadyInner(AutofillId id, String[] autofillHints) {
|
||||
if (!hasAutofillFeature()) {
|
||||
return;
|
||||
}
|
||||
|
||||
synchronized (mLock) {
|
||||
if (mTrackedViews != null) {
|
||||
@@ -1263,7 +1303,7 @@ public final class AutofillManager {
|
||||
// different pages but in the same Activity. We need to reset the
|
||||
// mIsFillRequested flag to allow asking for a new FillRequest when
|
||||
// user switches to other page
|
||||
mTrackedViews.checkViewState(v.getAutofillId());
|
||||
mTrackedViews.checkViewState(id);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1273,9 +1313,9 @@ public final class AutofillManager {
|
||||
}
|
||||
|
||||
if (mIsFillDialogEnabled
|
||||
|| ArrayUtils.containsAny(v.getAutofillHints(), mFillDialogEnabledHints)) {
|
||||
|| ArrayUtils.containsAny(autofillHints, mFillDialogEnabledHints)) {
|
||||
if (sDebug) {
|
||||
Log.d(TAG, "Trigger fill request at view entered");
|
||||
Log.d(TAG, "Trigger fill request when the view is ready.");
|
||||
}
|
||||
|
||||
int flags = FLAG_SUPPORTS_FILL_DIALOG;
|
||||
|
||||
141
core/java/android/view/autofill/VirtualViewFillInfo.java
Normal file
141
core/java/android/view/autofill/VirtualViewFillInfo.java
Normal file
@@ -0,0 +1,141 @@
|
||||
/*
|
||||
* Copyright (C) 2023 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.view.autofill;
|
||||
|
||||
|
||||
import android.annotation.Nullable;
|
||||
import android.annotation.SuppressLint;
|
||||
import android.view.View;
|
||||
|
||||
import com.android.internal.util.DataClass;
|
||||
|
||||
|
||||
/**
|
||||
* Information for the virtual view to the autofill framework.
|
||||
*/
|
||||
@DataClass(genBuilder = true)
|
||||
public final class VirtualViewFillInfo {
|
||||
|
||||
/**
|
||||
* Autofill hints of the virtual view.
|
||||
*
|
||||
* @see View#setAutofillHints(String...)
|
||||
*/
|
||||
@Nullable
|
||||
@SuppressLint("NullableCollection")
|
||||
private String[] mAutofillHints;
|
||||
|
||||
private static String[] defaultAutofillHints() {
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Code below generated by codegen v1.0.23.
|
||||
//
|
||||
// DO NOT MODIFY!
|
||||
// CHECKSTYLE:OFF Generated code
|
||||
//
|
||||
// To regenerate run:
|
||||
// $ codegen $ANDROID_BUILD_TOP/frameworks/base/core/java/android/view/autofill/VirtualViewFillInfo.java
|
||||
//
|
||||
// To exclude the generated code from IntelliJ auto-formatting enable (one-time):
|
||||
// Settings > Editor > Code Style > Formatter Control
|
||||
//@formatter:off
|
||||
|
||||
|
||||
@DataClass.Generated.Member
|
||||
/* package-private */ VirtualViewFillInfo(
|
||||
@Nullable @SuppressLint("NullableCollection") String[] autofillHints) {
|
||||
this.mAutofillHints = autofillHints;
|
||||
com.android.internal.util.AnnotationValidations.validate(
|
||||
SuppressLint.class, null, mAutofillHints,
|
||||
"value", "NullableCollection");
|
||||
|
||||
// onConstructed(); // You can define this method to get a callback
|
||||
}
|
||||
|
||||
/**
|
||||
* Autofill hints of the virtual view.
|
||||
*
|
||||
* @see View#setAutofillHints(String...)
|
||||
*/
|
||||
@DataClass.Generated.Member
|
||||
public @Nullable @SuppressLint("NullableCollection") String[] getAutofillHints() {
|
||||
return mAutofillHints;
|
||||
}
|
||||
|
||||
/**
|
||||
* A builder for {@link VirtualViewFillInfo}
|
||||
*/
|
||||
@SuppressWarnings("WeakerAccess")
|
||||
@DataClass.Generated.Member
|
||||
public static final class Builder {
|
||||
|
||||
private @Nullable @SuppressLint("NullableCollection") String[] mAutofillHints;
|
||||
|
||||
private long mBuilderFieldsSet = 0L;
|
||||
|
||||
public Builder() {
|
||||
}
|
||||
|
||||
/**
|
||||
* Autofill hints of the virtual view.
|
||||
*
|
||||
* @see View#setAutofillHints(String...)
|
||||
*/
|
||||
@DataClass.Generated.Member
|
||||
public @android.annotation.NonNull Builder setAutofillHints(@SuppressLint("NullableCollection") @android.annotation.NonNull String... value) {
|
||||
checkNotUsed();
|
||||
mBuilderFieldsSet |= 0x1;
|
||||
mAutofillHints = value;
|
||||
return this;
|
||||
}
|
||||
|
||||
/** Builds the instance. This builder should not be touched after calling this! */
|
||||
public @android.annotation.NonNull VirtualViewFillInfo build() {
|
||||
checkNotUsed();
|
||||
mBuilderFieldsSet |= 0x2; // Mark builder used
|
||||
|
||||
if ((mBuilderFieldsSet & 0x1) == 0) {
|
||||
mAutofillHints = defaultAutofillHints();
|
||||
}
|
||||
VirtualViewFillInfo o = new VirtualViewFillInfo(
|
||||
mAutofillHints);
|
||||
return o;
|
||||
}
|
||||
|
||||
private void checkNotUsed() {
|
||||
if ((mBuilderFieldsSet & 0x2) != 0) {
|
||||
throw new IllegalStateException(
|
||||
"This Builder should not be reused. Use a new Builder instance instead");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@DataClass.Generated(
|
||||
time = 1674023010954L,
|
||||
codegenVersion = "1.0.23",
|
||||
sourceFile = "frameworks/base/core/java/android/view/autofill/VirtualViewFillInfo.java",
|
||||
inputSignatures = "private @android.annotation.Nullable @android.annotation.SuppressLint java.lang.String[] mAutofillHints\nprivate static java.lang.String[] defaultAutofillHints()\nclass VirtualViewFillInfo extends java.lang.Object implements []\n@com.android.internal.util.DataClass(genBuilder=true)")
|
||||
@Deprecated
|
||||
private void __metadata() {}
|
||||
|
||||
|
||||
//@formatter:on
|
||||
// End of generated code
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user