diff options
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; } |