///////////////////////////////////////////////////////////////////////////////
// THIS FILE IS IMMUTABLE. DO NOT EDIT IN ANY CASE.                          //
///////////////////////////////////////////////////////////////////////////////

// This file is a snapshot of an AIDL file. Do not edit it manually. There are
// two cases:
// 1). this is a frozen version file - do not edit this in any case.
// 2). this is a 'current' file. If you make a backwards compatible change to
//     the interface (from the latest frozen version), the build system will
//     prompt you to update this file with `m <name>-update-api`.
//
// You must not make a backward incompatible change to any AIDL file built
// with the aidl_interface module type with versions property set. The module
// type is used to build AIDL files in a way that they can be used across
// independently updatable components of the system. If a device is shipped
// with such a backward incompatible change, it has a high risk of breaking
// later when a module using the interface is updated, e.g., Mainline modules.

package android.net;
/* @hide */
interface INetworkMonitorCallbacks {
  oneway void onNetworkMonitorCreated(in android.net.INetworkMonitor networkMonitor) = 0;
  oneway void notifyNetworkTested(int testResult, @nullable String redirectUrl) = 1;
  oneway void notifyPrivateDnsConfigResolved(in android.net.PrivateDnsConfigParcel config) = 2;
  oneway void showProvisioningNotification(String action, String packageName) = 3;
  oneway void hideProvisioningNotification() = 4;
  oneway void notifyProbeStatusChanged(int probesCompleted, int probesSucceeded) = 5;
  oneway void notifyNetworkTestedWithExtras(in android.net.NetworkTestResultParcelable result) = 6;
  oneway void notifyDataStallSuspected(in android.net.DataStallReportParcelable report) = 7;
  oneway void notifyCaptivePortalDataChanged(in android.net.CaptivePortalData data) = 8;
}
