Loading api/system-current.txt +19 −0 Original line number Diff line number Diff line Loading @@ -5533,6 +5533,25 @@ package android.net.metrics { } package android.net.netstats.provider { public abstract class AbstractNetworkStatsProvider { ctor public AbstractNetworkStatsProvider(); method public abstract void requestStatsUpdate(int); method public abstract void setAlert(long); method public abstract void setLimit(@NonNull String, long); field public static final int QUOTA_UNLIMITED = -1; // 0xffffffff } public class NetworkStatsProviderCallback { method public void onAlertReached(); method public void onLimitReached(); method public void onStatsUpdated(int, @NonNull android.net.NetworkStats, @NonNull android.net.NetworkStats); method public void unregister(); } } package android.net.util { public final class SocketUtils { Loading core/java/android/net/netstats/provider/AbstractNetworkStatsProvider.java 0 → 100644 +70 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.netstats.provider; import android.annotation.NonNull; import android.annotation.SystemApi; import android.net.NetworkStats; /** * A base class that allows external modules to implement a custom network statistics provider. * @hide */ @SystemApi public abstract class AbstractNetworkStatsProvider { /** * A value used by {@link #setLimit} and {@link #setAlert} indicates there is no limit. */ public static final int QUOTA_UNLIMITED = -1; /** * Called by {@code NetworkStatsService} when global polling is needed. Custom * implementation of providers MUST respond to it by calling * {@link NetworkStatsProviderCallback#onStatsUpdated} within one minute. Responding * later than this may cause the stats to be dropped. * * @param token a positive number identifying the new state of the system under which * {@link NetworkStats} have to be gathered from now on. When this is called, * custom implementations of providers MUST report the latest stats with the * previous token, under which stats were being gathered so far. */ public abstract void requestStatsUpdate(int token); /** * Called by {@code NetworkStatsService} when setting the interface quota for the specified * upstream interface. When this is called, the custom implementation should block all egress * packets on the {@code iface} associated with the provider when {@code quotaBytes} bytes have * been reached, and MUST respond to it by calling * {@link NetworkStatsProviderCallback#onLimitReached()}. * * @param iface the interface requiring the operation. * @param quotaBytes the quota defined as the number of bytes, starting from zero and counting * from now. A value of {@link #QUOTA_UNLIMITED} indicates there is no limit. */ public abstract void setLimit(@NonNull String iface, long quotaBytes); /** * Called by {@code NetworkStatsService} when setting the alert bytes. Custom implementations * MUST call {@link NetworkStatsProviderCallback#onAlertReached()} when {@code quotaBytes} bytes * have been reached. Unlike {@link #setLimit(String, long)}, the custom implementation should * not block all egress packets. * * @param quotaBytes the quota defined as the number of bytes, starting from zero and counting * from now. A value of {@link #QUOTA_UNLIMITED} indicates there is no alert. */ public abstract void setAlert(long quotaBytes); } core/java/android/net/netstats/provider/INetworkStatsProvider.aidl 0 → 100644 +28 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.netstats.provider; /** * Interface for NetworkStatsService to query network statistics and set data limits. * * @hide */ oneway interface INetworkStatsProvider { void requestStatsUpdate(int token); void setLimit(String iface, long quotaBytes); void setAlert(long quotaBytes); } core/java/android/net/netstats/provider/INetworkStatsProviderCallback.aidl 0 → 100644 +31 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.netstats.provider; import android.net.NetworkStats; /** * Interface for implementor of {@link INetworkStatsProviderCallback} to push events * such as network statistics update or notify limit reached. * @hide */ oneway interface INetworkStatsProviderCallback { void onStatsUpdated(int token, in NetworkStats ifaceStats, in NetworkStats uidStats); void onAlertReached(); void onLimitReached(); void unregister(); } core/java/android/net/netstats/provider/NetworkStatsProviderCallback.java 0 → 100644 +98 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.netstats.provider; import android.annotation.NonNull; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.net.NetworkStats; import android.os.RemoteException; /** * A callback class that allows callers to report events to the system. * @hide */ @SystemApi @SuppressLint("CallbackMethodName") public class NetworkStatsProviderCallback { @NonNull private final INetworkStatsProviderCallback mBinder; /** @hide */ public NetworkStatsProviderCallback(@NonNull INetworkStatsProviderCallback binder) { mBinder = binder; } /** * Notify the system of new network statistics. * * Send the network statistics recorded since the last call to {@link #onStatsUpdated}. Must be * called within one minute of {@link AbstractNetworkStatsProvider#requestStatsUpdate(int)} * being called. The provider can also call this whenever it wants to reports new stats for any * reason. Note that the system will not necessarily immediately propagate the statistics to * reflect the update. * * @param token the token under which these stats were gathered. Providers can call this method * with the current token as often as they want, until the token changes. * {@see AbstractNetworkStatsProvider#requestStatsUpdate()} * @param ifaceStats the {@link NetworkStats} per interface to be reported. * The provider should not include any traffic that is already counted by * kernel interface counters. * @param uidStats the same stats as above, but counts {@link NetworkStats} * per uid. */ public void onStatsUpdated(int token, @NonNull NetworkStats ifaceStats, @NonNull NetworkStats uidStats) { try { mBinder.onStatsUpdated(token, ifaceStats, uidStats); } catch (RemoteException e) { e.rethrowAsRuntimeException(); } } /** * Notify system that the quota set by {@code setAlert} has been reached. */ public void onAlertReached() { try { mBinder.onAlertReached(); } catch (RemoteException e) { e.rethrowAsRuntimeException(); } } /** * Notify system that the quota set by {@code setLimit} has been reached. */ public void onLimitReached() { try { mBinder.onLimitReached(); } catch (RemoteException e) { e.rethrowAsRuntimeException(); } } /** * Unregister the provider and the referencing callback. */ public void unregister() { try { mBinder.unregister(); } catch (RemoteException e) { // Ignore error. } } } Loading
api/system-current.txt +19 −0 Original line number Diff line number Diff line Loading @@ -5533,6 +5533,25 @@ package android.net.metrics { } package android.net.netstats.provider { public abstract class AbstractNetworkStatsProvider { ctor public AbstractNetworkStatsProvider(); method public abstract void requestStatsUpdate(int); method public abstract void setAlert(long); method public abstract void setLimit(@NonNull String, long); field public static final int QUOTA_UNLIMITED = -1; // 0xffffffff } public class NetworkStatsProviderCallback { method public void onAlertReached(); method public void onLimitReached(); method public void onStatsUpdated(int, @NonNull android.net.NetworkStats, @NonNull android.net.NetworkStats); method public void unregister(); } } package android.net.util { public final class SocketUtils { Loading
core/java/android/net/netstats/provider/AbstractNetworkStatsProvider.java 0 → 100644 +70 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.netstats.provider; import android.annotation.NonNull; import android.annotation.SystemApi; import android.net.NetworkStats; /** * A base class that allows external modules to implement a custom network statistics provider. * @hide */ @SystemApi public abstract class AbstractNetworkStatsProvider { /** * A value used by {@link #setLimit} and {@link #setAlert} indicates there is no limit. */ public static final int QUOTA_UNLIMITED = -1; /** * Called by {@code NetworkStatsService} when global polling is needed. Custom * implementation of providers MUST respond to it by calling * {@link NetworkStatsProviderCallback#onStatsUpdated} within one minute. Responding * later than this may cause the stats to be dropped. * * @param token a positive number identifying the new state of the system under which * {@link NetworkStats} have to be gathered from now on. When this is called, * custom implementations of providers MUST report the latest stats with the * previous token, under which stats were being gathered so far. */ public abstract void requestStatsUpdate(int token); /** * Called by {@code NetworkStatsService} when setting the interface quota for the specified * upstream interface. When this is called, the custom implementation should block all egress * packets on the {@code iface} associated with the provider when {@code quotaBytes} bytes have * been reached, and MUST respond to it by calling * {@link NetworkStatsProviderCallback#onLimitReached()}. * * @param iface the interface requiring the operation. * @param quotaBytes the quota defined as the number of bytes, starting from zero and counting * from now. A value of {@link #QUOTA_UNLIMITED} indicates there is no limit. */ public abstract void setLimit(@NonNull String iface, long quotaBytes); /** * Called by {@code NetworkStatsService} when setting the alert bytes. Custom implementations * MUST call {@link NetworkStatsProviderCallback#onAlertReached()} when {@code quotaBytes} bytes * have been reached. Unlike {@link #setLimit(String, long)}, the custom implementation should * not block all egress packets. * * @param quotaBytes the quota defined as the number of bytes, starting from zero and counting * from now. A value of {@link #QUOTA_UNLIMITED} indicates there is no alert. */ public abstract void setAlert(long quotaBytes); }
core/java/android/net/netstats/provider/INetworkStatsProvider.aidl 0 → 100644 +28 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.netstats.provider; /** * Interface for NetworkStatsService to query network statistics and set data limits. * * @hide */ oneway interface INetworkStatsProvider { void requestStatsUpdate(int token); void setLimit(String iface, long quotaBytes); void setAlert(long quotaBytes); }
core/java/android/net/netstats/provider/INetworkStatsProviderCallback.aidl 0 → 100644 +31 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.netstats.provider; import android.net.NetworkStats; /** * Interface for implementor of {@link INetworkStatsProviderCallback} to push events * such as network statistics update or notify limit reached. * @hide */ oneway interface INetworkStatsProviderCallback { void onStatsUpdated(int token, in NetworkStats ifaceStats, in NetworkStats uidStats); void onAlertReached(); void onLimitReached(); void unregister(); }
core/java/android/net/netstats/provider/NetworkStatsProviderCallback.java 0 → 100644 +98 −0 Original line number Diff line number Diff line /* * Copyright (C) 2020 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package android.net.netstats.provider; import android.annotation.NonNull; import android.annotation.SuppressLint; import android.annotation.SystemApi; import android.net.NetworkStats; import android.os.RemoteException; /** * A callback class that allows callers to report events to the system. * @hide */ @SystemApi @SuppressLint("CallbackMethodName") public class NetworkStatsProviderCallback { @NonNull private final INetworkStatsProviderCallback mBinder; /** @hide */ public NetworkStatsProviderCallback(@NonNull INetworkStatsProviderCallback binder) { mBinder = binder; } /** * Notify the system of new network statistics. * * Send the network statistics recorded since the last call to {@link #onStatsUpdated}. Must be * called within one minute of {@link AbstractNetworkStatsProvider#requestStatsUpdate(int)} * being called. The provider can also call this whenever it wants to reports new stats for any * reason. Note that the system will not necessarily immediately propagate the statistics to * reflect the update. * * @param token the token under which these stats were gathered. Providers can call this method * with the current token as often as they want, until the token changes. * {@see AbstractNetworkStatsProvider#requestStatsUpdate()} * @param ifaceStats the {@link NetworkStats} per interface to be reported. * The provider should not include any traffic that is already counted by * kernel interface counters. * @param uidStats the same stats as above, but counts {@link NetworkStats} * per uid. */ public void onStatsUpdated(int token, @NonNull NetworkStats ifaceStats, @NonNull NetworkStats uidStats) { try { mBinder.onStatsUpdated(token, ifaceStats, uidStats); } catch (RemoteException e) { e.rethrowAsRuntimeException(); } } /** * Notify system that the quota set by {@code setAlert} has been reached. */ public void onAlertReached() { try { mBinder.onAlertReached(); } catch (RemoteException e) { e.rethrowAsRuntimeException(); } } /** * Notify system that the quota set by {@code setLimit} has been reached. */ public void onLimitReached() { try { mBinder.onLimitReached(); } catch (RemoteException e) { e.rethrowAsRuntimeException(); } } /** * Unregister the provider and the referencing callback. */ public void unregister() { try { mBinder.unregister(); } catch (RemoteException e) { // Ignore error. } } }