diff options
author | 2023-07-29 18:11:14 +0000 | |
---|---|---|
committer | 2023-07-29 18:21:41 +0000 | |
commit | 1b9fd2058347a9c04d44aa3e3aad421610007ae2 (patch) | |
tree | 6458fd0095707b35179d9474025e041eac140ab9 /wifi/java/src | |
parent | 66c1ccac619957abfc1bd35cfa6b9f4545a048b4 (diff) |
Call onServiceConnected only after callback is saved in the service.
Prevent the onServiceConnected to be called prematurely. Until now
it was called in the manager and so that a client may rely on the
callback being called before it was actually available to the service
to use.
Bug: 293511169
Test: atest android.net.wifi.sharedconnectivity.cts
Change-Id: I698378a057990bd8ea73974130fa29ab1cd7c738
Diffstat (limited to 'wifi/java/src')
3 files changed, 20 insertions, 1 deletions
diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java index feef0497c152..d41c0197addc 100644 --- a/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java +++ b/wifi/java/src/android/net/wifi/sharedconnectivity/app/SharedConnectivityManager.java @@ -81,6 +81,19 @@ public class SharedConnectivityManager { mCallback = callback; } + @Override + public void onServiceConnected() { + if (mCallback != null) { + final long token = Binder.clearCallingIdentity(); + try { + mExecutor.execute(() -> mCallback.onServiceConnected()); + } finally { + Binder.restoreCallingIdentity(token); + } + } + } + + @Override public void onHotspotNetworksUpdated(@NonNull List<HotspotNetwork> networks) { if (mCallback != null) { final long token = Binder.clearCallingIdentity(); @@ -117,6 +130,7 @@ public class SharedConnectivityManager { } } + @Override public void onHotspotNetworkConnectionStatusChanged( @NonNull HotspotNetworkConnectionStatus status) { if (mCallback != null) { @@ -251,7 +265,6 @@ public class SharedConnectivityManager { synchronized (mProxyDataLock) { mProxyMap.put(callback, proxy); } - callback.onServiceConnected(); } catch (RemoteException e) { Log.e(TAG, "Exception in registerCallback", e); callback.onRegisterCallbackFailed(e); diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/service/ISharedConnectivityCallback.aidl b/wifi/java/src/android/net/wifi/sharedconnectivity/service/ISharedConnectivityCallback.aidl index 737aa6d9964c..521f94367f6f 100644 --- a/wifi/java/src/android/net/wifi/sharedconnectivity/service/ISharedConnectivityCallback.aidl +++ b/wifi/java/src/android/net/wifi/sharedconnectivity/service/ISharedConnectivityCallback.aidl @@ -31,4 +31,5 @@ interface ISharedConnectivityCallback { oneway void onKnownNetworksUpdated(in List<KnownNetwork> networks); oneway void onKnownNetworkConnectionStatusChanged(in KnownNetworkConnectionStatus status); oneway void onSharedConnectivitySettingsChanged(in SharedConnectivitySettingsState state); + oneway void onServiceConnected(); } diff --git a/wifi/java/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityService.java b/wifi/java/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityService.java index 2bbe91958383..ebda6f1c5826 100644 --- a/wifi/java/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityService.java +++ b/wifi/java/src/android/net/wifi/sharedconnectivity/service/SharedConnectivityService.java @@ -276,6 +276,11 @@ public abstract class SharedConnectivityService extends Service { private void onRegisterCallback(ISharedConnectivityCallback callback) { mRemoteCallbackList.register(callback); + try { + callback.onServiceConnected(); + } catch (RemoteException e) { + if (DEBUG) Log.w(TAG, "Exception in onRegisterCallback", e); + } if (mCountDownLatch != null) { mCountDownLatch.countDown(); } |