abstract class android.location.LocalListenerHelper<TListener>
  minor version: 0
  major version: 59
  flags: flags: (0x0420) ACC_SUPER, ACC_ABSTRACT
  this_class: android.location.LocalListenerHelper
  super_class: java.lang.Object
{
  private final java.util.HashMap<TListener, android.os.Handler> mListeners;
    descriptor: Ljava/util/HashMap;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL
    Signature: Ljava/util/HashMap<TTListener;Landroid/os/Handler;>;

  private final java.lang.String mTag;
    descriptor: Ljava/lang/String;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  private final android.content.Context mContext;
    descriptor: Landroid/content/Context;
    flags: (0x0012) ACC_PRIVATE, ACC_FINAL

  protected void <init>(android.content.Context, java.lang.String);
    descriptor: (Landroid/content/Context;Ljava/lang/String;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=3, locals=3, args_size=3
        start local 0 // android.location.LocalListenerHelper this
        start local 1 // android.content.Context context
        start local 2 // java.lang.String name
         0: .line 43
            aload 0 /* this */
            invokespecial java.lang.Object.<init>:()V
         1: .line 38
            aload 0 /* this */
            new java.util.HashMap
            dup
            invokespecial java.util.HashMap.<init>:()V
            putfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
         2: .line 44
            aload 2 /* name */
            invokestatic com.android.internal.util.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         3: .line 45
            aload 0 /* this */
            aload 1 /* context */
            putfield android.location.LocalListenerHelper.mContext:Landroid/content/Context;
         4: .line 46
            aload 0 /* this */
            aload 2 /* name */
            putfield android.location.LocalListenerHelper.mTag:Ljava/lang/String;
         5: .line 47
            return
        end local 2 // java.lang.String name
        end local 1 // android.content.Context context
        end local 0 // android.location.LocalListenerHelper this
      LocalVariableTable:
        Start  End  Slot     Name  Signature
            0    6     0     this  Landroid/location/LocalListenerHelper<TTListener;>;
            0    6     1  context  Landroid/content/Context;
            0    6     2     name  Ljava/lang/String;
    MethodParameters:
         Name  Flags
      context  
      name     

  public boolean add(TListener, android.os.Handler);
    descriptor: (Ljava/lang/Object;Landroid/os/Handler;)Z
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=3
        start local 0 // android.location.LocalListenerHelper this
        start local 1 // java.lang.Object listener
        start local 2 // android.os.Handler handler
         0: .line 55
            aload 1 /* listener */
            invokestatic com.android.internal.util.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 56
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            dup
            astore 3
            monitorenter
         2: .line 59
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            invokevirtual java.util.HashMap.isEmpty:()Z
            ifeq 13
         3: .line 62
            aload 0 /* this */
            invokevirtual android.location.LocalListenerHelper.registerWithServer:()Z
            istore 4 /* registeredWithService */
        start local 4 // boolean registeredWithService
         4: .line 63
            goto 9
        end local 4 // boolean registeredWithService
      StackMap locals: android.location.LocalListenerHelper java.lang.Object android.os.Handler java.util.HashMap
      StackMap stack: android.os.RemoteException
         5: astore 5 /* e */
        start local 5 // android.os.RemoteException e
         6: .line 64
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mTag:Ljava/lang/String;
            ldc "Error handling first listener."
            aload 5 /* e */
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
         7: .line 65
            aload 3
            monitorexit
         8: iconst_0
            ireturn
        end local 5 // android.os.RemoteException e
        start local 4 // boolean registeredWithService
         9: .line 67
      StackMap locals: int
      StackMap stack:
            iload 4 /* registeredWithService */
            ifne 13
        10: .line 68
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mTag:Ljava/lang/String;
            ldc "Unable to register listener transport."
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;)I
            pop
        11: .line 69
            aload 3
            monitorexit
        12: iconst_0
            ireturn
        end local 4 // boolean registeredWithService
        13: .line 72
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            aload 1 /* listener */
            invokevirtual java.util.HashMap.containsKey:(Ljava/lang/Object;)Z
            ifeq 16
        14: .line 73
            aload 3
            monitorexit
        15: iconst_1
            ireturn
        16: .line 75
      StackMap locals:
      StackMap stack:
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            aload 1 /* listener */
            aload 2 /* handler */
            invokevirtual java.util.HashMap.put:(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;
            pop
        17: .line 76
            aload 3
            monitorexit
        18: iconst_1
            ireturn
        19: .line 56
      StackMap locals:
      StackMap stack: java.lang.Throwable
            aload 3
            monitorexit
        20: athrow
        end local 2 // android.os.Handler handler
        end local 1 // java.lang.Object listener
        end local 0 // android.location.LocalListenerHelper this
      LocalVariableTable:
        Start  End  Slot                   Name  Signature
            0   21     0                   this  Landroid/location/LocalListenerHelper<TTListener;>;
            0   21     1               listener  TTListener;
            0   21     2                handler  Landroid/os/Handler;
            4    5     4  registeredWithService  Z
            9   13     4  registeredWithService  Z
            6    9     5                      e  Landroid/os/RemoteException;
      Exception table:
        from    to  target  type
           3     4       5  Class android.os.RemoteException
           2     8      19  any
           9    12      19  any
          13    15      19  any
          16    18      19  any
          19    20      19  any
    Signature: (TTListener;Landroid/os/Handler;)Z
    MethodParameters:
          Name  Flags
      listener  
      handler   

  public void remove();
    descriptor: (Ljava/lang/Object;)V
    flags: (0x0001) ACC_PUBLIC
    Code:
      stack=3, locals=6, args_size=2
        start local 0 // android.location.LocalListenerHelper this
        start local 1 // java.lang.Object listener
         0: .line 81
            aload 1 /* listener */
            invokestatic com.android.internal.util.Preconditions.checkNotNull:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         1: .line 82
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            dup
            astore 2
            monitorenter
         2: .line 83
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            aload 1 /* listener */
            invokevirtual java.util.HashMap.containsKey:(Ljava/lang/Object;)Z
            istore 3 /* removed */
        start local 3 // boolean removed
         3: .line 84
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            aload 1 /* listener */
            invokevirtual java.util.HashMap.remove:(Ljava/lang/Object;)Ljava/lang/Object;
            pop
         4: .line 85
            iload 3 /* removed */
            ifeq 5
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            invokevirtual java.util.HashMap.isEmpty:()Z
            ifeq 5
            iconst_1
            goto 6
      StackMap locals: java.util.HashMap int
      StackMap stack:
         5: iconst_0
      StackMap locals:
      StackMap stack: int
         6: istore 4 /* isLastRemoved */
        start local 4 // boolean isLastRemoved
         7: .line 86
            iload 4 /* isLastRemoved */
            ifeq 12
         8: .line 88
            aload 0 /* this */
            invokevirtual android.location.LocalListenerHelper.unregisterFromServer:()V
         9: .line 89
            goto 12
      StackMap locals: android.location.LocalListenerHelper java.lang.Object java.util.HashMap int int
      StackMap stack: android.os.RemoteException
        10: astore 5 /* e */
        start local 5 // android.os.RemoteException e
        11: .line 90
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mTag:Ljava/lang/String;
            ldc "Error handling last listener removal"
            aload 5 /* e */
            invokestatic android.util.Log.v:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        end local 5 // android.os.RemoteException e
        end local 4 // boolean isLastRemoved
        end local 3 // boolean removed
        12: .line 82
      StackMap locals:
      StackMap stack:
            aload 2
            monitorexit
        13: goto 16
      StackMap locals:
      StackMap stack: java.lang.Throwable
        14: aload 2
            monitorexit
        15: athrow
        16: .line 94
      StackMap locals:
      StackMap stack:
            return
        end local 1 // java.lang.Object listener
        end local 0 // android.location.LocalListenerHelper this
      LocalVariableTable:
        Start  End  Slot           Name  Signature
            0   17     0           this  Landroid/location/LocalListenerHelper<TTListener;>;
            0   17     1       listener  TTListener;
            3   12     3        removed  Z
            7   12     4  isLastRemoved  Z
           11   12     5              e  Landroid/os/RemoteException;
      Exception table:
        from    to  target  type
           8     9      10  Class android.os.RemoteException
           2    13      14  any
          14    15      14  any
    Signature: (TTListener;)V
    MethodParameters:
          Name  Flags
      listener  

  protected abstract boolean registerWithServer();
    descriptor: ()Z
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Exceptions:
      throws android.os.RemoteException

  protected abstract void unregisterFromServer();
    descriptor: ()V
    flags: (0x0404) ACC_PROTECTED, ACC_ABSTRACT
    Exceptions:
      throws android.os.RemoteException

  protected android.content.Context getContext();
    descriptor: ()Landroid/content/Context;
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=1, locals=1, args_size=1
        start local 0 // android.location.LocalListenerHelper this
         0: .line 104
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mContext:Landroid/content/Context;
            areturn
        end local 0 // android.location.LocalListenerHelper this
      LocalVariableTable:
        Start  End  Slot  Name  Signature
            0    1     0  this  Landroid/location/LocalListenerHelper<TTListener;>;

  private void executeOperation(android.location.LocalListenerHelper$ListenerOperation<TListener>, );
    descriptor: (Landroid/location/LocalListenerHelper$ListenerOperation;Ljava/lang/Object;)V
    flags: (0x0002) ACC_PRIVATE
    Code:
      stack=3, locals=4, args_size=3
        start local 0 // android.location.LocalListenerHelper this
        start local 1 // android.location.LocalListenerHelper$ListenerOperation operation
        start local 2 // java.lang.Object listener
         0: .line 109
            aload 1 /* operation */
            aload 2 /* listener */
            invokeinterface android.location.LocalListenerHelper$ListenerOperation.execute:(Ljava/lang/Object;)V
         1: .line 110
            goto 4
      StackMap locals:
      StackMap stack: android.os.RemoteException
         2: astore 3 /* e */
        start local 3 // android.os.RemoteException e
         3: .line 111
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mTag:Ljava/lang/String;
            ldc "Error in monitored listener."
            aload 3 /* e */
            invokestatic android.util.Log.e:(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Throwable;)I
            pop
        end local 3 // android.os.RemoteException e
         4: .line 114
      StackMap locals:
      StackMap stack:
            return
        end local 2 // java.lang.Object listener
        end local 1 // android.location.LocalListenerHelper$ListenerOperation operation
        end local 0 // android.location.LocalListenerHelper this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0    5     0       this  Landroid/location/LocalListenerHelper<TTListener;>;
            0    5     1  operation  Landroid/location/LocalListenerHelper$ListenerOperation<TTListener;>;
            0    5     2   listener  TTListener;
            3    4     3          e  Landroid/os/RemoteException;
      Exception table:
        from    to  target  type
           0     1       2  Class android.os.RemoteException
    Signature: (Landroid/location/LocalListenerHelper$ListenerOperation<TTListener;>;TTListener;)V
    MethodParameters:
           Name  Flags
      operation  
      listener   

  protected void foreach(android.location.LocalListenerHelper$ListenerOperation<TListener>);
    descriptor: (Landroid/location/LocalListenerHelper$ListenerOperation;)V
    flags: (0x0004) ACC_PROTECTED
    Code:
      stack=6, locals=5, args_size=2
        start local 0 // android.location.LocalListenerHelper this
        start local 1 // android.location.LocalListenerHelper$ListenerOperation operation
         0: .line 118
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            dup
            astore 3
            monitorenter
         1: .line 119
            new java.util.ArrayList
            dup
            aload 0 /* this */
            getfield android.location.LocalListenerHelper.mListeners:Ljava/util/HashMap;
            invokevirtual java.util.HashMap.entrySet:()Ljava/util/Set;
            invokespecial java.util.ArrayList.<init>:(Ljava/util/Collection;)V
            astore 2 /* listeners */
        start local 2 // java.util.Collection listeners
         2: .line 118
            aload 3
            monitorexit
         3: goto 6
        end local 2 // java.util.Collection listeners
      StackMap locals: android.location.LocalListenerHelper android.location.LocalListenerHelper$ListenerOperation top java.util.HashMap
      StackMap stack: java.lang.Throwable
         4: aload 3
            monitorexit
         5: athrow
        start local 2 // java.util.Collection listeners
         6: .line 121
      StackMap locals: android.location.LocalListenerHelper android.location.LocalListenerHelper$ListenerOperation java.util.Collection
      StackMap stack:
            aload 2 /* listeners */
            invokeinterface java.util.Collection.iterator:()Ljava/util/Iterator;
            astore 4
            goto 12
      StackMap locals: android.location.LocalListenerHelper android.location.LocalListenerHelper$ListenerOperation java.util.Collection top java.util.Iterator
      StackMap stack:
         7: aload 4
            invokeinterface java.util.Iterator.next:()Ljava/lang/Object;
            checkcast java.util.Map$Entry
            astore 3 /* listener */
        start local 3 // java.util.Map$Entry listener
         8: .line 122
            aload 3 /* listener */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            ifnonnull 11
         9: .line 123
            aload 0 /* this */
            aload 1 /* operation */
            aload 3 /* listener */
            invokeinterface java.util.Map$Entry.getKey:()Ljava/lang/Object;
            invokevirtual android.location.LocalListenerHelper.executeOperation:(Landroid/location/LocalListenerHelper$ListenerOperation;Ljava/lang/Object;)V
        10: .line 124
            goto 12
        11: .line 125
      StackMap locals: android.location.LocalListenerHelper android.location.LocalListenerHelper$ListenerOperation java.util.Collection java.util.Map$Entry java.util.Iterator
      StackMap stack:
            aload 3 /* listener */
            invokeinterface java.util.Map$Entry.getValue:()Ljava/lang/Object;
            checkcast android.os.Handler
            new android.location.LocalListenerHelper$1
            dup
            aload 0 /* this */
            aload 1 /* operation */
            aload 3 /* listener */
            invokespecial android.location.LocalListenerHelper$1.<init>:(Landroid/location/LocalListenerHelper;Landroid/location/LocalListenerHelper$ListenerOperation;Ljava/util/Map$Entry;)V
            invokevirtual android.os.Handler.post:(Ljava/lang/Runnable;)Z
            pop
        end local 3 // java.util.Map$Entry listener
        12: .line 121
      StackMap locals: android.location.LocalListenerHelper android.location.LocalListenerHelper$ListenerOperation java.util.Collection top java.util.Iterator
      StackMap stack:
            aload 4
            invokeinterface java.util.Iterator.hasNext:()Z
            ifne 7
        13: .line 133
            return
        end local 2 // java.util.Collection listeners
        end local 1 // android.location.LocalListenerHelper$ListenerOperation operation
        end local 0 // android.location.LocalListenerHelper this
      LocalVariableTable:
        Start  End  Slot       Name  Signature
            0   14     0       this  Landroid/location/LocalListenerHelper<TTListener;>;
            0   14     1  operation  Landroid/location/LocalListenerHelper$ListenerOperation<TTListener;>;
            2    4     2  listeners  Ljava/util/Collection<Ljava/util/Map$Entry<TTListener;Landroid/os/Handler;>;>;
            6   14     2  listeners  Ljava/util/Collection<Ljava/util/Map$Entry<TTListener;Landroid/os/Handler;>;>;
            8   12     3   listener  Ljava/util/Map$Entry<TTListener;Landroid/os/Handler;>;
      Exception table:
        from    to  target  type
           1     3       4  any
           4     5       4  any
    Signature: (Landroid/location/LocalListenerHelper$ListenerOperation<TTListener;>;)V
    MethodParameters:
           Name  Flags
      operation  final
}
Signature: <TListener:Ljava/lang/Object;>Ljava/lang/Object;
SourceFile: "LocalListenerHelper.java"
NestMembers:
  android.location.LocalListenerHelper$1  android.location.LocalListenerHelper$ListenerOperation
InnerClasses:
  android.location.LocalListenerHelper$1
  protected abstract ListenerOperation = android.location.LocalListenerHelper$ListenerOperation of android.location.LocalListenerHelper
  public abstract Entry = java.util.Map$Entry of java.util.Map