Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 01f11af5 authored by Android (Google) Code Review's avatar Android (Google) Code Review
Browse files

Merge change 7699

* changes:
  Implement IMSI function for CDMA phones
parents 9bacd43d 142eefc6
Loading
Loading
Loading
Loading
+94 −7
Original line number Diff line number Diff line
@@ -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);
            }
        }
    }
}
+16 −25
Original line number Diff line number Diff line
@@ -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;
        }
    }
}
+0 −9
Original line number Diff line number Diff line
@@ -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;
    }