class com.android.mtp.MtpManager
minor version: 0
major version: 59
flags: flags: (0x0020) ACC_SUPER
this_class: com.android.mtp.MtpManager
super_class: java.lang.Object
{
static final int OBJECT_HANDLE_ROOT_CHILDREN;
descriptor: I
flags: (0x0018) ACC_STATIC, ACC_FINAL
ConstantValue: -1
private static final int SUBCLASS_STILL_IMAGE_CAPTURE;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 1
private static final int SUBCLASS_MTP;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 255
private static final int PROTOCOL_PICTURE_TRANSFER;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 1
private static final int PROTOCOL_MTP;
descriptor: I
flags: (0x001a) ACC_PRIVATE, ACC_STATIC, ACC_FINAL
ConstantValue: 0
private final android.hardware.usb.UsbManager mManager;
descriptor: Landroid/hardware/usb/UsbManager;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
private final android.util.SparseArray<android.mtp.MtpDevice> mDevices;
descriptor: Landroid/util/SparseArray;
flags: (0x0012) ACC_PRIVATE, ACC_FINAL
Signature: Landroid/util/SparseArray<Landroid/mtp/MtpDevice;>;
void <init>(android.content.Context);
descriptor: (Landroid/content/Context;)V
flags: (0x0000)
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
invokespecial java.lang.Object.<init>:()V
1: aload 0
new android.util.SparseArray
dup
invokespecial android.util.SparseArray.<init>:()V
putfield com.android.mtp.MtpManager.mDevices:Landroid/util/SparseArray;
2: aload 0
aload 1
ldc "usb"
invokevirtual android.content.Context.getSystemService:(Ljava/lang/String;)Ljava/lang/Object;
checkcast android.hardware.usb.UsbManager
putfield com.android.mtp.MtpManager.mManager:Landroid/hardware/usb/UsbManager;
3: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lcom/android/mtp/MtpManager;
0 4 1 context Landroid/content/Context;
MethodParameters:
Name Flags
context
synchronized com.android.mtp.MtpDeviceRecord openDevice(int);
descriptor: (I)Lcom/android/mtp/MtpDeviceRecord;
flags: (0x0020) ACC_SYNCHRONIZED
Code:
stack=4, locals=5, args_size=2
start local 0 start local 1 0: aconst_null
astore 2
start local 2 1: aload 0
getfield com.android.mtp.MtpManager.mManager:Landroid/hardware/usb/UsbManager;
invokevirtual android.hardware.usb.UsbManager.getDeviceList:()Ljava/util/HashMap;
invokevirtual java.util.HashMap.values:()Ljava/util/Collection;
invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
astore 4
goto 6
StackMap locals: com.android.mtp.MtpManager int android.hardware.usb.UsbDevice top java.util.Iterator
StackMap stack:
2: aload 4
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast android.hardware.usb.UsbDevice
astore 3
start local 3 3: aload 3
invokevirtual android.hardware.usb.UsbDevice.getDeviceId:()I
iload 1
if_icmpne 6
4: aload 3
astore 2
5: goto 7
end local 3 6: StackMap locals:
StackMap stack:
aload 4
invokeinterface java.util.Iterator.hasNext:()Z
ifne 2
7: StackMap locals: com.android.mtp.MtpManager int android.hardware.usb.UsbDevice
StackMap stack:
aload 2
new java.lang.StringBuilder
dup
ldc "Not found USB device: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 1
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
invokestatic com.android.mtp.MtpManager.ensureNotNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
pop
8: aload 0
getfield com.android.mtp.MtpManager.mManager:Landroid/hardware/usb/UsbManager;
aload 2
invokevirtual android.hardware.usb.UsbManager.hasPermission:(Landroid/hardware/usb/UsbDevice;)Z
ifne 12
9: aload 0
getfield com.android.mtp.MtpManager.mManager:Landroid/hardware/usb/UsbManager;
aload 2
invokevirtual android.hardware.usb.UsbManager.grantPermission:(Landroid/hardware/usb/UsbDevice;)V
10: aload 0
getfield com.android.mtp.MtpManager.mManager:Landroid/hardware/usb/UsbManager;
aload 2
invokevirtual android.hardware.usb.UsbManager.hasPermission:(Landroid/hardware/usb/UsbDevice;)Z
ifne 12
11: new java.io.IOException
dup
ldc "Failed to grant a device permission."
invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
athrow
12: StackMap locals:
StackMap stack:
new android.mtp.MtpDevice
dup
aload 2
invokespecial android.mtp.MtpDevice.<init>:(Landroid/hardware/usb/UsbDevice;)V
astore 3
start local 3 13: aload 0
getfield com.android.mtp.MtpManager.mManager:Landroid/hardware/usb/UsbManager;
aload 2
invokevirtual android.hardware.usb.UsbManager.openDevice:(Landroid/hardware/usb/UsbDevice;)Landroid/hardware/usb/UsbDeviceConnection;
14: ldc "Failed to open a USB connection."
15: invokestatic com.android.mtp.MtpManager.ensureNotNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
checkcast android.hardware.usb.UsbDeviceConnection
astore 4
start local 4 16: aload 3
aload 4
invokevirtual android.mtp.MtpDevice.open:(Landroid/hardware/usb/UsbDeviceConnection;)Z
ifne 18
17: new com.android.mtp.BusyDeviceException
dup
invokespecial com.android.mtp.BusyDeviceException.<init>:()V
athrow
18: StackMap locals: android.mtp.MtpDevice android.hardware.usb.UsbDeviceConnection
StackMap stack:
aload 3
invokevirtual android.mtp.MtpDevice.getStorageIds:()[I
19: ldc "Not found MTP storages in the device."
20: invokestatic com.android.mtp.MtpManager.ensureNotNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
checkcast int[]
pop
21: aload 0
getfield com.android.mtp.MtpManager.mDevices:Landroid/util/SparseArray;
iload 1
aload 3
invokevirtual android.util.SparseArray.put:(ILjava/lang/Object;)V
22: aload 0
aload 2
invokevirtual com.android.mtp.MtpManager.createDeviceRecord:(Landroid/hardware/usb/UsbDevice;)Lcom/android/mtp/MtpDeviceRecord;
areturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 23 0 this Lcom/android/mtp/MtpManager;
0 23 1 deviceId I
1 23 2 rawDevice Landroid/hardware/usb/UsbDevice;
3 6 3 candidate Landroid/hardware/usb/UsbDevice;
13 23 3 device Landroid/mtp/MtpDevice;
16 23 4 connection Landroid/hardware/usb/UsbDeviceConnection;
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
synchronized void closeDevice(int);
descriptor: (I)V
flags: (0x0020) ACC_SYNCHRONIZED
Code:
stack=2, locals=2, args_size=2
start local 0 start local 1 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
invokevirtual android.mtp.MtpDevice.close:()V
1: aload 0
getfield com.android.mtp.MtpManager.mDevices:Landroid/util/SparseArray;
iload 1
invokevirtual android.util.SparseArray.remove:(I)V
2: return
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lcom/android/mtp/MtpManager;
0 3 1 deviceId I
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
synchronized com.android.mtp.MtpDeviceRecord[] getDevices();
descriptor: ()[Lcom/android/mtp/MtpDeviceRecord;
flags: (0x0020) ACC_SYNCHRONIZED
Code:
stack=3, locals=4, args_size=1
start local 0 0: new java.util.ArrayList
dup
invokespecial java.util.ArrayList.<init>:()V
astore 1
start local 1 1: aload 0
getfield com.android.mtp.MtpManager.mManager:Landroid/hardware/usb/UsbManager;
invokevirtual android.hardware.usb.UsbManager.getDeviceList:()Ljava/util/HashMap;
invokevirtual java.util.HashMap.values:()Ljava/util/Collection;
invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
astore 3
goto 6
StackMap locals: com.android.mtp.MtpManager java.util.ArrayList top java.util.Iterator
StackMap stack:
2: aload 3
invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
checkcast android.hardware.usb.UsbDevice
astore 2
start local 2 3: aload 2
invokestatic com.android.mtp.MtpManager.isMtpDevice:(Landroid/hardware/usb/UsbDevice;)Z
ifne 5
4: goto 6
5: StackMap locals: com.android.mtp.MtpManager java.util.ArrayList android.hardware.usb.UsbDevice java.util.Iterator
StackMap stack:
aload 1
aload 0
aload 2
invokevirtual com.android.mtp.MtpManager.createDeviceRecord:(Landroid/hardware/usb/UsbDevice;)Lcom/android/mtp/MtpDeviceRecord;
invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
pop
end local 2 6: StackMap locals: com.android.mtp.MtpManager java.util.ArrayList top java.util.Iterator
StackMap stack:
aload 3
invokeinterface java.util.Iterator.hasNext:()Z
ifne 2
7: aload 1
aload 1
invokevirtual java.util.ArrayList.size:()I
anewarray com.android.mtp.MtpDeviceRecord
invokevirtual java.util.ArrayList.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
checkcast com.android.mtp.MtpDeviceRecord[]
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/android/mtp/MtpManager;
1 8 1 devices Ljava/util/ArrayList<Lcom/android/mtp/MtpDeviceRecord;>;
3 6 2 device Landroid/hardware/usb/UsbDevice;
android.mtp.MtpObjectInfo getObjectInfo(int, int);
descriptor: (II)Landroid/mtp/MtpObjectInfo;
flags: (0x0000)
Code:
stack=4, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 3
start local 3 1: aload 3
dup
astore 4
monitorenter
2: aload 3
iload 2
invokevirtual android.mtp.MtpDevice.getObjectInfo:(I)Landroid/mtp/MtpObjectInfo;
3: new java.lang.StringBuilder
dup
ldc "Failed to get object info: "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 2
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
4: invokestatic com.android.mtp.MtpManager.ensureNotNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
checkcast android.mtp.MtpObjectInfo
aload 4
monitorexit
5: areturn
6: StackMap locals: com.android.mtp.MtpManager int int android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack: java.lang.Throwable
aload 4
monitorexit
7: athrow
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/android/mtp/MtpManager;
0 8 1 deviceId I
0 8 2 objectHandle I
1 8 3 device Landroid/mtp/MtpDevice;
Exception table:
from to target type
2 5 6 any
6 7 6 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectHandle
int[] getObjectHandles(int, int, int);
descriptor: (III)[I
flags: (0x0000)
Code:
stack=4, locals=6, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 4
start local 4 1: aload 4
dup
astore 5
monitorenter
2: aload 4
iload 2
iconst_0
iload 3
invokevirtual android.mtp.MtpDevice.getObjectHandles:(III)[I
3: ldc "Failed to fetch object handles."
4: invokestatic com.android.mtp.MtpManager.ensureNotNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
checkcast int[]
aload 5
monitorexit
5: areturn
6: StackMap locals: com.android.mtp.MtpManager int int int android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack: java.lang.Throwable
aload 5
monitorexit
7: athrow
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/android/mtp/MtpManager;
0 8 1 deviceId I
0 8 2 storageId I
0 8 3 parentObjectHandle I
1 8 4 device Landroid/mtp/MtpDevice;
Exception table:
from to target type
2 5 6 any
6 7 6 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
storageId
parentObjectHandle
byte[] getObject(int, int, int);
descriptor: (III)[B
flags: (0x0000)
Code:
stack=3, locals=6, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 4
start local 4 1: aload 4
dup
astore 5
monitorenter
2: aload 4
iload 2
iload 3
invokevirtual android.mtp.MtpDevice.getObject:(II)[B
3: ldc "Failed to fetch object bytes"
4: invokestatic com.android.mtp.MtpManager.ensureNotNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
checkcast byte[]
aload 5
monitorexit
5: areturn
6: StackMap locals: com.android.mtp.MtpManager int int int android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack: java.lang.Throwable
aload 5
monitorexit
7: athrow
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/android/mtp/MtpManager;
0 8 1 deviceId I
0 8 2 objectHandle I
0 8 3 expectedSize I
1 8 4 device Landroid/mtp/MtpDevice;
Exception table:
from to target type
2 5 6 any
6 7 6 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectHandle
expectedSize
long getPartialObject(int, int, long, long, byte[]);
descriptor: (IIJJ[B)J
flags: (0x0000)
Code:
stack=7, locals=10, args_size=6
start local 0 start local 1 start local 2 start local 3 start local 5 start local 7 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 8
start local 8 1: aload 8
dup
astore 9
monitorenter
2: aload 8
iload 2
lload 3
lload 5
aload 7
invokevirtual android.mtp.MtpDevice.getPartialObject:(IJJ[B)J
aload 9
monitorexit
3: lreturn
4: StackMap locals: com.android.mtp.MtpManager int int long long byte[] android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack: java.lang.Throwable
aload 9
monitorexit
5: athrow
end local 8 end local 7 end local 5 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lcom/android/mtp/MtpManager;
0 6 1 deviceId I
0 6 2 objectHandle I
0 6 3 offset J
0 6 5 size J
0 6 7 buffer [B
1 6 8 device Landroid/mtp/MtpDevice;
Exception table:
from to target type
2 3 4 any
4 5 4 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectHandle
offset
size
buffer
long getPartialObject64(int, int, long, long, byte[]);
descriptor: (IIJJ[B)J
flags: (0x0000)
Code:
stack=7, locals=10, args_size=6
start local 0 start local 1 start local 2 start local 3 start local 5 start local 7 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 8
start local 8 1: aload 8
dup
astore 9
monitorenter
2: aload 8
iload 2
lload 3
lload 5
aload 7
invokevirtual android.mtp.MtpDevice.getPartialObject64:(IJJ[B)J
aload 9
monitorexit
3: lreturn
4: StackMap locals: com.android.mtp.MtpManager int int long long byte[] android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack: java.lang.Throwable
aload 9
monitorexit
5: athrow
end local 8 end local 7 end local 5 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 6 0 this Lcom/android/mtp/MtpManager;
0 6 1 deviceId I
0 6 2 objectHandle I
0 6 3 offset J
0 6 5 size J
0 6 7 buffer [B
1 6 8 device Landroid/mtp/MtpDevice;
Exception table:
from to target type
2 3 4 any
4 5 4 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectHandle
offset
size
buffer
byte[] getThumbnail(int, int);
descriptor: (II)[B
flags: (0x0000)
Code:
stack=2, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 3
start local 3 1: aload 3
dup
astore 4
monitorenter
2: aload 3
iload 2
invokevirtual android.mtp.MtpDevice.getThumbnail:(I)[B
3: ldc "Failed to obtain thumbnail bytes"
4: invokestatic com.android.mtp.MtpManager.ensureNotNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
checkcast byte[]
aload 4
monitorexit
5: areturn
6: StackMap locals: com.android.mtp.MtpManager int int android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack: java.lang.Throwable
aload 4
monitorexit
7: athrow
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 8 0 this Lcom/android/mtp/MtpManager;
0 8 1 deviceId I
0 8 2 objectHandle I
1 8 3 device Landroid/mtp/MtpDevice;
Exception table:
from to target type
2 5 6 any
6 7 6 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectHandle
void deleteDocument(int, int);
descriptor: (II)V
flags: (0x0000)
Code:
stack=3, locals=5, args_size=3
start local 0 start local 1 start local 2 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 3
start local 3 1: aload 3
dup
astore 4
monitorenter
2: aload 3
iload 2
invokevirtual android.mtp.MtpDevice.deleteObject:(I)Z
ifne 4
3: new java.io.IOException
dup
ldc "Failed to delete document"
invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
athrow
4: StackMap locals: android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack:
aload 4
monitorexit
5: goto 8
StackMap locals:
StackMap stack: java.lang.Throwable
6: aload 4
monitorexit
7: athrow
8: StackMap locals:
StackMap stack:
return
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lcom/android/mtp/MtpManager;
0 9 1 deviceId I
0 9 2 objectHandle I
1 9 3 device Landroid/mtp/MtpDevice;
Exception table:
from to target type
2 5 6 any
6 7 6 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectHandle
int createDocument(int, android.mtp.MtpObjectInfo, android.os.ParcelFileDescriptor);
descriptor: (ILandroid/mtp/MtpObjectInfo;Landroid/os/ParcelFileDescriptor;)I
flags: (0x0000)
Code:
stack=5, locals=7, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 4
start local 4 1: aload 4
dup
astore 5
monitorenter
2: aload 4
aload 2
invokevirtual android.mtp.MtpDevice.sendObjectInfo:(Landroid/mtp/MtpObjectInfo;)Landroid/mtp/MtpObjectInfo;
astore 6
start local 6 3: aload 6
ifnonnull 5
4: new com.android.mtp.SendObjectInfoFailure
dup
invokespecial com.android.mtp.SendObjectInfoFailure.<init>:()V
athrow
5: StackMap locals: android.mtp.MtpDevice android.mtp.MtpDevice android.mtp.MtpObjectInfo
StackMap stack:
aload 2
invokevirtual android.mtp.MtpObjectInfo.getFormat:()I
sipush 12289
if_icmpeq 11
6: aload 4
aload 6
invokevirtual android.mtp.MtpObjectInfo.getObjectHandle:()I
7: aload 6
invokevirtual android.mtp.MtpObjectInfo.getCompressedSize:()I
i2l
aload 3
8: invokevirtual android.mtp.MtpDevice.sendObject:(IJLandroid/os/ParcelFileDescriptor;)Z
9: ifne 11
10: new java.io.IOException
dup
ldc "Failed to send contents of a document"
invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
athrow
11: StackMap locals:
StackMap stack:
aload 6
invokevirtual android.mtp.MtpObjectInfo.getObjectHandle:()I
aload 5
monitorexit
12: ireturn
end local 6 13: StackMap locals: com.android.mtp.MtpManager int android.mtp.MtpObjectInfo android.os.ParcelFileDescriptor android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack: java.lang.Throwable
aload 5
monitorexit
14: athrow
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 15 0 this Lcom/android/mtp/MtpManager;
0 15 1 deviceId I
0 15 2 objectInfo Landroid/mtp/MtpObjectInfo;
0 15 3 source Landroid/os/ParcelFileDescriptor;
1 15 4 device Landroid/mtp/MtpDevice;
3 13 6 sendObjectInfoResult Landroid/mtp/MtpObjectInfo;
Exception table:
from to target type
2 12 13 any
13 14 13 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectInfo
source
int getParent(int, int);
descriptor: (II)I
flags: (0x0000)
Code:
stack=3, locals=6, args_size=3
start local 0 start local 1 start local 2 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 3
start local 3 1: aload 3
dup
astore 4
monitorenter
2: aload 3
iload 2
invokevirtual android.mtp.MtpDevice.getParent:(I)J
l2i
istore 5
start local 5 3: iload 5
iconst_m1
if_icmpne 5
4: new java.io.FileNotFoundException
dup
ldc "Not found parent object"
invokespecial java.io.FileNotFoundException.<init>:(Ljava/lang/String;)V
athrow
5: StackMap locals: android.mtp.MtpDevice android.mtp.MtpDevice int
StackMap stack:
iload 5
aload 4
monitorexit
6: ireturn
end local 5 7: StackMap locals: com.android.mtp.MtpManager int int android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack: java.lang.Throwable
aload 4
monitorexit
8: athrow
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lcom/android/mtp/MtpManager;
0 9 1 deviceId I
0 9 2 objectHandle I
1 9 3 device Landroid/mtp/MtpDevice;
3 7 5 result I
Exception table:
from to target type
2 6 7 any
7 8 7 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectHandle
void importFile(int, int, android.os.ParcelFileDescriptor);
descriptor: (IILandroid/os/ParcelFileDescriptor;)V
flags: (0x0000)
Code:
stack=3, locals=6, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 4
start local 4 1: aload 4
dup
astore 5
monitorenter
2: aload 4
iload 2
aload 3
invokevirtual android.mtp.MtpDevice.importFile:(ILandroid/os/ParcelFileDescriptor;)Z
ifne 4
3: new java.io.IOException
dup
ldc "Failed to import file to FD"
invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
athrow
4: StackMap locals: android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack:
aload 5
monitorexit
5: goto 8
StackMap locals:
StackMap stack: java.lang.Throwable
6: aload 5
monitorexit
7: athrow
8: StackMap locals:
StackMap stack:
return
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 9 0 this Lcom/android/mtp/MtpManager;
0 9 1 deviceId I
0 9 2 objectHandle I
0 9 3 target Landroid/os/ParcelFileDescriptor;
1 9 4 device Landroid/mtp/MtpDevice;
Exception table:
from to target type
2 5 6 any
6 7 6 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectHandle
target
android.mtp.MtpEvent readEvent(int, android.os.CancellationSignal);
descriptor: (ILandroid/os/CancellationSignal;)Landroid/mtp/MtpEvent;
flags: (0x0000)
Code:
stack=2, locals=4, args_size=3
start local 0 start local 1 start local 2 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 3
start local 3 1: aload 3
aload 2
invokevirtual android.mtp.MtpDevice.readEvent:(Landroid/os/CancellationSignal;)Landroid/mtp/MtpEvent;
areturn
end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lcom/android/mtp/MtpManager;
0 2 1 deviceId I
0 2 2 signal Landroid/os/CancellationSignal;
1 2 3 device Landroid/mtp/MtpDevice;
Exceptions:
throws java.io.IOException
RuntimeInvisibleAnnotations:
com.android.internal.annotations.VisibleForTesting()
RuntimeInvisibleTypeAnnotations:
METHOD_RETURN
com.android.internal.annotations.VisibleForTesting()
MethodParameters:
Name Flags
deviceId
signal
long getObjectSizeLong(int, int, int);
descriptor: (III)J
flags: (0x0000)
Code:
stack=3, locals=5, args_size=4
start local 0 start local 1 start local 2 start local 3 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 4
start local 4 1: aload 4
iload 2
iload 3
invokevirtual android.mtp.MtpDevice.getObjectSizeLong:(II)J
lreturn
end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lcom/android/mtp/MtpManager;
0 2 1 deviceId I
0 2 2 objectHandle I
0 2 3 format I
1 2 4 device Landroid/mtp/MtpDevice;
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
objectHandle
format
private synchronized android.mtp.MtpDevice getDevice(int);
descriptor: (I)Landroid/mtp/MtpDevice;
flags: (0x0022) ACC_PRIVATE, ACC_SYNCHRONIZED
Code:
stack=4, locals=2, args_size=2
start local 0 start local 1 0: aload 0
getfield com.android.mtp.MtpManager.mDevices:Landroid/util/SparseArray;
iload 1
invokevirtual android.util.SparseArray.get:(I)Ljava/lang/Object;
checkcast android.mtp.MtpDevice
1: new java.lang.StringBuilder
dup
ldc "USB device "
invokespecial java.lang.StringBuilder.<init>:(Ljava/lang/String;)V
iload 1
invokevirtual java.lang.StringBuilder.append:(I)Ljava/lang/StringBuilder;
ldc " is not opened."
invokevirtual java.lang.StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
invokevirtual java.lang.StringBuilder.toString:()Ljava/lang/String;
2: invokestatic com.android.mtp.MtpManager.ensureNotNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
checkcast android.mtp.MtpDevice
areturn
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 this Lcom/android/mtp/MtpManager;
0 3 1 deviceId I
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
private com.android.mtp.MtpRoot[] getRoots(int);
descriptor: (I)[Lcom/android/mtp/MtpRoot;
flags: (0x0002) ACC_PRIVATE
Code:
stack=5, locals=8, args_size=2
start local 0 start local 1 0: aload 0
iload 1
invokevirtual com.android.mtp.MtpManager.getDevice:(I)Landroid/mtp/MtpDevice;
astore 2
start local 2 1: aload 2
dup
astore 3
monitorenter
2: aload 2
invokevirtual android.mtp.MtpDevice.getStorageIds:()[I
ldc "Failed to obtain storage IDs."
invokestatic com.android.mtp.MtpManager.ensureNotNull:(Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
checkcast int[]
3: astore 4
start local 4 4: new java.util.ArrayList
dup
invokespecial java.util.ArrayList.<init>:()V
astore 5
start local 5 5: iconst_0
istore 6
start local 6 6: goto 12
7: StackMap locals: com.android.mtp.MtpManager int android.mtp.MtpDevice android.mtp.MtpDevice int[] java.util.ArrayList int
StackMap stack:
aload 2
aload 4
iload 6
iaload
invokevirtual android.mtp.MtpDevice.getStorageInfo:(I)Landroid/mtp/MtpStorageInfo;
astore 7
start local 7 8: aload 7
ifnonnull 10
9: goto 11
10: StackMap locals: android.mtp.MtpStorageInfo
StackMap stack:
aload 5
new com.android.mtp.MtpRoot
dup
aload 2
invokevirtual android.mtp.MtpDevice.getDeviceId:()I
aload 7
invokespecial com.android.mtp.MtpRoot.<init>:(ILandroid/mtp/MtpStorageInfo;)V
invokevirtual java.util.ArrayList.add:(Ljava/lang/Object;)Z
pop
end local 7 11: StackMap locals:
StackMap stack:
iinc 6 1
StackMap locals:
StackMap stack:
12: iload 6
aload 4
arraylength
if_icmplt 7
end local 6 13: aload 5
aload 5
invokevirtual java.util.ArrayList.size:()I
anewarray com.android.mtp.MtpRoot
invokevirtual java.util.ArrayList.toArray:([Ljava/lang/Object;)[Ljava/lang/Object;
checkcast com.android.mtp.MtpRoot[]
aload 3
monitorexit
14: areturn
end local 5 end local 4 15: StackMap locals: com.android.mtp.MtpManager int android.mtp.MtpDevice android.mtp.MtpDevice
StackMap stack: java.lang.Throwable
aload 3
monitorexit
16: athrow
end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 17 0 this Lcom/android/mtp/MtpManager;
0 17 1 deviceId I
1 17 2 device Landroid/mtp/MtpDevice;
4 15 4 storageIds [I
5 15 5 roots Ljava/util/ArrayList<Lcom/android/mtp/MtpRoot;>;
6 13 6 i I
8 11 7 info Landroid/mtp/MtpStorageInfo;
Exception table:
from to target type
2 14 15 any
15 16 15 any
Exceptions:
throws java.io.IOException
MethodParameters:
Name Flags
deviceId
private com.android.mtp.MtpDeviceRecord createDeviceRecord(android.hardware.usb.UsbDevice);
descriptor: (Landroid/hardware/usb/UsbDevice;)Lcom/android/mtp/MtpDeviceRecord;
flags: (0x0002) ACC_PRIVATE
Code:
stack=9, locals=9, args_size=2
start local 0 start local 1 0: aload 0
getfield com.android.mtp.MtpManager.mDevices:Landroid/util/SparseArray;
aload 1
invokevirtual android.hardware.usb.UsbDevice.getDeviceId:()I
invokevirtual android.util.SparseArray.get:(I)Ljava/lang/Object;
checkcast android.mtp.MtpDevice
astore 2
start local 2 1: aload 2
ifnull 2
iconst_1
goto 3
StackMap locals: android.mtp.MtpDevice
StackMap stack:
2: iconst_0
StackMap locals:
StackMap stack: int
3: istore 3
start local 3 4: aload 1
invokevirtual android.hardware.usb.UsbDevice.getProductName:()Ljava/lang/String;
astore 4
start local 4 5: aconst_null
astore 6
start local 6 6: aconst_null
astore 7
start local 7 7: iload 3
ifeq 18
8: aload 0
aload 1
invokevirtual android.hardware.usb.UsbDevice.getDeviceId:()I
invokevirtual com.android.mtp.MtpManager.getRoots:(I)[Lcom/android/mtp/MtpRoot;
astore 5
start local 5 9: goto 13
end local 5 StackMap locals: com.android.mtp.MtpManager android.hardware.usb.UsbDevice android.mtp.MtpDevice int java.lang.String top int[] int[]
StackMap stack: java.io.IOException
10: astore 8
start local 8 11: ldc "MtpDocumentsProvider"
ldc "Failed to open device"
aload 8
invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
pop
12: iconst_0
anewarray com.android.mtp.MtpRoot
astore 5
end local 8 start local 5 13: StackMap locals: com.android.mtp.MtpManager android.hardware.usb.UsbDevice android.mtp.MtpDevice int java.lang.String com.android.mtp.MtpRoot[] int[] int[]
StackMap stack:
aload 2
invokevirtual android.mtp.MtpDevice.getDeviceInfo:()Landroid/mtp/MtpDeviceInfo;
astore 8
start local 8 14: aload 8
ifnull 19
15: aload 8
invokevirtual android.mtp.MtpDeviceInfo.getOperationsSupported:()[I
astore 6
16: aload 8
invokevirtual android.mtp.MtpDeviceInfo.getEventsSupported:()[I
astore 7
end local 8 17: goto 19
end local 5 18: StackMap locals: com.android.mtp.MtpManager android.hardware.usb.UsbDevice android.mtp.MtpDevice int java.lang.String top int[] int[]
StackMap stack:
iconst_0
anewarray com.android.mtp.MtpRoot
astore 5
start local 5 19: StackMap locals: com.android.mtp.MtpManager android.hardware.usb.UsbDevice android.mtp.MtpDevice int java.lang.String com.android.mtp.MtpRoot[] int[] int[]
StackMap stack:
new com.android.mtp.MtpDeviceRecord
dup
20: aload 1
invokevirtual android.hardware.usb.UsbDevice.getDeviceId:()I
aload 4
aload 1
invokevirtual android.hardware.usb.UsbDevice.getSerialNumber:()Ljava/lang/String;
iload 3
aload 5
21: aload 6
aload 7
22: invokespecial com.android.mtp.MtpDeviceRecord.<init>:(ILjava/lang/String;Ljava/lang/String;Z[Lcom/android/mtp/MtpRoot;[I[I)V
areturn
end local 7 end local 6 end local 5 end local 4 end local 3 end local 2 end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 23 0 this Lcom/android/mtp/MtpManager;
0 23 1 device Landroid/hardware/usb/UsbDevice;
1 23 2 mtpDevice Landroid/mtp/MtpDevice;
4 23 3 opened Z
5 23 4 name Ljava/lang/String;
9 10 5 roots [Lcom/android/mtp/MtpRoot;
13 18 5 roots [Lcom/android/mtp/MtpRoot;
19 23 5 roots [Lcom/android/mtp/MtpRoot;
6 23 6 operationsSupported [I
7 23 7 eventsSupported [I
11 13 8 exp Ljava/io/IOException;
14 17 8 info Landroid/mtp/MtpDeviceInfo;
Exception table:
from to target type
8 9 10 Class java.io.IOException
MethodParameters:
Name Flags
device
static boolean isMtpDevice(android.hardware.usb.UsbDevice);
descriptor: (Landroid/hardware/usb/UsbDevice;)Z
flags: (0x0008) ACC_STATIC
Code:
stack=2, locals=3, args_size=1
start local 0 0: iconst_0
istore 1
start local 1 1: goto 13
2: StackMap locals: int
StackMap stack:
aload 0
iload 1
invokevirtual android.hardware.usb.UsbDevice.getInterface:(I)Landroid/hardware/usb/UsbInterface;
astore 2
start local 2 3: aload 2
invokevirtual android.hardware.usb.UsbInterface.getInterfaceClass:()I
bipush 6
if_icmpne 7
4: aload 2
invokevirtual android.hardware.usb.UsbInterface.getInterfaceSubclass:()I
iconst_1
if_icmpne 7
5: aload 2
invokevirtual android.hardware.usb.UsbInterface.getInterfaceProtocol:()I
iconst_1
if_icmpne 7
6: iconst_1
ireturn
7: StackMap locals: android.hardware.usb.UsbInterface
StackMap stack:
aload 2
invokevirtual android.hardware.usb.UsbInterface.getInterfaceClass:()I
sipush 255
if_icmpne 12
8: aload 2
invokevirtual android.hardware.usb.UsbInterface.getInterfaceSubclass:()I
sipush 255
if_icmpne 12
9: aload 2
invokevirtual android.hardware.usb.UsbInterface.getInterfaceProtocol:()I
ifne 12
10: ldc "MTP"
aload 2
invokevirtual android.hardware.usb.UsbInterface.getName:()Ljava/lang/String;
invokevirtual java.lang.String.equals:(Ljava/lang/Object;)Z
ifeq 12
11: iconst_1
ireturn
end local 2 12: StackMap locals:
StackMap stack:
iinc 1 1
StackMap locals:
StackMap stack:
13: iload 1
aload 0
invokevirtual android.hardware.usb.UsbDevice.getInterfaceCount:()I
if_icmplt 2
end local 1 14: iconst_0
ireturn
end local 0 LocalVariableTable:
Start End Slot Name Signature
0 15 0 device Landroid/hardware/usb/UsbDevice;
1 14 1 i I
3 12 2 usbInterface Landroid/hardware/usb/UsbInterface;
MethodParameters:
Name Flags
device
private static <T> T ensureNotNull(T, java.lang.String);
descriptor: (Ljava/lang/Object;Ljava/lang/String;)Ljava/lang/Object;
flags: (0x000a) ACC_PRIVATE, ACC_STATIC
Code:
stack=3, locals=2, args_size=2
start local 0 start local 1 0: aload 0
ifnull 2
1: aload 0
areturn
2: StackMap locals:
StackMap stack:
new java.io.IOException
dup
aload 1
invokespecial java.io.IOException.<init>:(Ljava/lang/String;)V
athrow
end local 1 end local 0 LocalVariableTable:
Start End Slot Name Signature
0 3 0 t TT;
0 3 1 errorMessage Ljava/lang/String;
Exceptions:
throws java.io.IOException
Signature: <T:Ljava/lang/Object;>(TT;Ljava/lang/String;)TT;
MethodParameters:
Name Flags
t
errorMessage
}
SourceFile: "MtpManager.java"