Merge "Migrate telephony code away from Time" am: b8bdc72174

am: ae2f34462a

Change-Id: I83631d058eab50374e9f4a7a8d4fc9d1453f285d
This commit is contained in:
Neil Fuller
2019-06-25 02:17:11 -07:00
committed by android-build-merger
4 changed files with 57 additions and 29 deletions

View File

@@ -18,10 +18,11 @@ package android.telephony;
import android.os.Parcel; import android.os.Parcel;
import android.os.Parcelable; import android.os.Parcelable;
import android.text.format.Time;
import com.android.internal.telephony.uicc.IccUtils; import com.android.internal.telephony.uicc.IccUtils;
import java.time.LocalDateTime;
import java.time.ZoneOffset;
import java.util.Arrays; import java.util.Arrays;
/** /**
@@ -165,19 +166,21 @@ public class SmsCbEtwsInfo implements Parcelable {
int timezoneOffset = IccUtils.gsmBcdByteToInt((byte) (tzByte & (~0x08))); int timezoneOffset = IccUtils.gsmBcdByteToInt((byte) (tzByte & (~0x08)));
timezoneOffset = ((tzByte & 0x08) == 0) ? timezoneOffset : -timezoneOffset; 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. long epochSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC) - timeZoneOffsetSeconds;
time.year = year + 2000; // Convert to milliseconds, ignore overflow.
time.month = month - 1; return epochSeconds * 1000;
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;
} }
/** /**

View File

@@ -20,7 +20,6 @@ import android.content.res.Resources;
import android.telephony.SmsCbCmasInfo; import android.telephony.SmsCbCmasInfo;
import android.telephony.cdma.CdmaSmsCbProgramData; import android.telephony.cdma.CdmaSmsCbProgramData;
import android.telephony.cdma.CdmaSmsCbProgramResults; import android.telephony.cdma.CdmaSmsCbProgramResults;
import android.text.format.Time;
import android.telephony.Rlog; import android.telephony.Rlog;
import com.android.internal.telephony.GsmAlphabet; 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.BitwiseInputStream;
import com.android.internal.util.BitwiseOutputStream; 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.ArrayList;
import java.util.TimeZone;
/** /**
* An object to encode and decode CDMA SMS bearer data. * 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 * 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() { 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) { public static TimeStamp fromByteArray(byte[] data) {
@@ -258,6 +272,14 @@ public final class BearerData {
return ts; 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 @Override
public String toString() { public String toString() {
StringBuilder builder = new StringBuilder(); StringBuilder builder = new StringBuilder();

View File

@@ -718,7 +718,7 @@ public class SmsMessage extends SmsMessageBase {
} }
if (mBearerData.msgCenterTimeStamp != null) { if (mBearerData.msgCenterTimeStamp != null) {
mScTimeMillis = mBearerData.msgCenterTimeStamp.toMillis(true); mScTimeMillis = mBearerData.msgCenterTimeStamp.toMillis();
} }
if (VDBG) Rlog.d(LOG_TAG, "SMS SC timestamp: " + mScTimeMillis); if (VDBG) Rlog.d(LOG_TAG, "SMS SC timestamp: " + mScTimeMillis);

View File

@@ -17,7 +17,6 @@
package com.android.internal.telephony.gsm; package com.android.internal.telephony.gsm;
import android.telephony.PhoneNumberUtils; import android.telephony.PhoneNumberUtils;
import android.text.format.Time;
import android.telephony.Rlog; import android.telephony.Rlog;
import android.content.res.Resources; import android.content.res.Resources;
import android.text.TextUtils; import android.text.TextUtils;
@@ -33,6 +32,8 @@ import com.android.internal.telephony.Sms7BitEncodingTranslator;
import java.io.ByteArrayOutputStream; import java.io.ByteArrayOutputStream;
import java.io.UnsupportedEncodingException; import java.io.UnsupportedEncodingException;
import java.text.ParseException; 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.MessageClass;
import static com.android.internal.telephony.SmsConstants.ENCODING_UNKNOWN; 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))); int timezoneOffset = IccUtils.gsmBcdByteToInt((byte) (tzByte & (~0x08)));
timezoneOffset = ((tzByte & 0x08) == 0) ? timezoneOffset : -timezoneOffset; timezoneOffset = ((tzByte & 0x08) == 0) ? timezoneOffset : -timezoneOffset;
// timezoneOffset is in quarter hours.
Time time = new Time(Time.TIMEZONE_UTC); int timeZoneOffsetSeconds = timezoneOffset * 15 * 60;
// It's 2006. Should I really support years < 2000? // It's 2006. Should I really support years < 2000?
time.year = year >= 90 ? year + 1900 : year + 2000; int fullYear = year >= 90 ? year + 1900 : year + 2000;
time.month = month - 1; LocalDateTime localDateTime = LocalDateTime.of(
time.monthDay = day; fullYear,
time.hour = hour; month /* 1-12 */,
time.minute = minute; day,
time.second = second; hour,
minute,
// Timezone offset is in quarter hours. second);
return time.toMillis(true) - (timezoneOffset * 15 * 60 * 1000); long epochSeconds = localDateTime.toEpochSecond(ZoneOffset.UTC) - timeZoneOffsetSeconds;
// Convert to milliseconds.
return epochSeconds * 1000;
} }
/** /**