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

Commit c56100f7 authored by Sally Yuen's avatar Sally Yuen Committed by Automerger Merge Worker
Browse files

Merge "Add logging for proxies" into udc-dev am: cd544249 am: d9e2827d

parents 422138fe d9e2827d
Loading
Loading
Loading
Loading
+2 −0
Original line number Original line Diff line number Diff line
@@ -3928,6 +3928,8 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
                        mGlobalClients.getRegisteredCallbackCookie(i);
                        mGlobalClients.getRegisteredCallbackCookie(i);
                pw.append(Arrays.toString(client.mPackageNames));
                pw.append(Arrays.toString(client.mPackageNames));
            }
            }
            pw.println();
            mProxyManager.dump(fd, pw, args);
        }
        }
    }
    }


+4 −0
Original line number Original line Diff line number Diff line
@@ -910,6 +910,10 @@ public class AccessibilityWindowManager {
            pw.println("     Top Focused Window Id = " + mTopFocusedWindowId);
            pw.println("     Top Focused Window Id = " + mTopFocusedWindowId);
            pw.println("     Accessibility Focused Window Id = " + mAccessibilityFocusedWindowId
            pw.println("     Accessibility Focused Window Id = " + mAccessibilityFocusedWindowId
                    + " ]");
                    + " ]");
            if (mIsProxy) {
                pw.println("Proxy accessibility focused window = "
                        + mProxyDisplayAccessibilityFocusedWindow);
            }
            pw.println();
            pw.println();
            if (mWindows != null) {
            if (mWindows != null) {
                final int windowCount = mWindows.size();
                final int windowCount = mWindows.size();
+27 −0
Original line number Original line Diff line number Diff line
@@ -38,14 +38,18 @@ import android.os.RemoteCallback;
import android.os.RemoteException;
import android.os.RemoteException;
import android.view.KeyEvent;
import android.view.KeyEvent;
import android.view.accessibility.AccessibilityDisplayProxy;
import android.view.accessibility.AccessibilityDisplayProxy;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityNodeInfo;
import android.view.accessibility.AccessibilityWindowInfo;
import android.view.accessibility.AccessibilityWindowInfo;


import androidx.annotation.Nullable;
import androidx.annotation.Nullable;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.util.DumpUtils;
import com.android.server.wm.WindowManagerInternal;
import com.android.server.wm.WindowManagerInternal;


import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.Arrays;
import java.util.Arrays;
import java.util.Collections;
import java.util.Collections;
import java.util.HashSet;
import java.util.HashSet;
@@ -61,6 +65,8 @@ import java.util.Set;
 * TODO(241429275): Initialize this when a proxy is registered.
 * TODO(241429275): Initialize this when a proxy is registered.
 */
 */
public class ProxyAccessibilityServiceConnection extends AccessibilityServiceConnection {
public class ProxyAccessibilityServiceConnection extends AccessibilityServiceConnection {
    private static final String LOG_TAG = "ProxyAccessibilityServiceConnection";

    private int mDisplayId;
    private int mDisplayId;
    private List<AccessibilityServiceInfo> mInstalledAndEnabledServices;
    private List<AccessibilityServiceInfo> mInstalledAndEnabledServices;


@@ -565,4 +571,25 @@ public class ProxyAccessibilityServiceConnection extends AccessibilityServiceCon
    public void setAnimationScale(float scale) throws UnsupportedOperationException {
    public void setAnimationScale(float scale) throws UnsupportedOperationException {
        throw new UnsupportedOperationException("setAnimationScale is not supported");
        throw new UnsupportedOperationException("setAnimationScale is not supported");
    }
    }

    @Override
    public void dump(FileDescriptor fd, final PrintWriter pw, String[] args) {
        if (!DumpUtils.checkDumpPermission(mContext, LOG_TAG, pw)) return;
        synchronized (mLock) {
            pw.append("Proxy[displayId=" + mDisplayId);
            pw.append(", feedbackType"
                    + AccessibilityServiceInfo.feedbackTypeToString(mFeedbackType));
            pw.append(", capabilities=" + mAccessibilityServiceInfo.getCapabilities());
            pw.append(", eventTypes="
                    + AccessibilityEvent.eventTypeToString(mEventTypes));
            pw.append(", notificationTimeout=" + mNotificationTimeout);
            pw.append(", focusStrokeWidth=").append(String.valueOf(mFocusStrokeWidth));
            pw.append(", focusColor=").append(String.valueOf(mFocusColor));
            pw.append(", installedAndEnabledServiceCount=").append(String.valueOf(
                    mInstalledAndEnabledServices.size()));
            pw.append(", installedAndEnabledServices=").append(
                    mInstalledAndEnabledServices.toString());
            pw.append("]");
        }
    }
}
}
+58 −4
Original line number Original line Diff line number Diff line
@@ -23,6 +23,7 @@ import android.hardware.display.DisplayManager;
import android.os.Handler;
import android.os.Handler;
import android.os.IBinder;
import android.os.IBinder;
import android.os.RemoteException;
import android.os.RemoteException;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseArray;
import android.view.Display;
import android.view.Display;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityEvent;
@@ -30,6 +31,8 @@ import android.view.accessibility.AccessibilityManager;


import com.android.server.wm.WindowManagerInternal;
import com.android.server.wm.WindowManagerInternal;


import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.List;
import java.util.List;


/**
/**
@@ -42,6 +45,9 @@ import java.util.List;
 * TODO(262244375): Add unit tests.
 * TODO(262244375): Add unit tests.
 */
 */
public class ProxyManager {
public class ProxyManager {
    private static final boolean DEBUG = false;
    private static final String LOG_TAG = "ProxyManager";

    // Names used to populate ComponentName and ResolveInfo in connection.mA11yServiceInfo and in
    // Names used to populate ComponentName and ResolveInfo in connection.mA11yServiceInfo and in
    // the infos of connection.setInstalledAndEnabledServices
    // the infos of connection.setInstalledAndEnabledServices
    static final String PROXY_COMPONENT_PACKAGE_NAME = "ProxyPackage";
    static final String PROXY_COMPONENT_PACKAGE_NAME = "ProxyPackage";
@@ -79,6 +85,9 @@ public class ProxyManager {
            AbstractAccessibilityServiceConnection.SystemSupport systemSupport,
            AbstractAccessibilityServiceConnection.SystemSupport systemSupport,
            AccessibilityTrace trace,
            AccessibilityTrace trace,
            WindowManagerInternal windowManagerInternal) throws RemoteException {
            WindowManagerInternal windowManagerInternal) throws RemoteException {
        if (DEBUG) {
            Slog.v(LOG_TAG, "Register proxy for display id: " + displayId);
        }


        // Set a default AccessibilityServiceInfo that is used before the proxy's info is
        // Set a default AccessibilityServiceInfo that is used before the proxy's info is
        // populated. A proxy has the touch exploration and window capabilities.
        // populated. A proxy has the touch exploration and window capabilities.
@@ -134,6 +143,9 @@ public class ProxyManager {
            if (mProxyA11yServiceConnections.contains(displayId)) {
            if (mProxyA11yServiceConnections.contains(displayId)) {
                mProxyA11yServiceConnections.remove(displayId);
                mProxyA11yServiceConnections.remove(displayId);
                removed = true;
                removed = true;
                if (DEBUG) {
                    Slog.v(LOG_TAG, "Unregister proxy for display id " + displayId);
                }
            }
            }
        }
        }
        if (removed) {
        if (removed) {
@@ -155,19 +167,25 @@ public class ProxyManager {
     */
     */
    public boolean isProxyed(int displayId) {
    public boolean isProxyed(int displayId) {
        synchronized (mLock) {
        synchronized (mLock) {
            return mProxyA11yServiceConnections.contains(displayId);
            final boolean tracked = mProxyA11yServiceConnections.contains(displayId);
            if (DEBUG) {
                Slog.v(LOG_TAG, "Tracking proxy display " + displayId + " : " + tracked);
            }
            return tracked;
        }
        }
    }
    }


    /**
    /**
     * Sends AccessibilityEvents to all proxies.
     * Sends AccessibilityEvents to a proxy given the event's displayId.
     * {@link android.view.accessibility.AccessibilityDisplayProxy} will filter based on display.
     * TODO(b/250929565): Filtering should happen in the system, not in the proxy.
     */
     */
    public void sendAccessibilityEventLocked(AccessibilityEvent event) {
    public void sendAccessibilityEventLocked(AccessibilityEvent event) {
        final ProxyAccessibilityServiceConnection proxy =
        final ProxyAccessibilityServiceConnection proxy =
                mProxyA11yServiceConnections.get(event.getDisplayId());
                mProxyA11yServiceConnections.get(event.getDisplayId());
        if (proxy != null) {
        if (proxy != null) {
            if (DEBUG) {
                Slog.v(LOG_TAG, "Send proxy event " + event + " for display id "
                        + event.getDisplayId());
            }
            proxy.notifyAccessibilityEvent(event);
            proxy.notifyAccessibilityEvent(event);
        }
        }
    }
    }
@@ -186,6 +204,9 @@ public class ProxyManager {
                break;
                break;
            }
            }
        }
        }
        if (DEBUG) {
            Slog.v(LOG_TAG, "At least one proxy can retrieve windows: " + observingWindows);
        }
        return observingWindows;
        return observingWindows;
    }
    }


@@ -205,6 +226,14 @@ public class ProxyManager {
                clientState |= AccessibilityManager.STATE_FLAG_TOUCH_EXPLORATION_ENABLED;
                clientState |= AccessibilityManager.STATE_FLAG_TOUCH_EXPLORATION_ENABLED;
            }
            }
        }
        }

        if (DEBUG) {
            Slog.v(LOG_TAG, "Accessibility is enabled for all proxies: "
                    + ((clientState & AccessibilityManager.STATE_FLAG_ACCESSIBILITY_ENABLED) != 0));
            Slog.v(LOG_TAG, "Touch exploration is enabled for all proxies: "
                    + ((clientState & AccessibilityManager.STATE_FLAG_TOUCH_EXPLORATION_ENABLED)
                            != 0));
        }
        return clientState;
        return clientState;
        // TODO(b/254545943): When A11yManager is separated, include support for other properties.
        // TODO(b/254545943): When A11yManager is separated, include support for other properties.
    }
    }
@@ -234,6 +263,10 @@ public class ProxyManager {
                    mProxyA11yServiceConnections.valueAt(i);
                    mProxyA11yServiceConnections.valueAt(i);
            relevantEventTypes |= proxy.getRelevantEventTypes();
            relevantEventTypes |= proxy.getRelevantEventTypes();
        }
        }
        if (DEBUG) {
            Slog.v(LOG_TAG, "Relevant event types for all proxies: "
                    + AccessibilityEvent.eventTypeToString(relevantEventTypes));
        }
        return relevantEventTypes;
        return relevantEventTypes;
    }
    }


@@ -275,4 +308,25 @@ public class ProxyManager {
    void setAccessibilityInputFilter(AccessibilityInputFilter filter) {
    void setAccessibilityInputFilter(AccessibilityInputFilter filter) {
        mA11yInputFilter = filter;
        mA11yInputFilter = filter;
    }
    }


    /**
     * Prints information belonging to each display that is controlled by an
     * AccessibilityDisplayProxy.
     */
    void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        synchronized (mLock) {
            pw.println();
            pw.println("Proxy manager state:");
            pw.println("    Number of proxy connections: " + mProxyA11yServiceConnections.size());
            pw.println("    Registered proxy connections:");
            for (int i = 0; i < mProxyA11yServiceConnections.size(); i++) {
                final ProxyAccessibilityServiceConnection proxy =
                        mProxyA11yServiceConnections.valueAt(i);
                if (proxy != null) {
                    proxy.dump(fd, pw, args);
                }
            }
        }
    }
}
}
 No newline at end of file