// Signature format: 2.0
package android.app {

  public class BroadcastOptions {
    method public int getMaxManifestReceiverApiLevel();
    method public void setMaxManifestReceiverApiLevel(int);
  }

}

package android.net {

  public final class TcpRepairWindow {
    ctor public TcpRepairWindow(int, int, int, int, int, int);
    field public final int maxWindow;
    field public final int rcvWnd;
    field public final int rcvWndScale;
    field public final int rcvWup;
    field public final int sndWl1;
    field public final int sndWnd;
  }

}

package android.os {

  public class Binder implements android.os.IBinder {
    method public final void markVintfStability();
  }

  public interface Parcelable {
    method public default int getStability();
  }

  public class StatsServiceManager {
    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsCompanionServiceRegisterer();
    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsManagerServiceRegisterer();
    method @NonNull public android.os.StatsServiceManager.ServiceRegisterer getStatsdServiceRegisterer();
  }

  public static class StatsServiceManager.ServiceNotFoundException extends java.lang.Exception {
    ctor public StatsServiceManager.ServiceNotFoundException(@NonNull String);
  }

  public static final class StatsServiceManager.ServiceRegisterer {
    method @Nullable public android.os.IBinder get();
    method @Nullable public android.os.IBinder getOrThrow() throws android.os.StatsServiceManager.ServiceNotFoundException;
  }

}

package android.telephony {

  public abstract class CellSignalStrength {
    method public static int getNumSignalStrengthLevels();
  }

  public class TelephonyManager {
    method @NonNull public static int[] getAllNetworkTypes();
  }

}

package android.util {

  public final class Log {
    method public static int logToRadioBuffer(int, @Nullable String, @Nullable String);
  }

}

