diff options
| -rw-r--r-- | api/current.txt | 32 | ||||
| -rw-r--r-- | core/java/android/text/style/TtsSpan.java | 214 | ||||
| -rw-r--r-- | core/java/com/android/internal/widget/LockPatternUtils.java | 12 | ||||
| -rw-r--r-- | core/res/res/values/attrs.xml | 15 | ||||
| -rw-r--r-- | packages/Keyguard/src/com/android/keyguard/KeyguardStatusView.java | 17 |
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(); |
