diff options
author | Nate Jiang <qiangjiang@google.com> | 2019-11-25 23:38:41 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2019-11-25 23:38:41 +0000 |
commit | 7e16d83a042460415830ddda766f36b3c50e4766 (patch) | |
tree | 07889f39eb74ae7006e0807e4a65fbff744a887a /service | |
parent | f52c98e12af4bec3303d786dd9dc1af3c8d87622 (diff) | |
parent | 60d3492416526fae3e4582321faecd918ebe678f (diff) |
Merge "User binder as callback identifier"
Diffstat (limited to 'service')
-rw-r--r-- | service/java/com/android/server/wifi/ScanRequestProxy.java | 52 | ||||
-rw-r--r-- | service/java/com/android/server/wifi/WifiServiceImpl.java | 30 |
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)); } |