am 824aa860: Merge "Accessibility service needs to request permission to be bound to." into jb-dev

* commit '824aa860cd0b38b09779aab417612b115fd495a3':
  Accessibility service needs to request permission to be bound to.
This commit is contained in:
Svetoslav Ganov
2012-05-16 17:58:00 -07:00
committed by Android Git Automerger
4 changed files with 26 additions and 5 deletions

View File

@@ -59,9 +59,14 @@ import com.android.internal.os.HandlerCaller;
* An accessibility is declared as any other service in an AndroidManifest.xml but it
* must also specify that it handles the "android.accessibilityservice.AccessibilityService"
* {@link android.content.Intent}. Failure to declare this intent will cause the system to
* ignore the accessibility service. Following is an example declaration:
* ignore the accessibility service. Additionally an accessibility service must request
* {@link android.Manifest.permission#BIND_ACCESSIBILITY_SERVICE
* android.permission.BIND_ACCESSIBILITY_SERVICE} permission to ensure that only the system
* can bind to it. Failure to declare this intent will cause the system to ignore the
* accessibility service. Following is an example declaration:
* </p>
* <pre> &lt;service android:name=".MyAccessibilityService"&gt;
* <pre> &lt;service android:name=".MyAccessibilityService"
* android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE&gt;
* &lt;intent-filter&gt;
* &lt;action android:name="android.accessibilityservice.AccessibilityService" /&gt;
* &lt;/intent-filter&gt;

View File

@@ -1039,7 +1039,8 @@
</intent-filter>
</activity>
<service android:name="android.webkit.AccessibilityInjectorTest$MockAccessibilityService">
<service android:name="android.webkit.AccessibilityInjectorTest$MockAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService" />
</intent-filter>

View File

@@ -35,6 +35,7 @@ import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.content.pm.ServiceInfo;
import android.database.ContentObserver;
import android.graphics.Rect;
import android.hardware.input.InputManager;
@@ -532,6 +533,18 @@ public class AccessibilityManagerService extends IAccessibilityManager.Stub
for (int i = 0, count = installedServices.size(); i < count; i++) {
ResolveInfo resolveInfo = installedServices.get(i);
ServiceInfo serviceInfo = resolveInfo.serviceInfo;
// For now we are enforcing this if the target version is JellyBean or
// higher and in a later release we will enforce this for everyone.
if (serviceInfo.applicationInfo.targetSdkVersion >= Build.VERSION_CODES.JELLY_BEAN
&& !android.Manifest.permission.BIND_ACCESSIBILITY_SERVICE.equals(
serviceInfo.permission)) {
Slog.w(LOG_TAG, "Skipping accessibilty service " + new ComponentName(
serviceInfo.packageName, serviceInfo.name).flattenToShortString()
+ ": it does not require the permission "
+ android.Manifest.permission.BIND_ACCESSIBILITY_SERVICE);
continue;
}
AccessibilityServiceInfo accessibilityServiceInfo;
try {
accessibilityServiceInfo = new AccessibilityServiceInfo(resolveInfo, mContext);

View File

@@ -37,13 +37,15 @@
<application>
<uses-library android:name="android.test.runner" />
<service android:name="com.android.server.AccessibilityManagerServiceTest$MyFirstMockAccessibilityService">
<service android:name="com.android.server.AccessibilityManagerServiceTest$MyFirstMockAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>
</service>
<service android:name="com.android.server.AccessibilityManagerServiceTest$MySecondMockAccessibilityService">
<service android:name="com.android.server.AccessibilityManagerServiceTest$MySecondMockAccessibilityService"
android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE">
<intent-filter>
<action android:name="android.accessibilityservice.AccessibilityService"/>
</intent-filter>