summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--framework/api/system-current.txt2
-rw-r--r--framework/java/android/net/wifi/SoftApState.java13
-rw-r--r--framework/java/android/net/wifi/WifiManager.java7
-rw-r--r--framework/tests/src/android/net/wifi/WifiManagerTest.java7
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java2
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/ActiveModeWardenTest.java4
-rw-r--r--service/tests/wifitests/src/com/android/server/wifi/WifiServiceImplTest.java8
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);