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