Merge "Adding USB Recording warning message to UsbResolverActivity."

This commit is contained in:
Paul Mclean
2019-11-04 21:06:41 +00:00
committed by Android (Google) Code Review
8 changed files with 52 additions and 6 deletions

View File

@@ -95,7 +95,7 @@ public class ChooserListAdapter extends ResolverListAdapter {
// we want to separate them into a different section.
super(context, payloadIntents, null, rList, filterLastUsed,
resolverListController, useLayoutForBrowsables,
chooserListCommunicator);
chooserListCommunicator, false);
createPlaceHolders();
mMaxShortcutTargetsPerApp =

View File

@@ -140,6 +140,9 @@ public class ResolverActivity extends Activity implements
private final PackageMonitor mPackageMonitor = createPackageMonitor();
// Intent extra for connected audio devices
public static final String EXTRA_IS_AUDIO_CAPTURE_DEVICE = "is_audio_capture_device";
/**
* Get the string resource to be used as a label for the link to the resolver activity for an
* action.
@@ -1038,8 +1041,14 @@ public class ResolverActivity extends Activity implements
public ResolverListAdapter createAdapter(Context context, List<Intent> payloadIntents,
Intent[] initialIntents, List<ResolveInfo> rList,
boolean filterLastUsed, boolean useLayoutForBrowsables) {
Intent startIntent = getIntent();
boolean isAudioCaptureDevice =
startIntent.getBooleanExtra(EXTRA_IS_AUDIO_CAPTURE_DEVICE, false);
return new ResolverListAdapter(context, payloadIntents, initialIntents, rList,
filterLastUsed, createListController(), useLayoutForBrowsables, this);
filterLastUsed, createListController(), useLayoutForBrowsables, this,
isAudioCaptureDevice);
}
@VisibleForTesting

View File

@@ -24,6 +24,7 @@ import android.app.ActivityManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.PermissionChecker;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
import android.content.pm.LabeledIntent;
@@ -86,13 +87,15 @@ public class ResolverListAdapter extends BaseAdapter {
private boolean mFilterLastUsed;
private final ResolverListCommunicator mResolverListCommunicator;
private Runnable mPostListReadyRunnable;
private final boolean mIsAudioCaptureDevice;
public ResolverListAdapter(Context context, List<Intent> payloadIntents,
Intent[] initialIntents, List<ResolveInfo> rList,
boolean filterLastUsed,
ResolverListController resolverListController,
boolean useLayoutForBrowsables,
ResolverListCommunicator resolverListCommunicator) {
ResolverListCommunicator resolverListCommunicator,
boolean isAudioCaptureDevice) {
mContext = context;
mIntents = payloadIntents;
mInitialIntents = initialIntents;
@@ -105,6 +108,7 @@ public class ResolverListAdapter extends BaseAdapter {
mSuspendedMatrixColorFilter = createSuspendedColorMatrix();
mUseLayoutForBrowsables = useLayoutForBrowsables;
mResolverListCommunicator = resolverListCommunicator;
mIsAudioCaptureDevice = isAudioCaptureDevice;
final ActivityManager am = (ActivityManager) mContext.getSystemService(ACTIVITY_SERVICE);
mIconDpi = am.getLauncherLargeIconDensity();
}
@@ -651,6 +655,29 @@ public class ResolverListAdapter extends BaseAdapter {
protected CharSequence[] doInBackground(Void... voids) {
ResolveInfoPresentationGetter pg =
makePresentationGetter(mDisplayResolveInfo.getResolveInfo());
if (mIsAudioCaptureDevice) {
// This is an audio capture device, so check record permissions
ActivityInfo activityInfo = mDisplayResolveInfo.getResolveInfo().activityInfo;
String packageName = activityInfo.packageName;
int uid = activityInfo.applicationInfo.uid;
boolean hasRecordPermission =
PermissionChecker.checkPermissionForPreflight(
mContext,
android.Manifest.permission.RECORD_AUDIO, -1, uid,
packageName)
== android.content.pm.PackageManager.PERMISSION_GRANTED;
if (!hasRecordPermission) {
// Doesn't have record permission, so warn the user
return new CharSequence[] {
pg.getLabel(),
mContext.getString(R.string.usb_device_resolve_prompt_warn)
};
}
}
return new CharSequence[] {
pg.getLabel(),
pg.getSubLabel()

View File

@@ -54,7 +54,9 @@
android:minLines="1"
android:maxLines="1"
android:ellipsize="marquee" />
<!-- Extended activity info to distinguish between duplicate activity names -->
<!-- Extended activity info to distinguish between duplicate activity names
or provide record w/o permission warnings.
-->
<TextView android:id="@android:id/text2"
android:textColor="?android:attr/textColorSecondary"
android:fontFamily="@android:string/config_bodyFontFamily"
@@ -64,7 +66,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:minLines="1"
android:maxLines="1"
android:maxLines="2"
android:ellipsize="marquee" />
</LinearLayout>
</LinearLayout>

View File

@@ -5440,4 +5440,6 @@
<!-- ChooserActivity - Alphabetically sorted apps list label. [CHAR LIMIT=NONE] -->
<string name="chooser_all_apps_button_label">Apps list</string>
<!-- Prompt for the USB device resolver dialog with warning text for USB device dialogs. [CHAR LIMIT=200] -->
<string name="usb_device_resolve_prompt_warn">This app has not been granted record permission but could capture audio through this USB device.</string>
</resources>

View File

@@ -3876,4 +3876,6 @@
<java-symbol type="bool" name="config_showBuiltinWirelessChargingAnim" />
<java-symbol type="string" name="usb_device_resolve_prompt_warn" />
</resources>

View File

@@ -39,7 +39,7 @@ public class ResolverWrapperAdapter extends ResolverListAdapter {
ResolverListCommunicator resolverListCommunicator) {
super(context, payloadIntents, initialIntents, rList, filterLastUsed,
resolverListController,
useLayoutForBrowsables, resolverListCommunicator);
useLayoutForBrowsables, resolverListCommunicator, false);
}
public CountingIdlingResource getLabelIdlingResource() {

View File

@@ -87,8 +87,10 @@ public class UsbResolverActivity extends ResolverActivity {
}
mDevice = (UsbDevice)target.getParcelableExtra(UsbManager.EXTRA_DEVICE);
boolean hasAudioCapture = false;
if (mDevice != null) {
mDisconnectedReceiver = new UsbDisconnectedReceiver(this, mDevice);
hasAudioCapture = mDevice.getHasAudioCapture();
} else {
mAccessory = (UsbAccessory)target.getParcelableExtra(UsbManager.EXTRA_ACCESSORY);
if (mAccessory == null) {
@@ -119,6 +121,8 @@ public class UsbResolverActivity extends ResolverActivity {
}
}
}
getIntent().putExtra(
ResolverActivity.EXTRA_IS_AUDIO_CAPTURE_DEVICE, hasAudioCapture);
CharSequence title = getResources().getText(com.android.internal.R.string.chooseUsbActivity);
super.onCreate(savedInstanceState, target, title, null, rList, true);