Loading res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -5718,6 +5718,9 @@ <string name="accessibility_autoclick_longer_desc">Longer</string> <!-- Description for the seekbar that adjust auto click time. [CHAR_LIMIT=NONE] --> <string name="accessibility_autoclick_seekbar_desc">Auto click time</string> <!-- Title for the toggle button that turns on/off the autoclick setting. [CHAR_LIMIT=NONE] --> <!-- TODO(b/394683600): Update string to translatable once approved by UXW. --> <string name="accessibility_autoclick_main_switch_title" translatable="false">Use autoclick</string> <!-- Title for the toggle button that turns on/off the autoclick shortcut. [CHAR_LIMIT=NONE] --> <!-- TODO(b/394683600): Update string to translatable once approved by UXW. --> <string name="accessibility_autoclick_shortcut_title" translatable="false">Autoclick shortcut</string> res/xml/accessibility_autoclick_settings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,11 @@ settings:searchable="false" settings:lottie_rawRes="@drawable/accessibility_dwell"/> <com.android.settingslib.widget.MainSwitchPreference android:key="accessibility_autoclick_main_switch" android:title="@string/accessibility_autoclick_main_switch_title" settings:controller="com.android.settings.accessibility.ToggleAutoclickMainSwitchPreferenceController"/> <com.android.settings.accessibility.ShortcutPreference android:key="autoclick_shortcut_preference" android:title="@string/accessibility_autoclick_shortcut_title" Loading src/com/android/settings/accessibility/ToggleAutoclickMainSwitchPreferenceController.java 0 → 100644 +68 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 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 com.android.settings.accessibility; import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import android.content.ContentResolver; import android.content.Context; import android.provider.Settings; import androidx.annotation.NonNull; import com.android.server.accessibility.Flags; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; /** The controller to handle main switch to turn on or turn off accessibility autoclick. */ public class ToggleAutoclickMainSwitchPreferenceController extends TogglePreferenceController { private final ContentResolver mContentResolver; public ToggleAutoclickMainSwitchPreferenceController( @NonNull Context context, @NonNull String preferenceKey) { super(context, preferenceKey); mContentResolver = context.getContentResolver(); } @Override public int getAvailabilityStatus() { return Flags.enableAutoclickIndicator() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override public boolean isChecked() { return Settings.Secure.getInt(mContentResolver, Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, OFF) == ON; } @Override public boolean setChecked(boolean isChecked) { Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, isChecked ? ON : OFF); return true; } @Override public int getSliceHighlightMenuRes() { return R.string.menu_key_system; } } tests/robotests/src/com/android/settings/accessibility/ToggleAutoclickMainSwitchPreferenceControllerTest.java 0 → 100644 +83 −0 Original line number Diff line number Diff line /* * Copyright 2025 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 com.android.settings.accessibility; import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import androidx.test.core.app.ApplicationProvider; import com.android.settings.core.BasePreferenceController; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class ToggleAutoclickMainSwitchPreferenceControllerTest { private static final String PREFERENCE_KEY = "accessibility_autoclick_main_switch"; @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private final Context mContext = ApplicationProvider.getApplicationContext(); private ToggleAutoclickMainSwitchPreferenceController mController; @Before public void setUp() { mController = new ToggleAutoclickMainSwitchPreferenceController(mContext, PREFERENCE_KEY); } @Test @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR) public void getAvailabilityStatus_availableWhenFlagOn() { assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.AVAILABLE); } @Test public void setChecked_withTrue_shouldUpdateSetting() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, OFF); mController.setChecked(true); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, OFF)) .isEqualTo(ON); } @Test public void setChecked_withFalse_shouldUpdateSetting() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, ON); mController.setChecked(false); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, OFF)) .isEqualTo(OFF); } } Loading
res/values/strings.xml +3 −0 Original line number Diff line number Diff line Loading @@ -5718,6 +5718,9 @@ <string name="accessibility_autoclick_longer_desc">Longer</string> <!-- Description for the seekbar that adjust auto click time. [CHAR_LIMIT=NONE] --> <string name="accessibility_autoclick_seekbar_desc">Auto click time</string> <!-- Title for the toggle button that turns on/off the autoclick setting. [CHAR_LIMIT=NONE] --> <!-- TODO(b/394683600): Update string to translatable once approved by UXW. --> <string name="accessibility_autoclick_main_switch_title" translatable="false">Use autoclick</string> <!-- Title for the toggle button that turns on/off the autoclick shortcut. [CHAR_LIMIT=NONE] --> <!-- TODO(b/394683600): Update string to translatable once approved by UXW. --> <string name="accessibility_autoclick_shortcut_title" translatable="false">Autoclick shortcut</string>
res/xml/accessibility_autoclick_settings.xml +5 −0 Original line number Diff line number Diff line Loading @@ -30,6 +30,11 @@ settings:searchable="false" settings:lottie_rawRes="@drawable/accessibility_dwell"/> <com.android.settingslib.widget.MainSwitchPreference android:key="accessibility_autoclick_main_switch" android:title="@string/accessibility_autoclick_main_switch_title" settings:controller="com.android.settings.accessibility.ToggleAutoclickMainSwitchPreferenceController"/> <com.android.settings.accessibility.ShortcutPreference android:key="autoclick_shortcut_preference" android:title="@string/accessibility_autoclick_shortcut_title" Loading
src/com/android/settings/accessibility/ToggleAutoclickMainSwitchPreferenceController.java 0 → 100644 +68 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 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 com.android.settings.accessibility; import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import android.content.ContentResolver; import android.content.Context; import android.provider.Settings; import androidx.annotation.NonNull; import com.android.server.accessibility.Flags; import com.android.settings.R; import com.android.settings.core.TogglePreferenceController; /** The controller to handle main switch to turn on or turn off accessibility autoclick. */ public class ToggleAutoclickMainSwitchPreferenceController extends TogglePreferenceController { private final ContentResolver mContentResolver; public ToggleAutoclickMainSwitchPreferenceController( @NonNull Context context, @NonNull String preferenceKey) { super(context, preferenceKey); mContentResolver = context.getContentResolver(); } @Override public int getAvailabilityStatus() { return Flags.enableAutoclickIndicator() ? AVAILABLE : CONDITIONALLY_UNAVAILABLE; } @Override public boolean isChecked() { return Settings.Secure.getInt(mContentResolver, Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, OFF) == ON; } @Override public boolean setChecked(boolean isChecked) { Settings.Secure.putInt(mContentResolver, Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, isChecked ? ON : OFF); return true; } @Override public int getSliceHighlightMenuRes() { return R.string.menu_key_system; } }
tests/robotests/src/com/android/settings/accessibility/ToggleAutoclickMainSwitchPreferenceControllerTest.java 0 → 100644 +83 −0 Original line number Diff line number Diff line /* * Copyright 2025 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 com.android.settings.accessibility; import static com.android.settings.accessibility.AccessibilityUtil.State.OFF; import static com.android.settings.accessibility.AccessibilityUtil.State.ON; import static com.google.common.truth.Truth.assertThat; import android.content.Context; import android.platform.test.annotations.EnableFlags; import android.platform.test.flag.junit.SetFlagsRule; import android.provider.Settings; import androidx.test.core.app.ApplicationProvider; import com.android.settings.core.BasePreferenceController; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.robolectric.RobolectricTestRunner; @RunWith(RobolectricTestRunner.class) public class ToggleAutoclickMainSwitchPreferenceControllerTest { private static final String PREFERENCE_KEY = "accessibility_autoclick_main_switch"; @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private final Context mContext = ApplicationProvider.getApplicationContext(); private ToggleAutoclickMainSwitchPreferenceController mController; @Before public void setUp() { mController = new ToggleAutoclickMainSwitchPreferenceController(mContext, PREFERENCE_KEY); } @Test @EnableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR) public void getAvailabilityStatus_availableWhenFlagOn() { assertThat(mController.getAvailabilityStatus()) .isEqualTo(BasePreferenceController.AVAILABLE); } @Test public void setChecked_withTrue_shouldUpdateSetting() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, OFF); mController.setChecked(true); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, OFF)) .isEqualTo(ON); } @Test public void setChecked_withFalse_shouldUpdateSetting() { Settings.Secure.putInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, ON); mController.setChecked(false); assertThat(Settings.Secure.getInt(mContext.getContentResolver(), Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, OFF)) .isEqualTo(OFF); } }