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

Commit 2efec653 authored by Wink Saville's avatar Wink Saville Committed by Android Git Automerger
Browse files

am 9a992450: Merge "Time can become incorrect when no sim is present or mcc changes." into jb-dev

* commit '9a992450':
  Time can become incorrect when no sim is present or mcc changes.
parents 58e7dc96 9a992450
Loading
Loading
Loading
Loading
+55 −0
Original line number Diff line number Diff line
@@ -463,6 +463,61 @@ public abstract class ServiceStateTracker extends Handler {
        pollingContext = new int[1];
    }

    /**
     * Return true if time zone needs fixing.
     *
     * @param phoneBase
     * @param operatorNumeric
     * @param prevOperatorNumeric
     * @param needToFixTimeZone
     * @return true if time zone needs to be fixed
     */
    protected boolean isTimeZoneFixNeeded(PhoneBase phoneBase, String operatorNumeric,
            String prevOperatorNumeric, boolean needToFixTimeZone) {
        // Return false if the mcc isn't valid as we don't know where we are.
        // Return true if we have an IccCard and the mcc changed or we
        // need to fix it because when the NITZ time came in we didn't
        // know the country code.

        // If mcc is invalid then we'll return false
        int mcc;
        try {
            mcc = Integer.parseInt(operatorNumeric.substring(0, 3));
        } catch (Exception e) {
            if (DBG) {
                log("isTimeZoneFixNeeded: no mcc, operatorNumeric=" + operatorNumeric +
                        " retVal=false");
            }
            return false;
        }

        // If prevMcc is invalid will make it different from mcc
        // so we'll return true if the card exists.
        int prevMcc;
        try {
            prevMcc = Integer.parseInt(prevOperatorNumeric.substring(0, 3));
        } catch (Exception e) {
            prevMcc = mcc + 1;
        }

        // Determine if the Icc card exists
        IccCard iccCard = phoneBase.getIccCard();
        boolean iccCardExist = (iccCard != null) && iccCard.getState().iccCardExist();

        // Determine retVal
        boolean retVal = ((iccCardExist && (mcc != prevMcc)) || needToFixTimeZone);
        if (DBG) {
            log("isTimeZoneFixNeeded: retVal=" + retVal +
                    " iccCard=" + iccCard +
                    " iccCard.state=" + (iccCard == null ? "null" : iccCard.getState().toString()) +
                    " iccCardExist=" + iccCardExist +
                    " operatorNumeric=" + operatorNumeric + " mcc=" + mcc +
                    " prevOperatorNumeric=" + prevOperatorNumeric + " prevMcc=" + prevMcc +
                    " needToFixTimeZone=" + needToFixTimeZone);
        }
        return retVal;
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("ServiceStateTracker:");
        pw.println(" ss=" + ss);
+3 −15
Original line number Diff line number Diff line
@@ -377,12 +377,7 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
            phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, operatorNumeric);

            if (operatorNumeric == null) {
                if (DBG) {
                    log("pollStateDone: operatorNumeric=" + operatorNumeric +
                            " prevOperatorNumeric=" + prevOperatorNumeric +
                            " mNeedFixZone=" + mNeedFixZone +
                            " clear PROPERTY_OPERATOR_ISO_COUNTRY");
                }
                if (DBG) log("operatorNumeric is null");
                phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
                mGotCountryCode = false;
            } else {
@@ -396,20 +391,13 @@ public class CdmaLteServiceStateTracker extends CdmaServiceStateTracker {
                } catch (StringIndexOutOfBoundsException ex) {
                    loge("countryCodeForMcc error" + ex);
                }
                if (DBG) {
                    log("pollStateDone: operatorNumeric=" + operatorNumeric +
                            " prevOperatorNumeric=" + prevOperatorNumeric +
                            " mNeedFixZone=" + mNeedFixZone +
                            " mcc=" + mcc + " iso-cc=" + isoCountryCode);
                }

                phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY,
                        isoCountryCode);
                mGotCountryCode = true;

                // Fix the time zone If the operator changed or we need to fix it because
                // when the NITZ time came in we didn't know the country code.
                if ( ! operatorNumeric.equals(prevOperatorNumeric) || mNeedFixZone) {
                if (isTimeZoneFixNeeded(phone, operatorNumeric, prevOperatorNumeric,
                        mNeedFixZone)) {
                    fixTimeZone(isoCountryCode);
                }
            }
+6 −16
Original line number Diff line number Diff line
@@ -904,9 +904,11 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
            if (getAutoTimeZone()) {
                setAndBroadcastNetworkSetTimeZone(zone.getID());
            } else {
                log("fixTimeZone: zone == null");
                log("fixTimeZone: skip changing zone as getAutoTimeZone was false");
            }
            saveNitzTimeZone(zone.getID());
        } else {
            log("fixTimeZone: zone == null, do nothing for zone");
        }
    }

@@ -1003,12 +1005,7 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
            phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, operatorNumeric);

            if (operatorNumeric == null) {
                if (DBG) {
                    log("pollStateDone: operatorNumeric=" + operatorNumeric +
                            " prevOperatorNumeric=" + prevOperatorNumeric +
                            " mNeedFixZone=" + mNeedFixZone +
                            " clear PROPERTY_OPERATOR_ISO_COUNTRY");
                }
                if (DBG) log("operatorNumeric is null");
                phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
                mGotCountryCode = false;
            } else {
@@ -1022,20 +1019,13 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
                } catch ( StringIndexOutOfBoundsException ex) {
                    loge("pollStateDone: countryCodeForMcc error" + ex);
                }
                if (DBG) {
                    log("pollStateDone: operatorNumeric=" + operatorNumeric +
                            " prevOperatorNumeric=" + prevOperatorNumeric +
                            " mNeedFixZone=" + mNeedFixZone +
                            " mcc=" + mcc + " iso-cc=" + isoCountryCode);
                }

                phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY,
                        isoCountryCode);
                mGotCountryCode = true;

                // Fix the time zone If the operator changed or we need to fix it because
                // when the NITZ time came in we didn't know the country code.
                if ( ! operatorNumeric.equals(prevOperatorNumeric) || mNeedFixZone) {
                if (isTimeZoneFixNeeded(phone, operatorNumeric, prevOperatorNumeric,
                        mNeedFixZone)) {
                    fixTimeZone(isoCountryCode);
                }
            }
+5 −17
Original line number Diff line number Diff line
@@ -21,6 +21,7 @@ import com.android.internal.telephony.CommandsInterface;
import com.android.internal.telephony.DataConnectionTracker;
import com.android.internal.telephony.EventLogTags;
import com.android.internal.telephony.IccCard;
import com.android.internal.telephony.IccCardStatus;
import com.android.internal.telephony.MccTable;
import com.android.internal.telephony.Phone;
import com.android.internal.telephony.RestrictedState;
@@ -645,8 +646,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
                    String opNames[] = (String[])ar.result;

                    if (opNames != null && opNames.length >= 3) {
                        newSS.setOperatorName (
                                opNames[0], opNames[1], opNames[2]);
                         newSS.setOperatorName (opNames[0], opNames[1], opNames[2]);
                    }
                break;

@@ -858,12 +858,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
            phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_NUMERIC, operatorNumeric);

            if (operatorNumeric == null) {
                if (DBG) {
                    log("pollStateDone: operatorNumeric=" + operatorNumeric +
                            " prevOperatorNumeric=" + prevOperatorNumeric +
                            " mNeedFixZone=" + mNeedFixZone +
                            " clear PROPERTY_OPERATOR_ISO_COUNTRY");
                }
                if (DBG) log("operatorNumeric is null");
                phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
                mGotCountryCode = false;
                mNitzUpdatedTime = false;
@@ -877,12 +872,6 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
                } catch ( StringIndexOutOfBoundsException ex) {
                    loge("pollStateDone: countryCodeForMcc error" + ex);
                }
                if (DBG) {
                    log("pollStateDone: operatorNumeric=" + operatorNumeric +
                            " prevOperatorNumeric=" + prevOperatorNumeric +
                            " mNeedFixZone=" + mNeedFixZone +
                            " mcc=" + mcc + " iso-cc=" + iso);
                }

                phone.setSystemProperty(TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, iso);
                mGotCountryCode = true;
@@ -916,9 +905,8 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
                    }
                }

                // Fix the time zone If the operator changed or we need to fix it because
                // when the NITZ time came in we didn't know the country code.
                if ( ! operatorNumeric.equals(prevOperatorNumeric) || mNeedFixZone) {
                if (isTimeZoneFixNeeded(phone, operatorNumeric, prevOperatorNumeric,
                        mNeedFixZone)) {
                    // If the offset is (0, false) and the timezone property
                    // is set, use the timezone property rather than
                    // GMT.