Merge "Allowed custom secure-adb confirmation via Activity or Service. It used to only be available via an Activity." into klp-modular-dev
This commit is contained in:
@@ -1332,10 +1332,10 @@
|
||||
Example: com.google.android.myapp/.resolver.MyResolverActivity -->
|
||||
<string name="config_customResolverActivity"></string>
|
||||
|
||||
<!-- Name of the activity that prompts the user to reject, accept, or whitelist
|
||||
<!-- Name of the activity or service that prompts the user to reject, accept, or whitelist
|
||||
an adb host's public key, when an unwhitelisted host connects to the local adbd.
|
||||
Can be customized for other product types -->
|
||||
<string name="config_customAdbPublicKeyActivity"
|
||||
<string name="config_customAdbPublicKeyConfirmationComponent"
|
||||
>com.android.systemui/com.android.systemui.usb.UsbDebuggingActivity</string>
|
||||
|
||||
<!-- Apps that are authorized to access shared accounts, overridden by product overlays -->
|
||||
|
||||
@@ -1625,7 +1625,7 @@
|
||||
<java-symbol type="string" name="enable_explore_by_touch_warning_message" />
|
||||
<java-symbol type="bool" name="config_powerDecoupleAutoSuspendModeFromDisplay" />
|
||||
<java-symbol type="bool" name="config_powerDecoupleInteractiveModeFromDisplay" />
|
||||
<java-symbol type="string" name="config_customAdbPublicKeyActivity" />
|
||||
<java-symbol type="string" name="config_customAdbPublicKeyConfirmationComponent" />
|
||||
|
||||
<java-symbol type="layout" name="resolver_list" />
|
||||
<java-symbol type="id" name="resolver_list" />
|
||||
|
||||
@@ -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);
|
||||
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 {
|
||||
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);
|
||||
try {
|
||||
mContext.startActivity(intent);
|
||||
} catch (ActivityNotFoundException e) {
|
||||
Slog.e(TAG, "unable to start UsbDebuggingActivity");
|
||||
}
|
||||
return intent;
|
||||
}
|
||||
|
||||
private File getUserKeyFile() {
|
||||
|
||||
Reference in New Issue
Block a user