Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01d93822 authored by Yuhan Yang's avatar Yuhan Yang Committed by Android (Google) Code Review
Browse files

Merge "Add revert to left click to autoclick settings page" into main

parents 55153495 d96bcf8f
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -5693,6 +5693,9 @@
    <!-- Title for the toggle button that turns on/off the autoclick setting of ignoring minor cursor movement. [CHAR_LIMIT=NONE] -->
    <!-- TODO(b/388845718): Update string to translatable once approved by UXW. -->
    <string name="autoclick_ignore_minor_cursor_movement_title" translatable="false">Ignore minor cursor movement</string>
    <!-- TODO(b/394683600): Update string to translatable once approved by UXW. -->
    <!-- Title for the switch setting to toggle on/off the revert to left click after action. [CHAR LIMIT=NONE] -->
    <string name="autoclick_revert_to_left_click_title" translatable="false">Revert to left click after action</string>
    <!-- Title for preference screen for configuring vibrations. [CHAR LIMIT=NONE] -->
    <string name="accessibility_vibration_settings_title">Vibration &amp; haptics</string>
    <!-- Summary for preference screen for configuring vibrations. [CHAR LIMIT=NONE] -->
+5 −0
Original line number Diff line number Diff line
@@ -93,6 +93,11 @@
        android:title="@string/autoclick_ignore_minor_cursor_movement_title"
        settings:controller="com.android.settings.accessibility.ToggleAutoclickIgnoreMinorCursorMovementController"/>

    <SwitchPreferenceCompat
        android:key="accessibility_control_autoclick_revert_to_left_click"
        android:title="@string/autoclick_revert_to_left_click_title"
        settings:controller="com.android.settings.accessibility.ToggleAutoclickRevertToLeftClickController"/>

    <com.android.settings.accessibility.AccessibilityFooterPreference
        android:key="accessibility_autoclick_footer"
        android:title="@string/accessibility_autoclick_description"
+75 −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 android.view.accessibility.AccessibilityManager.AUTOCLICK_REVERT_TO_LEFT_CLICK_DEFAULT;

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;

public class ToggleAutoclickRevertToLeftClickController extends TogglePreferenceController {

    private static final String TAG =
            ToggleAutoclickRevertToLeftClickController.class.getSimpleName();

    private final ContentResolver mContentResolver;

    public ToggleAutoclickRevertToLeftClickController(
            @NonNull Context context, @NonNull String key) {
        super(context, key);

        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_REVERT_TO_LEFT_CLICK,
                        AUTOCLICK_REVERT_TO_LEFT_CLICK_DEFAULT ? ON : OFF)
                == ON;
    }

    @Override
    public boolean setChecked(boolean isChecked) {
        Settings.Secure.putInt(
                mContentResolver,
                Settings.Secure.ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK,
                isChecked ? ON : OFF);
        return true;
    }

    @Override
    public int getSliceHighlightMenuRes() {
        return R.string.menu_key_accessibility;
    }
}
+95 −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 android.view.accessibility.AccessibilityManager.AUTOCLICK_REVERT_TO_LEFT_CLICK_DEFAULT;

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.DisableFlags;
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;

/** Tests for {@link ToggleAutoclickRevertToLeftClickController}. */
@RunWith(RobolectricTestRunner.class)
public class ToggleAutoclickRevertToLeftClickControllerTest {

    private static final String PREFERENCE_KEY =
            "accessibility_control_autoclick_revert_to_left_click";

    @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
    private final Context mContext = ApplicationProvider.getApplicationContext();
    private ToggleAutoclickRevertToLeftClickController mController;

    @Before
    public void setUp() {
        mController =
                new ToggleAutoclickRevertToLeftClickController(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
    @DisableFlags(com.android.server.accessibility.Flags.FLAG_ENABLE_AUTOCLICK_INDICATOR)
    public void getAvailabilityStatus_conditionallyUnavailableWhenFlagOn() {
        assertThat(mController.getAvailabilityStatus())
                .isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE);
    }

    @Test
    public void isChecked_matchesSetting() {
        assertThat(mController.isChecked()).isEqualTo(readSetting() == ON);
    }

    @Test
    public void setChecked_true_updatesSetting() {
        mController.setChecked(true);
        assertThat(readSetting()).isEqualTo(ON);
    }

    @Test
    public void setChecked_false_updatesSetting() {
        mController.setChecked(false);
        assertThat(readSetting()).isEqualTo(OFF);
    }

    private int readSetting() {
        return Settings.Secure.getInt(mContext.getContentResolver(),
                Settings.Secure.ACCESSIBILITY_AUTOCLICK_REVERT_TO_LEFT_CLICK,
                AUTOCLICK_REVERT_TO_LEFT_CLICK_DEFAULT ? ON : OFF);
    }
}