summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CDMAPhone.java101
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java41
-rw-r--r--telephony/java/com/android/internal/telephony/cdma/RuimRecords.java9
3 files changed, 110 insertions, 41 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
index f04d26c30368..bdcea92089ce 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java
@@ -18,17 +18,23 @@ package com.android.internal.telephony.cdma;
import android.app.ActivityManagerNative;
import android.content.Context;
+import android.content.ContentValues;
import android.content.Intent;
+import android.content.res.Configuration;
import android.content.SharedPreferences;
+import android.database.SQLException;
+import android.net.Uri;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Looper;
import android.os.Message;
import android.os.Registrant;
import android.os.RegistrantList;
+import android.os.RemoteException;
import android.os.SystemProperties;
import android.preference.PreferenceManager;
import android.provider.Settings;
+import android.provider.Telephony;
import android.telephony.CellLocation;
import android.telephony.PhoneNumberUtils;
import android.telephony.ServiceState;
@@ -42,6 +48,10 @@ import com.android.internal.telephony.CommandException;
import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.Connection;
import com.android.internal.telephony.DataConnection;
+// TODO(Moto): need to move MccTable from telephony.gsm to telephony
+// since there is no difference between CDMA and GSM for MccTable and
+// CDMA uses gsm's MccTable is not good.
+import com.android.internal.telephony.gsm.MccTable;
import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.IccException;
import com.android.internal.telephony.IccFileHandler;
@@ -57,6 +67,10 @@ import com.android.internal.telephony.RILConstants;
import com.android.internal.telephony.TelephonyIntents;
import com.android.internal.telephony.TelephonyProperties;
+import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA;
+import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC;
+import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY;
+
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
@@ -165,6 +179,23 @@ public class CDMAPhone extends PhoneBase {
mCarrierOtaSpNumSchema = SystemProperties.get(
TelephonyProperties.PROPERTY_OTASP_NUM_SCHEMA,"");
+ // Sets operator alpha property by retrieving from build-time system property
+ String operatorAlpha = SystemProperties.get("ro.cdma.home.operator.alpha");
+ setSystemProperty(PROPERTY_ICC_OPERATOR_ALPHA, operatorAlpha);
+
+ // Sets operator numeric property by retrieving from build-time system property
+ String operatorNumeric = SystemProperties.get("ro.cdma.home.operator.numeric");
+ setSystemProperty(PROPERTY_ICC_OPERATOR_NUMERIC, operatorNumeric);
+
+ // Sets iso country property by retrieving from build-time system property
+ setIsoCountryProperty(operatorNumeric);
+
+ // Sets current entry in the telephony carrier table
+ updateCurrentCarrierInProvider(operatorNumeric);
+
+ // Updates MCC MNC device configuration information
+ updateMccMncConfiguration(operatorNumeric);
+
// Notify voicemails.
notifier.notifyMessageWaitingChanged(this);
}
@@ -438,13 +469,7 @@ public class CDMAPhone extends PhoneBase {
}
public String getSubscriberId() {
- // Subscriber ID is the combination of MCC+MNC+MIN as CDMA IMSI
- // TODO(Moto): Replace with call to mRuimRecords.getIMSI_M() when implemented.
- if ((getServiceState().getOperatorNumeric() != null) && (getCdmaMin() != null)) {
- return (getServiceState().getOperatorNumeric() + getCdmaMin());
- } else {
- return null;
- }
+ return mSST.getImsi();
}
public boolean canConference() {
@@ -1365,4 +1390,66 @@ public class CDMAPhone extends PhoneBase {
editor.commit();
}
+ /**
+ * Sets PROPERTY_ICC_OPERATOR_ISO_COUNTRY property
+ *
+ */
+ private void setIsoCountryProperty(String operatorNumeric) {
+ if (TextUtils.isEmpty(operatorNumeric)) {
+ setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, "");
+ } else {
+ String iso = "";
+ try {
+ iso = MccTable.countryCodeForMcc(Integer.parseInt(
+ operatorNumeric.substring(0,3)));
+ } catch (NumberFormatException ex) {
+ Log.w(LOG_TAG, "countryCodeForMcc error" + ex);
+ } catch (StringIndexOutOfBoundsException ex) {
+ Log.w(LOG_TAG, "countryCodeForMcc error" + ex);
+ }
+
+ setSystemProperty(PROPERTY_ICC_OPERATOR_ISO_COUNTRY, iso);
+ }
+ }
+
+ /**
+ * Sets the "current" field in the telephony provider according to the build-time
+ * operator numeric property
+ *
+ * @return true for success; false otherwise.
+ */
+ // TODO(Moto): move this method into PhoneBase, since it looks identical to
+ // the one in GsmPhone
+ private boolean updateCurrentCarrierInProvider(String operatorNumeric) {
+ if (!TextUtils.isEmpty(operatorNumeric)) {
+ try {
+ Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
+ ContentValues map = new ContentValues();
+ map.put(Telephony.Carriers.NUMERIC, operatorNumeric);
+ getContext().getContentResolver().insert(uri, map);
+ return true;
+ } catch (SQLException e) {
+ Log.e(LOG_TAG, "Can't store current operator", e);
+ }
+ }
+ return false;
+ }
+
+ /**
+ * Updates MCC and MNC device configuration information for application retrieving
+ * correct version of resources
+ *
+ */
+ private void updateMccMncConfiguration(String operatorNumeric) {
+ if (operatorNumeric.length() >= 5) {
+ Configuration config = new Configuration();
+ config.mcc = Integer.parseInt(operatorNumeric.substring(0,3));
+ config.mnc = Integer.parseInt(operatorNumeric.substring(3));
+ try {
+ ActivityManagerNative.getDefault().updateConfiguration(config);
+ } catch (RemoteException e) {
+ Log.e(LOG_TAG, "Can't update configuration", e);
+ }
+ }
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index 5183108d8bf4..e78570988f59 100644
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -19,11 +19,8 @@ package com.android.internal.telephony.cdma;
import android.app.AlarmManager;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.ContentValues;
import android.content.Intent;
import android.database.ContentObserver;
-import android.database.SQLException;
-import android.net.Uri;
import android.os.AsyncResult;
import android.os.Handler;
import android.os.Message;
@@ -35,7 +32,6 @@ import android.os.SystemProperties;
import android.provider.Checkin;
import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
-import android.provider.Telephony;
import android.provider.Telephony.Intents;
import android.telephony.ServiceState;
import android.telephony.SignalStrength;
@@ -64,6 +60,7 @@ import static com.android.internal.telephony.TelephonyProperties.PROPERTY_OPERAT
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_OPERATOR_ISROAMING;
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_OPERATOR_NUMERIC;
import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_ALPHA;
+import static com.android.internal.telephony.TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC;
import java.util.Arrays;
import java.util.Date;
@@ -686,27 +683,6 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
} else {
newSS.setOperatorName(opNames[0], opNames[1], opNames[2]);
}
-
- if (!(opNames[2].equals(currentCarrier))) {
- // TODO(Moto): jsh asks, "This uses the MCC+MNC of the current registered
- // network to set the "current" entry in the APN table. But the correct
- // entry should be the MCC+MNC that matches the subscribed operator
- // (eg, phone issuer). These can be different when roaming."
- try {
- // Set the current field of the telephony provider according to
- // the CDMA's operator
- Uri uri = Uri.withAppendedPath(Telephony.Carriers.CONTENT_URI, "current");
- ContentValues map = new ContentValues();
- map.put(Telephony.Carriers.NUMERIC, opNames[2]);
- cr.insert(uri, map);
- // save current carrier for the next time check
- currentCarrier = opNames[2];
- } catch (SQLException e) {
- Log.e(LOG_TAG, "Can't store current operator", e);
- }
- } else {
- Log.i(LOG_TAG, "current carrier is not changed");
- }
} else {
Log.w(LOG_TAG, "error parsing opNames");
}
@@ -1502,4 +1478,19 @@ final class CdmaServiceStateTracker extends ServiceStateTracker {
return mPrlVersion;
}
+ /**
+ * Returns IMSI as MCC + MNC + MIN
+ */
+ /*package*/ String getImsi() {
+ // TODO(Moto): When RUIM is enabled, IMSI will come from RUIM
+ // not build-time props. Moto will provide implementation
+ // for RUIM-ready case later.
+ String operatorNumeric = SystemProperties.get(PROPERTY_ICC_OPERATOR_NUMERIC, "");
+
+ if (!TextUtils.isEmpty(operatorNumeric) && getCdmaMin() != null) {
+ return (operatorNumeric + getCdmaMin());
+ } else {
+ return null;
+ }
+ }
}
diff --git a/telephony/java/com/android/internal/telephony/cdma/RuimRecords.java b/telephony/java/com/android/internal/telephony/cdma/RuimRecords.java
index f3bb5efb033d..7c743141e07a 100644
--- a/telephony/java/com/android/internal/telephony/cdma/RuimRecords.java
+++ b/telephony/java/com/android/internal/telephony/cdma/RuimRecords.java
@@ -114,21 +114,12 @@ public final class RuimRecords extends IccRecords {
adnCache.reset();
- phone.setSystemProperty(TelephonyProperties.PROPERTY_ICC_OPERATOR_NUMERIC, null);
- phone.setSystemProperty(TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY, null);
-
// recordsRequested is set to false indicating that the SIM
// read requests made so far are not valid. This is set to
// true only when fresh set of read requests are made.
recordsRequested = false;
}
- /** Returns null if RUIM is not yet ready */
- public String getIMSI_M() {
- // TODO(Moto): mImsi is not initialized, fix.
- return mImsi;
- }
-
public String getMdnNumber() {
return mMyMobileNumber;
}