Merge "Adding USB Recording warning message to UsbResolverActivity."
This commit is contained in:
@@ -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 =
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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()
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -3876,4 +3876,6 @@
|
||||
|
||||
<java-symbol type="bool" name="config_showBuiltinWirelessChargingAnim" />
|
||||
|
||||
<java-symbol type="string" name="usb_device_resolve_prompt_warn" />
|
||||
|
||||
</resources>
|
||||
|
||||
@@ -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() {
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user