@@ -111,7 +111,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
111111 * are in. Keep the time zone information from the NITZ string so
112112 * we can fix the time zone once know the country.
113113 */
114- private boolean mNeedFixZone = false ;
114+ private boolean mNeedFixZoneAfterNitz = false ;
115115 private int mZoneOffset ;
116116 private boolean mZoneDst ;
117117 private long mZoneTime ;
@@ -906,7 +906,7 @@ private void pollStateDone() {
906906 }
907907
908908 if (shouldFixTimeZoneNow (phone , operatorNumeric , prevOperatorNumeric ,
909- mNeedFixZone )) {
909+ mNeedFixZoneAfterNitz )) {
910910 // If the offset is (0, false) and the timezone property
911911 // is set, use the timezone property rather than
912912 // GMT.
@@ -917,25 +917,35 @@ private void pollStateDone() {
917917 " iso-cc='" + iso +
918918 "' iso-cc-idx=" + Arrays .binarySearch (GMT_COUNTRY_CODES , iso ));
919919 }
920+
921+ // "(mZoneOffset == 0) && (mZoneDst == false) &&
922+ // (Arrays.binarySearch(GMT_COUNTRY_CODES, iso) < 0)"
923+ // means that we received a NITZ string telling
924+ // it is in GMT+0 w/ DST time zone
925+ // BUT iso tells is NOT, e.g, a wrong NITZ reporting
926+ // local time w/ 0 offset.
920927 if ((mZoneOffset == 0 ) && (mZoneDst == false ) &&
921928 (zoneName != null ) && (zoneName .length () > 0 ) &&
922929 (Arrays .binarySearch (GMT_COUNTRY_CODES , iso ) < 0 )) {
923930 zone = TimeZone .getDefault ();
924- // For NITZ string without timezone,
925- // need adjust time to reflect default timezone setting
926- long ctm = System .currentTimeMillis ();
927- long tzOffset = zone .getOffset (ctm );
928- if (DBG ) {
929- log ("pollStateDone: tzOffset=" + tzOffset + " ltod=" +
931+ if (mNeedFixZoneAfterNitz ) {
932+ // For wrong NITZ reporting local time w/ 0 offset,
933+ // need adjust time to reflect default timezone setting
934+ long ctm = System .currentTimeMillis ();
935+ long tzOffset = zone .getOffset (ctm );
936+ if (DBG ) {
937+ log ("pollStateDone: tzOffset=" + tzOffset + " ltod=" +
930938 TimeUtils .logTimeOfDay (ctm ));
931- }
932- if (getAutoTime ()) {
933- long adj = ctm - tzOffset ;
934- if (DBG ) log ("pollStateDone: adj ltod=" + TimeUtils .logTimeOfDay (adj ));
935- setAndBroadcastNetworkSetTime (adj );
936- } else {
937- // Adjust the saved NITZ time to account for tzOffset.
938- mSavedTime = mSavedTime - tzOffset ;
939+ }
940+ if (getAutoTime ()) {
941+ long adj = ctm - tzOffset ;
942+ if (DBG ) log ("pollStateDone: adj ltod=" +
943+ TimeUtils .logTimeOfDay (adj ));
944+ setAndBroadcastNetworkSetTime (adj );
945+ } else {
946+ // Adjust the saved NITZ time to account for tzOffset.
947+ mSavedTime = mSavedTime - tzOffset ;
948+ }
939949 }
940950 if (DBG ) log ("pollStateDone: using default TimeZone" );
941951 } else if (iso .equals ("" )){
@@ -948,7 +958,7 @@ private void pollStateDone() {
948958 if (DBG ) log ("pollStateDone: using getTimeZone(off, dst, time, iso)" );
949959 }
950960
951- mNeedFixZone = false ;
961+ mNeedFixZoneAfterNitz = false ;
952962
953963 if (zone != null ) {
954964 log ("pollStateDone: zone != null zone.getID=" + zone .getID ());
@@ -1440,7 +1450,7 @@ private void setTimeFromNITZString (String nitz, long nitzReceiveTime) {
14401450 // so we don't know how to identify the DST rules yet. Save
14411451 // the information and hope to fix it up later.
14421452
1443- mNeedFixZone = true ;
1453+ mNeedFixZoneAfterNitz = true ;
14441454 mZoneOffset = tzOffset ;
14451455 mZoneDst = dst != 0 ;
14461456 mZoneTime = c .getTimeInMillis ();
@@ -1696,7 +1706,7 @@ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
16961706 pw .println (" mGsmRoaming=" + mGsmRoaming );
16971707 pw .println (" mDataRoaming=" + mDataRoaming );
16981708 pw .println (" mEmergencyOnly=" + mEmergencyOnly );
1699- pw .println (" mNeedFixZone =" + mNeedFixZone );
1709+ pw .println (" mNeedFixZoneAfterNitz =" + mNeedFixZoneAfterNitz );
17001710 pw .println (" mZoneOffset=" + mZoneOffset );
17011711 pw .println (" mZoneDst=" + mZoneDst );
17021712 pw .println (" mZoneTime=" + mZoneTime );
0 commit comments