am 75fb30c4: am 9f831baf: am 467bc0ef: Merge "Keep track of user_setup_complete in DPMS" into lmp-dev
* commit '75fb30c47d9b13d6135e00d3b9c98b5b3e94459f':
Keep track of user_setup_complete in DPMS
diff --git a/api/current.txt b/api/current.txt
index 6e9a157..f9af15d 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -7533,6 +7533,7 @@
field public static final java.lang.String ACTION_CHOOSER = "android.intent.action.CHOOSER";
field public static final java.lang.String ACTION_CLOSE_SYSTEM_DIALOGS = "android.intent.action.CLOSE_SYSTEM_DIALOGS";
field public static final java.lang.String ACTION_CONFIGURATION_CHANGED = "android.intent.action.CONFIGURATION_CHANGED";
+ field public static final java.lang.String ACTION_CONFIRM_DEVICE_CREDENTIAL = "android.intent.action.CONFIRM_DEVICE_CREDENTIAL";
field public static final java.lang.String ACTION_CREATE_DOCUMENT = "android.intent.action.CREATE_DOCUMENT";
field public static final java.lang.String ACTION_CREATE_SHORTCUT = "android.intent.action.CREATE_SHORTCUT";
field public static final java.lang.String ACTION_DATE_CHANGED = "android.intent.action.DATE_CHANGED";
@@ -7675,6 +7676,7 @@
field public static final java.lang.String EXTRA_CHANGED_PACKAGE_LIST = "android.intent.extra.changed_package_list";
field public static final java.lang.String EXTRA_CHANGED_UID_LIST = "android.intent.extra.changed_uid_list";
field public static final java.lang.String EXTRA_DATA_REMOVED = "android.intent.extra.DATA_REMOVED";
+ field public static final java.lang.String EXTRA_DETAILS = "android.intent.extra.DETAILS";
field public static final java.lang.String EXTRA_DOCK_STATE = "android.intent.extra.DOCK_STATE";
field public static final int EXTRA_DOCK_STATE_CAR = 2; // 0x2
field public static final int EXTRA_DOCK_STATE_DESK = 1; // 0x1
@@ -25093,11 +25095,13 @@
field public static final java.lang.String ACTION_SOUND_SETTINGS = "android.settings.SOUND_SETTINGS";
field public static final java.lang.String ACTION_SYNC_SETTINGS = "android.settings.SYNC_SETTINGS";
field public static final java.lang.String ACTION_USER_DICTIONARY_SETTINGS = "android.settings.USER_DICTIONARY_SETTINGS";
+ field public static final java.lang.String ACTION_VOICE_CONTROL_AIRPLANE_MODE = "android.settings.VOICE_CONTROL_AIRPLANE_MODE";
field public static final java.lang.String ACTION_WIFI_IP_SETTINGS = "android.settings.WIFI_IP_SETTINGS";
field public static final java.lang.String ACTION_WIFI_SETTINGS = "android.settings.WIFI_SETTINGS";
field public static final java.lang.String ACTION_WIRELESS_SETTINGS = "android.settings.WIRELESS_SETTINGS";
field public static final java.lang.String AUTHORITY = "settings";
field public static final java.lang.String EXTRA_ACCOUNT_TYPES = "account_types";
+ field public static final java.lang.String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
field public static final java.lang.String EXTRA_AUTHORITIES = "authorities";
field public static final java.lang.String EXTRA_INPUT_METHOD_ID = "input_method_id";
}
@@ -31164,6 +31168,36 @@
field public static final int WEEKDAY_WEDNESDAY = 4; // 0x4
}
+ public static abstract class TtsSpan.Builder {
+ ctor public TtsSpan.Builder(java.lang.String);
+ method public android.text.style.TtsSpan build();
+ method public C setIntArgument(java.lang.String, int);
+ method public C setLongArgument(java.lang.String, long);
+ method public C setStringArgument(java.lang.String, java.lang.String);
+ }
+
+ public static class TtsSpan.CardinalBuilder extends android.text.style.TtsSpan.SemioticClassBuilder {
+ ctor public TtsSpan.CardinalBuilder();
+ ctor public TtsSpan.CardinalBuilder(long);
+ ctor public TtsSpan.CardinalBuilder(java.lang.String);
+ method public android.text.style.TtsSpan.CardinalBuilder setNumber(long);
+ method public android.text.style.TtsSpan.CardinalBuilder setNumber(java.lang.String);
+ }
+
+ public static class TtsSpan.SemioticClassBuilder extends android.text.style.TtsSpan.Builder {
+ ctor public TtsSpan.SemioticClassBuilder(java.lang.String);
+ method public C setAnimacy(java.lang.String);
+ method public C setCase(java.lang.String);
+ method public C setGender(java.lang.String);
+ method public C setMultiplicity(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);
+ method public android.text.style.TtsSpan.TextBuilder setText(java.lang.String);
+ }
+
public class TypefaceSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
ctor public TypefaceSpan(java.lang.String);
ctor public TypefaceSpan(android.os.Parcel);
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 5bf8a97..bc14c1e 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -1413,6 +1413,21 @@
public static final String ACTION_UNINSTALL_PACKAGE = "android.intent.action.UNINSTALL_PACKAGE";
/**
+ * Activity Action: Prompt the user to confirm credentials (pin, pattern or password)
+ * for the current user of the device. Launch this activity using
+ * {@link android.app.Activity#startActivityForResult(Intent, int)} and check if the
+ * result is {@link android.app.Activity#RESULT_OK} for a successful response to the
+ * challenge.<p/>
+ * This intent is handled by the system at a high priority and applications cannot intercept
+ * it.<p/>
+ * You can use {@link android.app.KeyguardManager#isKeyguardSecure()} to determine if the user will be
+ * prompted.
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_CONFIRM_DEVICE_CREDENTIAL = "android.intent.action.CONFIRM_DEVICE_CREDENTIAL";
+
+
+ /**
* Specify whether the package should be uninstalled for all users.
* @hide because these should not be part of normal application flow.
*/
@@ -3161,11 +3176,17 @@
/**
* A CharSequence dialog title to provide to the user when used with a
- * {@link #ACTION_CHOOSER}.
+ * {@link #ACTION_CHOOSER} or {@link #ACTION_CONFIRM_DEVICE_CREDENTIAL}.
*/
public static final String EXTRA_TITLE = "android.intent.extra.TITLE";
/**
+ * A CharSequence description to provide to the user when used with
+ * {@link #ACTION_CONFIRM_DEVICE_CREDENTIAL}.
+ */
+ public static final String EXTRA_DETAILS = "android.intent.extra.DETAILS";
+
+ /**
* A Parcelable[] of {@link Intent} or
* {@link android.content.pm.LabeledIntent} objects as set with
* {@link #putExtra(String, Parcelable[])} of additional activities to place
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index bc069ca..f352f43 100644
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -131,6 +131,31 @@
"android.settings.AIRPLANE_MODE_SETTINGS";
/**
+ * Activity Action: Modify Airplane mode settings using the users voice.
+ * <p>
+ * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
+ * <p>
+ * This intent MUST be started using
+ * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
+ * startVoiceActivity}.
+ * <p>
+ * To tell which state airplane mode should be set to, add the
+ * {@link #EXTRA_AIRPLANE_MODE_ENABLED} extra to this Intent with the state specified.
+ * If there is no extra in this Intent, no changes will be made.
+ * <p>
+ * The activity should verify that
+ * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction} returns true before
+ * modifying the setting.
+ * <p>
+ * Input: Nothing.
+ * <p>
+ * Output: Nothing.
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_VOICE_CONTROL_AIRPLANE_MODE =
+ "android.settings.VOICE_CONTROL_AIRPLANE_MODE";
+
+ /**
* Activity Action: Show settings for accessibility modules.
* <p>
* In some cases, a matching Activity may not exist, so ensure you
@@ -207,7 +232,6 @@
/**
* Activity Action: Show settings to allow configuration of Wi-Fi.
-
* <p>
* In some cases, a matching Activity may not exist, so ensure you
* safeguard against this.
@@ -780,6 +804,33 @@
public static final String ACTION_ZEN_MODE_SETTINGS = "android.settings.ZEN_MODE_SETTINGS";
/**
+ * Activity Action: Modify zen mode settings.
+ * <p>
+ * In some cases, a matching Activity may not exist, so ensure you safeguard against this.
+ * <p>
+ * This intent MUST be started using
+ * {@link android.service.voice.VoiceInteractionSession#startVoiceActivity
+ * startVoiceActivity}.
+ * <p>
+ * To tell which state zen mode should be set to, add the
+ * {@link #EXTRA_ZEN_MODE_INTERRUPTION_STATE} extra to this Intent with the state specified.
+ * If there is no extra in this Intent, no changes will be made.
+ * <p>
+ * The Activity should verify that
+ * {@link android.app.Activity#isVoiceInteraction isVoiceInteraction}.
+ * returns true before modifying the setting.
+ * <p>
+ * Input: Nothing.
+ * <p>
+ * Output: Nothing.
+ *
+ * @hide
+ */
+ @SdkConstant(SdkConstantType.ACTIVITY_INTENT_ACTION)
+ public static final String ACTION_VOICE_CONTROL_ZEN_MODE =
+ "android.settings.VOICE_CONTROL_ZEN_MODE";
+
+ /**
* Activity Action: Show the regulatory information screen for the device.
* <p>
* In some cases, a matching Activity may not exist, so ensure you safeguard
@@ -891,6 +942,27 @@
public static final String EXTRA_INPUT_METHOD_ID = "input_method_id";
+ /**
+ * Activity Extra: Enable or disable Airplane Mode.
+ * <p>
+ * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_AIRPLANE_MODE}
+ * intent as a boolean.
+ */
+ public static final String EXTRA_AIRPLANE_MODE_ENABLED = "airplane_mode_enabled";
+
+ /**
+ * Activity Extra: Modify the zen mode interruption state.
+ * <p>
+ * This can be passed as an extra field to the {@link #ACTION_VOICE_CONTROL_ZEN_MODE}
+ * intent as an integer. The value should be one of
+ * {@link android.provider.Settings.Global#ZEN_MODE_OFF},
+ * {@link android.provider.Settings.Global#ZEN_MODE_IMPORTANT_INTERRUPTIONS},
+ * {@link android.provider.Settings.Global#ZEN_MODE_NO_INTERRUPTIONS}.
+ *
+ * @hide
+ */
+ public static final String EXTRA_ZEN_MODE_INTERRUPTION_STATE = "zen_mode_interruption_state";
+
private static final String JID_RESOURCE_PREFIX = "android";
public static final String AUTHORITY = "settings";
diff --git a/core/java/android/text/style/TtsSpan.java b/core/java/android/text/style/TtsSpan.java
index 04b2da5..3ab3b31 100644
--- a/core/java/android/text/style/TtsSpan.java
+++ b/core/java/android/text/style/TtsSpan.java
@@ -22,10 +22,13 @@
import android.text.TextUtils;
/**
- * A span that supplies additional meta-data intended for text-to-speech rendering
- * of the associated text. If the text is being processed by a text-to-speech
- * engine, the engine may use the data in this span in addition to or instead of
- * its associated text.
+ * A span that supplies additional meta-data for the associated text intended
+ * for text-to-speech engines. If the text is being processed by a
+ * text-to-speech engine, the engine may use the data in this span in addition
+ * to or instead of its associated text.
+ *
+ * The inner classes are there for convenience and provide builders for each
+ * TtsSpan type.
*/
public class TtsSpan implements ParcelableSpan {
private final String mType;
@@ -432,10 +435,18 @@
mArgs = src.readPersistableBundle();
}
+ /**
+ * Returns the type.
+ * @return The type of this instance.
+ */
public String getType() {
return mType;
}
+ /**
+ * Returns a bundle of the arguments set.
+ * @return The bundle of the arguments set.
+ */
public PersistableBundle getArgs() {
return mArgs;
}
@@ -455,4 +466,217 @@
public int getSpanTypeId() {
return TextUtils.TTS_SPAN;
}
+
+ /**
+ * A simple builder for TtsSpans.
+ * This builder can be used directly, but the more specific subclasses of
+ * this builder like {@link TtsSpan.TextBuilder} and
+ * {@link TtsSpan.CardinalBuilder} are likely more useful.
+ *
+ * This class uses generics so methods from this class can return instances of
+ * its child classes, resulting in a fluent API (CRTP pattern).
+ */
+ public static abstract class Builder<C extends Builder<C>> {
+ // Holds the type of this class.
+ private final String mType;
+
+ // Holds the arguments of this class. It only stores objects of type
+ // String, Integer and Long.
+ private PersistableBundle mArgs = new PersistableBundle();
+
+ public Builder(String type) {
+ mType = type;
+ }
+
+ /**
+ * Returns a TtsSpan built from the parameters set by the setter
+ * methods.
+ * @return A TtsSpan built with parameters of this builder.
+ */
+ public TtsSpan build() {
+ return new TtsSpan(mType, mArgs);
+ }
+
+ /**
+ * Sets an argument to a string value.
+ * @param arg The argument name.
+ * @param value The value the argument should be set to.
+ * @return This instance.
+ */
+ @SuppressWarnings("unchecked")
+ public C setStringArgument(String arg, String value) {
+ mArgs.putString(arg, value);
+ return (C) this;
+ }
+
+ /**
+ * Sets an argument to an int value.
+ * @param arg The argument name.
+ * @param value The value the argument should be set to.
+ */
+ @SuppressWarnings("unchecked")
+ public C setIntArgument(String arg, int value) {
+ mArgs.putInt(arg, value);
+ return (C) this;
+ }
+
+ /**
+ * Sets an argument to a long value.
+ * @param arg The argument name.
+ * @param value The value the argument should be set to.
+ */
+ @SuppressWarnings("unchecked")
+ public C setLongArgument(String arg, long value) {
+ mArgs.putLong(arg, value);
+ return (C) this;
+ }
+ }
+
+ /**
+ * A builder for TtsSpans, has setters for morphosyntactic features.
+ * This builder can be used directly, but the more specific subclasses of
+ * this builder like {@link TtsSpan.TextBuilder} and
+ * {@link TtsSpan.CardinalBuilder} are likely more useful.
+ */
+ public static class SemioticClassBuilder<C extends SemioticClassBuilder<C>>
+ extends Builder<C> {
+
+ public SemioticClassBuilder(String type) {
+ super(type);
+ }
+
+ /**
+ * Sets the gender information for this instance.
+ * @param gender Can any of {@link TtsSpan#GENDER_NEUTRAL},
+ * {@link TtsSpan#GENDER_MALE} and {@link TtsSpan#GENDER_FEMALE}.
+ * @return This instance.
+ */
+ public C setGender(String gender) {
+ return setStringArgument(TtsSpan.ARG_GENDER, gender);
+ }
+
+ /**
+ * Sets the animacy information for this instance.
+ * @param animacy Can be any of {@link TtsSpan#ANIMACY_ANIMATE} and
+ * {@link TtsSpan#ANIMACY_INANIMATE}.
+ * @return This instance.
+ */
+ public C setAnimacy(String animacy) {
+ return setStringArgument(TtsSpan.ARG_ANIMACY, animacy);
+ }
+
+ /**
+ * Sets the multiplicity information for this instance.
+ * @param multiplicity Can be any of
+ * {@link TtsSpan#MULTIPLICITY_SINGLE},
+ * {@link TtsSpan#MULTIPLICITY_DUAL} and
+ * {@link TtsSpan#MULTIPLICITY_PLURAL}.
+ * @return This instance.
+ */
+ public C setMultiplicity(String multiplicity) {
+ return setStringArgument(TtsSpan.ARG_MULTIPLICITY, multiplicity);
+ }
+
+ /**
+ * Sets the grammatical case information for this instance.
+ * @param grammaticalCase Can be any of {@link TtsSpan#CASE_NOMINATIVE},
+ * {@link TtsSpan#CASE_ACCUSATIVE}, {@link TtsSpan#CASE_DATIVE},
+ * {@link TtsSpan#CASE_ABLATIVE}, {@link TtsSpan#CASE_GENITIVE},
+ * {@link TtsSpan#CASE_VOCATIVE}, {@link TtsSpan#CASE_LOCATIVE} and
+ * {@link TtsSpan#CASE_INSTRUMENTAL}.
+ * @return This instance.
+ */
+ public C setCase(String grammaticalCase) {
+ return setStringArgument(TtsSpan.ARG_CASE, grammaticalCase);
+ }
+ }
+
+ /**
+ * A builder for TtsSpans of type {@link TtsSpan #TYPE_TEXT}.
+ */
+ public static class TextBuilder extends SemioticClassBuilder<TextBuilder> {
+
+ /**
+ * Creates a TtsSpan of type {@link TtsSpan#TYPE_TEXT}.
+ */
+ public TextBuilder() {
+ super(TtsSpan.TYPE_TEXT);
+ }
+
+ /**
+ * Creates a TtsSpan of type {@link TtsSpan#TYPE_TEXT} and sets the
+ * {@link TtsSpan#ARG_TEXT} argument.
+ * @param text The text to be synthesized.
+ * @see #setText(String)
+ */
+ public TextBuilder(String text) {
+ this();
+ setText(text);
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_TEXT} argument, the text to be
+ * synthesized.
+ * @param text The string that will be synthesized.
+ * @return This instance.
+ */
+ public TextBuilder setText(String text) {
+ return setStringArgument(TtsSpan.ARG_TEXT, text);
+ }
+ }
+
+ /**
+ * A builder for TtsSpans of type {@link TtsSpan #TYPE_CARDINAL}.
+ */
+ public static class CardinalBuilder extends SemioticClassBuilder<CardinalBuilder> {
+
+ /**
+ * Creates a TtsSpan of type {@link TtsSpan#TYPE_CARDINAL}.
+ */
+ public CardinalBuilder() {
+ super(TtsSpan.TYPE_CARDINAL);
+ }
+
+ /**
+ * Creates a TtsSpan of type {@link TtsSpan#TYPE_CARDINAL} and sets the
+ * {@link TtsSpan#ARG_NUMBER} argument.
+ * @param number The number to synthesize.
+ * @see #setNumber(long)
+ */
+ public CardinalBuilder(long number) {
+ this();
+ setNumber(number);
+ }
+
+ /**
+ * Creates a TtsSpan of type {@link TtsSpan#TYPE_CARDINAL} and sets the
+ * {@link TtsSpan#ARG_NUMBER} argument.
+ * @param number The number to synthesize.
+ * @see #setNumber(String)
+ */
+ public CardinalBuilder(String number) {
+ this();
+ setNumber(number);
+ }
+
+ /**
+ * Convenience method that converts the number to a String and set it to
+ * the value for {@link TtsSpan#ARG_NUMBER}.
+ * @param number The number that will be synthesized.
+ * @return This instance.
+ */
+ public CardinalBuilder setNumber(long number) {
+ return setNumber(String.valueOf(number));
+ }
+
+ /**
+ * Sets the {@link TtsSpan#ARG_NUMBER} argument.
+ * @param number A non-empty string of digits with an optional
+ * leading + or -.
+ * @return This instance.
+ */
+ public CardinalBuilder setNumber(String number) {
+ return setStringArgument(TtsSpan.ARG_NUMBER, number);
+ }
+ }
}
diff --git a/core/jni/android/graphics/Graphics.cpp b/core/jni/android/graphics/Graphics.cpp
index 74be577..320c259 100644
--- a/core/jni/android/graphics/Graphics.cpp
+++ b/core/jni/android/graphics/Graphics.cpp
@@ -386,7 +386,6 @@
SkASSERT(env->IsInstanceOf(paint, gPaint_class));
jlong typefaceHandle = env->GetLongField(paint, gPaint_nativeTypefaceID);
android::TypefaceImpl* p = reinterpret_cast<android::TypefaceImpl*>(typefaceHandle);
- SkASSERT(p);
return p;
}