summaryrefslogtreecommitdiffstats
path: root/telephony
diff options
context:
space:
mode:
authorJohn Wang <johnwang@google.com>2012-05-18 11:11:41 -0700
committerJohn Wang <johnwang@google.com>2012-05-18 17:36:31 -0700
commitdf7bbfd7c28549742443bbf91200871c09e89299 (patch)
treece01949e1037c7dde6cc45994a474c379aca3dbd /telephony
parent43a760ba84a5357bae792a33ad4a0e946f02679c (diff)
downloadframeworks_base-df7bbfd7c28549742443bbf91200871c09e89299.zip
frameworks_base-df7bbfd7c28549742443bbf91200871c09e89299.tar.gz
frameworks_base-df7bbfd7c28549742443bbf91200871c09e89299.tar.bz2
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
Diffstat (limited to 'telephony')
-rwxr-xr-xtelephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java29
-rw-r--r--telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java48
2 files changed, 45 insertions, 32 deletions
diff --git a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
index e4287c0..9b4d172 100755
--- a/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/cdma/CdmaServiceStateTracker.java
@@ -878,19 +878,22 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
// For NITZ string without time zone,
// need adjust time to reflect default time zone setting
zone = TimeZone.getDefault();
- long ctm = System.currentTimeMillis();
- long tzOffset = zone.getOffset(ctm);
- if (DBG) {
- log("fixTimeZone: tzOffset=" + tzOffset + " ltod=" + TimeUtils.logTimeOfDay(ctm));
- }
- if (getAutoTime()) {
- long adj = ctm - tzOffset;
- if (DBG) log("fixTimeZone: adj ltod=" + TimeUtils.logTimeOfDay(adj));
- setAndBroadcastNetworkSetTime(adj);
- } else {
- // Adjust the saved NITZ time to account for tzOffset.
- mSavedTime = mSavedTime - tzOffset;
- if (DBG) log("fixTimeZone: adj mSavedTime=" + mSavedTime);
+ if (mNeedFixZone) {
+ long ctm = System.currentTimeMillis();
+ long tzOffset = zone.getOffset(ctm);
+ if (DBG) {
+ log("fixTimeZone: tzOffset=" + tzOffset +
+ " ltod=" + TimeUtils.logTimeOfDay(ctm));
+ }
+ if (getAutoTime()) {
+ long adj = ctm - tzOffset;
+ if (DBG) log("fixTimeZone: adj ltod=" + TimeUtils.logTimeOfDay(adj));
+ setAndBroadcastNetworkSetTime(adj);
+ } else {
+ // Adjust the saved NITZ time to account for tzOffset.
+ mSavedTime = mSavedTime - tzOffset;
+ if (DBG) log("fixTimeZone: adj mSavedTime=" + mSavedTime);
+ }
}
if (DBG) log("fixTimeZone: using default TimeZone");
} else if (isoCountryCode.equals("")) {
diff --git a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
index 1aa17c7..b7569da 100644
--- a/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
+++ b/telephony/java/com/android/internal/telephony/gsm/GsmServiceStateTracker.java
@@ -111,7 +111,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
* are in. Keep the time zone information from the NITZ string so
* we can fix the time zone once know the country.
*/
- private boolean mNeedFixZone = false;
+ private boolean mNeedFixZoneAfterNitz = false;
private int mZoneOffset;
private boolean mZoneDst;
private long mZoneTime;
@@ -906,7 +906,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
}
if (shouldFixTimeZoneNow(phone, operatorNumeric, prevOperatorNumeric,
- mNeedFixZone)) {
+ mNeedFixZoneAfterNitz)) {
// If the offset is (0, false) and the timezone property
// is set, use the timezone property rather than
// GMT.
@@ -917,25 +917,35 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
" iso-cc='" + iso +
"' iso-cc-idx=" + Arrays.binarySearch(GMT_COUNTRY_CODES, iso));
}
+
+ // "(mZoneOffset == 0) && (mZoneDst == false) &&
+ // (Arrays.binarySearch(GMT_COUNTRY_CODES, iso) < 0)"
+ // means that we received a NITZ string telling
+ // it is in GMT+0 w/ DST time zone
+ // BUT iso tells is NOT, e.g, a wrong NITZ reporting
+ // local time w/ 0 offset.
if ((mZoneOffset == 0) && (mZoneDst == false) &&
(zoneName != null) && (zoneName.length() > 0) &&
(Arrays.binarySearch(GMT_COUNTRY_CODES, iso) < 0)) {
zone = TimeZone.getDefault();
- // For NITZ string without timezone,
- // need adjust time to reflect default timezone setting
- long ctm = System.currentTimeMillis();
- long tzOffset = zone.getOffset(ctm);
- if (DBG) {
- log("pollStateDone: tzOffset=" + tzOffset + " ltod=" +
+ if (mNeedFixZoneAfterNitz) {
+ // For wrong NITZ reporting local time w/ 0 offset,
+ // need adjust time to reflect default timezone setting
+ long ctm = System.currentTimeMillis();
+ long tzOffset = zone.getOffset(ctm);
+ if (DBG) {
+ log("pollStateDone: tzOffset=" + tzOffset + " ltod=" +
TimeUtils.logTimeOfDay(ctm));
- }
- if (getAutoTime()) {
- long adj = ctm - tzOffset;
- if (DBG) log("pollStateDone: adj ltod=" + TimeUtils.logTimeOfDay(adj));
- setAndBroadcastNetworkSetTime(adj);
- } else {
- // Adjust the saved NITZ time to account for tzOffset.
- mSavedTime = mSavedTime - tzOffset;
+ }
+ if (getAutoTime()) {
+ long adj = ctm - tzOffset;
+ if (DBG) log("pollStateDone: adj ltod=" +
+ TimeUtils.logTimeOfDay(adj));
+ setAndBroadcastNetworkSetTime(adj);
+ } else {
+ // Adjust the saved NITZ time to account for tzOffset.
+ mSavedTime = mSavedTime - tzOffset;
+ }
}
if (DBG) log("pollStateDone: using default TimeZone");
} else if (iso.equals("")){
@@ -948,7 +958,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
if (DBG) log("pollStateDone: using getTimeZone(off, dst, time, iso)");
}
- mNeedFixZone = false;
+ mNeedFixZoneAfterNitz = false;
if (zone != null) {
log("pollStateDone: zone != null zone.getID=" + zone.getID());
@@ -1440,7 +1450,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
// so we don't know how to identify the DST rules yet. Save
// the information and hope to fix it up later.
- mNeedFixZone = true;
+ mNeedFixZoneAfterNitz = true;
mZoneOffset = tzOffset;
mZoneDst = dst != 0;
mZoneTime = c.getTimeInMillis();
@@ -1696,7 +1706,7 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
pw.println(" mGsmRoaming=" + mGsmRoaming);
pw.println(" mDataRoaming=" + mDataRoaming);
pw.println(" mEmergencyOnly=" + mEmergencyOnly);
- pw.println(" mNeedFixZone=" + mNeedFixZone);
+ pw.println(" mNeedFixZoneAfterNitz=" + mNeedFixZoneAfterNitz);
pw.println(" mZoneOffset=" + mZoneOffset);
pw.println(" mZoneDst=" + mZoneDst);
pw.println(" mZoneTime=" + mZoneTime);