diff options
7 files changed, 37 insertions, 6 deletions
diff --git a/framework/api/system-current.txt b/framework/api/system-current.txt index 1b0fa6ea2f..444356b641 100644 --- a/framework/api/system-current.txt +++ b/framework/api/system-current.txt @@ -1027,7 +1027,7 @@ package android.net.wifi { method public default void onConnectedClientsChanged(@NonNull android.net.wifi.SoftApInfo, @NonNull java.util.List<android.net.wifi.WifiClient>); method @Deprecated public default void onInfoChanged(@NonNull android.net.wifi.SoftApInfo); method public default void onInfoChanged(@NonNull java.util.List<android.net.wifi.SoftApInfo>); - method @Deprecated public default void onStateChanged(int, int); + method public default void onStateChanged(int, int); method @FlaggedApi("com.android.wifi.flags.android_v_wifi_api") public default void onStateChanged(@NonNull android.net.wifi.SoftApState); } diff --git a/framework/java/android/net/wifi/SoftApState.java b/framework/java/android/net/wifi/SoftApState.java index 827a86101a..07e194c234 100644 --- a/framework/java/android/net/wifi/SoftApState.java +++ b/framework/java/android/net/wifi/SoftApState.java @@ -134,9 +134,22 @@ public final class SoftApState implements Parcelable { * {@link WifiManager#SAP_START_FAILURE_NO_CHANNEL}, * {@link WifiManager#SAP_START_FAILURE_UNSUPPORTED_CONFIGURATION}, * {@link WifiManager#SAP_START_FAILURE_USER_REJECTED} + * @throws IllegalStateException if the state is not {@link WifiManager#WIFI_AP_STATE_FAILED}. */ @WifiManager.SapStartFailure public int getFailureReason() { + if (mState != WifiManager.WIFI_AP_STATE_FAILED) { + throw new IllegalStateException("Called getFailureReason() when state is not" + + " WIFI_AP_STATE_FAILED. Actual state is " + mState); + } + return getFailureReasonInternal(); + } + + /** + * @hide + */ + @WifiManager.SapStartFailure + public int getFailureReasonInternal() { return mFailureReason; } diff --git a/framework/java/android/net/wifi/WifiManager.java b/framework/java/android/net/wifi/WifiManager.java index dda8c13ae3..411a0f8615 100644 --- a/framework/java/android/net/wifi/WifiManager.java +++ b/framework/java/android/net/wifi/WifiManager.java @@ -6628,12 +6628,15 @@ public class WifiManager { * {@link #SAP_START_FAILURE_NO_CHANNEL}, * {@link #SAP_START_FAILURE_UNSUPPORTED_CONFIGURATION}, * {@link #SAP_START_FAILURE_USER_REJECTED} - * @deprecated Use {@link #onStateChanged(StateInfo)}. */ default void onStateChanged(@WifiApState int state, @SapStartFailure int failureReason) {} /** * Called when soft AP state changes. + * <p> + * This provides the same state and failure reason as {@link #onStateChanged(int, int)}, but + * also provides extra information such as interface name and TetheringRequest in order to + * replace usage of the WIFI_AP_STATE_CHANGED_ACTION broadcast. * * @param state the new state. */ @@ -6783,7 +6786,7 @@ public class WifiManager { Binder.clearCallingIdentity(); mExecutor.execute(() -> { mCallback.onStateChanged(state); - mCallback.onStateChanged(state.getState(), state.getFailureReason()); + mCallback.onStateChanged(state.getState(), state.getFailureReasonInternal()); }); } diff --git a/framework/tests/src/android/net/wifi/WifiManagerTest.java b/framework/tests/src/android/net/wifi/WifiManagerTest.java index 0e4a65a873..c9355bda6d 100644 --- a/framework/tests/src/android/net/wifi/WifiManagerTest.java +++ b/framework/tests/src/android/net/wifi/WifiManagerTest.java @@ -1865,7 +1865,12 @@ public class WifiManagerTest { verify(mSoftApCallback).onStateChanged(softApStateCaptor.capture()); SoftApState softApState = softApStateCaptor.getValue(); assertEquals(WIFI_AP_STATE_ENABLED, softApState.getState()); - assertEquals(0, softApState.getFailureReason()); + try { + softApState.getFailureReason(); + fail("getFailureReason should throw if not in failure state"); + } catch (IllegalStateException e) { + // Pass. + } assertEquals(TEST_INTERFACE_NAME, softApState.getIface()); assertEquals(TEST_TETHERING_REQUEST, softApState.getTetheringRequest()); } diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java index 6cd596f545..697d908d85 100644 --- a/service/java/com/android/server/wifi/WifiServiceImpl.java +++ b/service/java/com/android/server/wifi/WifiServiceImpl.java @@ -2519,7 +2519,7 @@ public class WifiServiceImpl extends BaseWifiService { synchronized (mLocalOnlyHotspotRequests) { Log.d(TAG, "lohs.onStateChanged: " + softApState); int state = softApState.getState(); - int failureReason = softApState.getFailureReason(); + int failureReason = softApState.getFailureReasonInternal(); // check if we have a failure - since it is possible (worst case scenario where // WifiController and ClientModeImpl are out of sync wrt modes) to get two FAILED diff --git a/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java b/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java index 5a9cddda77..fd98347e3b 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java @@ -2271,6 +2271,8 @@ public class ActiveModeWardenTest extends WifiBaseTest { assertThat(softApStateCaptor.getValue().getState()).isEqualTo(WIFI_AP_STATE_FAILED); assertThat(softApStateCaptor.getValue().getFailureReason()) .isEqualTo(SAP_START_FAILURE_GENERAL); + assertThat(softApStateCaptor.getValue().getFailureReasonInternal()) + .isEqualTo(SAP_START_FAILURE_GENERAL); // try to start LOHS mActiveModeWarden.startSoftAp( @@ -2287,6 +2289,8 @@ public class ActiveModeWardenTest extends WifiBaseTest { assertThat(softApStateCaptor.getValue().getState()).isEqualTo(WIFI_AP_STATE_FAILED); assertThat(softApStateCaptor.getValue().getFailureReason()) .isEqualTo(SAP_START_FAILURE_GENERAL); + assertThat(softApStateCaptor.getValue().getFailureReasonInternal()) + .isEqualTo(SAP_START_FAILURE_GENERAL); } /** diff --git a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java index 99f8cd3a34..d06ed9f2fc 100644 --- a/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java +++ b/service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java @@ -10605,7 +10605,13 @@ public class WifiServiceImplTest extends WifiBaseTest { ArgumentCaptor.forClass(SoftApState.class); verify(mClientSoftApCallback).onStateChanged(softApStateCaptor.capture()); assertThat(softApStateCaptor.getValue().getState()).isEqualTo(WIFI_AP_STATE_DISABLED); - assertThat(softApStateCaptor.getValue().getFailureReason()).isEqualTo(0); + try { + softApStateCaptor.getValue().getFailureReason(); + fail("getFailureReason should throw if not in failure state"); + } catch (IllegalStateException e) { + // Pass. + } + assertThat(softApStateCaptor.getValue().getFailureReasonInternal()).isEqualTo(0); verify(mClientSoftApCallback).onConnectedClientsOrInfoChanged( new HashMap<String, SoftApInfo>(), new HashMap<String, List<WifiClient>>(), false, true); |