From f976cf25f96c470a004b591f8bc69b5323a94de2 Mon Sep 17 00:00:00 2001 From: Naveen Kalla Date: Tue, 7 Jun 2011 11:29:27 -0700 Subject: Add timezone to the terminal response for provide local information command If timezone is sent in the NITZ message it needs to be part of the terminal response sent to the provide local information command for Date and time Setting. This is as per TS 31.111 section 6.4.15/ETSI TS 102 223 and 3GPP spec 22.042. Change-Id: I3516911223bd5655dbe8189bba307f0765c63fa1 --- .../internal/telephony/cat/ResponseData.java | 66 +++++++++++++++------- 1 file changed, 45 insertions(+), 21 deletions(-) diff --git a/telephony/java/com/android/internal/telephony/cat/ResponseData.java b/telephony/java/com/android/internal/telephony/cat/ResponseData.java index 55a2b63bea09..1157c1ae3a01 100644 --- a/telephony/java/com/android/internal/telephony/cat/ResponseData.java +++ b/telephony/java/com/android/internal/telephony/cat/ResponseData.java @@ -19,6 +19,10 @@ package com.android.internal.telephony.cat; import com.android.internal.telephony.EncodeException; import com.android.internal.telephony.GsmAlphabet; import java.util.Calendar; +import java.util.TimeZone; +import android.os.SystemProperties; +import android.text.TextUtils; + import com.android.internal.telephony.cat.AppInterface.CommandType; import java.io.ByteArrayOutputStream; @@ -209,7 +213,6 @@ class DTTZResponseData extends ResponseData { buf.write(tag); // tag byte[] data = new byte[8]; - byte btmp; // temp variable data[0] = 0x07; // Write length of DTTZ data @@ -217,41 +220,62 @@ class DTTZResponseData extends ResponseData { calendar = Calendar.getInstance(); } // Fill year byte - btmp = (byte) (calendar.get(java.util.Calendar.YEAR) % 100); - data[1] = (byte) (btmp / 10); - data[1] += (byte) ((btmp % 10) << 4); + data[1] = byteToBCD(calendar.get(java.util.Calendar.YEAR) % 100); // Fill month byte - btmp = (byte) (calendar.get(java.util.Calendar.MONTH) + 1); - data[2] = (byte) (btmp / 10); - data[2] += (byte) ((btmp % 10) << 4); + data[2] = byteToBCD(calendar.get(java.util.Calendar.MONTH) + 1); // Fill day byte - btmp = (byte) (calendar.get(java.util.Calendar.DATE)); - data[3] = (byte) (btmp / 10); - data[3] += (byte) ((btmp % 10) << 4); + data[3] = byteToBCD(calendar.get(java.util.Calendar.DATE)); // Fill hour byte - btmp = (byte) (calendar.get(java.util.Calendar.HOUR_OF_DAY)); - data[4] = (byte) (btmp / 10); - data[4] += (byte) ((btmp % 10) << 4); + data[4] = byteToBCD(calendar.get(java.util.Calendar.HOUR_OF_DAY)); // Fill minute byte - btmp = (byte) (calendar.get(java.util.Calendar.MINUTE)); - data[5] = (byte) (btmp / 10); - data[5] += (byte) ((btmp % 10) << 4); + data[5] = byteToBCD(calendar.get(java.util.Calendar.MINUTE)); // Fill second byte - btmp = (byte) (calendar.get(java.util.Calendar.SECOND)); - data[6] = (byte) (btmp / 10); - data[6] += (byte) ((btmp % 10) << 4); + data[6] = byteToBCD(calendar.get(java.util.Calendar.SECOND)); - // No time zone info - data[7] = (byte) 0xFF; + String tz = SystemProperties.get("persist.sys.timezone", ""); + if (TextUtils.isEmpty(tz)) { + data[7] = (byte) 0xFF; // set FF in terminal response + } else { + TimeZone zone = TimeZone.getTimeZone(tz); + int zoneOffset = zone.getRawOffset() + zone.getDSTSavings(); + data[7] = getTZOffSetByte(zoneOffset); + } for (byte b : data) { buf.write(b); } } + + private byte byteToBCD(int value) { + if (value < 0 && value > 99) { + CatLog.d(this, "Err: byteToBCD conversion Value is " + value + + " Value has to be between 0 and 99"); + return 0; + } + + return (byte) ((value / 10) | ((value % 10) << 4)); + } + + private byte getTZOffSetByte(long offSetVal) { + boolean isNegative = (offSetVal < 0); + + /* + * The 'offSetVal' is in milliseconds. Convert it to hours and compute + * offset While sending T.R to UICC, offset is expressed is 'quarters of + * hours' + */ + + long tzOffset = offSetVal / (15 * 60 * 1000); + tzOffset = (isNegative ? -1 : 1) * tzOffset; + byte bcdVal = byteToBCD((int) tzOffset); + // For negative offsets, put '1' in the msb + return isNegative ? (bcdVal |= 0x08) : bcdVal; + } + } -- cgit v1.2.3-59-g8ed1b