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

Commit dc89e079 authored by Daichi Hirono's avatar Daichi Hirono Committed by Android (Google) Code Review
Browse files

Merge "Grant USB device permission by using system permission."

parents 3899902f 4751880a
Loading
Loading
Loading
Loading
+16 −0
Original line number Diff line number Diff line
@@ -23,6 +23,7 @@ import android.app.PendingIntent;
import android.content.Context;
import android.os.Bundle;
import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.os.RemoteException;
import android.util.Log;

@@ -454,6 +455,21 @@ public class UsbManager {
        }
    }

    /**
     * Grants permission for USB device without showing system dialog.
     * Only system components can call this function.
     * @param device to request permissions for
     *
     * {@hide}
     */
    public void grantPermission(UsbDevice device) {
        try {
            mService.grantDevicePermission(device, Process.myUid());
        } catch (RemoteException e) {
            Log.e(TAG, "RemoteException in grantPermission", e);
        }
    }

    /**
     * Returns true if the specified USB function is currently enabled when in device mode.
     * <p>
+1 −0
Original line number Diff line number Diff line
@@ -5,6 +5,7 @@ LOCAL_MODULE_TAGS := optional
LOCAL_SRC_FILES := $(call all-java-files-under, src)
LOCAL_PACKAGE_NAME := MtpDocumentsProvider
LOCAL_CERTIFICATE := media
LOCAL_PRIVILEGED_MODULE := true

include $(BUILD_PACKAGE)
include $(LOCAL_PATH)/tests/Android.mk
+1 −0
Original line number Diff line number Diff line
@@ -3,6 +3,7 @@
          package="com.android.mtp"
          android:sharedUserId="android.media">
    <uses-feature android:name="android.hardware.usb.host" />
    <uses-permission android:name="android.permission.MANAGE_USB" />
    <application android:label="@string/app_label">
        <provider
            android:name=".MtpDocumentsProvider"
+4 −4
Original line number Diff line number Diff line
@@ -26,14 +26,12 @@ import android.mtp.MtpEvent;
import android.mtp.MtpObjectInfo;
import android.os.CancellationSignal;
import android.os.ParcelFileDescriptor;
import android.os.Process;
import android.util.SparseArray;

import com.android.internal.annotations.VisibleForTesting;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;

/**
 * The model wrapping android.mtp API.
@@ -63,8 +61,10 @@ class MtpManager {
        }

        if (!mManager.hasPermission(rawDevice)) {
            // Permission should be obtained via app selection dialog for intent.
            throw new IOException("No permission to operate USB device.");
            mManager.grantPermission(rawDevice);
            if (!mManager.hasPermission(rawDevice)) {
                throw new IOException("Failed to grant a device permission.");
            }
        }

        final MtpDevice device = new MtpDevice(rawDevice);
+1 −10
Original line number Diff line number Diff line
@@ -52,12 +52,10 @@ import org.xmlpull.v1.XmlPullParserException;
import org.xmlpull.v1.XmlSerializer;

import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.HashMap;
@@ -984,14 +982,7 @@ class UsbSettingsManager {
    public boolean hasPermission(UsbDevice device) {
        synchronized (mLock) {
            int uid = Binder.getCallingUid();
            int androidMediaUid;
            try {
                androidMediaUid = mPackageManager.getApplicationInfo("com.android.mtp", 0).uid;
            } catch (NameNotFoundException e) {
                androidMediaUid = -1;
            }
            if (uid == Process.SYSTEM_UID || UserHandle.getAppId(uid) == androidMediaUid ||
                    mDisablePermissionDialogs) {
            if (uid == Process.SYSTEM_UID || mDisablePermissionDialogs) {
                return true;
            }
            SparseBooleanArray uidList = mDevicePermissionMap.get(device.getDeviceName());