summaryrefslogtreecommitdiffstats
path: root/services/usb/java/com
diff options
context:
space:
mode:
authorAaron Whyte <awhyte@google.com>2014-04-11 10:53:58 -0700
committerAaron Whyte <awhyte@google.com>2014-04-16 14:50:14 -0700
commitd1931ffc075f73d043616b7446f14a653609782e (patch)
tree0875dd705f12b0b235579218db06f950cdd81bbe /services/usb/java/com
parentf104f676e375c5c53eb049705740ab592b914bda (diff)
downloadframeworks_base-d1931ffc075f73d043616b7446f14a653609782e.zip
frameworks_base-d1931ffc075f73d043616b7446f14a653609782e.tar.gz
frameworks_base-d1931ffc075f73d043616b7446f14a653609782e.tar.bz2
Allowed custom secure-adb confirmation via Activity or Service.
It used to only be available via an Activity. Change-Id: Id79a99a70e721f3b567e75d45ffeba779264ec1e
Diffstat (limited to 'services/usb/java/com')
-rw-r--r--services/usb/java/com/android/server/usb/UsbDebuggingManager.java66
1 files changed, 53 insertions, 13 deletions
diff --git a/services/usb/java/com/android/server/usb/UsbDebuggingManager.java b/services/usb/java/com/android/server/usb/UsbDebuggingManager.java
index f73d425..0946c5a 100644
--- a/services/usb/java/com/android/server/usb/UsbDebuggingManager.java
+++ b/services/usb/java/com/android/server/usb/UsbDebuggingManager.java
@@ -20,6 +20,8 @@ import android.content.ActivityNotFoundException;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.net.LocalSocket;
import android.net.LocalSocketAddress;
@@ -210,7 +212,7 @@ public class UsbDebuggingManager implements Runnable {
case MESSAGE_ADB_CONFIRM: {
String key = (String)msg.obj;
mFingerprints = getFingerprints(key);
- showConfirmationDialog(key, mFingerprints);
+ startConfirmation(key, mFingerprints);
break;
}
@@ -245,22 +247,60 @@ public class UsbDebuggingManager implements Runnable {
return sb.toString();
}
- private void showConfirmationDialog(String key, String fingerprints) {
- Intent intent = new Intent();
+ private void startConfirmation(String key, String fingerprints) {
+ String nameString = Resources.getSystem().getString(
+ com.android.internal.R.string.config_customAdbPublicKeyConfirmationComponent);
+ ComponentName componentName = ComponentName.unflattenFromString(nameString);
+ if (startConfirmationActivity(componentName, key, fingerprints)
+ || startConfirmationService(componentName, key, fingerprints)) {
+ return;
+ }
+ Slog.e(TAG, "unable to start customAdbPublicKeyConfirmationComponent "
+ + nameString + " as an Activity or a Service");
+ }
- ComponentName componentName = ComponentName.unflattenFromString(
- Resources.getSystem().getString(
- com.android.internal.R.string.config_customAdbPublicKeyActivity));
- intent.setClassName(componentName.getPackageName(),
- componentName.getClassName());
+ /**
+ * @returns true if the componentName led to an Activity that was started.
+ */
+ private boolean startConfirmationActivity(ComponentName componentName, String key,
+ String fingerprints) {
+ PackageManager packageManager = mContext.getPackageManager();
+ Intent intent = createConfirmationIntent(componentName, key, fingerprints);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.putExtra("key", key);
- intent.putExtra("fingerprints", fingerprints);
+ if (packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY) != null) {
+ try {
+ mContext.startActivity(intent);
+ return true;
+ } catch (ActivityNotFoundException e) {
+ Slog.e(TAG, "unable to start adb whitelist activity: " + componentName, e);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * @returns true if the componentName led to a Service that was started.
+ */
+ private boolean startConfirmationService(ComponentName componentName, String key,
+ String fingerprints) {
+ Intent intent = createConfirmationIntent(componentName, key, fingerprints);
try {
- mContext.startActivity(intent);
- } catch (ActivityNotFoundException e) {
- Slog.e(TAG, "unable to start UsbDebuggingActivity");
+ if (mContext.startService(intent) != null) {
+ return true;
+ }
+ } catch (SecurityException e) {
+ Slog.e(TAG, "unable to start adb whitelist service: " + componentName, e);
}
+ return false;
+ }
+
+ private Intent createConfirmationIntent(ComponentName componentName, String key,
+ String fingerprints) {
+ Intent intent = new Intent();
+ intent.setClassName(componentName.getPackageName(), componentName.getClassName());
+ intent.putExtra("key", key);
+ intent.putExtra("fingerprints", fingerprints);
+ return intent;
}
private File getUserKeyFile() {