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

Commit 21c95207 authored by Riley Jones's avatar Riley Jones
Browse files

Internalize handling of a11y button click and long click

Move the logic regarding a11y button click and long click inside a11y manager,
and use the current navigation mode to determine shortcut type.

Bug: 297544054
Flag: android.provider.a11y_standalone_gesture_enabled
Test: atest AccessibilityManagerServiceTest
Change-Id: I9597c1975877f1c7188e7192145b6e4da44495b9
parent 6a7b8d72
Loading
Loading
Loading
Loading
+29 −2
Original line number Diff line number Diff line
@@ -1774,7 +1774,8 @@ public final class AccessibilityManager {
    }

    /**
     * Notifies that the accessibility button in the system's navigation area has been clicked
     * Notifies that the accessibility button in the system's navigation area has been clicked,
     * or a gesture shortcut input has been performed.
     *
     * @param displayId The logical display id.
     * @hide
@@ -1785,7 +1786,8 @@ public final class AccessibilityManager {
    }

    /**
     * Perform the accessibility button for the given target which is assigned to the button.
     * Perform the accessibility button or gesture
     * for the given target which is assigned to the button.
     *
     * @param displayId displayId The logical display id.
     * @param targetName The flattened {@link ComponentName} string or the class name of a system
@@ -1809,6 +1811,31 @@ public final class AccessibilityManager {
        }
    }

    /**
     * Notifies that a shortcut was long-clicked.
     * This displays the dialog used to select which target the given shortcut will use,
     * from its list of targets.
     * The current shortcut type is determined by the current navigation mode.
     *
     * @param displayId The id of the display to show the dialog on.
     * @hide
     */
    @RequiresPermission(Manifest.permission.STATUS_BAR_SERVICE)
    public void notifyAccessibilityButtonLongClicked(int displayId) {
        final IAccessibilityManager service;
        synchronized (mLock) {
            service = getServiceLocked();
            if (service == null) {
                return;
            }
        }
        try {
            service.notifyAccessibilityButtonLongClicked(displayId);
        } catch (RemoteException re) {
            Log.e(LOG_TAG, "Error while dispatching accessibility button long click. ", re);
        }
    }

    /**
     * Notifies that the visibility of the accessibility button in the system's navigation area
     * has changed.
+2 −0
Original line number Diff line number Diff line
@@ -88,6 +88,8 @@ interface IAccessibilityManager {
    @EnforcePermission("STATUS_BAR_SERVICE")
    void notifyAccessibilityButtonClicked(int displayId, String targetName);

    @EnforcePermission("STATUS_BAR_SERVICE")
    void notifyAccessibilityButtonLongClicked(int displayId);

    @EnforcePermission("STATUS_BAR_SERVICE")
    void notifyAccessibilityButtonVisibilityChanged(boolean available);
+4 −3
Original line number Diff line number Diff line
@@ -20,7 +20,6 @@ import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;

import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_COMPONENT_NAME;
import static com.android.internal.accessibility.AccessibilityShortcutController.MAGNIFICATION_CONTROLLER_NAME;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.GESTURE;
import static com.android.internal.accessibility.common.ShortcutConstants.UserShortcutType.SOFTWARE;
import static com.android.internal.accessibility.dialog.AccessibilityTargetHelper.getTargets;
import static com.android.internal.accessibility.util.AccessibilityStatsLogUtils.logAccessibilityButtonLongPressStatus;
@@ -44,6 +43,8 @@ import java.util.List;
 * Activity used to display and persist a service or feature target for the Accessibility button.
 */
public class AccessibilityButtonChooserActivity extends Activity {
    public static final String EXTRA_TYPE_TO_CHOOSE = "TYPE";

    private final List<AccessibilityTarget> mTargets = new ArrayList<>();

    @Override
@@ -67,8 +68,8 @@ public class AccessibilityButtonChooserActivity extends Activity {
                NAV_BAR_MODE_GESTURAL == getResources().getInteger(
                        com.android.internal.R.integer.config_navBarInteractionMode);

        final int targetType = (isGestureNavigateEnabled
                && android.provider.Flags.a11yStandaloneGestureEnabled()) ? GESTURE : SOFTWARE;
        final int targetType = android.provider.Flags.a11yStandaloneGestureEnabled()
                ? getIntent().getIntExtra(EXTRA_TYPE_TO_CHOOSE, SOFTWARE) : SOFTWARE;

        if (isGestureNavigateEnabled) {
            final TextView promptPrologue = findViewById(R.id.accessibility_button_prompt_prologue);
+3 −9
Original line number Diff line number Diff line
@@ -18,8 +18,6 @@ package com.android.systemui.accessibility;

import static android.view.WindowManager.ScreenshotSource.SCREENSHOT_ACCESSIBILITY_ACTIONS;

import static com.android.internal.accessibility.common.ShortcutConstants.CHOOSER_PACKAGE_NAME;

import android.accessibilityservice.AccessibilityService;
import android.app.PendingIntent;
import android.app.RemoteAction;
@@ -45,7 +43,6 @@ import android.view.accessibility.AccessibilityManager;
import android.view.accessibility.Flags;

import com.android.internal.R;
import com.android.internal.accessibility.dialog.AccessibilityButtonChooserActivity;
import com.android.internal.accessibility.util.AccessibilityUtils;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ScreenshotHelper;
@@ -561,16 +558,13 @@ public class SystemActions implements CoreStartable, ConfigurationController.Con
    }

    private void handleAccessibilityButton() {
        AccessibilityManager.getInstance(mContext).notifyAccessibilityButtonClicked(
        mA11yManager.notifyAccessibilityButtonClicked(
                mDisplayTracker.getDefaultDisplayId());
    }

    private void handleAccessibilityButtonChooser() {
        final Intent intent = new Intent(AccessibilityManager.ACTION_CHOOSE_ACCESSIBILITY_BUTTON);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        final String chooserClassName = AccessibilityButtonChooserActivity.class.getName();
        intent.setClassName(CHOOSER_PACKAGE_NAME, chooserClassName);
        mContext.startActivityAsUser(intent, mUserTracker.getUserHandle());
        mA11yManager.notifyAccessibilityButtonLongClicked(
                mDisplayTracker.getDefaultDisplayId());
    }

    private void handleAccessibilityShortcut() {
+3 −8
Original line number Diff line number Diff line
@@ -34,7 +34,6 @@ import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_3BUTTON;
import static android.view.WindowManagerPolicyConstants.NAV_BAR_MODE_GESTURAL;

import static com.android.internal.accessibility.common.ShortcutConstants.CHOOSER_PACKAGE_NAME;
import static com.android.internal.config.sysui.SystemUiDeviceConfigFlags.HOME_BUTTON_LONG_PRESS_DURATION_MS;
import static com.android.systemui.navigationbar.NavBarHelper.transitionMode;
import static com.android.systemui.recents.OverviewProxyService.OverviewProxyListener;
@@ -60,7 +59,6 @@ import android.app.ActivityTaskManager;
import android.app.IActivityTaskManager;
import android.app.StatusBarManager;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.graphics.Insets;
import android.graphics.PixelFormat;
@@ -105,7 +103,6 @@ import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;

import com.android.app.viewcapture.ViewCaptureAwareWindowManager;
import com.android.internal.accessibility.dialog.AccessibilityButtonChooserActivity;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.UiEvent;
import com.android.internal.logging.UiEventLogger;
@@ -1625,11 +1622,9 @@ public class NavigationBar extends ViewController<NavigationBarView> implements
    }

    private boolean onAccessibilityLongClick(View v) {
        final Intent intent = new Intent(AccessibilityManager.ACTION_CHOOSE_ACCESSIBILITY_BUTTON);
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
        final String chooserClassName = AccessibilityButtonChooserActivity.class.getName();
        intent.setClassName(CHOOSER_PACKAGE_NAME, chooserClassName);
        mContext.startActivityAsUser(intent, mUserTracker.getUserHandle());
        final Display display = v.getDisplay();
        mAccessibilityManager.notifyAccessibilityButtonLongClicked(
                display != null ? display.getDisplayId() : mDisplayTracker.getDefaultDisplayId());
        return true;
    }

Loading