Loading core/java/android/hardware/usb/UsbManager.java +16 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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> Loading packages/MtpDocumentsProvider/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -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 packages/MtpDocumentsProvider/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" Loading packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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); Loading services/usb/java/com/android/server/usb/UsbSettingsManager.java +1 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading Loading
core/java/android/hardware/usb/UsbManager.java +16 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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> Loading
packages/MtpDocumentsProvider/Android.mk +1 −0 Original line number Diff line number Diff line Loading @@ -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
packages/MtpDocumentsProvider/AndroidManifest.xml +1 −0 Original line number Diff line number Diff line Loading @@ -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" Loading
packages/MtpDocumentsProvider/src/com/android/mtp/MtpManager.java +4 −4 Original line number Diff line number Diff line Loading @@ -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. Loading Loading @@ -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); Loading
services/usb/java/com/android/server/usb/UsbSettingsManager.java +1 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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()); Loading