Merge "Migrate telephony code away from Time"
am: b8bdc72174
Change-Id: Ic597ff0fa3317166b94b42c35e17e609c5f9bfe0
This commit is contained in:
@@ -18,10 +18,11 @@ package android.telephony;
|
||||
|
||||
import android.os.Parcel;
|
||||
import android.os.Parcelable;
|
||||
import android.text.format.Time;
|
||||
|
||||
import com.android.internal.telephony.uicc.IccUtils;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
@@ -165,19 +166,21 @@ public class SmsCbEtwsInfo implements Parcelable {
|
||||
int timezoneOffset = IccUtils.gsmBcdByteToInt((byte) (tzByte & (~0x08)));
|
||||
|
||||
timezoneOffset = ((tzByte & 0x08) == 0) ? timezoneOffset : -timezoneOffset;
|
||||
// timezoneOffset is in quarter hours.
|
||||
int timeZoneOffsetSeconds = timezoneOffset * 15 * 60;
|
||||
|
||||
Time time = new Time(Time.TIMEZONE_UTC);
|
||||
LocalDateTime localDateTime = LocalDateTime.of(
|
||||
// We only need to support years above 2000.
|
||||
year + 2000,
|
||||
month /* 1-12 */,
|
||||
day,
|
||||
hour,
|
||||
minute,
|
||||
second);
|
||||
|
||||
// We only need to support years above 2000.
|
||||
time.year = year + 2000;
|
||||
time.month = month - 1;
|
||||
time.monthDay = day;
|
||||
time.hour = hour;
|
||||
time.minute = minute;
|
||||
time.second = second;
|
||||
|
||||
// Timezone offset is in quarter hours.
|
||||
return time.toMillis(true) - timezoneOffset * 15 * 60 * 1000;
|
||||
long epochSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC) - timeZoneOffsetSeconds;
|
||||
// Convert to milliseconds, ignore overflow.
|
||||
return epochSeconds * 1000;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -20,7 +20,6 @@ import android.content.res.Resources;
|
||||
import android.telephony.SmsCbCmasInfo;
|
||||
import android.telephony.cdma.CdmaSmsCbProgramData;
|
||||
import android.telephony.cdma.CdmaSmsCbProgramResults;
|
||||
import android.text.format.Time;
|
||||
import android.telephony.Rlog;
|
||||
|
||||
import com.android.internal.telephony.GsmAlphabet;
|
||||
@@ -32,8 +31,10 @@ import com.android.internal.telephony.uicc.IccUtils;
|
||||
import com.android.internal.util.BitwiseInputStream;
|
||||
import com.android.internal.util.BitwiseOutputStream;
|
||||
|
||||
import java.time.Instant;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.ArrayList;
|
||||
import java.util.TimeZone;
|
||||
|
||||
/**
|
||||
* An object to encode and decode CDMA SMS bearer data.
|
||||
@@ -228,10 +229,23 @@ public final class BearerData {
|
||||
/**
|
||||
* 6-byte-field, see 3GPP2 C.S0015-B, v2, 4.5.4
|
||||
*/
|
||||
public static class TimeStamp extends Time {
|
||||
public static class TimeStamp {
|
||||
|
||||
public int second;
|
||||
public int minute;
|
||||
public int hour;
|
||||
public int monthDay;
|
||||
|
||||
/** Month [0-11] */
|
||||
public int month;
|
||||
|
||||
/** Full year. For example, 1970. */
|
||||
public int year;
|
||||
|
||||
private ZoneId mZoneId;
|
||||
|
||||
public TimeStamp() {
|
||||
super(TimeZone.getDefault().getID()); // 3GPP2 timestamps use the local timezone
|
||||
mZoneId = ZoneId.systemDefault(); // 3GPP2 timestamps use the local timezone
|
||||
}
|
||||
|
||||
public static TimeStamp fromByteArray(byte[] data) {
|
||||
@@ -258,6 +272,14 @@ public final class BearerData {
|
||||
return ts;
|
||||
}
|
||||
|
||||
public long toMillis() {
|
||||
LocalDateTime localDateTime =
|
||||
LocalDateTime.of(year, month + 1, monthDay, hour, minute, second);
|
||||
Instant instant = localDateTime.toInstant(mZoneId.getRules().getOffset(localDateTime));
|
||||
return instant.toEpochMilli();
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
StringBuilder builder = new StringBuilder();
|
||||
|
||||
@@ -718,7 +718,7 @@ public class SmsMessage extends SmsMessageBase {
|
||||
}
|
||||
|
||||
if (mBearerData.msgCenterTimeStamp != null) {
|
||||
mScTimeMillis = mBearerData.msgCenterTimeStamp.toMillis(true);
|
||||
mScTimeMillis = mBearerData.msgCenterTimeStamp.toMillis();
|
||||
}
|
||||
|
||||
if (VDBG) Rlog.d(LOG_TAG, "SMS SC timestamp: " + mScTimeMillis);
|
||||
|
||||
@@ -17,7 +17,6 @@
|
||||
package com.android.internal.telephony.gsm;
|
||||
|
||||
import android.telephony.PhoneNumberUtils;
|
||||
import android.text.format.Time;
|
||||
import android.telephony.Rlog;
|
||||
import android.content.res.Resources;
|
||||
import android.text.TextUtils;
|
||||
@@ -33,6 +32,8 @@ import com.android.internal.telephony.Sms7BitEncodingTranslator;
|
||||
import java.io.ByteArrayOutputStream;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.text.ParseException;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneOffset;
|
||||
|
||||
import static com.android.internal.telephony.SmsConstants.MessageClass;
|
||||
import static com.android.internal.telephony.SmsConstants.ENCODING_UNKNOWN;
|
||||
@@ -722,19 +723,21 @@ public class SmsMessage extends SmsMessageBase {
|
||||
int timezoneOffset = IccUtils.gsmBcdByteToInt((byte) (tzByte & (~0x08)));
|
||||
|
||||
timezoneOffset = ((tzByte & 0x08) == 0) ? timezoneOffset : -timezoneOffset;
|
||||
|
||||
Time time = new Time(Time.TIMEZONE_UTC);
|
||||
// timezoneOffset is in quarter hours.
|
||||
int timeZoneOffsetSeconds = timezoneOffset * 15 * 60;
|
||||
|
||||
// It's 2006. Should I really support years < 2000?
|
||||
time.year = year >= 90 ? year + 1900 : year + 2000;
|
||||
time.month = month - 1;
|
||||
time.monthDay = day;
|
||||
time.hour = hour;
|
||||
time.minute = minute;
|
||||
time.second = second;
|
||||
|
||||
// Timezone offset is in quarter hours.
|
||||
return time.toMillis(true) - (timezoneOffset * 15 * 60 * 1000);
|
||||
int fullYear = year >= 90 ? year + 1900 : year + 2000;
|
||||
LocalDateTime localDateTime = LocalDateTime.of(
|
||||
fullYear,
|
||||
month /* 1-12 */,
|
||||
day,
|
||||
hour,
|
||||
minute,
|
||||
second);
|
||||
long epochSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC) - timeZoneOffsetSeconds;
|
||||
// Convert to milliseconds.
|
||||
return epochSeconds * 1000;
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user