Make performAccessibilityShortcut a SystemAPI

Also create a new MANAGE_ACCESSIBILITY permission to
perform the shortcut.

Bug: 116118615
Test: make, activate accessibility shortcut
Change-Id: Ic65a0cdf7393429e14cb98f4fb0734d20069b05a
This commit is contained in:
Phil Weaver
2018-10-09 15:01:49 -07:00
parent 5a51e004b1
commit 27beee50d3
8 changed files with 82 additions and 3 deletions

View File

@@ -6038,6 +6038,7 @@ public final class Settings {
* shortcut. Must be its flattened {@link ComponentName}.
* @hide
*/
@TestApi
public static final String ACCESSIBILITY_SHORTCUT_TARGET_SERVICE =
"accessibility_shortcut_target_service";

View File

@@ -23,8 +23,11 @@ import android.accessibilityservice.AccessibilityServiceInfo;
import android.accessibilityservice.AccessibilityServiceInfo.FeedbackType;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SdkConstant;
import android.annotation.SystemApi;
import android.annotation.SystemService;
import android.annotation.TestApi;
import android.annotation.UnsupportedAppUsage;
import android.content.ComponentName;
import android.content.Context;
@@ -204,6 +207,7 @@ public final class AccessibilityManager {
*
* @hide
*/
@TestApi
public interface AccessibilityServicesStateChangeListener {
/**
@@ -778,6 +782,7 @@ public final class AccessibilityManager {
* for a callback on the process's main handler.
* @hide
*/
@TestApi
public void addAccessibilityServicesStateChangeListener(
@NonNull AccessibilityServicesStateChangeListener listener, @Nullable Handler handler) {
synchronized (mLock) {
@@ -793,6 +798,7 @@ public final class AccessibilityManager {
*
* @hide
*/
@TestApi
public void removeAccessibilityServicesStateChangeListener(
@NonNull AccessibilityServicesStateChangeListener listener) {
synchronized (mLock) {
@@ -1056,6 +1062,9 @@ public final class AccessibilityManager {
*
* @hide
*/
@SystemApi
@TestApi
@RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY)
public void performAccessibilityShortcut() {
final IAccessibilityManager service;
synchronized (mLock) {
@@ -1139,6 +1148,30 @@ public final class AccessibilityManager {
}
}
/**
* Get the component name of the service currently assigned to the accessibility shortcut.
*
* @return The flattened component name
* @hide
*/
@TestApi
@RequiresPermission(Manifest.permission.MANAGE_ACCESSIBILITY)
@Nullable
public String getAccessibilityShortcutService() {
final IAccessibilityManager service;
synchronized (mLock) {
service = getServiceLocked();
}
if (service != null) {
try {
return service.getAccessibilityShortcutService();
} catch (RemoteException re) {
re.rethrowFromSystemServer();
}
}
return null;
}
private IAccessibilityManager getServiceLocked() {
if (mService == null) {
tryConnectToServiceLocked(null);

View File

@@ -67,9 +67,12 @@ interface IAccessibilityManager {
void notifyAccessibilityButtonVisibilityChanged(boolean available);
// Requires WRITE_SECURE_SETTINGS
// Requires Manifest.permission.MANAGE_ACCESSIBILITY
void performAccessibilityShortcut();
// Requires Manifest.permission.MANAGE_ACCESSIBILITY
String getAccessibilityShortcutService();
// System process only
boolean sendFingerprintGesture(int gestureKeyCode);