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
This commit is contained in:
committed by
Wink Saville
parent
df7332aad5
commit
f976cf25f9
@@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user