Skip to content

Commit 824aa86

Browse files
sganovAndroid (Google) Code Review
authored andcommitted
Merge "Accessibility service needs to request permission to be bound to." into jb-dev
2 parents 214fc5e + 53e184d commit 824aa86

File tree

4 files changed

+26
-5
lines changed

4 files changed

+26
-5
lines changed

core/java/android/accessibilityservice/AccessibilityService.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,9 +59,14 @@
5959
* An accessibility is declared as any other service in an AndroidManifest.xml but it
6060
* must also specify that it handles the "android.accessibilityservice.AccessibilityService"
6161
* {@link android.content.Intent}. Failure to declare this intent will cause the system to
62-
* ignore the accessibility service. Following is an example declaration:
62+
* ignore the accessibility service. Additionally an accessibility service must request
63+
* {@link android.Manifest.permission#BIND_ACCESSIBILITY_SERVICE
64+
* android.permission.BIND_ACCESSIBILITY_SERVICE} permission to ensure that only the system
65+
* can bind to it. Failure to declare this intent will cause the system to ignore the
66+
* accessibility service. Following is an example declaration:
6367
* </p>
64-
* <pre> &lt;service android:name=".MyAccessibilityService"&gt;
68+
* <pre> &lt;service android:name=".MyAccessibilityService"
69+
* android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE&gt;
6570
* &lt;intent-filter&gt;
6671
* &lt;action android:name="android.accessibilityservice.AccessibilityService" /&gt;
6772
* &lt;/intent-filter&gt;

core/tests/coretests/AndroidManifest.xml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1039,7 +1039,8 @@
10391039
</intent-filter>
10401040
</activity>
10411041

1042-
<service android:name="android.webkit.AccessibilityInjectorTest$MockAccessibilityService">
1042+
<service android:name="android.webkit.AccessibilityInjectorTest$MockAccessibilityService"
1043+
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
10431044
<intent-filter>
10441045
<action android:name="android.accessibilityservice.AccessibilityService" />
10451046
</intent-filter>

services/java/com/android/server/accessibility/AccessibilityManagerService.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import android.content.ServiceConnection;
3636
import android.content.pm.PackageManager;
3737
import android.content.pm.ResolveInfo;
38+
import android.content.pm.ServiceInfo;
3839
import android.database.ContentObserver;
3940
import android.graphics.Rect;
4041
import android.hardware.input.InputManager;
@@ -532,6 +533,18 @@ private void populateAccessibilityServiceListLocked() {
532533

533534
for (int i = 0, count = installedServices.size(); i < count; i++) {
534535
ResolveInfo resolveInfo = installedServices.get(i);
536+
ServiceInfo serviceInfo = resolveInfo.serviceInfo;
537+
// For now we are enforcing this if the target version is JellyBean or
538+
// higher and in a later release we will enforce this for everyone.
539+
if (serviceInfo.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN
540+
&& !android.Manifest.permission.BIND_ACCESSIBILITY_SERVICE.equals(
541+
serviceInfo.permission)) {
542+
Slog.w(LOG_TAG, "Skipping accessibilty service " + new ComponentName(
543+
serviceInfo.packageName, serviceInfo.name).flattenToShortString()
544+
+ ": it does not require the permission "
545+
+ android.Manifest.permission.BIND_ACCESSIBILITY_SERVICE);
546+
continue;
547+
}
535548
AccessibilityServiceInfo accessibilityServiceInfo;
536549
try {
537550
accessibilityServiceInfo = new AccessibilityServiceInfo(resolveInfo, mContext);

services/tests/servicestests/AndroidManifest.xml

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,13 +37,15 @@
3737
<application>
3838
<uses-library android:name="android.test.runner" />
3939

40-
<service android:name="com.android.server.AccessibilityManagerServiceTest$MyFirstMockAccessibilityService">
40+
<service android:name="com.android.server.AccessibilityManagerServiceTest$MyFirstMockAccessibilityService"
41+
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
4142
<intent-filter>
4243
<action android:name="android.accessibilityservice.AccessibilityService"/>
4344
</intent-filter>
4445
</service>
4546

46-
<service android:name="com.android.server.AccessibilityManagerServiceTest$MySecondMockAccessibilityService">
47+
<service android:name="com.android.server.AccessibilityManagerServiceTest$MySecondMockAccessibilityService"
48+
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
4749
<intent-filter>
4850
<action android:name="android.accessibilityservice.AccessibilityService"/>
4951
</intent-filter>

0 commit comments

Comments
 (0)