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

Commit 3a1031a0 authored by Gavin Williams's avatar Gavin Williams
Browse files

a11y: Change pause button graphic on click

Add a "Resume" graphic and set it once pause button is clicked.

Bug: b/388872274
Test: AutoclickTypePanelTest
Flag: com.android.server.accessibility.enable_autoclick_indicator
Change-Id: I3fb4d3d7532d84610b9f0226c7461d724edf0148
parent 8b5cc9c9
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>

<!-- 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.
-->

<vector xmlns:android="http://schemas.android.com/apk/res/android"
    android:viewportWidth="24"
    android:viewportHeight="24"
    android:width="24dp"
    android:height="24dp">
    <group>
        <clip-path android:pathData="M0 0H24V24H0V0Z" />
        <path
            android:pathData="M8 19V5L19 12L8 19Z"
            android:fillColor="@color/materialColorPrimary" />
    </group>
</vector>
+2 −0
Original line number Diff line number Diff line
@@ -5648,6 +5648,8 @@
  <java-symbol type="id" name="accessibility_autoclick_pause_button" />
  <java-symbol type="id" name="accessibility_autoclick_position_layout" />
  <java-symbol type="id" name="accessibility_autoclick_position_button" />
  <java-symbol type="drawable" name="accessibility_autoclick_pause" />
  <java-symbol type="drawable" name="accessibility_autoclick_resume" />

  <!-- For HapticFeedbackConstants configurability defined at HapticFeedbackCustomization -->
  <java-symbol type="string" name="config_hapticFeedbackCustomizationFile" />
+25 −2
Original line number Diff line number Diff line
@@ -77,14 +77,21 @@ public class AutoclickTypePanel {
    // Whether the panel is expanded or not.
    private boolean mExpanded = false;

    // Whether autoclick is paused.
    private boolean mPaused = false;

    private final LinearLayout mLeftClickButton;
    private final LinearLayout mRightClickButton;
    private final LinearLayout mDoubleClickButton;
    private final LinearLayout mDragButton;
    private final LinearLayout mScrollButton;
    private final LinearLayout mPauseButton;

    private LinearLayout mSelectedButton;

    private final Drawable mPauseButtonDrawable;
    private final Drawable mResumeButtonDrawable;

    public AutoclickTypePanel(
            Context context,
            WindowManager windowManager,
@@ -93,6 +100,11 @@ public class AutoclickTypePanel {
        mWindowManager = windowManager;
        mClickPanelController = clickPanelController;

        mPauseButtonDrawable = mContext.getDrawable(
                R.drawable.accessibility_autoclick_pause);
        mResumeButtonDrawable = mContext.getDrawable(
                R.drawable.accessibility_autoclick_resume);

        mContentView =
                LayoutInflater.from(context)
                        .inflate(R.layout.accessibility_autoclick_type_panel, null);
@@ -104,6 +116,7 @@ public class AutoclickTypePanel {
                mContentView.findViewById(R.id.accessibility_autoclick_double_click_layout);
        mScrollButton = mContentView.findViewById(R.id.accessibility_autoclick_scroll_layout);
        mDragButton = mContentView.findViewById(R.id.accessibility_autoclick_drag_layout);
        mPauseButton = mContentView.findViewById(R.id.accessibility_autoclick_pause_layout);

        initializeButtonState();
    }
@@ -116,8 +129,7 @@ public class AutoclickTypePanel {
        mScrollButton.setOnClickListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_SCROLL));
        mDragButton.setOnClickListener(v -> togglePanelExpansion(AUTOCLICK_TYPE_DRAG));

        // TODO(b/388872274): registers listener for pause button and allows users to pause/resume
        // the autoclick.
        mPauseButton.setOnClickListener(v -> togglePause());
        // TODO(b/388847771): registers listener for position button and allows users to move the
        // panel to a different position.

@@ -196,6 +208,17 @@ public class AutoclickTypePanel {
        mExpanded = !mExpanded;
    }

    private void togglePause() {
        mPaused = !mPaused;

        ImageButton imageButton = (ImageButton) mPauseButton.getChildAt(/* index= */ 0);
        if (mPaused) {
            imageButton.setImageDrawable(mResumeButtonDrawable);
        } else {
            imageButton.setImageDrawable(mPauseButtonDrawable);
        }
    }

    /** Hide all buttons on the panel except pause and position buttons. */
    private void hideAllClickTypeButtons() {
        mLeftClickButton.setVisibility(View.GONE);
+9 −0
Original line number Diff line number Diff line
@@ -63,6 +63,7 @@ public class AutoclickTypePanelTest {
    private LinearLayout mDoubleClickButton;
    private LinearLayout mDragButton;
    private LinearLayout mScrollButton;
    private LinearLayout mPauseButton;

    private @AutoclickType int mActiveClickType = AUTOCLICK_TYPE_LEFT_CLICK;

@@ -91,6 +92,7 @@ public class AutoclickTypePanelTest {
                contentView.findViewById(R.id.accessibility_autoclick_double_click_layout);
        mScrollButton = contentView.findViewById(R.id.accessibility_autoclick_scroll_layout);
        mDragButton = contentView.findViewById(R.id.accessibility_autoclick_drag_layout);
        mPauseButton = contentView.findViewById(R.id.accessibility_autoclick_pause_layout);
    }

    @Test
@@ -106,6 +108,7 @@ public class AutoclickTypePanelTest {
        assertThat(mDoubleClickButton.getVisibility()).isEqualTo(View.GONE);
        assertThat(mDragButton.getVisibility()).isEqualTo(View.GONE);
        assertThat(mScrollButton.getVisibility()).isEqualTo(View.GONE);
        assertThat(mPauseButton.getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test
@@ -124,6 +127,9 @@ public class AutoclickTypePanelTest {
        assertThat(mDoubleClickButton.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mDragButton.getVisibility()).isEqualTo(View.VISIBLE);
        assertThat(mScrollButton.getVisibility()).isEqualTo(View.VISIBLE);

        // Pause button is always visible.
        assertThat(mPauseButton.getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test
@@ -142,6 +148,9 @@ public class AutoclickTypePanelTest {
        assertThat(mLeftClickButton.getVisibility()).isEqualTo(View.GONE);
        assertThat(mDoubleClickButton.getVisibility()).isEqualTo(View.GONE);
        assertThat(mDragButton.getVisibility()).isEqualTo(View.GONE);

        // Pause button is always visible.
        assertThat(mPauseButton.getVisibility()).isEqualTo(View.VISIBLE);
    }

    @Test