Only create shortcut preference when no existing shortcut found

Update onCreateView in AccessibilityShortcutPreferenceFragmen
so it only create a new shortcutPreference when no existing
shortcut preference is found.

Bug: 397719419
Test: Manually verified on test devices
Flag: com.android.server.accessibility.enable_autoclick_indicator
Change-Id: Ic4747240cfd3d48fd97c61fd0b15d44f6ba5cf0a
This commit is contained in:
Yuhan Yang
2025-02-20 18:21:07 +00:00
parent 29b9665128
commit 4d52d72337
4 changed files with 30 additions and 35 deletions

View File

@@ -22,23 +22,26 @@
<com.android.settingslib.widget.TopIntroPreference
android:key="accessibility_autoclick_intro"
android:title="@string/accessibility_autoclick_intro_text"
settings:searchable="false"
android:order="10"/>
settings:searchable="false"/>
<com.android.settingslib.widget.IllustrationPreference
android:key="accessibility_autoclick_banner"
android:selectable="false"
settings:searchable="false"
settings:lottie_rawRes="@drawable/accessibility_dwell"
android:order="20"/>
settings:lottie_rawRes="@drawable/accessibility_dwell"/>
<com.android.settings.accessibility.ShortcutPreference
android:key="autoclick_shortcut_preference"
android:title="@string/accessibility_autoclick_shortcut_title"
android:persistent="false"
settings:searchable="false"/>
<!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_autoclick_default"
android:title="@string/accessibility_autoclick_default_title"
settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"
android:order="30"/>
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
<!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
@@ -46,8 +49,7 @@
android:title="@string/accessibility_autoclick_short_title"
android:summary="@string/accessibility_autoclick_short_summary"
settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"
android:order="31"/>
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
<!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
@@ -55,8 +57,7 @@
android:title="@string/accessibility_autoclick_medium_title"
android:summary="@string/accessibility_autoclick_medium_summary"
settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"
android:order="32"/>
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
<!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
@@ -64,16 +65,14 @@
android:title="@string/accessibility_autoclick_long_title"
android:summary="@string/accessibility_autoclick_long_summary"
settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"
android:order="33"/>
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
<!-- Items in a list should not be searchable. -->
<com.android.settingslib.widget.SelectorWithWidgetPreference
android:key="accessibility_control_autoclick_custom"
android:title="@string/accessibility_autoclick_custom_title"
settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"
android:order="34"/>
settings:controller="com.android.settings.accessibility.ToggleAutoclickPreferenceController"/>
<com.android.settingslib.widget.LayoutPreference
android:key="autoclick_custom_seekbar"
@@ -81,28 +80,24 @@
android:selectable="false"
android:visibility="gone"
settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickCustomSeekbarController"
android:order="40"/>
settings:controller="com.android.settings.accessibility.ToggleAutoclickCustomSeekbarController"/>
<Preference
android:key="accessibility_control_autoclick_cursor_area_size"
android:persistent="false"
settings:searchable="false"
android:title="@string/autoclick_cursor_area_size_title"
settings:controller="com.android.settings.accessibility.ToggleAutoclickCursorAreaSizeController"
android:order="50"/>
settings:controller="com.android.settings.accessibility.ToggleAutoclickCursorAreaSizeController"/>
<SwitchPreferenceCompat
android:key="accessibility_control_autoclick_ignore_minor_cursor_movement"
android:title="@string/autoclick_ignore_minor_cursor_movement_title"
settings:controller="com.android.settings.accessibility.ToggleAutoclickIgnoreMinorCursorMovementController"
android:order="60"/>
settings:controller="com.android.settings.accessibility.ToggleAutoclickIgnoreMinorCursorMovementController"/>
<com.android.settings.accessibility.AccessibilityFooterPreference
android:key="accessibility_autoclick_footer"
android:title="@string/accessibility_autoclick_description"
android:selectable="false"
settings:searchable="false"
settings:controller="com.android.settings.accessibility.ToggleAutoclickFooterPreferenceController"
android:order="70"/>
settings:controller="com.android.settings.accessibility.ToggleAutoclickFooterPreferenceController"/>
</PreferenceScreen>

View File

@@ -104,14 +104,17 @@ public abstract class AccessibilityShortcutPreferenceFragment extends Restricted
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mShortcutPreference =
getPreferenceScreen().findPreference(getShortcutPreferenceKey());
if (mShortcutPreference == null) {
mShortcutPreference = new ShortcutPreference(getPrefContext(), /* attrs= */ null);
mShortcutPreference.setPersistent(false);
mShortcutPreference.setKey(getShortcutPreferenceKey());
getPreferenceScreen().addPreference(mShortcutPreference);
}
mShortcutPreference.setOnClickCallback(this);
mShortcutPreference.setTitle(getShortcutTitle());
getPreferenceScreen().addPreference(mShortcutPreference);
mTouchExplorationStateChangeListener = isTouchExplorationEnabled -> {
mShortcutPreference.setSummary(getShortcutTypeSummary(getPrefContext()));
};

View File

@@ -24,6 +24,8 @@ import android.view.View;
import android.widget.CompoundButton;
import android.widget.LinearLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
@@ -60,7 +62,7 @@ public class ShortcutPreference extends TwoTargetPreference {
private boolean mChecked = false;
private boolean mSettingsEditable = true;
ShortcutPreference(Context context, AttributeSet attrs) {
public ShortcutPreference(@NonNull Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
setIconSpaceReserved(false);
// Treat onSettingsClicked as this preference's click.

View File

@@ -29,7 +29,6 @@ import com.android.server.accessibility.Flags;
import com.android.settings.R;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
import com.android.settingslib.widget.SelectorWithWidgetPreference;
/**
* Fragment for preference screen for settings related to Automatically click after mouse stops
@@ -41,7 +40,6 @@ public class ToggleAutoclickPreferenceFragment
private static final String TAG = "AutoclickPrefFragment";
static final String KEY_CONTROL_DEFAULT = "accessibility_control_autoclick_default";
static final String KEY_AUTOCLICK_SHORTCUT_PREFERENCE = "autoclick_shortcut_preference";
/**
@@ -100,10 +98,7 @@ public class ToggleAutoclickPreferenceFragment
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
if (Flags.enableAutoclickIndicator()) {
SelectorWithWidgetPreference optionDefault = findPreference(KEY_CONTROL_DEFAULT);
mShortcutPreference.setOrder(optionDefault.getOrder() - 1);
} else {
if (!Flags.enableAutoclickIndicator()) {
getPreferenceScreen().removePreference(mShortcutPreference);
}
return view;