Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 07425c8c authored by Paul McLean's avatar Paul McLean
Browse files

Adding USB Recording warning message to UsbResolverActivity.

Bug:136080195
Test: install UsbAccess and UsbPersistentPermissionsTestApp
(both want to handle USB connection events). Notice the
new warning message for the app(s) that haven't been
granted record permission.

Change-Id: I651ae5e6314a2d59ed4537aa7d7785e27e3b1a52
parent 68be4332
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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 =
+10 −1
Original line number Diff line number Diff line
@@ -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
+28 −1
Original line number Diff line number Diff line
@@ -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()
+4 −2
Original line number Diff line number Diff line
@@ -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>
+2 −0
Original line number Diff line number Diff line
@@ -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>
Loading