// Signature format: 4.0
package androidx.lifecycle {

  public abstract class Lifecycle {
    ctor public Lifecycle();
    method @MainThread public abstract void addObserver(androidx.lifecycle.LifecycleObserver);
    method @MainThread public abstract androidx.lifecycle.Lifecycle.State getCurrentState();
    method @MainThread public abstract void removeObserver(androidx.lifecycle.LifecycleObserver);
  }

  public enum Lifecycle.Event {
    method public static androidx.lifecycle.Lifecycle.Event? downFrom(androidx.lifecycle.Lifecycle.State);
    method public static androidx.lifecycle.Lifecycle.Event? downTo(androidx.lifecycle.Lifecycle.State);
    method public androidx.lifecycle.Lifecycle.State getTargetState();
    method public static androidx.lifecycle.Lifecycle.Event? upFrom(androidx.lifecycle.Lifecycle.State);
    method public static androidx.lifecycle.Lifecycle.Event? upTo(androidx.lifecycle.Lifecycle.State);
    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_ANY;
    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_CREATE;
    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_DESTROY;
    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_PAUSE;
    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_RESUME;
    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_START;
    enum_constant public static final androidx.lifecycle.Lifecycle.Event ON_STOP;
  }

  public enum Lifecycle.State {
    method public boolean isAtLeast(androidx.lifecycle.Lifecycle.State);
    enum_constant public static final androidx.lifecycle.Lifecycle.State CREATED;
    enum_constant public static final androidx.lifecycle.Lifecycle.State DESTROYED;
    enum_constant public static final androidx.lifecycle.Lifecycle.State INITIALIZED;
    enum_constant public static final androidx.lifecycle.Lifecycle.State RESUMED;
    enum_constant public static final androidx.lifecycle.Lifecycle.State STARTED;
  }

  public interface LifecycleEventObserver extends androidx.lifecycle.LifecycleObserver {
    method public void onStateChanged(androidx.lifecycle.LifecycleOwner, androidx.lifecycle.Lifecycle.Event);
  }

  public interface LifecycleObserver {
  }

  public interface LifecycleOwner {
    method public androidx.lifecycle.Lifecycle getLifecycle();
  }

  @java.lang.annotation.Retention(java.lang.annotation.RetentionPolicy.RUNTIME) @java.lang.annotation.Target(java.lang.annotation.ElementType.METHOD) public @interface OnLifecycleEvent {
    method public abstract androidx.lifecycle.Lifecycle.Event! value();
  }

}

