summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHu Wang <huw@codeaurora.org>2018-02-02 15:18:00 +0800
committerMichael Bestas <mkbestas@lineageos.org>2019-12-11 19:52:32 +0200
commit2733dfadab962dc912ed2d33127e2995399c7bc6 (patch)
treed02729f24561dbea63d2e25ef7c58a10d6a0bf8e
parentd52a7f8504ed4b732c90448067ba4de7281acddb (diff)
downloadandroid_frameworks_opt_net_wifi-2733dfadab962dc912ed2d33127e2995399c7bc6.tar.gz
android_frameworks_opt_net_wifi-2733dfadab962dc912ed2d33127e2995399c7bc6.tar.bz2
android_frameworks_opt_net_wifi-2733dfadab962dc912ed2d33127e2995399c7bc6.zip
wifi: Not reset country code for Dual SIM if any slot is activestaging/lineage-17.0_merge-android-10.0.0_r9
WifiService accepts country code from mccTable, and if one slot is absent, telephony broadcasts the SIM STATE CHANGED event with absent state, and based which WifiSerive resets the country code. This works for single SIM. But for Dual SIM, if one slot is active and another is absent, telephony broadcasts two SIM STATE CHANGED events. As the latter one is with absent state, WifiService resets the country code. In Dual SIM case, Add check that if any slot is active, WifiService shall not reset country code. Change-Id: Icf41d8f4c93616d64796874c55caa39b590d7718 CRs-fixed: 2181365
-rw-r--r--service/java/com/android/server/wifi/WifiServiceImpl.java37
1 files changed, 37 insertions, 0 deletions
diff --git a/service/java/com/android/server/wifi/WifiServiceImpl.java b/service/java/com/android/server/wifi/WifiServiceImpl.java
index 2d15af53c..ed796c0a6 100644
--- a/service/java/com/android/server/wifi/WifiServiceImpl.java
+++ b/service/java/com/android/server/wifi/WifiServiceImpl.java
@@ -500,6 +500,39 @@ public class WifiServiceImpl extends BaseWifiService {
mAsyncChannelExternalClientHandler.setWifiLog(log);
}
+ // Return true if it is DUAL SIM and either SIM is active.
+ private boolean checkDualSimActive() {
+ TelephonyManager tm = (TelephonyManager)
+ mContext.getSystemService(Context.TELEPHONY_SERVICE);
+
+ if (tm == null) {
+ Log.i(TAG, "checkDualSimActive() is false, tm == null");
+ return false;
+ }
+
+ int phoneCount = tm.getPhoneCount();
+ if (phoneCount < 2) {
+ Log.i(TAG, "checkDualSimActive() is false, phoneCount="
+ + phoneCount + " slot0State=" + tm.getSimState(0));
+ return false;
+ }
+
+ int slot0State = tm.getSimState(0);
+ int slot1State = tm.getSimState(1);
+ if (slot0State != TelephonyManager.SIM_STATE_READY &&
+ slot1State != TelephonyManager.SIM_STATE_READY) {
+ Log.i(TAG, "checkDualSimActive() is false, slot0State="
+ + slot0State + " slot1State=" + slot1State);
+ return false;
+ }
+
+ Log.i(TAG, "checkDualSimActive() is true, phoneCount="
+ + phoneCount
+ + " slot0State=" + slot0State + " slot1State=" + slot1State);
+
+ return true;
+ }
+
/**
* Check if we are ready to start wifi.
*
@@ -542,6 +575,10 @@ public class WifiServiceImpl extends BaseWifiService {
public void onReceive(Context context, Intent intent) {
String state = intent.getStringExtra(IccCardConstants.INTENT_KEY_ICC_STATE);
if (IccCardConstants.INTENT_VALUE_ICC_ABSENT.equals(state)) {
+ if (checkDualSimActive()) {
+ Log.d(TAG, "Not resetting networks as other SIM may active");
+ return;
+ }
Log.d(TAG, "resetting networks because SIM was removed");
mClientModeImpl.resetSimAuthNetworks(false);
} else if (IccCardConstants.INTENT_VALUE_ICC_LOADED.equals(state)) {