Snap for 8712302 from da647bd309dfea36069d4340d1df252867c51529 to tm-frc-permission-release
Change-Id: Iae08bca6d136a3e135ded7c03f9b157d52f11326
diff --git a/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java b/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java
index 62497d9..5fa0177 100644
--- a/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java
+++ b/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java
@@ -34,9 +34,11 @@
import android.os.Bundle;
import android.os.Process;
import android.os.Vibrator;
+import android.text.Editable;
import android.text.SpannableString;
import android.text.Spanned;
import android.text.TextUtils;
+import android.text.TextWatcher;
import android.text.method.LinkMovementMethod;
import android.text.style.URLSpan;
import android.util.ArraySet;
@@ -564,6 +566,31 @@
getWifiManager().replyToP2pInvitationReceivedDialog(dialogId, false, null);
})
.create();
+ if (pinEditText != null) {
+ dialog.setOnShowListener(dialogShow -> {
+ dialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false);
+ });
+ pinEditText.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ // No-op.
+ }
+
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ // No-op.
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ if (s.length() == 4 || s.length() == 8) {
+ dialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(true);
+ } else {
+ dialog.getButton(Dialog.BUTTON_POSITIVE).setEnabled(false);
+ }
+ }
+ });
+ }
if ((getResources().getConfiguration().uiMode & Configuration.UI_MODE_TYPE_APPLIANCE)
== Configuration.UI_MODE_TYPE_APPLIANCE) {
// For appliance devices, add a key listener which accepts.
diff --git a/service/ServiceWifiResources/res/values/styles.xml b/service/ServiceWifiResources/res/values/styles.xml
index db06ef3..872616d 100644
--- a/service/ServiceWifiResources/res/values/styles.xml
+++ b/service/ServiceWifiResources/res/values/styles.xml
@@ -16,7 +16,7 @@
<resources>
<!-- Wifi dialog styles -->
<style name="wifi_item">
- <item name="android:layout_width">200dip</item>
+ <item name="android:layout_width">match_parent</item>
<item name="android:layout_height">wrap_content</item>
<item name="android:layout_marginTop">8dip</item>
<item name="android:layout_marginStart">16dip</item>
diff --git a/service/java/com/android/server/wifi/ClientModeImpl.java b/service/java/com/android/server/wifi/ClientModeImpl.java
index 4becb34..92cc9ff 100644
--- a/service/java/com/android/server/wifi/ClientModeImpl.java
+++ b/service/java/com/android/server/wifi/ClientModeImpl.java
@@ -4898,11 +4898,15 @@
String decoratedPseudonym = mWifiCarrierInfoManager
.decoratePseudonymWith3GppRealm(config,
anonymousIdentity);
- if (decoratedPseudonym != null) {
+ if (decoratedPseudonym != null
+ && !decoratedPseudonym.equals(anonymousIdentity)) {
anonymousIdentity = decoratedPseudonym;
// propagate to the supplicant to avoid using
// the original anonymous identity for firmware
// roaming.
+ if (mVerboseLoggingEnabled) {
+ log("Update decorated pseudonym: " + anonymousIdentity);
+ }
mWifiNative.setEapAnonymousIdentity(mInterfaceName,
anonymousIdentity);
}
diff --git a/service/java/com/android/server/wifi/HalDeviceManager.java b/service/java/com/android/server/wifi/HalDeviceManager.java
index fa71055..c8ce15c 100644
--- a/service/java/com/android/server/wifi/HalDeviceManager.java
+++ b/service/java/com/android/server/wifi/HalDeviceManager.java
@@ -2247,6 +2247,7 @@
StringBuilder sb = new StringBuilder();
sb.append("{chipInfo=").append(chipInfo).append(", chipModeId=").append(chipModeId)
.append(", interfacesToBeRemovedFirst=").append(interfacesToBeRemovedFirst)
+ .append(", interfacesToBeDowngraded=").append(interfacesToBeDowngraded)
.append(")");
return sb.toString();
}
@@ -2369,7 +2370,8 @@
* Note: both proposals are 'acceptable' bases on priority criteria.
*
* Criteria:
- * - Proposal is better if it means removing fewer high priority interfaces
+ * - Proposal is better if it means removing fewer high priority interfaces, or downgrades the
+ * fewest interfaces.
*/
private boolean compareIfaceCreationData(IfaceCreationData val1, IfaceCreationData val2) {
if (VDBG) Log.d(TAG, "compareIfaceCreationData: val1=" + val1 + ", val2=" + val2);
@@ -2415,6 +2417,14 @@
}
}
+ int val1NumIFacesToBeDowngraded = val1.interfacesToBeDowngraded != null
+ ? val1.interfacesToBeDowngraded.size() : 0;
+ int val2NumIFacesToBeDowngraded = val2.interfacesToBeDowngraded != null
+ ? val2.interfacesToBeDowngraded.size() : 0;
+ if (val1NumIFacesToBeDowngraded != val2NumIFacesToBeDowngraded) {
+ return val1NumIFacesToBeDowngraded < val2NumIFacesToBeDowngraded;
+ }
+
// arbitrary - flip a coin
if (VDBG) Log.d(TAG, "proposals identical - flip a coin");
return false;
diff --git a/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java b/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
index 061bad1..f87cd1f 100644
--- a/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
+++ b/service/tests/wifitests/src/com/android/server/wifi/HalDeviceManagerTest.java
@@ -3264,16 +3264,68 @@
}
/**
- * Validate creation of AP Bridge interface from blank start-up in chip V1.6
+ * Validate creation of AP Bridge interface from blank start-up in TestChipV6
*/
@Test
- public void testCreateApBridgeInterfaceNoInitModeTestChipV16() throws Exception {
+ public void testCreateApBridgeInterfaceNoInitModeTestChipV6() throws Exception {
TestChipV6 testChip = new TestChipV6();
setupWifiChipV15(testChip);
runCreateSingleXxxInterfaceNoInitMode(testChip, HDM_CREATE_IFACE_AP_BRIDGE, "wlan0",
TestChipV6.CHIP_MODE_ID);
}
+ /**
+ * Validate creation of STA will not downgrade an AP Bridge interface in TestChipV6, since it
+ * can support STA and AP Bridge concurrently.
+ */
+ @Test
+ public void testCreateStaDoesNotDowngradeApBridgeInterfaceTestChipV6() throws Exception {
+ mIsBridgedSoftApSupported = true;
+ mIsStaWithBridgedSoftApConcurrencySupported = false;
+ TestChipV6 chipMock = new TestChipV6();
+ setupWifiChipV15(chipMock);
+ chipMock.initialize();
+ mInOrder = inOrder(mServiceManagerMock, mWifiMock, mWifiMockV15, chipMock.chip,
+ mWifiChipV15, mManagerStatusListenerMock);
+ executeAndValidateInitializationSequence();
+ executeAndValidateStartupSequence();
+
+ InterfaceDestroyedListener idl = mock(
+ InterfaceDestroyedListener.class);
+
+ // Create the bridged AP
+ ArrayList<String> bridgedApInstances = new ArrayList<>();
+ bridgedApInstances.add("instance0");
+ bridgedApInstances.add("instance1");
+ chipMock.bridgedApInstancesByName.put("wlan0", bridgedApInstances);
+ IWifiIface iface = validateInterfaceSequence(chipMock,
+ false, // chipModeValid
+ -1000, // chipModeId (only used if chipModeValid is true)
+ HDM_CREATE_IFACE_AP_BRIDGE,
+ "wlan0",
+ TestChipV6.CHIP_MODE_ID,
+ null, // tearDownList
+ idl, // destroyedListener
+ TEST_WORKSOURCE_0 // requestorWs
+ );
+ collector.checkThat("interface was null", iface, IsNull.notNullValue());
+
+ when(mSoftApManager.getBridgedApDowngradeIfaceInstanceForRemoval()).thenReturn("instance1");
+ // Should be able to create a STA without downgrading the bridged AP
+ iface = validateInterfaceSequence(chipMock,
+ true, // chipModeValid
+ TestChipV6.CHIP_MODE_ID,
+ HDM_CREATE_IFACE_STA,
+ "wlan3",
+ TestChipV6.CHIP_MODE_ID,
+ null, // tearDownList
+ idl, // destroyedListener
+ TEST_WORKSOURCE_0 // requestorWs
+ );
+ collector.checkThat("interface was null", iface, IsNull.notNullValue());
+ assertEquals(2, bridgedApInstances.size());
+ }
+
private IWifiIface setupDbsSupportTest(ChipMockBase testChip, int onlyChipMode,
ImmutableList<ArrayList<Integer>> radioCombinationMatrix) throws Exception {
WifiRadioCombinationMatrix matrix = new WifiRadioCombinationMatrix();