summaryrefslogtreecommitdiff
path: root/service
diff options
context:
space:
mode:
authorNate Jiang <qiangjiang@google.com>2019-11-25 23:38:41 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2019-11-25 23:38:41 +0000
commit7e16d83a042460415830ddda766f36b3c50e4766 (patch)
tree07889f39eb74ae7006e0807e4a65fbff744a887a /service
parentf52c98e12af4bec3303d786dd9dc1af3c8d87622 (diff)
parent60d3492416526fae3e4582321faecd918ebe678f (diff)
Merge "User binder as callback identifier"
Diffstat (limited to 'service')
-rw-r--r--service/java/com/android/server/wifi/ScanRequestProxy.java52
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java30
2 files changed, 35 insertions, 47 deletions
diff --git a/service/java/com/android/server/wifi/ScanRequestProxy.java b/service/java/com/android/server/wifi/ScanRequestProxy.java
index 9ba112536..9decba06a 100644
--- a/service/java/com/android/server/wifi/ScanRequestProxy.java
+++ b/service/java/com/android/server/wifi/ScanRequestProxy.java
@@ -22,12 +22,12 @@ import android.app.AppOpsManager;
import android.content.Context;
import android.content.Intent;
import android.database.ContentObserver;
-import android.net.wifi.IScanResultsListener;
+import android.net.wifi.IScanResultsCallback;
import android.net.wifi.ScanResult;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiScanner;
import android.os.Handler;
-import android.os.IBinder;
+import android.os.RemoteCallbackList;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.WorkSource;
@@ -37,7 +37,6 @@ import android.util.Log;
import android.util.Pair;
import com.android.internal.annotations.VisibleForTesting;
-import com.android.server.wifi.util.ExternalCallbackTracker;
import com.android.server.wifi.util.WifiPermissionsUtil;
import java.util.ArrayList;
@@ -107,8 +106,8 @@ public class ScanRequestProxy {
new ArrayMap();
// Scan results cached from the last full single scan request.
private final List<ScanResult> mLastScanResults = new ArrayList<>();
- // external ScanResultListener tracker
- private final ExternalCallbackTracker<IScanResultsListener> mRegisteredScanResultsListeners;
+ // external ScanResultCallback tracker
+ private final RemoteCallbackList<IScanResultsCallback> mRegisteredScanResultsCallbacks;
// Global scan listener for listening to all scan requests.
private class GlobalScanListener implements WifiScanner.ScanListener {
@Override
@@ -143,7 +142,7 @@ public class ScanRequestProxy {
mLastScanResults.clear();
mLastScanResults.addAll(Arrays.asList(scanResults));
sendScanResultBroadcast(true);
- sendScanResultsAvailableToListeners();
+ sendScanResultsAvailableToCallbacks();
}
}
@@ -251,7 +250,7 @@ public class ScanRequestProxy {
mClock = clock;
mFrameworkFacade = frameworkFacade;
mThrottleEnabledSettingObserver = new ThrottleEnabledSettingObserver(handler);
- mRegisteredScanResultsListeners = new ExternalCallbackTracker<>(handler);
+ mRegisteredScanResultsCallbacks = new RemoteCallbackList<>();
}
/**
@@ -537,36 +536,31 @@ public class ScanRequestProxy {
mLastScanTimestampsForFgApps.remove(Pair.create(uid, packageName));
}
- private void sendScanResultsAvailableToListeners() {
- Iterator<IScanResultsListener> iterator =
- mRegisteredScanResultsListeners.getCallbacks().iterator();
- while (iterator.hasNext()) {
- IScanResultsListener listener = iterator.next();
- try {
- listener.onScanResultsAvailable();
- } catch (RemoteException e) {
- Log.e(TAG, "onScanResultsAvailable: remote exception -- " + e);
- }
- }
+ private void sendScanResultsAvailableToCallbacks() {
+ mRegisteredScanResultsCallbacks.broadcast(
+ iScanResultsCallback -> {
+ try {
+ iScanResultsCallback.onScanResultsAvailable();
+ } catch (RemoteException e) {
+ Log.e(TAG, "onScanResultsAvailable: remote exception -- " + e);
+ }
+ });
}
/**
- * Register a listener on scan event
- * @param binder IBinder instance to allow cleanup if the app dies.
- * @param listener IScanResultListener instance to add.
- * @param listenerIdentifier identifier of the listener, should be hash code of package name.
+ * Register a callback on scan event
+ * @param callback IScanResultListener instance to add.
* @return true if succeed otherwise false.
*/
- public boolean registerScanResultsListener(IBinder binder, IScanResultsListener listener,
- int listenerIdentifier) {
- return mRegisteredScanResultsListeners.add(binder, listener, listenerIdentifier);
+ public boolean registerScanResultsCallback(IScanResultsCallback callback) {
+ return mRegisteredScanResultsCallbacks.register(callback);
}
/**
- * Unregister a listener on scan event
- * @param listenerIdentifier identifier of the listener, should be hash code of package name.
+ * Unregister a callback on scan event
+ * @param callback IScanResultListener instance to add.
*/
- public void unregisterScanResultsListener(int listenerIdentifier) {
- mRegisteredScanResultsListeners.remove(listenerIdentifier);
+ public void unregisterScanResultsCallback(IScanResultsCallback callback) {
+ mRegisteredScanResultsCallbacks.unregister(callback);
}
}
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 6245a3cf9..c8a445fa3 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -53,7 +53,7 @@ import android.net.wifi.IDppCallback;
import android.net.wifi.ILocalOnlyHotspotCallback;
import android.net.wifi.INetworkRequestMatchCallback;
import android.net.wifi.IOnWifiUsabilityStatsListener;
-import android.net.wifi.IScanResultsListener;
+import android.net.wifi.IScanResultsCallback;
import android.net.wifi.ISoftApCallback;
import android.net.wifi.ISuggestionConnectionStatusListener;
import android.net.wifi.ITrafficStateCallback;
@@ -3485,41 +3485,35 @@ public class WifiServiceImpl extends BaseWifiService {
}
/**
- * See {@link WifiManager#addScanResultsListener(Executor, WifiManager.ScanResultsListener)}
+ * See {@link WifiManager#registerScanResultsCallback(WifiManager.ScanResultsCallback)}
*/
- public void registerScanResultsListener(IBinder binder, @NonNull IScanResultsListener listener,
- int listenerIdentifier) {
- if (binder == null) {
- throw new IllegalArgumentException("Binder must not be null");
- }
- if (listener == null) {
- throw new IllegalArgumentException("listener must not be null");
+ public void registerScanResultsCallback(@NonNull IScanResultsCallback callback) {
+ if (callback == null) {
+ throw new IllegalArgumentException("callback must not be null");
}
enforceAccessPermission();
if (mVerboseLoggingEnabled) {
- mLog.info("registerScanResultListener uid=%").c(Binder.getCallingUid()).flush();
+ mLog.info("registerScanResultsCallback uid=%").c(Binder.getCallingUid()).flush();
}
mWifiThreadRunner.post(() -> {
- if (!mWifiInjector.getScanRequestProxy().registerScanResultsListener(binder, listener,
- listenerIdentifier)) {
- Log.e(TAG, "registerScanResultListener: Failed to add callback");
+ if (!mWifiInjector.getScanRequestProxy().registerScanResultsCallback(callback)) {
+ Log.e(TAG, "registerScanResultsCallback: Failed to register callback");
}
});
}
/**
- * See {@link WifiManager#removeScanResultsListener(WifiManager.ScanResultsListener)}
+ * See {@link WifiManager#registerScanResultsCallback(WifiManager.ScanResultsCallback)}
*/
- public void unregisterScanResultsListener(int listenerIdentifier) {
+ public void unregisterScanResultsCallback(@NonNull IScanResultsCallback callback) {
if (mVerboseLoggingEnabled) {
mLog.info("unregisterScanResultCallback uid=%").c(Binder.getCallingUid()).flush();
}
enforceAccessPermission();
// post operation to handler thread
- mWifiThreadRunner.post(() ->
- mWifiInjector.getScanRequestProxy()
- .unregisterScanResultsListener(listenerIdentifier));
+ mWifiThreadRunner.post(() -> mWifiInjector.getScanRequestProxy()
+ .unregisterScanResultsCallback(callback));
}