Merge "Remove reference when active listener is unregistered"
This commit is contained in:
@@ -2327,6 +2327,7 @@ public class ConnectivityManager {
|
|||||||
void onNetworkActive();
|
void onNetworkActive();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@GuardedBy("mNetworkActivityListeners")
|
||||||
private final ArrayMap<OnNetworkActiveListener, INetworkActivityListener>
|
private final ArrayMap<OnNetworkActiveListener, INetworkActivityListener>
|
||||||
mNetworkActivityListeners = new ArrayMap<>();
|
mNetworkActivityListeners = new ArrayMap<>();
|
||||||
|
|
||||||
@@ -2343,13 +2344,14 @@ public class ConnectivityManager {
|
|||||||
* @param l The listener to be told when the network is active.
|
* @param l The listener to be told when the network is active.
|
||||||
*/
|
*/
|
||||||
public void addDefaultNetworkActiveListener(final OnNetworkActiveListener l) {
|
public void addDefaultNetworkActiveListener(final OnNetworkActiveListener l) {
|
||||||
INetworkActivityListener rl = new INetworkActivityListener.Stub() {
|
final INetworkActivityListener rl = new INetworkActivityListener.Stub() {
|
||||||
@Override
|
@Override
|
||||||
public void onNetworkActive() throws RemoteException {
|
public void onNetworkActive() throws RemoteException {
|
||||||
l.onNetworkActive();
|
l.onNetworkActive();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
synchronized (mNetworkActivityListeners) {
|
||||||
try {
|
try {
|
||||||
mService.registerNetworkActivityListener(rl);
|
mService.registerNetworkActivityListener(rl);
|
||||||
mNetworkActivityListeners.put(l, rl);
|
mNetworkActivityListeners.put(l, rl);
|
||||||
@@ -2357,6 +2359,7 @@ public class ConnectivityManager {
|
|||||||
throw e.rethrowFromSystemServer();
|
throw e.rethrowFromSystemServer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Remove network active listener previously registered with
|
* Remove network active listener previously registered with
|
||||||
@@ -2365,16 +2368,19 @@ public class ConnectivityManager {
|
|||||||
* @param l Previously registered listener.
|
* @param l Previously registered listener.
|
||||||
*/
|
*/
|
||||||
public void removeDefaultNetworkActiveListener(@NonNull OnNetworkActiveListener l) {
|
public void removeDefaultNetworkActiveListener(@NonNull OnNetworkActiveListener l) {
|
||||||
INetworkActivityListener rl = mNetworkActivityListeners.get(l);
|
synchronized (mNetworkActivityListeners) {
|
||||||
|
final INetworkActivityListener rl = mNetworkActivityListeners.get(l);
|
||||||
if (rl == null) {
|
if (rl == null) {
|
||||||
throw new IllegalArgumentException("Listener was not registered.");
|
throw new IllegalArgumentException("Listener was not registered.");
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
mService.unregisterNetworkActivityListener(rl);
|
mService.unregisterNetworkActivityListener(rl);
|
||||||
|
mNetworkActivityListeners.remove(l);
|
||||||
} catch (RemoteException e) {
|
} catch (RemoteException e) {
|
||||||
throw e.rethrowFromSystemServer();
|
throw e.rethrowFromSystemServer();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return whether the data network is currently active. An active network means that
|
* Return whether the data network is currently active. An active network means that
|
||||||
|
|||||||
@@ -326,6 +326,8 @@ public class ConnectivityManagerTest {
|
|||||||
verify(mService, times(1)).registerNetworkActivityListener(any());
|
verify(mService, times(1)).registerNetworkActivityListener(any());
|
||||||
manager.removeDefaultNetworkActiveListener(listener);
|
manager.removeDefaultNetworkActiveListener(listener);
|
||||||
verify(mService, times(1)).unregisterNetworkActivityListener(any());
|
verify(mService, times(1)).unregisterNetworkActivityListener(any());
|
||||||
|
assertThrows(IllegalArgumentException.class,
|
||||||
|
() -> manager.removeDefaultNetworkActiveListener(listener));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|||||||
Reference in New Issue
Block a user