diff options
| author | 2019-11-15 23:17:54 +0000 | |
|---|---|---|
| committer | 2019-11-15 23:17:54 +0000 | |
| commit | 8295ffc5af366d45e1fa165f0f18f0f8a7eb95ec (patch) | |
| tree | 60ee7a644de5f1cc4bd914f83596059bea6a9889 | |
| parent | 567b03aa72385f6766c19fe928da12daa940c376 (diff) | |
| parent | 190e1cacdeb2afe71b3e8be9308d2b6ae3bde677 (diff) | |
Merge "Marking SoftApCallback methods as SystemAPI"
5 files changed, 36 insertions, 22 deletions
diff --git a/api/system-current.txt b/api/system-current.txt index 6ce444e4bec7..0b6e4a282b2c 100644 --- a/api/system-current.txt +++ b/api/system-current.txt @@ -4704,6 +4704,7 @@ package android.net.wifi { method public boolean isPortableHotspotSupported(); method @RequiresPermission(android.Manifest.permission.ACCESS_WIFI_STATE) public boolean isWifiApEnabled(); method public boolean isWifiScannerSupported(); + method @RequiresPermission("android.permission.NETWORK_SETTINGS") public void registerSoftApCallback(@NonNull android.net.wifi.WifiManager.SoftApCallback, @Nullable java.util.concurrent.Executor); method @RequiresPermission("android.permission.WIFI_UPDATE_USABILITY_STATS_SCORE") public void removeOnWifiUsabilityStatsListener(@NonNull android.net.wifi.WifiManager.OnWifiUsabilityStatsListener); method @RequiresPermission(anyOf={"android.permission.NETWORK_SETTINGS", android.Manifest.permission.NETWORK_SETUP_WIZARD, "android.permission.NETWORK_STACK"}) public void save(@NonNull android.net.wifi.WifiConfiguration, @Nullable android.net.wifi.WifiManager.ActionListener); method @RequiresPermission("android.permission.WIFI_SET_DEVICE_MOBILITY_STATE") public void setDeviceMobilityState(int); @@ -4762,6 +4763,11 @@ package android.net.wifi { method public void onWifiUsabilityStats(int, boolean, @NonNull android.net.wifi.WifiUsabilityStatsEntry); } + public static interface WifiManager.SoftApCallback { + method public void onConnectedClientsChanged(@NonNull java.util.List<android.net.wifi.WifiClient>); + method public void onStateChanged(int, int); + } + public class WifiNetworkConnectionStatistics implements android.os.Parcelable { ctor public WifiNetworkConnectionStatistics(int, int); ctor public WifiNetworkConnectionStatistics(); diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java index 4b56f037f8ed..f73ca1c36005 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/HotspotControllerImpl.java @@ -24,6 +24,7 @@ import android.net.ConnectivityManager; import android.net.wifi.WifiClient; import android.net.wifi.WifiManager; import android.os.Handler; +import android.os.HandlerExecutor; import android.os.UserManager; import android.util.Log; @@ -109,7 +110,8 @@ public class HotspotControllerImpl implements HotspotController, WifiManager.Sof mCallbacks.add(callback); if (mWifiManager != null) { if (mCallbacks.size() == 1) { - mWifiManager.registerSoftApCallback(this, mMainHandler); + mWifiManager.registerSoftApCallback(this, + new HandlerExecutor(mMainHandler)); } else { // mWifiManager#registerSoftApCallback triggers a call to // onConnectedClientsChanged on the Main Handler. In order to always update diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java index 7f32ad5c6c1f..7496e3ade351 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/HotspotControllerImplTest.java @@ -43,6 +43,7 @@ import org.mockito.MockitoAnnotations; import org.mockito.invocation.InvocationOnMock; import java.util.ArrayList; +import java.util.concurrent.Executor; @SmallTest @RunWith(AndroidTestingRunner.class) @@ -73,7 +74,7 @@ public class HotspotControllerImplTest extends SysuiTestCase { .onConnectedClientsChanged(new ArrayList<>()); return null; }).when(mWifiManager).registerSoftApCallback(any(WifiManager.SoftApCallback.class), - any(Handler.class)); + any(Executor.class)); mController = new HotspotControllerImpl(mContext, new Handler(mLooper.getLooper())); } diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java index d9c1bf22d477..68355c603914 100644 --- a/wifi/java/android/net/wifi/WifiManager.java +++ b/wifi/java/android/net/wifi/WifiManager.java @@ -3121,6 +3121,7 @@ public class WifiManager { * * @hide */ + @SystemApi public interface SoftApCallback { /** * Called when soft AP state changes. @@ -3149,11 +3150,11 @@ public class WifiManager { * @hide */ private class SoftApCallbackProxy extends ISoftApCallback.Stub { - private final Handler mHandler; + private final Executor mExecutor; private final SoftApCallback mCallback; - SoftApCallbackProxy(Looper looper, SoftApCallback callback) { - mHandler = new Handler(looper); + SoftApCallbackProxy(Executor executor, SoftApCallback callback) { + mExecutor = executor; mCallback = callback; } @@ -3164,7 +3165,8 @@ public class WifiManager { + ", failureReason=" + failureReason); } - mHandler.post(() -> { + Binder.clearCallingIdentity(); + mExecutor.execute(() -> { mCallback.onStateChanged(state, failureReason); }); } @@ -3176,7 +3178,8 @@ public class WifiManager { + clients.size() + " clients"); } - mHandler.post(() -> { + Binder.clearCallingIdentity(); + mExecutor.execute(() -> { mCallback.onConnectedClientsChanged(clients); }); } @@ -3195,21 +3198,22 @@ public class WifiManager { * <p> * * @param callback Callback for soft AP events - * @param handler The Handler on whose thread to execute the callbacks of the {@code callback} - * object. If null, then the application's main thread will be used. + * @param executor The executor to execute the callbacks of the {@code executor} + * object. If null, then the application's main executor will be used. * * @hide */ + @SystemApi @RequiresPermission(android.Manifest.permission.NETWORK_SETTINGS) public void registerSoftApCallback(@NonNull SoftApCallback callback, - @Nullable Handler handler) { + @Nullable @CallbackExecutor Executor executor) { if (callback == null) throw new IllegalArgumentException("callback cannot be null"); - Log.v(TAG, "registerSoftApCallback: callback=" + callback + ", handler=" + handler); + Log.v(TAG, "registerSoftApCallback: callback=" + callback + ", executor=" + executor); - Looper looper = (handler == null) ? mContext.getMainLooper() : handler.getLooper(); + executor = (executor == null) ? mContext.getMainExecutor() : executor; Binder binder = new Binder(); try { - mService.registerSoftApCallback(binder, new SoftApCallbackProxy(looper, callback), + mService.registerSoftApCallback(binder, new SoftApCallbackProxy(executor, callback), callback.hashCode()); } catch (RemoteException e) { throw e.rethrowFromSystemServer(); diff --git a/wifi/tests/src/android/net/wifi/WifiManagerTest.java b/wifi/tests/src/android/net/wifi/WifiManagerTest.java index e14919452ba7..cfdb6f1dd304 100644 --- a/wifi/tests/src/android/net/wifi/WifiManagerTest.java +++ b/wifi/tests/src/android/net/wifi/WifiManagerTest.java @@ -66,6 +66,7 @@ import android.net.wifi.WifiManager.SoftApCallback; import android.net.wifi.WifiManager.TrafficStateCallback; import android.os.Build; import android.os.Handler; +import android.os.HandlerExecutor; import android.os.IBinder; import android.os.Message; import android.os.Messenger; @@ -685,7 +686,7 @@ public class WifiManagerTest { @Test public void registerSoftApCallbackThrowsIllegalArgumentExceptionOnNullArgumentForCallback() { try { - mWifiManager.registerSoftApCallback(null, mHandler); + mWifiManager.registerSoftApCallback(null, new HandlerExecutor(mHandler)); fail("expected IllegalArgumentException"); } catch (IllegalArgumentException expected) { } @@ -710,7 +711,7 @@ public class WifiManagerTest { public void registerSoftApCallbackUsesMainLooperOnNullArgumentForHandler() { when(mContext.getMainLooper()).thenReturn(mLooper.getLooper()); mWifiManager.registerSoftApCallback(mSoftApCallback, null); - verify(mContext).getMainLooper(); + verify(mContext).getMainExecutor(); } /** @@ -718,7 +719,7 @@ public class WifiManagerTest { */ @Test public void registerSoftApCallbackCallGoesToWifiServiceImpl() throws Exception { - mWifiManager.registerSoftApCallback(mSoftApCallback, mHandler); + mWifiManager.registerSoftApCallback(mSoftApCallback, new HandlerExecutor(mHandler)); verify(mWifiService).registerSoftApCallback(any(IBinder.class), any(ISoftApCallback.Stub.class), anyInt()); } @@ -729,7 +730,7 @@ public class WifiManagerTest { @Test public void unregisterSoftApCallbackCallGoesToWifiServiceImpl() throws Exception { ArgumentCaptor<Integer> callbackIdentifier = ArgumentCaptor.forClass(Integer.class); - mWifiManager.registerSoftApCallback(mSoftApCallback, mHandler); + mWifiManager.registerSoftApCallback(mSoftApCallback, new HandlerExecutor(mHandler)); verify(mWifiService).registerSoftApCallback(any(IBinder.class), any(ISoftApCallback.Stub.class), callbackIdentifier.capture()); @@ -744,7 +745,7 @@ public class WifiManagerTest { public void softApCallbackProxyCallsOnStateChanged() throws Exception { ArgumentCaptor<ISoftApCallback.Stub> callbackCaptor = ArgumentCaptor.forClass(ISoftApCallback.Stub.class); - mWifiManager.registerSoftApCallback(mSoftApCallback, mHandler); + mWifiManager.registerSoftApCallback(mSoftApCallback, new HandlerExecutor(mHandler)); verify(mWifiService).registerSoftApCallback(any(IBinder.class), callbackCaptor.capture(), anyInt()); @@ -760,7 +761,7 @@ public class WifiManagerTest { public void softApCallbackProxyCallsOnConnectedClientsChanged() throws Exception { ArgumentCaptor<ISoftApCallback.Stub> callbackCaptor = ArgumentCaptor.forClass(ISoftApCallback.Stub.class); - mWifiManager.registerSoftApCallback(mSoftApCallback, mHandler); + mWifiManager.registerSoftApCallback(mSoftApCallback, new HandlerExecutor(mHandler)); verify(mWifiService).registerSoftApCallback(any(IBinder.class), callbackCaptor.capture(), anyInt()); @@ -777,7 +778,7 @@ public class WifiManagerTest { public void softApCallbackProxyCallsOnMultipleUpdates() throws Exception { ArgumentCaptor<ISoftApCallback.Stub> callbackCaptor = ArgumentCaptor.forClass(ISoftApCallback.Stub.class); - mWifiManager.registerSoftApCallback(mSoftApCallback, mHandler); + mWifiManager.registerSoftApCallback(mSoftApCallback, new HandlerExecutor(mHandler)); verify(mWifiService).registerSoftApCallback(any(IBinder.class), callbackCaptor.capture(), anyInt()); @@ -801,7 +802,7 @@ public class WifiManagerTest { ArgumentCaptor.forClass(ISoftApCallback.Stub.class); TestLooper altLooper = new TestLooper(); Handler altHandler = new Handler(altLooper.getLooper()); - mWifiManager.registerSoftApCallback(mSoftApCallback, altHandler); + mWifiManager.registerSoftApCallback(mSoftApCallback, new HandlerExecutor(altHandler)); verify(mWifiService).registerSoftApCallback(any(IBinder.class), callbackCaptor.capture(), anyInt()); @@ -815,7 +816,7 @@ public class WifiManagerTest { */ @Test public void testCorrectLooperIsUsedForSoftApCallbackHandler() throws Exception { - mWifiManager.registerSoftApCallback(mSoftApCallback, mHandler); + mWifiManager.registerSoftApCallback(mSoftApCallback, new HandlerExecutor(mHandler)); mLooper.dispatchAll(); verify(mWifiService).registerSoftApCallback(any(IBinder.class), any(ISoftApCallback.Stub.class), anyInt()); |