Search in sources :

Example 21 with DataUsageRequest

use of android.net.DataUsageRequest in project android_frameworks_base by ResurrectionRemix.

the class NetworkStatsManager method registerUsageCallback.

/**
     * Registers to receive notifications about data usage on specified networks.
     *
     * <p>The callbacks will continue to be called as long as the process is live or
     * {@link #unregisterUsageCallback} is called.
     *
     * @param networkType Type of network to monitor. Either
                  {@link ConnectivityManager#TYPE_MOBILE} or {@link ConnectivityManager#TYPE_WIFI}.
     * @param subscriberId If applicable, the subscriber id of the network interface.
     * @param thresholdBytes Threshold in bytes to be notified on.
     * @param callback The {@link UsageCallback} that the system will call when data usage
     *            has exceeded the specified threshold.
     * @param handler to dispatch callback events through, otherwise if {@code null} it uses
     *            the calling thread.
     */
public void registerUsageCallback(int networkType, String subscriberId, long thresholdBytes, UsageCallback callback, @Nullable Handler handler) {
    checkNotNull(callback, "UsageCallback cannot be null");
    final Looper looper;
    if (handler == null) {
        looper = Looper.myLooper();
    } else {
        looper = handler.getLooper();
    }
    if (DBG) {
        Log.d(TAG, "registerUsageCallback called with: {" + " networkType=" + networkType + " subscriberId=" + subscriberId + " thresholdBytes=" + thresholdBytes + " }");
    }
    NetworkTemplate template = createTemplate(networkType, subscriberId);
    DataUsageRequest request = new DataUsageRequest(DataUsageRequest.REQUEST_ID_UNSET, template, thresholdBytes);
    try {
        CallbackHandler callbackHandler = new CallbackHandler(looper, networkType, subscriberId, callback);
        callback.request = mService.registerUsageCallback(mContext.getOpPackageName(), request, new Messenger(callbackHandler), new Binder());
        if (DBG)
            Log.d(TAG, "registerUsageCallback returned " + callback.request);
        if (callback.request == null) {
            Log.e(TAG, "Request from callback is null; should not happen");
        }
    } catch (RemoteException e) {
        if (DBG)
            Log.d(TAG, "Remote exception when registering callback");
        throw e.rethrowFromSystemServer();
    }
}
Also used : Looper(android.os.Looper) DataUsageRequest(android.net.DataUsageRequest) Binder(android.os.Binder) NetworkTemplate(android.net.NetworkTemplate) Messenger(android.os.Messenger) RemoteException(android.os.RemoteException)

Example 22 with DataUsageRequest

use of android.net.DataUsageRequest in project android_frameworks_base by DirtyUnicorns.

the class NetworkStatsServiceTest method testUnregisterUsageCallback_unknown_noop.

public void testUnregisterUsageCallback_unknown_noop() throws Exception {
    String callingPackage = "the.calling.package";
    // 10 MB
    long thresholdInBytes = 10 * 1024 * 1024;
    DataUsageRequest unknownRequest = new DataUsageRequest(2, /* requestId */
    sTemplateImsi1, thresholdInBytes);
    mService.unregisterUsageRequest(unknownRequest);
}
Also used : DataUsageRequest(android.net.DataUsageRequest)

Example 23 with DataUsageRequest

use of android.net.DataUsageRequest in project android_frameworks_base by DirtyUnicorns.

the class NetworkStatsObserversTest method testUnregister_knownRequest_releasesCaller.

public void testUnregister_knownRequest_releasesCaller() throws Exception {
    DataUsageRequest inputRequest = new DataUsageRequest(DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES);
    DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE);
    assertTrue(request.requestId > 0);
    assertTrue(Objects.equals(sTemplateImsi1, request.template));
    assertEquals(THRESHOLD_BYTES, request.thresholdInBytes);
    Mockito.verify(mockBinder).linkToDeath(any(IBinder.DeathRecipient.class), anyInt());
    mStatsObservers.unregister(request, Process.SYSTEM_UID);
    waitForObserverToIdle();
    Mockito.verify(mockBinder).unlinkToDeath(any(IBinder.DeathRecipient.class), anyInt());
}
Also used : DataUsageRequest(android.net.DataUsageRequest)

Example 24 with DataUsageRequest

use of android.net.DataUsageRequest in project android_frameworks_base by DirtyUnicorns.

the class NetworkStatsObserversTest method testRegister_twoRequests_twoIds.

public void testRegister_twoRequests_twoIds() throws Exception {
    DataUsageRequest inputRequest = new DataUsageRequest(DataUsageRequest.REQUEST_ID_UNSET, sTemplateWifi, THRESHOLD_BYTES);
    DataUsageRequest request1 = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE);
    assertTrue(request1.requestId > 0);
    assertTrue(Objects.equals(sTemplateWifi, request1.template));
    assertEquals(THRESHOLD_BYTES, request1.thresholdInBytes);
    DataUsageRequest request2 = mStatsObservers.register(inputRequest, mMessenger, mockBinder, Process.SYSTEM_UID, NetworkStatsAccess.Level.DEVICE);
    assertTrue(request2.requestId > request1.requestId);
    assertTrue(Objects.equals(sTemplateWifi, request2.template));
    assertEquals(THRESHOLD_BYTES, request2.thresholdInBytes);
}
Also used : DataUsageRequest(android.net.DataUsageRequest)

Example 25 with DataUsageRequest

use of android.net.DataUsageRequest in project android_frameworks_base by DirtyUnicorns.

the class NetworkStatsObserversTest method testUnregister_knownRequest_invalidUid_doesNotUnregister.

public void testUnregister_knownRequest_invalidUid_doesNotUnregister() throws Exception {
    DataUsageRequest inputRequest = new DataUsageRequest(DataUsageRequest.REQUEST_ID_UNSET, sTemplateImsi1, THRESHOLD_BYTES);
    DataUsageRequest request = mStatsObservers.register(inputRequest, mMessenger, mockBinder, UID_RED, NetworkStatsAccess.Level.DEVICE);
    assertTrue(request.requestId > 0);
    assertTrue(Objects.equals(sTemplateImsi1, request.template));
    assertEquals(THRESHOLD_BYTES, request.thresholdInBytes);
    Mockito.verify(mockBinder).linkToDeath(any(IBinder.DeathRecipient.class), anyInt());
    mStatsObservers.unregister(request, UID_BLUE);
    waitForObserverToIdle();
    Mockito.verifyZeroInteractions(mockBinder);
}
Also used : DataUsageRequest(android.net.DataUsageRequest)

Aggregations

DataUsageRequest (android.net.DataUsageRequest)75 NetworkStats (android.net.NetworkStats)32 NetworkIdentity (android.net.NetworkIdentity)28 Messenger (android.os.Messenger)9 NetworkTemplate (android.net.NetworkTemplate)5 Binder (android.os.Binder)5 Looper (android.os.Looper)5 RemoteException (android.os.RemoteException)5 ConditionVariable (android.os.ConditionVariable)4 IBinder (android.os.IBinder)3 Test (org.junit.Test)2