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

Commit 210b983d authored by Riley Jones's avatar Riley Jones Committed by Android (Google) Code Review
Browse files

Merge "Internalize handling of a11y button click and long click" into main

parents 5a3654c3 21c95207
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