Loading telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java +94 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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() { Loading Loading @@ -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); } } } } telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +16 −25 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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"); } Loading Loading @@ -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; } } } telephony/java/com/android/internal/telephony/cdma/RuimRecords.java +0 −9 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading
telephony/java/com/android/internal/telephony/cdma/CDMAPhone.java +94 −7 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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; Loading Loading @@ -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); } Loading Loading @@ -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() { Loading Loading @@ -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); } } } }
telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java +16 −25 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading Loading @@ -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; Loading Loading @@ -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"); } Loading Loading @@ -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; } } }
telephony/java/com/android/internal/telephony/cdma/RuimRecords.java +0 −9 Original line number Diff line number Diff line Loading @@ -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; } Loading