final class com.android.mtp.RootScanner$UpdateRootsRunnable implements java.lang.Runnable
minor version: 0
major version: 59
flags: flags: (0x0030) ACC_FINAL, ACC_SUPER
this_class: com.android.mtp.RootScanner$UpdateRootsRunnable
super_class: java.lang.Object
{
final java.util.concurrent.CountDownLatch mStopped;
descriptor: Ljava/util/concurrent/CountDownLatch;
flags: (0x0010) ACC_FINAL
final java.util.concurrent.CountDownLatch mFirstScanCompleted;
descriptor: Ljava/util/concurrent/CountDownLatch;
flags: (0x0010) ACC_FINAL
final com.android.mtp.RootScanner this$0;
descriptor: Lcom/android/mtp/RootScanner;
flags: (0x1010) ACC_FINAL, ACC_SYNTHETIC
private void <init>(com.android.mtp.RootScanner);
descriptor: (Lcom/android/mtp/RootScanner;)V
flags: (0x0002) ACC_PRIVATE
Code:
stack=4, locals=2, args_size=2
start local 0 // com.android.mtp.RootScanner$UpdateRootsRunnable this
0: .line 117
aload 0 /* this */
aload 1
putfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
aload 0 /* this */
invokespecial java.lang.Object.<init>:()V
1: .line 121
aload 0 /* this */
new java.util.concurrent.CountDownLatch
dup
iconst_1
invokespecial java.util.concurrent.CountDownLatch.<init>:(I)V
putfield com.android.mtp.RootScanner$UpdateRootsRunnable.mStopped:Ljava/util/concurrent/CountDownLatch;
2: .line 126
aload 0 /* this */
new java.util.concurrent.CountDownLatch
dup
iconst_1
invokespecial java.util.concurrent.CountDownLatch.<init>:(I)V
putfield com.android.mtp.RootScanner$UpdateRootsRunnable.mFirstScanCompleted:Ljava/util/concurrent/CountDownLatch;
3: .line 117
return
end local 0 // com.android.mtp.RootScanner$UpdateRootsRunnable this
LocalVariableTable:
Start End Slot Name Signature
0 4 0 this Lcom/android/mtp/RootScanner$UpdateRootsRunnable;
MethodParameters:
Name Flags
this$0 final
public void run();
descriptor: ()V
flags: (0x0001) ACC_PUBLIC
Code:
stack=5, locals=10, args_size=1
start local 0 // com.android.mtp.RootScanner$UpdateRootsRunnable this
0: .line 130
bipush 10
invokestatic android.os.Process.setThreadPriority:(I)V
1: .line 131
iconst_0
istore 1 /* pollingCount */
start local 1 // int pollingCount
2: .line 132
goto 53
3: .line 133
StackMap locals: int
StackMap stack:
iconst_0
istore 2 /* changed */
start local 2 // boolean changed
4: .line 136
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
getfield com.android.mtp.RootScanner.mManager:Lcom/android/mtp/MtpManager;
invokevirtual com.android.mtp.MtpManager.getDevices:()[Lcom/android/mtp/MtpDeviceRecord;
astore 3 /* devices */
start local 3 // com.android.mtp.MtpDeviceRecord[] devices
5: .line 138
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
getfield com.android.mtp.RootScanner.mDatabase:Lcom/android/mtp/MtpDatabase;
invokevirtual com.android.mtp.MtpDatabase.getMapper:()Lcom/android/mtp/Mapper;
aconst_null
invokevirtual com.android.mtp.Mapper.startAddingDocuments:(Ljava/lang/String;)V
6: .line 139
aload 3 /* devices */
dup
astore 7
arraylength
istore 6
iconst_0
istore 5
goto 11
StackMap locals: com.android.mtp.RootScanner$UpdateRootsRunnable int int com.android.mtp.MtpDeviceRecord[] top int int com.android.mtp.MtpDeviceRecord[]
StackMap stack:
7: aload 7
iload 5
aaload
astore 4 /* device */
start local 4 // com.android.mtp.MtpDeviceRecord device
8: .line 140
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
getfield com.android.mtp.RootScanner.mDatabase:Lcom/android/mtp/MtpDatabase;
invokevirtual com.android.mtp.MtpDatabase.getMapper:()Lcom/android/mtp/Mapper;
aload 4 /* device */
invokevirtual com.android.mtp.Mapper.putDeviceDocument:(Lcom/android/mtp/MtpDeviceRecord;)Z
ifeq 10
9: .line 141
iconst_1
istore 2 /* changed */
end local 4 // com.android.mtp.MtpDeviceRecord device
10: .line 139
StackMap locals:
StackMap stack:
iinc 5 1
StackMap locals:
StackMap stack:
11: iload 5
iload 6
if_icmplt 7
12: .line 144
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
getfield com.android.mtp.RootScanner.mDatabase:Lcom/android/mtp/MtpDatabase;
invokevirtual com.android.mtp.MtpDatabase.getMapper:()Lcom/android/mtp/Mapper;
13: .line 145
aconst_null
14: .line 144
invokevirtual com.android.mtp.Mapper.stopAddingDocuments:(Ljava/lang/String;)Z
15: .line 145
ifeq 21
16: .line 146
iconst_1
istore 2 /* changed */
17: .line 148
goto 21
StackMap locals: com.android.mtp.RootScanner$UpdateRootsRunnable int int com.android.mtp.MtpDeviceRecord[]
StackMap stack: java.io.FileNotFoundException
18: astore 4 /* exception */
start local 4 // java.io.FileNotFoundException exception
19: .line 151
ldc "MtpDocumentsProvider"
ldc "Unexpected FileNotFoundException"
aload 4 /* exception */
invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
pop
20: .line 152
new java.lang.AssertionError
dup
ldc "Unexpected exception for the top parent"
aload 4 /* exception */
invokespecial java.lang.AssertionError.<init>:(Ljava/lang/String;Ljava/lang/Throwable;)V
athrow
end local 4 // java.io.FileNotFoundException exception
21: .line 156
StackMap locals:
StackMap stack:
aload 3 /* devices */
dup
astore 7
arraylength
istore 6
iconst_0
istore 5
goto 38
StackMap locals: com.android.mtp.RootScanner$UpdateRootsRunnable int int com.android.mtp.MtpDeviceRecord[] top int int com.android.mtp.MtpDeviceRecord[]
StackMap stack:
22: aload 7
iload 5
aaload
astore 4 /* device */
start local 4 // com.android.mtp.MtpDeviceRecord device
23: .line 157
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
getfield com.android.mtp.RootScanner.mDatabase:Lcom/android/mtp/MtpDatabase;
aload 4 /* device */
getfield com.android.mtp.MtpDeviceRecord.deviceId:I
invokevirtual com.android.mtp.MtpDatabase.getDocumentIdForDevice:(I)Ljava/lang/String;
astore 8 /* documentId */
start local 8 // java.lang.String documentId
24: .line 158
aload 8 /* documentId */
ifnonnull 26
25: .line 159
goto 37
26: .line 162
StackMap locals: com.android.mtp.RootScanner$UpdateRootsRunnable int int com.android.mtp.MtpDeviceRecord[] com.android.mtp.MtpDeviceRecord int int com.android.mtp.MtpDeviceRecord[] java.lang.String
StackMap stack:
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
getfield com.android.mtp.RootScanner.mDatabase:Lcom/android/mtp/MtpDatabase;
invokevirtual com.android.mtp.MtpDatabase.getMapper:()Lcom/android/mtp/Mapper;
aload 8 /* documentId */
invokevirtual com.android.mtp.Mapper.startAddingDocuments:(Ljava/lang/String;)V
27: .line 163
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
getfield com.android.mtp.RootScanner.mDatabase:Lcom/android/mtp/MtpDatabase;
invokevirtual com.android.mtp.MtpDatabase.getMapper:()Lcom/android/mtp/Mapper;
28: .line 164
aload 8 /* documentId */
aload 4 /* device */
getfield com.android.mtp.MtpDeviceRecord.operationsSupported:[I
aload 4 /* device */
getfield com.android.mtp.MtpDeviceRecord.roots:[Lcom/android/mtp/MtpRoot;
29: .line 163
invokevirtual com.android.mtp.Mapper.putStorageDocuments:(Ljava/lang/String;[I[Lcom/android/mtp/MtpRoot;)Z
30: .line 164
ifeq 32
31: .line 165
iconst_1
istore 2 /* changed */
32: .line 167
StackMap locals:
StackMap stack:
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
getfield com.android.mtp.RootScanner.mDatabase:Lcom/android/mtp/MtpDatabase;
invokevirtual com.android.mtp.MtpDatabase.getMapper:()Lcom/android/mtp/Mapper;
aload 8 /* documentId */
invokevirtual com.android.mtp.Mapper.stopAddingDocuments:(Ljava/lang/String;)Z
ifeq 37
33: .line 168
iconst_1
istore 2 /* changed */
34: .line 170
goto 37
StackMap locals:
StackMap stack: java.io.FileNotFoundException
35: astore 9 /* exception */
start local 9 // java.io.FileNotFoundException exception
36: .line 171
ldc "MtpDocumentsProvider"
ldc "Parent document is gone."
aload 9 /* exception */
invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
pop
end local 9 // java.io.FileNotFoundException exception
end local 8 // java.lang.String documentId
end local 4 // com.android.mtp.MtpDeviceRecord device
37: .line 156
StackMap locals: com.android.mtp.RootScanner$UpdateRootsRunnable int int com.android.mtp.MtpDeviceRecord[] top int int com.android.mtp.MtpDeviceRecord[]
StackMap stack:
iinc 5 1
StackMap locals:
StackMap stack:
38: iload 5
iload 6
if_icmplt 22
39: .line 176
iload 2 /* changed */
ifeq 41
40: .line 177
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.this$0:Lcom/android/mtp/RootScanner;
invokevirtual com.android.mtp.RootScanner.notifyChange:()V
41: .line 179
StackMap locals: com.android.mtp.RootScanner$UpdateRootsRunnable int int com.android.mtp.MtpDeviceRecord[]
StackMap stack:
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.mFirstScanCompleted:Ljava/util/concurrent/CountDownLatch;
invokevirtual java.util.concurrent.CountDownLatch.countDown:()V
42: .line 180
iinc 1 /* pollingCount */ 1
43: .line 181
aload 3 /* devices */
arraylength
ifne 45
44: .line 182
goto 54
45: .line 188
StackMap locals:
StackMap stack:
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.mStopped:Ljava/util/concurrent/CountDownLatch;
iload 1 /* pollingCount */
i2l
ldc 10
lcmp
ifle 47
46: .line 189
ldc 30000
goto 48
StackMap locals:
StackMap stack: java.util.concurrent.CountDownLatch
47: ldc 2000
StackMap locals: com.android.mtp.RootScanner$UpdateRootsRunnable int int com.android.mtp.MtpDeviceRecord[]
StackMap stack: java.util.concurrent.CountDownLatch long
48: getstatic java.util.concurrent.TimeUnit.MILLISECONDS:Ljava/util/concurrent/TimeUnit;
49: .line 188
invokevirtual java.util.concurrent.CountDownLatch.await:(JLjava/util/concurrent/TimeUnit;)Z
pop
50: .line 190
goto 53
StackMap locals:
StackMap stack: java.lang.InterruptedException
51: pop
52: .line 191
goto 54
end local 3 // com.android.mtp.MtpDeviceRecord[] devices
end local 2 // boolean changed
53: .line 132
StackMap locals:
StackMap stack:
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.mStopped:Ljava/util/concurrent/CountDownLatch;
invokevirtual java.util.concurrent.CountDownLatch.getCount:()J
lconst_0
lcmp
ifgt 3
54: .line 194
StackMap locals:
StackMap stack:
return
end local 1 // int pollingCount
end local 0 // com.android.mtp.RootScanner$UpdateRootsRunnable this
LocalVariableTable:
Start End Slot Name Signature
0 55 0 this Lcom/android/mtp/RootScanner$UpdateRootsRunnable;
2 55 1 pollingCount I
4 53 2 changed Z
5 53 3 devices [Lcom/android/mtp/MtpDeviceRecord;
8 10 4 device Lcom/android/mtp/MtpDeviceRecord;
19 21 4 exception Ljava/io/FileNotFoundException;
23 37 4 device Lcom/android/mtp/MtpDeviceRecord;
24 37 8 documentId Ljava/lang/String;
36 37 9 exception Ljava/io/FileNotFoundException;
Exception table:
from to target type
5 17 18 Class java.io.FileNotFoundException
26 34 35 Class java.io.FileNotFoundException
45 50 51 Class java.lang.InterruptedException
void stop();
descriptor: ()V
flags: (0x0000)
Code:
stack=1, locals=1, args_size=1
start local 0 // com.android.mtp.RootScanner$UpdateRootsRunnable this
0: .line 197
aload 0 /* this */
getfield com.android.mtp.RootScanner$UpdateRootsRunnable.mStopped:Ljava/util/concurrent/CountDownLatch;
invokevirtual java.util.concurrent.CountDownLatch.countDown:()V
1: .line 198
return
end local 0 // com.android.mtp.RootScanner$UpdateRootsRunnable this
LocalVariableTable:
Start End Slot Name Signature
0 2 0 this Lcom/android/mtp/RootScanner$UpdateRootsRunnable;
}
SourceFile: "RootScanner.java"
NestHost: com.android.mtp.RootScanner
InnerClasses:
private final UpdateRootsRunnable = com.android.mtp.RootScanner$UpdateRootsRunnable of com.android.mtp.RootScanner