Skip to content

Commit 45131d0

Browse files
John WangAndroid (Google) Code Review
authored andcommitted
Merge "Only reset time from NITZ in zone fix." into jb-dev
2 parents dabf4e4 + df7bbfd commit 45131d0

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)