Skip to content

Commit df7bbfd

Browse files
author
John Wang
committed
Only reset time from NITZ in zone fix.
When timezone property gets reset by mcc change, SST only adjusts time to reflect new timezone settings if there is NITZ string w/o timezone. bug:6465783 Change-Id: I1a27b3f371f79aa532de1c94ec5cb12285bdfdb4
1 parent 43a760b commit df7bbfd

File tree

2 files changed

+45
-32
lines changed

2 files changed

+45
-32
lines changed

telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java

Lines changed: 16 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -878,19 +878,22 @@ protected void fixTimeZone(String isoCountryCode) {
878878
// For NITZ string without time zone,
879879
// need adjust time to reflect default time zone setting
880880
zone = TimeZone.getDefault();
881-
long ctm = System.currentTimeMillis();
882-
long tzOffset = zone.getOffset(ctm);
883-
if (DBG) {
884-
log("fixTimeZone: tzOffset=" + tzOffset + " ltod=" + TimeUtils.logTimeOfDay(ctm));
885-
}
886-
if (getAutoTime()) {
887-
long adj = ctm - tzOffset;
888-
if (DBG) log("fixTimeZone: adj ltod=" + TimeUtils.logTimeOfDay(adj));
889-
setAndBroadcastNetworkSetTime(adj);
890-
} else {
891-
// Adjust the saved NITZ time to account for tzOffset.
892-
mSavedTime = mSavedTime - tzOffset;
893-
if (DBG) log("fixTimeZone: adj mSavedTime=" + mSavedTime);
881+
if (mNeedFixZone) {
882+
long ctm = System.currentTimeMillis();
883+
long tzOffset = zone.getOffset(ctm);
884+
if (DBG) {
885+
log("fixTimeZone: tzOffset=" + tzOffset +
886+
" ltod=" + TimeUtils.logTimeOfDay(ctm));
887+
}
888+
if (getAutoTime()) {
889+
long adj = ctm - tzOffset;
890+
if (DBG) log("fixTimeZone: adj ltod=" + TimeUtils.logTimeOfDay(adj));
891+
setAndBroadcastNetworkSetTime(adj);
892+
} else {
893+
// Adjust the saved NITZ time to account for tzOffset.
894+
mSavedTime = mSavedTime - tzOffset;
895+
if (DBG) log("fixTimeZone: adj mSavedTime=" + mSavedTime);
896+
}
894897
}
895898
if (DBG) log("fixTimeZone: using default TimeZone");
896899
} else if (isoCountryCode.equals("")) {

telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java

Lines changed: 29 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)