summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--api/current.txt32
-rw-r--r--core/java/android/text/style/TtsSpan.java214
-rw-r--r--core/java/com/android/internal/widget/LockPatternUtils.java12
-rw-r--r--core/res/res/values/attrs.xml15
-rw-r--r--packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java17
5 files changed, 271 insertions, 19 deletions
diff --git a/api/current.txt b/api/current.txt
index 75e7d62..d1a39e7 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -31356,7 +31356,7 @@ package android.text.style {
field public static final java.lang.String ARG_MONTH = "android.arg.month";
field public static final java.lang.String ARG_MULTIPLICITY = "android.arg.multiplicity";
field public static final java.lang.String ARG_NUMBER = "android.arg.number";
- field public static final java.lang.String ARG_NUMBER_PART = "android.arg.number_part";
+ field public static final java.lang.String ARG_NUMBER_PARTS = "android.arg.number_parts";
field public static final java.lang.String ARG_NUMERATOR = "android.arg.numerator";
field public static final java.lang.String ARG_PASSWORD = "android.arg.password";
field public static final java.lang.String ARG_PATH = "android.arg.path";
@@ -31459,6 +31459,19 @@ package android.text.style {
method public android.text.style.TtsSpan.DigitsBuilder setDigits(java.lang.String);
}
+ public static class TtsSpan.ElectronicBuilder extends android.text.style.TtsSpan.SemioticClassBuilder {
+ ctor public TtsSpan.ElectronicBuilder();
+ method public android.text.style.TtsSpan.ElectronicBuilder setDomain(java.lang.String);
+ method public android.text.style.TtsSpan.ElectronicBuilder setEmailArguments(java.lang.String, java.lang.String);
+ method public android.text.style.TtsSpan.ElectronicBuilder setFragmentId(java.lang.String);
+ method public android.text.style.TtsSpan.ElectronicBuilder setPassword(java.lang.String);
+ method public android.text.style.TtsSpan.ElectronicBuilder setPath(java.lang.String);
+ method public android.text.style.TtsSpan.ElectronicBuilder setPort(int);
+ method public android.text.style.TtsSpan.ElectronicBuilder setProtocol(java.lang.String);
+ method public android.text.style.TtsSpan.ElectronicBuilder setQueryString(java.lang.String);
+ method public android.text.style.TtsSpan.ElectronicBuilder setUsername(java.lang.String);
+ }
+
public static class TtsSpan.FractionBuilder extends android.text.style.TtsSpan.SemioticClassBuilder {
ctor public TtsSpan.FractionBuilder();
ctor public TtsSpan.FractionBuilder(long, long, long);
@@ -31484,6 +31497,15 @@ package android.text.style {
method public android.text.style.TtsSpan.MeasureBuilder setUnit(java.lang.String);
}
+ public static class TtsSpan.MoneyBuilder extends android.text.style.TtsSpan.SemioticClassBuilder {
+ ctor public TtsSpan.MoneyBuilder();
+ method public android.text.style.TtsSpan.MoneyBuilder setCurrency(java.lang.String);
+ method public android.text.style.TtsSpan.MoneyBuilder setFractionalPart(java.lang.String);
+ method public android.text.style.TtsSpan.MoneyBuilder setIntegerPart(long);
+ method public android.text.style.TtsSpan.MoneyBuilder setIntegerPart(java.lang.String);
+ method public android.text.style.TtsSpan.MoneyBuilder setQuantity(java.lang.String);
+ }
+
public static class TtsSpan.OrdinalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder {
ctor public TtsSpan.OrdinalBuilder();
ctor public TtsSpan.OrdinalBuilder(long);
@@ -31500,6 +31522,14 @@ package android.text.style {
method public C setMultiplicity(java.lang.String);
}
+ public static class TtsSpan.TelephoneBuilder extends android.text.style.TtsSpan.SemioticClassBuilder {
+ ctor public TtsSpan.TelephoneBuilder();
+ ctor public TtsSpan.TelephoneBuilder(java.lang.String);
+ method public android.text.style.TtsSpan.TelephoneBuilder setCountryCode(java.lang.String);
+ method public android.text.style.TtsSpan.TelephoneBuilder setExtension(java.lang.String);
+ method public android.text.style.TtsSpan.TelephoneBuilder setNumberParts(java.lang.String);
+ }
+
public static class TtsSpan.TextBuilder extends android.text.style.TtsSpan.SemioticClassBuilder {
ctor public TtsSpan.TextBuilder();
ctor public TtsSpan.TextBuilder(java.lang.String);
diff --git a/core/java/android/text/style/TtsSpan.java b/core/java/android/text/style/TtsSpan.java
index ce126ad..f3a48a6 100644
--- a/core/java/android/text/style/TtsSpan.java
+++ b/core/java/android/text/style/TtsSpan.java
@@ -119,7 +119,7 @@ public class TtsSpan implements ParcelableSpan {
/**
* The text associated with this span is a telephone number. The argument
- * {@link #ARG_NUMBER_PART} is required. {@link #ARG_COUNTRY_CODE} and
+ * {@link #ARG_NUMBER_PARTS} is required. {@link #ARG_COUNTRY_CODE} and
* {@link #ARG_EXTENSION} are optional.
* Also accepts the arguments {@link #ARG_GENDER},
* {@link #ARG_ANIMACY}, {@link #ARG_MULTIPLICITY} and
@@ -371,7 +371,7 @@ public class TtsSpan implements ParcelableSpan {
/**
* Argument used to specify the country code of a telephone number. Can be
- * a string of digits.
+ * a string of digits optionally prefixed with a "+".
* Can be used with {@link #TYPE_TELEPHONE}.
*/
public static final String ARG_COUNTRY_CODE = "android.arg.country_code";
@@ -382,7 +382,7 @@ public class TtsSpan implements ParcelableSpan {
* can be separated with a space, '-', '/' or '.'.
* Can be used with {@link #TYPE_TELEPHONE}.
*/
- public static final String ARG_NUMBER_PART = "android.arg.number_part";
+ public static final String ARG_NUMBER_PARTS = "android.arg.number_parts";
/**
* Argument used to specify the extension part of a telephone number. Can be
@@ -1224,6 +1224,214 @@ public class TtsSpan implements ParcelableSpan {
}
/**
+ * A builder for TtsSpans of type {@link TtsSpan #TYPE_MONEY}.
+ */
+ public static class MoneyBuilder
+ extends SemioticClassBuilder<MoneyBuilder> {
+
+ /**
+ * Creates a TtsSpan of type {@link TtsSpan#TYPE_MONEY}.
+ */
+ public MoneyBuilder() {
+ super(TtsSpan.TYPE_MONEY);
+ }
+
+ /**
+ * Convenience method that converts the number to a String and set it to
+ * the value for {@link TtsSpan#ARG_INTEGER_PART}.
+ * @param integerPart The integer part of the amount.
+ * @return This instance.
+ */
+ public MoneyBuilder setIntegerPart(long integerPart) {
+ return setIntegerPart(String.valueOf(integerPart));
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_INTEGER_PART} argument.
+ * @param integerPart A non-empty string of digits with an optional
+ * leading + or -.
+ * @return This instance.
+ */
+ public MoneyBuilder setIntegerPart(String integerPart) {
+ return setStringArgument(TtsSpan.ARG_INTEGER_PART, integerPart);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_FRACTIONAL_PART} argument.
+ * @param fractionalPart Can be a string of digits of any size.
+ * @return This instance.
+ */
+ public MoneyBuilder setFractionalPart(String fractionalPart) {
+ return setStringArgument(TtsSpan.ARG_FRACTIONAL_PART, fractionalPart);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_CURRENCY} argument.
+ * @param currency Should be a ISO4217 currency code, e.g. "USD".
+ * @return This instance.
+ */
+ public MoneyBuilder setCurrency(String currency) {
+ return setStringArgument(TtsSpan.ARG_CURRENCY, currency);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_QUANTITY} argument.
+ * @param quantity
+ * @return This instance.
+ */
+ public MoneyBuilder setQuantity(String quantity) {
+ return setStringArgument(TtsSpan.ARG_QUANTITY, quantity);
+ }
+ }
+
+ /**
+ * A builder for TtsSpans of type {@link TtsSpan #TYPE_TELEPHONE}.
+ */
+ public static class TelephoneBuilder
+ extends SemioticClassBuilder<TelephoneBuilder> {
+
+ /**
+ * Creates a TtsSpan of type {@link TtsSpan#TYPE_TELEPHONE}.
+ */
+ public TelephoneBuilder() {
+ super(TtsSpan.TYPE_TELEPHONE);
+ }
+
+ /**
+ * Creates a TtsSpan of type {@link TtsSpan#TYPE_TELEPHONE} and sets the
+ * {@link TtsSpan#ARG_NUMBER_PARTS} argument.
+ */
+ public TelephoneBuilder(String numberParts) {
+ this();
+ setNumberParts(numberParts);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_COUNTRY_CODE} argument.
+ * @param countryCode The country code can be a series of digits
+ * optionally prefixed with a "+".
+ * @return This instance.
+ */
+ public TelephoneBuilder setCountryCode(String countryCode) {
+ return setStringArgument(TtsSpan.ARG_COUNTRY_CODE, countryCode);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_NUMBER_PARTS} argument.
+ * @param numberParts The main telephone number. Can be a series of
+ * digits and letters separated by spaces, "/", "-" or ".".
+ * @return This instance.
+ */
+ public TelephoneBuilder setNumberParts(String numberParts) {
+ return setStringArgument(TtsSpan.ARG_NUMBER_PARTS, numberParts);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_EXTENSION} argument.
+ * @param extension The extension can be a series of digits.
+ * @return This instance.
+ */
+ public TelephoneBuilder setExtension(String extension) {
+ return setStringArgument(TtsSpan.ARG_EXTENSION, extension);
+ }
+ }
+
+ /**
+ * A builder for TtsSpans of type {@link TtsSpan #TYPE_ELECTRONIC}.
+ */
+ public static class ElectronicBuilder
+ extends SemioticClassBuilder<ElectronicBuilder> {
+
+ /**
+ * Creates a TtsSpan of type {@link TtsSpan#TYPE_ELECTRONIC}.
+ */
+ public ElectronicBuilder() {
+ super(TtsSpan.TYPE_ELECTRONIC);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_USERNAME} and {@link TtsSpan#ARG_DOMAIN}
+ * arguments, representing an email address.
+ * @param username The part before the @ in the email address.
+ * @param domain The part after the @ in the email address.
+ * @return This instance.
+ */
+ public ElectronicBuilder setEmailArguments(String username,
+ String domain) {
+ return setDomain(domain).setUsername(username);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_PROTOCOL} argument.
+ * @param protocol The protocol of the URI. Examples are "http" and
+ * "ftp".
+ * @return This instance.
+ */
+ public ElectronicBuilder setProtocol(String protocol) {
+ return setStringArgument(TtsSpan.ARG_PROTOCOL, protocol);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_USERNAME} argument.
+ * @return This instance.
+ */
+ public ElectronicBuilder setUsername(String username) {
+ return setStringArgument(TtsSpan.ARG_USERNAME, username);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_PASSWORD} argument.
+ * @return This instance.
+ */
+ public ElectronicBuilder setPassword(String password) {
+ return setStringArgument(TtsSpan.ARG_PASSWORD, password);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_DOMAIN} argument.
+ * @param domain The domain, for example "source.android.com".
+ * @return This instance.
+ */
+ public ElectronicBuilder setDomain(String domain) {
+ return setStringArgument(TtsSpan.ARG_DOMAIN, domain);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_PORT} argument.
+ * @return This instance.
+ */
+ public ElectronicBuilder setPort(int port) {
+ return setIntArgument(TtsSpan.ARG_PORT, port);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_PATH} argument.
+ * @param path For example "source/index.html".
+ * @return This instance.
+ */
+ public ElectronicBuilder setPath(String path) {
+ return setStringArgument(TtsSpan.ARG_PATH, path);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_QUERY_STRING} argument.
+ * @param queryString For example "arg=value&argtwo=value".
+ * @return This instance.
+ */
+ public ElectronicBuilder setQueryString(String queryString) {
+ return setStringArgument(TtsSpan.ARG_QUERY_STRING, queryString);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_FRAGMENT_ID} argument.
+ * @return This instance.
+ */
+ public ElectronicBuilder setFragmentId(String fragmentId) {
+ return setStringArgument(TtsSpan.ARG_FRAGMENT_ID, fragmentId);
+ }
+ }
+
+ /**
* A builder for TtsSpans of type {@link TtsSpan #TYPE_DIGITS}.
*/
public static class DigitsBuilder
diff --git a/core/java/com/android/internal/widget/LockPatternUtils.java b/core/java/com/android/internal/widget/LockPatternUtils.java
index cc481e1..d60f787 100644
--- a/core/java/com/android/internal/widget/LockPatternUtils.java
+++ b/core/java/com/android/internal/widget/LockPatternUtils.java
@@ -18,6 +18,8 @@ package com.android.internal.widget;
import android.Manifest;
import android.app.ActivityManagerNative;
+import android.app.AlarmClockInfo;
+import android.app.AlarmManager;
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
import android.appwidget.AppWidgetManager;
@@ -1170,13 +1172,9 @@ public class LockPatternUtils {
* @return A formatted string of the next alarm (for showing on the lock screen),
* or null if there is no next alarm.
*/
- public String getNextAlarm() {
- String nextAlarm = Settings.System.getStringForUser(mContentResolver,
- Settings.System.NEXT_ALARM_FORMATTED, UserHandle.USER_CURRENT);
- if (nextAlarm == null || TextUtils.isEmpty(nextAlarm)) {
- return null;
- }
- return nextAlarm;
+ public AlarmClockInfo getNextAlarm() {
+ AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
+ return alarmManager.getNextAlarmClock(UserHandle.USER_CURRENT);
}
private boolean getBoolean(String secureSettingKey, boolean defaultValue, int userId) {
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index f57d61d..2c5cfe1 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -7197,12 +7197,17 @@
<!-- Virtual input (default) -->
<enum name="virtual" value="0" />
- <!-- HDMI -->
- <enum name="hdmi" value="1" />
- <!-- Built-in tuner -->
+
+ <enum name="otherHardware" value="1" />
<enum name="tuner" value="2" />
- <!-- Pass-through -->
- <enum name="passthrough" value="3" />
+ <enum name="composite" value="3" />
+ <enum name="svideo" value="4" />
+ <enum name="scart" value="5" />
+ <enum name="component" value="6" />
+ <enum name="vga" value="7" />
+ <enum name="dvi" value="8" />
+ <enum name="hdmi" value="9" />
+ <enum name="displayPort" value="10" />
</attr>
</declare-styleable>
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
index 150ab74..02a441b 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java
@@ -16,9 +16,11 @@
package com.android.keyguard;
+import android.app.AlarmClockInfo;
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.Resources;
+import android.provider.AlarmClock;
import android.text.TextUtils;
import android.text.format.DateFormat;
import android.util.AttributeSet;
@@ -121,15 +123,24 @@ public class KeyguardStatusView extends GridLayout {
void refreshAlarmStatus() {
// Update Alarm status
- String nextAlarm = mLockPatternUtils.getNextAlarm();
- if (!TextUtils.isEmpty(nextAlarm)) {
- mAlarmStatusView.setText(nextAlarm);
+ AlarmClockInfo nextAlarm = mLockPatternUtils.getNextAlarm();
+ if (nextAlarm != null) {
+ mAlarmStatusView.setText(formatNextAlarm(nextAlarm));
mAlarmStatusView.setVisibility(View.VISIBLE);
} else {
mAlarmStatusView.setVisibility(View.GONE);
}
}
+ String formatNextAlarm(AlarmClockInfo info) {
+ if (info == null) {
+ return "";
+ }
+ String skeleton = DateFormat.is24HourFormat(mContext) ? "EHm" : "Ehma";
+ String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
+ return DateFormat.format(pattern, info.getTriggerTime()).toString();
+ }
+
private void updateOwnerInfo() {
if (mOwnerInfo == null) return;
String ownerInfo = getOwnerInfo();