Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 49960bdd authored by James Mattis's avatar James Mattis Committed by android-build-merger
Browse files

Merge "Marking SoftApCallback methods as SystemAPI" am: 8295ffc5

am: 179ed7d6

Change-Id: I0498bdefc05aad2b56c68f586e480d06b9fe80c1
parents fe08abee 179ed7d6
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -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();
+3 −1
Original line number Diff line number Diff line
@@ -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
+2 −1
Original line number Diff line number Diff line
@@ -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()));
    }
+15 −11
Original line number Diff line number Diff line
@@ -3122,6 +3122,7 @@ public class WifiManager {
     *
     * @hide
     */
    @SystemApi
    public interface SoftApCallback {
        /**
         * Called when soft AP state changes.
@@ -3150,11 +3151,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;
        }

@@ -3165,7 +3166,8 @@ public class WifiManager {
                        + ", failureReason=" + failureReason);
            }

            mHandler.post(() -> {
            Binder.clearCallingIdentity();
            mExecutor.execute(() -> {
                mCallback.onStateChanged(state, failureReason);
            });
        }
@@ -3177,7 +3179,8 @@ public class WifiManager {
                        + clients.size() + " clients");
            }

            mHandler.post(() -> {
            Binder.clearCallingIdentity();
            mExecutor.execute(() -> {
                mCallback.onConnectedClientsChanged(clients);
            });
        }
@@ -3196,21 +3199,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();
+10 −9
Original line number Diff line number Diff line
@@ -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());