summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Paul Mclean <pmclean@google.com> 2019-11-04 21:06:41 +0000
committer Android (Google) Code Review <android-gerrit@google.com> 2019-11-04 21:06:41 +0000
commitbe78503554bcabd5378358c6b66a51925c8c0854 (patch)
tree4397ae76be0e4889f19acf9a7bd7ae71b2645b71
parent2b041061e38df1afedfd72d28eae896bd3c833b0 (diff)
parent07425c8c00b8c3050e6e4c54a3735a437304bfe8 (diff)
Merge "Adding USB Recording warning message to UsbResolverActivity."
-rw-r--r--core/java/com/android/internal/app/ChooserListAdapter.java2
-rw-r--r--core/java/com/android/internal/app/ResolverActivity.java11
-rw-r--r--core/java/com/android/internal/app/ResolverListAdapter.java29
-rw-r--r--core/res/res/layout/resolve_list_item.xml6
-rw-r--r--core/res/res/values/strings.xml2
-rw-r--r--core/res/res/values/symbols.xml2
-rw-r--r--core/tests/coretests/src/com/android/internal/app/ResolverWrapperAdapter.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java4
8 files changed, 52 insertions, 6 deletions
diff --git a/core/java/com/android/internal/app/ChooserListAdapter.java b/core/java/com/android/internal/app/ChooserListAdapter.java
index 6eb470fef2bc..38f4c64768db 100644
--- a/core/java/com/android/internal/app/ChooserListAdapter.java
+++ b/core/java/com/android/internal/app/ChooserListAdapter.java
@@ -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 =
diff --git a/core/java/com/android/internal/app/ResolverActivity.java b/core/java/com/android/internal/app/ResolverActivity.java
index c1c6ac9dfa89..1beb1c5e912a 100644
--- a/core/java/com/android/internal/app/ResolverActivity.java
+++ b/core/java/com/android/internal/app/ResolverActivity.java
@@ -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
diff --git a/core/java/com/android/internal/app/ResolverListAdapter.java b/core/java/com/android/internal/app/ResolverListAdapter.java
index 4076ddaa71b0..a587936ee571 100644
--- a/core/java/com/android/internal/app/ResolverListAdapter.java
+++ b/core/java/com/android/internal/app/ResolverListAdapter.java
@@ -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()
diff --git a/core/res/res/layout/resolve_list_item.xml b/core/res/res/layout/resolve_list_item.xml
index 485709523e66..86f028c174fe 100644
--- a/core/res/res/layout/resolve_list_item.xml
+++ b/core/res/res/layout/resolve_list_item.xml
@@ -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>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index d39d50739e1d..585c4bba4ba9 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -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>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 8d96c79ed3d8..13139123fe55 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -3876,4 +3876,6 @@
<java-symbol type="bool" name="config_showBuiltinWirelessChargingAnim" />
+ <java-symbol type="string" name="usb_device_resolve_prompt_warn" />
+
</resources>
diff --git a/core/tests/coretests/src/com/android/internal/app/ResolverWrapperAdapter.java b/core/tests/coretests/src/com/android/internal/app/ResolverWrapperAdapter.java
index e41df4186a12..a2191b5fac80 100644
--- a/core/tests/coretests/src/com/android/internal/app/ResolverWrapperAdapter.java
+++ b/core/tests/coretests/src/com/android/internal/app/ResolverWrapperAdapter.java
@@ -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() {
diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
index 0b273274f86d..2e30d32440ab 100644
--- a/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/usb/UsbResolverActivity.java
@@ -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);