Merge "Fix the problem that the autofill could be searched." into tm-dev

This commit is contained in:
Stanley Wang
2022-03-07 06:11:52 +00:00
committed by Android (Google) Code Review
3 changed files with 49 additions and 30 deletions

View File

@@ -648,7 +648,7 @@
android:title="@string/reset_shortcut_manager_throttling" /> android:title="@string/reset_shortcut_manager_throttling" />
</PreferenceCategory> </PreferenceCategory>
<com.android.settings.development.autofill.AutofillPreferenceCategory <PreferenceCategory
android:key="debug_autofill_category" android:key="debug_autofill_category"
android:title="@string/debug_autofill_category" android:title="@string/debug_autofill_category"
settings:searchable="false" settings:searchable="false"
@@ -672,7 +672,7 @@
android:key="autofill_reset_developer_options" android:key="autofill_reset_developer_options"
android:title="@string/autofill_reset_developer_options" /> android:title="@string/autofill_reset_developer_options" />
</com.android.settings.development.autofill.AutofillPreferenceCategory> </PreferenceCategory>
<PreferenceCategory <PreferenceCategory
android:key="storage_category" android:key="storage_category"

View File

@@ -47,6 +47,7 @@ import com.android.settings.SettingsActivity;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.core.SubSettingLauncher; import com.android.settings.core.SubSettingLauncher;
import com.android.settings.dashboard.RestrictedDashboardFragment; import com.android.settings.dashboard.RestrictedDashboardFragment;
import com.android.settings.development.autofill.AutofillCategoryController;
import com.android.settings.development.autofill.AutofillLoggingLevelPreferenceController; import com.android.settings.development.autofill.AutofillLoggingLevelPreferenceController;
import com.android.settings.development.autofill.AutofillResetOptionsPreferenceController; import com.android.settings.development.autofill.AutofillResetOptionsPreferenceController;
import com.android.settings.development.bluetooth.AbstractBluetoothDialogPreferenceController; import com.android.settings.development.bluetooth.AbstractBluetoothDialogPreferenceController;
@@ -566,6 +567,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra
controllers.add(new DefaultLaunchPreferenceController(context, "density")); controllers.add(new DefaultLaunchPreferenceController(context, "density"));
controllers.add(new DefaultLaunchPreferenceController(context, "background_check")); controllers.add(new DefaultLaunchPreferenceController(context, "background_check"));
controllers.add(new DefaultLaunchPreferenceController(context, "inactive_apps")); controllers.add(new DefaultLaunchPreferenceController(context, "inactive_apps"));
controllers.add(new AutofillCategoryController(context, lifecycle));
controllers.add(new AutofillLoggingLevelPreferenceController(context, lifecycle)); controllers.add(new AutofillLoggingLevelPreferenceController(context, lifecycle));
controllers.add(new AutofillResetOptionsPreferenceController(context)); controllers.add(new AutofillResetOptionsPreferenceController(context));
controllers.add(new BluetoothCodecDialogPreferenceController(context, lifecycle, controllers.add(new BluetoothCodecDialogPreferenceController(context, lifecycle,

View File

@@ -1,15 +1,17 @@
/* /*
* Copyright (C) 2018 The Android Open Source Project * Copyright (C) 2022 The Android Open Source Project
* *
* Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file * Licensed under the Apache License, Version 2.0 (the "License");
* except in compliance with the License. You may obtain a copy of the License at * 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 * http://www.apache.org/licenses/LICENSE-2.0
* *
* Unless required by applicable law or agreed to in writing, software distributed under the * Unless required by applicable law or agreed to in writing, software
* License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * distributed under the License is distributed on an "AS IS" BASIS,
* KIND, either express or implied. See the License for the specific language governing * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* permissions and limitations under the License. * See the License for the specific language governing permissions and
* limitations under the License.
*/ */
package com.android.settings.development.autofill; package com.android.settings.development.autofill;
@@ -21,23 +23,36 @@ import android.net.Uri;
import android.os.Handler; import android.os.Handler;
import android.os.Looper; import android.os.Looper;
import android.provider.Settings; import android.provider.Settings;
import android.util.AttributeSet;
import android.util.Log; import android.util.Log;
import android.view.autofill.AutofillManager; import android.view.autofill.AutofillManager;
import androidx.preference.PreferenceCategory; import com.android.settingslib.core.lifecycle.Lifecycle;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.development.DeveloperOptionsPreferenceController;
public final class AutofillPreferenceCategory extends PreferenceCategory { /**
* Controller class for observing the state of AutofillManager.
*/
public class AutofillCategoryController extends DeveloperOptionsPreferenceController implements
LifecycleObserver, OnStart, OnStop {
private static final String TAG = "AutofillPreferenceCategory"; private static final String TAG = "AutofillCategoryController";
private static final String CATEGORY_KEY = "debug_autofill_category";
private static final long DELAYED_MESSAGE_TIME_MS = 2000; private static final long DELAYED_MESSAGE_TIME_MS = 2000;
private final ContentResolver mContentResolver; private ContentResolver mContentResolver;
private final ContentObserver mSettingsObserver; private ContentObserver mSettingsObserver;
private final Handler mHandler = new Handler(Looper.getMainLooper()); private final Handler mHandler = new Handler(Looper.getMainLooper());
public AutofillPreferenceCategory(Context context, AttributeSet attrs) { public AutofillCategoryController(Context context, Lifecycle lifecycle) {
super(context, attrs); super(context);
if (lifecycle != null) {
lifecycle.addObserver(this);
}
mSettingsObserver = new ContentObserver(mHandler) { mSettingsObserver = new ContentObserver(mHandler) {
@Override @Override
@@ -45,7 +60,8 @@ public final class AutofillPreferenceCategory extends PreferenceCategory {
// We cannot apply the change yet because AutofillManager.isEnabled() state is // We cannot apply the change yet because AutofillManager.isEnabled() state is
// updated by a ContentObserver as well and there's no guarantee of which observer // updated by a ContentObserver as well and there's no guarantee of which observer
// is called first - hence, it's possible that the state didn't change here yet. // is called first - hence, it's possible that the state didn't change here yet.
mHandler.postDelayed(() -> notifyDependencyChange(shouldDisableDependents()), mHandler.postDelayed(
() -> mPreference.notifyDependencyChange(shouldDisableDependents()),
DELAYED_MESSAGE_TIME_MS); DELAYED_MESSAGE_TIME_MS);
} }
}; };
@@ -53,32 +69,33 @@ public final class AutofillPreferenceCategory extends PreferenceCategory {
} }
@Override @Override
public void onAttached() { public String getPreferenceKey() {
super.onAttached(); return CATEGORY_KEY;
mContentResolver.registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.AUTOFILL_SERVICE), false,
mSettingsObserver);
} }
@Override @Override
public void onDetached() { public void onStart() {
mContentResolver.unregisterContentObserver(mSettingsObserver); mContentResolver.registerContentObserver(
Settings.Secure.getUriFor(Settings.Secure.AUTOFILL_SERVICE), false,
mSettingsObserver);
super.onDetached(); }
@Override
public void onStop() {
mContentResolver.unregisterContentObserver(mSettingsObserver);
} }
// PreferenceCategory.isEnabled() always return false, so we rather not change that logic // PreferenceCategory.isEnabled() always return false, so we rather not change that logic
// decide whether the children should be shown using isAutofillEnabled() instead. // decide whether the children should be shown using isAutofillEnabled() instead.
private boolean isAutofillEnabled() { private boolean isAutofillEnabled() {
final AutofillManager afm = getContext().getSystemService(AutofillManager.class); final AutofillManager afm = mContext.getSystemService(AutofillManager.class);
final boolean enabled = afm != null && afm.isEnabled(); final boolean enabled = afm != null && afm.isEnabled();
Log.v(TAG, "isAutofillEnabled(): " + enabled); Log.v(TAG, "isAutofillEnabled(): " + enabled);
return enabled; return enabled;
} }
@Override private boolean shouldDisableDependents() {
public boolean shouldDisableDependents() {
final boolean shouldIt = !isAutofillEnabled(); final boolean shouldIt = !isAutofillEnabled();
Log.v(TAG, "shouldDisableDependents(): " + shouldIt); Log.v(TAG, "shouldDisableDependents(): " + shouldIt);
return shouldIt; return shouldIt;