Merge "Import translations. DO NOT MERGE" into nyc-dev
diff --git a/api/current.txt b/api/current.txt
index bed5341..2ec4f0f 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -3479,7 +3479,6 @@
method public boolean isInMultiWindowMode();
method public boolean isInPictureInPictureMode();
method public boolean isLocalVoiceInteractionSupported();
- method public boolean isOverlayWithDecorCaptionEnabled();
method public boolean isTaskRoot();
method public boolean isVoiceInteraction();
method public boolean isVoiceInteractionRoot();
@@ -3580,8 +3579,8 @@
method public final deprecated void removeDialog(int);
method public void reportFullyDrawn();
method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
- method public final void requestKeyboardShortcutsHelper();
method public final void requestPermissions(java.lang.String[], int);
+ method public final void requestShowKeyboardShortcuts();
method public boolean requestVisibleBehind(boolean);
method public final boolean requestWindowFeature(int);
method public final void runOnUiThread(java.lang.Runnable);
@@ -3601,7 +3600,6 @@
method public void setImmersive(boolean);
method public void setIntent(android.content.Intent);
method public final void setMediaController(android.media.session.MediaController);
- method public void setOverlayWithDecorCaptionEnabled(boolean);
method public final deprecated void setProgress(int);
method public final deprecated void setProgressBarIndeterminate(boolean);
method public final deprecated void setProgressBarIndeterminateVisibility(boolean);
@@ -4925,7 +4923,7 @@
field public static final int DEFAULT_VIBRATE = 2; // 0x2
field public static final java.lang.String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText";
- field public static final java.lang.String EXTRA_CHRONOMETER_COUNTS_DOWN = "android.chronometerCountsDown";
+ field public static final java.lang.String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions";
field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText";
@@ -5084,7 +5082,7 @@
method public android.app.Notification.Builder setActions(android.app.Notification.Action...);
method public android.app.Notification.Builder setAutoCancel(boolean);
method public android.app.Notification.Builder setCategory(java.lang.String);
- method public android.app.Notification.Builder setChronometerCountsDown(boolean);
+ method public android.app.Notification.Builder setChronometerCountDown(boolean);
method public android.app.Notification.Builder setColor(int);
method public deprecated android.app.Notification.Builder setContent(android.widget.RemoteViews);
method public deprecated android.app.Notification.Builder setContentInfo(java.lang.CharSequence);
@@ -5632,7 +5630,6 @@
public final class UiAutomation {
method public void clearWindowAnimationFrameStats();
method public boolean clearWindowContentFrameStats(int);
- method public void destroy();
method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(java.lang.Runnable, android.app.UiAutomation.AccessibilityEventFilter, long) throws java.util.concurrent.TimeoutException;
method public android.os.ParcelFileDescriptor executeShellCommand(java.lang.String);
method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
@@ -10117,14 +10114,14 @@
method public int diff(android.content.res.Configuration);
method public boolean equals(android.content.res.Configuration);
method public int getLayoutDirection();
- method public android.util.LocaleList getLocales();
+ method public android.os.LocaleList getLocales();
method public boolean isLayoutSizeAtLeast(int);
method public boolean isScreenRound();
method public static boolean needNewResources(int, int);
method public void readFromParcel(android.os.Parcel);
method public void setLayoutDirection(java.util.Locale);
method public void setLocale(java.util.Locale);
- method public void setLocales(android.util.LocaleList);
+ method public void setLocales(android.os.LocaleList);
method public void setTo(android.content.res.Configuration);
method public void setToDefaults();
method public int updateFrom(android.content.res.Configuration);
@@ -12036,7 +12033,7 @@
method public void getTextBounds(java.lang.String, int, int, android.graphics.Rect);
method public void getTextBounds(char[], int, int, android.graphics.Rect);
method public java.util.Locale getTextLocale();
- method public android.util.LocaleList getTextLocales();
+ method public android.os.LocaleList getTextLocales();
method public void getTextPath(char[], int, int, float, float, android.graphics.Path);
method public void getTextPath(java.lang.String, int, int, float, float, android.graphics.Path);
method public float getTextScaleX();
@@ -12092,7 +12089,7 @@
method public void setSubpixelText(boolean);
method public void setTextAlign(android.graphics.Paint.Align);
method public void setTextLocale(java.util.Locale);
- method public void setTextLocales(android.util.LocaleList);
+ method public void setTextLocales(android.os.LocaleList);
method public void setTextScaleX(float);
method public void setTextSize(float);
method public void setTextSkewX(float);
@@ -22881,7 +22878,7 @@
public static final class TvInputInfo.Builder {
ctor public TvInputInfo.Builder(android.content.Context, android.content.ComponentName);
- method public android.media.tv.TvInputInfo build() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public android.media.tv.TvInputInfo build();
method public android.media.tv.TvInputInfo.Builder setCanRecord(boolean);
method public android.media.tv.TvInputInfo.Builder setExtras(android.os.Bundle);
method public android.media.tv.TvInputInfo.Builder setTunerCount(int);
@@ -28676,6 +28673,24 @@
method public abstract android.os.IBinder asBinder();
}
+ public final class LocaleList implements android.os.Parcelable {
+ ctor public LocaleList(java.util.Locale...);
+ method public int describeContents();
+ method public static android.os.LocaleList forLanguageTags(java.lang.String);
+ method public java.util.Locale get(int);
+ method public static android.os.LocaleList getAdjustedDefault();
+ method public static android.os.LocaleList getDefault();
+ method public static android.os.LocaleList getEmptyLocaleList();
+ method public java.util.Locale getFirstMatch(java.lang.String[]);
+ method public int indexOf(java.util.Locale);
+ method public boolean isEmpty();
+ method public static void setDefault(android.os.LocaleList);
+ method public int size();
+ method public java.lang.String toLanguageTags();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.os.LocaleList> CREATOR;
+ }
+
public final class Looper {
method public void dump(android.util.Printer, java.lang.String);
method public static android.os.Looper getMainLooper();
@@ -29369,7 +29384,6 @@
}
public class SystemHealthManager {
- method public static android.os.health.SystemHealthManager from(android.content.Context);
method public android.os.health.HealthStats takeMyUidSnapshot();
method public android.os.health.HealthStats takeUidSnapshot(int);
method public android.os.health.HealthStats[] takeUidSnapshots(int[]);
@@ -39216,11 +39230,11 @@
public class LocaleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
ctor public LocaleSpan(java.util.Locale);
- ctor public LocaleSpan(android.util.LocaleList);
+ ctor public LocaleSpan(android.os.LocaleList);
ctor public LocaleSpan(android.os.Parcel);
method public int describeContents();
method public java.util.Locale getLocale();
- method public android.util.LocaleList getLocales();
+ method public android.os.LocaleList getLocales();
method public int getSpanTypeId();
method public void updateDrawState(android.text.TextPaint);
method public void updateMeasureState(android.text.TextPaint);
@@ -40239,24 +40253,6 @@
field public static final int RTL = 1; // 0x1
}
- public final class LocaleList implements android.os.Parcelable {
- ctor public LocaleList(java.util.Locale...);
- method public int describeContents();
- method public static android.util.LocaleList forLanguageTags(java.lang.String);
- method public java.util.Locale get(int);
- method public static android.util.LocaleList getAdjustedDefault();
- method public static android.util.LocaleList getDefault();
- method public static android.util.LocaleList getEmptyLocaleList();
- method public java.util.Locale getFirstMatch(java.lang.String[]);
- method public int indexOf(java.util.Locale);
- method public boolean isEmpty();
- method public static void setDefault(android.util.LocaleList);
- method public int size();
- method public java.lang.String toLanguageTags();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.util.LocaleList> CREATOR;
- }
-
public final class Log {
method public static int d(java.lang.String, java.lang.String);
method public static int d(java.lang.String, java.lang.String, java.lang.Throwable);
@@ -40827,7 +40823,6 @@
}
public static final class Display.HdrCapabilities implements android.os.Parcelable {
- ctor public Display.HdrCapabilities(int[], float, float, float);
method public int describeContents();
method public float getDesiredMaxAverageLuminance();
method public float getDesiredMaxLuminance();
@@ -44656,7 +44651,7 @@
field public android.os.Bundle extras;
field public int fieldId;
field public java.lang.String fieldName;
- field public android.util.LocaleList hintLocales;
+ field public android.os.LocaleList hintLocales;
field public java.lang.CharSequence hintText;
field public int imeOptions;
field public int initialCapsMode;
@@ -45667,8 +45662,7 @@
method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
method public void onScaleChanged(android.webkit.WebView, float, float);
method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
- method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
- method public deprecated void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+ method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
method public deprecated android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, java.lang.String);
method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, android.webkit.WebResourceRequest);
method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent);
@@ -47944,7 +47938,7 @@
method public int getHyphenationFrequency();
method public int getImeActionId();
method public java.lang.CharSequence getImeActionLabel();
- method public android.util.LocaleList getImeHintLocales();
+ method public android.os.LocaleList getImeHintLocales();
method public int getImeOptions();
method public boolean getIncludeFontPadding();
method public android.os.Bundle getInputExtras(boolean);
@@ -47983,7 +47977,7 @@
method public java.lang.CharSequence getText();
method public final android.content.res.ColorStateList getTextColors();
method public java.util.Locale getTextLocale();
- method public android.util.LocaleList getTextLocales();
+ method public android.os.LocaleList getTextLocales();
method public float getTextScaleX();
method public float getTextSize();
method public int getTotalPaddingBottom();
@@ -48051,7 +48045,7 @@
method public void setHorizontallyScrolling(boolean);
method public void setHyphenationFrequency(int);
method public void setImeActionLabel(java.lang.CharSequence, int);
- method public void setImeHintLocales(android.util.LocaleList);
+ method public void setImeHintLocales(android.os.LocaleList);
method public void setImeOptions(int);
method public void setIncludeFontPadding(boolean);
method public void setInputExtras(int) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
@@ -48097,7 +48091,7 @@
method public final void setTextKeepState(java.lang.CharSequence);
method public final void setTextKeepState(java.lang.CharSequence, android.widget.TextView.BufferType);
method public void setTextLocale(java.util.Locale);
- method public void setTextLocales(android.util.LocaleList);
+ method public void setTextLocales(android.os.LocaleList);
method public void setTextScaleX(float);
method public void setTextSize(float);
method public void setTextSize(int, float);
diff --git a/api/removed.txt b/api/removed.txt
index 0db555f..a160218 100644
--- a/api/removed.txt
+++ b/api/removed.txt
@@ -466,6 +466,14 @@
}
+package android.webkit {
+
+ public class WebViewClient {
+ method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
+ }
+
+}
+
package android.widget {
public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
diff --git a/api/system-current.txt b/api/system-current.txt
index 57fda4a..938755c 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -3606,7 +3606,6 @@
method public boolean isInMultiWindowMode();
method public boolean isInPictureInPictureMode();
method public boolean isLocalVoiceInteractionSupported();
- method public boolean isOverlayWithDecorCaptionEnabled();
method public boolean isTaskRoot();
method public boolean isVoiceInteraction();
method public boolean isVoiceInteractionRoot();
@@ -3708,8 +3707,8 @@
method public final deprecated void removeDialog(int);
method public void reportFullyDrawn();
method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
- method public final void requestKeyboardShortcutsHelper();
method public final void requestPermissions(java.lang.String[], int);
+ method public final void requestShowKeyboardShortcuts();
method public boolean requestVisibleBehind(boolean);
method public final boolean requestWindowFeature(int);
method public final void runOnUiThread(java.lang.Runnable);
@@ -3729,7 +3728,6 @@
method public void setImmersive(boolean);
method public void setIntent(android.content.Intent);
method public final void setMediaController(android.media.session.MediaController);
- method public void setOverlayWithDecorCaptionEnabled(boolean);
method public final deprecated void setProgress(int);
method public final deprecated void setProgressBarIndeterminate(boolean);
method public final deprecated void setProgressBarIndeterminateVisibility(boolean);
@@ -5070,7 +5068,7 @@
field public static final int DEFAULT_VIBRATE = 2; // 0x2
field public static final java.lang.String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText";
- field public static final java.lang.String EXTRA_CHRONOMETER_COUNTS_DOWN = "android.chronometerCountsDown";
+ field public static final java.lang.String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions";
field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText";
@@ -5231,7 +5229,7 @@
method public android.app.Notification.Builder setActions(android.app.Notification.Action...);
method public android.app.Notification.Builder setAutoCancel(boolean);
method public android.app.Notification.Builder setCategory(java.lang.String);
- method public android.app.Notification.Builder setChronometerCountsDown(boolean);
+ method public android.app.Notification.Builder setChronometerCountDown(boolean);
method public android.app.Notification.Builder setColor(int);
method public deprecated android.app.Notification.Builder setContent(android.widget.RemoteViews);
method public deprecated android.app.Notification.Builder setContentInfo(java.lang.CharSequence);
@@ -5779,7 +5777,6 @@
public final class UiAutomation {
method public void clearWindowAnimationFrameStats();
method public boolean clearWindowContentFrameStats(int);
- method public void destroy();
method public android.view.accessibility.AccessibilityEvent executeAndWaitForEvent(java.lang.Runnable, android.app.UiAutomation.AccessibilityEventFilter, long) throws java.util.concurrent.TimeoutException;
method public android.os.ParcelFileDescriptor executeShellCommand(java.lang.String);
method public android.view.accessibility.AccessibilityNodeInfo findFocus(int);
@@ -10558,14 +10555,14 @@
method public int diff(android.content.res.Configuration);
method public boolean equals(android.content.res.Configuration);
method public int getLayoutDirection();
- method public android.util.LocaleList getLocales();
+ method public android.os.LocaleList getLocales();
method public boolean isLayoutSizeAtLeast(int);
method public boolean isScreenRound();
method public static boolean needNewResources(int, int);
method public void readFromParcel(android.os.Parcel);
method public void setLayoutDirection(java.util.Locale);
method public void setLocale(java.util.Locale);
- method public void setLocales(android.util.LocaleList);
+ method public void setLocales(android.os.LocaleList);
method public void setTo(android.content.res.Configuration);
method public void setToDefaults();
method public int updateFrom(android.content.res.Configuration);
@@ -12477,7 +12474,7 @@
method public void getTextBounds(java.lang.String, int, int, android.graphics.Rect);
method public void getTextBounds(char[], int, int, android.graphics.Rect);
method public java.util.Locale getTextLocale();
- method public android.util.LocaleList getTextLocales();
+ method public android.os.LocaleList getTextLocales();
method public void getTextPath(char[], int, int, float, float, android.graphics.Path);
method public void getTextPath(java.lang.String, int, int, float, float, android.graphics.Path);
method public float getTextScaleX();
@@ -12533,7 +12530,7 @@
method public void setSubpixelText(boolean);
method public void setTextAlign(android.graphics.Paint.Align);
method public void setTextLocale(java.util.Locale);
- method public void setTextLocales(android.util.LocaleList);
+ method public void setTextLocales(android.os.LocaleList);
method public void setTextScaleX(float);
method public void setTextSize(float);
method public void setTextSkewX(float);
@@ -24583,7 +24580,7 @@
public static final class TvInputInfo.Builder {
ctor public TvInputInfo.Builder(android.content.Context, android.content.ComponentName);
- method public android.media.tv.TvInputInfo build() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public android.media.tv.TvInputInfo build();
method public android.media.tv.TvInputInfo.Builder setCanRecord(boolean);
method public android.media.tv.TvInputInfo.Builder setExtras(android.os.Bundle);
method public android.media.tv.TvInputInfo.Builder setHdmiDeviceInfo(android.hardware.hdmi.HdmiDeviceInfo);
@@ -31119,6 +31116,24 @@
method public abstract android.os.IBinder asBinder();
}
+ public final class LocaleList implements android.os.Parcelable {
+ ctor public LocaleList(java.util.Locale...);
+ method public int describeContents();
+ method public static android.os.LocaleList forLanguageTags(java.lang.String);
+ method public java.util.Locale get(int);
+ method public static android.os.LocaleList getAdjustedDefault();
+ method public static android.os.LocaleList getDefault();
+ method public static android.os.LocaleList getEmptyLocaleList();
+ method public java.util.Locale getFirstMatch(java.lang.String[]);
+ method public int indexOf(java.util.Locale);
+ method public boolean isEmpty();
+ method public static void setDefault(android.os.LocaleList);
+ method public int size();
+ method public java.lang.String toLanguageTags();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.os.LocaleList> CREATOR;
+ }
+
public final class Looper {
method public void dump(android.util.Printer, java.lang.String);
method public static android.os.Looper getMainLooper();
@@ -31763,6 +31778,7 @@
method public android.os.UserHandle getUserForSerialNumber(long);
method public java.lang.String getUserName();
method public java.util.List<android.os.UserHandle> getUserProfiles();
+ method public int getUserRestrictionSource(java.lang.String, android.os.UserHandle);
method public android.os.Bundle getUserRestrictions();
method public android.os.Bundle getUserRestrictions(android.os.UserHandle);
method public boolean hasUserRestriction(java.lang.String);
@@ -31815,10 +31831,17 @@
field public static final java.lang.String DISALLOW_USB_FILE_TRANSFER = "no_usb_file_transfer";
field public static final java.lang.String ENSURE_VERIFY_APPS = "ensure_verify_apps";
field public static final java.lang.String KEY_RESTRICTIONS_PENDING = "restrictions_pending";
+ field public static final int RESTRICTION_NOT_SET = 0; // 0x0
+ field public static final int RESTRICTION_SOURCE_DEVICE_OWNER = 2; // 0x2
+ field public static final int RESTRICTION_SOURCE_PROFILE_OWNER = 4; // 0x4
+ field public static final int RESTRICTION_SOURCE_SYSTEM = 1; // 0x1
field public static final int USER_CREATION_FAILED_NOT_PERMITTED = 1; // 0x1
field public static final int USER_CREATION_FAILED_NO_MORE_USERS = 2; // 0x2
}
+ public static abstract class UserManager.UserRestrictionSource implements java.lang.annotation.Annotation {
+ }
+
public abstract class Vibrator {
method public abstract void cancel();
method public abstract boolean hasVibrator();
@@ -31897,7 +31920,6 @@
}
public class SystemHealthManager {
- method public static android.os.health.SystemHealthManager from(android.content.Context);
method public android.os.health.HealthStats takeMyUidSnapshot();
method public android.os.health.HealthStats takeUidSnapshot(int);
method public android.os.health.HealthStats[] takeUidSnapshots(int[]);
@@ -42210,11 +42232,11 @@
public class LocaleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
ctor public LocaleSpan(java.util.Locale);
- ctor public LocaleSpan(android.util.LocaleList);
+ ctor public LocaleSpan(android.os.LocaleList);
ctor public LocaleSpan(android.os.Parcel);
method public int describeContents();
method public java.util.Locale getLocale();
- method public android.util.LocaleList getLocales();
+ method public android.os.LocaleList getLocales();
method public int getSpanTypeId();
method public void updateDrawState(android.text.TextPaint);
method public void updateMeasureState(android.text.TextPaint);
@@ -43233,24 +43255,6 @@
field public static final int RTL = 1; // 0x1
}
- public final class LocaleList implements android.os.Parcelable {
- ctor public LocaleList(java.util.Locale...);
- method public int describeContents();
- method public static android.util.LocaleList forLanguageTags(java.lang.String);
- method public java.util.Locale get(int);
- method public static android.util.LocaleList getAdjustedDefault();
- method public static android.util.LocaleList getDefault();
- method public static android.util.LocaleList getEmptyLocaleList();
- method public java.util.Locale getFirstMatch(java.lang.String[]);
- method public int indexOf(java.util.Locale);
- method public boolean isEmpty();
- method public static void setDefault(android.util.LocaleList);
- method public int size();
- method public java.lang.String toLanguageTags();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.util.LocaleList> CREATOR;
- }
-
public final class Log {
method public static int d(java.lang.String, java.lang.String);
method public static int d(java.lang.String, java.lang.String, java.lang.Throwable);
@@ -43821,7 +43825,6 @@
}
public static final class Display.HdrCapabilities implements android.os.Parcelable {
- ctor public Display.HdrCapabilities(int[], float, float, float);
method public int describeContents();
method public float getDesiredMaxAverageLuminance();
method public float getDesiredMaxLuminance();
@@ -47653,7 +47656,7 @@
field public android.os.Bundle extras;
field public int fieldId;
field public java.lang.String fieldName;
- field public android.util.LocaleList hintLocales;
+ field public android.os.LocaleList hintLocales;
field public java.lang.CharSequence hintText;
field public int imeOptions;
field public int initialCapsMode;
@@ -48789,8 +48792,7 @@
method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
method public void onScaleChanged(android.webkit.WebView, float, float);
method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
- method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
- method public deprecated void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+ method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
method public deprecated android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, java.lang.String);
method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, android.webkit.WebResourceRequest);
method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent);
@@ -51295,7 +51297,7 @@
method public int getHyphenationFrequency();
method public int getImeActionId();
method public java.lang.CharSequence getImeActionLabel();
- method public android.util.LocaleList getImeHintLocales();
+ method public android.os.LocaleList getImeHintLocales();
method public int getImeOptions();
method public boolean getIncludeFontPadding();
method public android.os.Bundle getInputExtras(boolean);
@@ -51334,7 +51336,7 @@
method public java.lang.CharSequence getText();
method public final android.content.res.ColorStateList getTextColors();
method public java.util.Locale getTextLocale();
- method public android.util.LocaleList getTextLocales();
+ method public android.os.LocaleList getTextLocales();
method public float getTextScaleX();
method public float getTextSize();
method public int getTotalPaddingBottom();
@@ -51402,7 +51404,7 @@
method public void setHorizontallyScrolling(boolean);
method public void setHyphenationFrequency(int);
method public void setImeActionLabel(java.lang.CharSequence, int);
- method public void setImeHintLocales(android.util.LocaleList);
+ method public void setImeHintLocales(android.os.LocaleList);
method public void setImeOptions(int);
method public void setIncludeFontPadding(boolean);
method public void setInputExtras(int) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
@@ -51448,7 +51450,7 @@
method public final void setTextKeepState(java.lang.CharSequence);
method public final void setTextKeepState(java.lang.CharSequence, android.widget.TextView.BufferType);
method public void setTextLocale(java.util.Locale);
- method public void setTextLocales(android.util.LocaleList);
+ method public void setTextLocales(android.os.LocaleList);
method public void setTextScaleX(float);
method public void setTextSize(float);
method public void setTextSize(int, float);
diff --git a/api/system-removed.txt b/api/system-removed.txt
index 5f9d350..3f2613e 100644
--- a/api/system-removed.txt
+++ b/api/system-removed.txt
@@ -464,6 +464,14 @@
}
+package android.webkit {
+
+ public class WebViewClient {
+ method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
+ }
+
+}
+
package android.widget {
public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
diff --git a/api/test-current.txt b/api/test-current.txt
index 8dd4cee..0e8c594 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -3479,7 +3479,6 @@
method public boolean isInMultiWindowMode();
method public boolean isInPictureInPictureMode();
method public boolean isLocalVoiceInteractionSupported();
- method public boolean isOverlayWithDecorCaptionEnabled();
method public boolean isTaskRoot();
method public boolean isVoiceInteraction();
method public boolean isVoiceInteractionRoot();
@@ -3580,8 +3579,8 @@
method public final deprecated void removeDialog(int);
method public void reportFullyDrawn();
method public android.view.DragAndDropPermissions requestDragAndDropPermissions(android.view.DragEvent);
- method public final void requestKeyboardShortcutsHelper();
method public final void requestPermissions(java.lang.String[], int);
+ method public final void requestShowKeyboardShortcuts();
method public boolean requestVisibleBehind(boolean);
method public final boolean requestWindowFeature(int);
method public final void runOnUiThread(java.lang.Runnable);
@@ -3601,7 +3600,6 @@
method public void setImmersive(boolean);
method public void setIntent(android.content.Intent);
method public final void setMediaController(android.media.session.MediaController);
- method public void setOverlayWithDecorCaptionEnabled(boolean);
method public final deprecated void setProgress(int);
method public final deprecated void setProgressBarIndeterminate(boolean);
method public final deprecated void setProgressBarIndeterminateVisibility(boolean);
@@ -4926,7 +4924,7 @@
field public static final int DEFAULT_VIBRATE = 2; // 0x2
field public static final java.lang.String EXTRA_BACKGROUND_IMAGE_URI = "android.backgroundImageUri";
field public static final java.lang.String EXTRA_BIG_TEXT = "android.bigText";
- field public static final java.lang.String EXTRA_CHRONOMETER_COUNTS_DOWN = "android.chronometerCountsDown";
+ field public static final java.lang.String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
field public static final java.lang.String EXTRA_COMPACT_ACTIONS = "android.compactActions";
field public static final java.lang.String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
field public static final java.lang.String EXTRA_INFO_TEXT = "android.infoText";
@@ -5085,7 +5083,7 @@
method public android.app.Notification.Builder setActions(android.app.Notification.Action...);
method public android.app.Notification.Builder setAutoCancel(boolean);
method public android.app.Notification.Builder setCategory(java.lang.String);
- method public android.app.Notification.Builder setChronometerCountsDown(boolean);
+ method public android.app.Notification.Builder setChronometerCountDown(boolean);
method public android.app.Notification.Builder setColor(int);
method public deprecated android.app.Notification.Builder setContent(android.widget.RemoteViews);
method public deprecated android.app.Notification.Builder setContentInfo(java.lang.CharSequence);
@@ -10129,14 +10127,14 @@
method public int diff(android.content.res.Configuration);
method public boolean equals(android.content.res.Configuration);
method public int getLayoutDirection();
- method public android.util.LocaleList getLocales();
+ method public android.os.LocaleList getLocales();
method public boolean isLayoutSizeAtLeast(int);
method public boolean isScreenRound();
method public static boolean needNewResources(int, int);
method public void readFromParcel(android.os.Parcel);
method public void setLayoutDirection(java.util.Locale);
method public void setLocale(java.util.Locale);
- method public void setLocales(android.util.LocaleList);
+ method public void setLocales(android.os.LocaleList);
method public void setTo(android.content.res.Configuration);
method public void setToDefaults();
method public int updateFrom(android.content.res.Configuration);
@@ -12048,7 +12046,7 @@
method public void getTextBounds(java.lang.String, int, int, android.graphics.Rect);
method public void getTextBounds(char[], int, int, android.graphics.Rect);
method public java.util.Locale getTextLocale();
- method public android.util.LocaleList getTextLocales();
+ method public android.os.LocaleList getTextLocales();
method public void getTextPath(char[], int, int, float, float, android.graphics.Path);
method public void getTextPath(java.lang.String, int, int, float, float, android.graphics.Path);
method public float getTextScaleX();
@@ -12104,7 +12102,7 @@
method public void setSubpixelText(boolean);
method public void setTextAlign(android.graphics.Paint.Align);
method public void setTextLocale(java.util.Locale);
- method public void setTextLocales(android.util.LocaleList);
+ method public void setTextLocales(android.os.LocaleList);
method public void setTextScaleX(float);
method public void setTextSize(float);
method public void setTextSkewX(float);
@@ -22949,7 +22947,7 @@
public static final class TvInputInfo.Builder {
ctor public TvInputInfo.Builder(android.content.Context, android.content.ComponentName);
- method public android.media.tv.TvInputInfo build() throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
+ method public android.media.tv.TvInputInfo build();
method public android.media.tv.TvInputInfo.Builder setCanRecord(boolean);
method public android.media.tv.TvInputInfo.Builder setExtras(android.os.Bundle);
method public android.media.tv.TvInputInfo.Builder setTunerCount(int);
@@ -28744,6 +28742,24 @@
method public abstract android.os.IBinder asBinder();
}
+ public final class LocaleList implements android.os.Parcelable {
+ ctor public LocaleList(java.util.Locale...);
+ method public int describeContents();
+ method public static android.os.LocaleList forLanguageTags(java.lang.String);
+ method public java.util.Locale get(int);
+ method public static android.os.LocaleList getAdjustedDefault();
+ method public static android.os.LocaleList getDefault();
+ method public static android.os.LocaleList getEmptyLocaleList();
+ method public java.util.Locale getFirstMatch(java.lang.String[]);
+ method public int indexOf(java.util.Locale);
+ method public boolean isEmpty();
+ method public static void setDefault(android.os.LocaleList);
+ method public int size();
+ method public java.lang.String toLanguageTags();
+ method public void writeToParcel(android.os.Parcel, int);
+ field public static final android.os.Parcelable.Creator<android.os.LocaleList> CREATOR;
+ }
+
public final class Looper {
method public void dump(android.util.Printer, java.lang.String);
method public static android.os.Looper getMainLooper();
@@ -29438,7 +29454,6 @@
}
public class SystemHealthManager {
- method public static android.os.health.SystemHealthManager from(android.content.Context);
method public android.os.health.HealthStats takeMyUidSnapshot();
method public android.os.health.HealthStats takeUidSnapshot(int);
method public android.os.health.HealthStats[] takeUidSnapshots(int[]);
@@ -39294,11 +39309,11 @@
public class LocaleSpan extends android.text.style.MetricAffectingSpan implements android.text.ParcelableSpan {
ctor public LocaleSpan(java.util.Locale);
- ctor public LocaleSpan(android.util.LocaleList);
+ ctor public LocaleSpan(android.os.LocaleList);
ctor public LocaleSpan(android.os.Parcel);
method public int describeContents();
method public java.util.Locale getLocale();
- method public android.util.LocaleList getLocales();
+ method public android.os.LocaleList getLocales();
method public int getSpanTypeId();
method public void updateDrawState(android.text.TextPaint);
method public void updateMeasureState(android.text.TextPaint);
@@ -40317,24 +40332,6 @@
field public static final int RTL = 1; // 0x1
}
- public final class LocaleList implements android.os.Parcelable {
- ctor public LocaleList(java.util.Locale...);
- method public int describeContents();
- method public static android.util.LocaleList forLanguageTags(java.lang.String);
- method public java.util.Locale get(int);
- method public static android.util.LocaleList getAdjustedDefault();
- method public static android.util.LocaleList getDefault();
- method public static android.util.LocaleList getEmptyLocaleList();
- method public java.util.Locale getFirstMatch(java.lang.String[]);
- method public int indexOf(java.util.Locale);
- method public boolean isEmpty();
- method public static void setDefault(android.util.LocaleList);
- method public int size();
- method public java.lang.String toLanguageTags();
- method public void writeToParcel(android.os.Parcel, int);
- field public static final android.os.Parcelable.Creator<android.util.LocaleList> CREATOR;
- }
-
public final class Log {
method public static int d(java.lang.String, java.lang.String);
method public static int d(java.lang.String, java.lang.String, java.lang.Throwable);
@@ -40905,7 +40902,6 @@
}
public static final class Display.HdrCapabilities implements android.os.Parcelable {
- ctor public Display.HdrCapabilities(int[], float, float, float);
method public int describeContents();
method public float getDesiredMaxAverageLuminance();
method public float getDesiredMaxLuminance();
@@ -44734,7 +44730,7 @@
field public android.os.Bundle extras;
field public int fieldId;
field public java.lang.String fieldName;
- field public android.util.LocaleList hintLocales;
+ field public android.os.LocaleList hintLocales;
field public java.lang.CharSequence hintText;
field public int imeOptions;
field public int initialCapsMode;
@@ -45745,8 +45741,7 @@
method public void onReceivedSslError(android.webkit.WebView, android.webkit.SslErrorHandler, android.net.http.SslError);
method public void onScaleChanged(android.webkit.WebView, float, float);
method public deprecated void onTooManyRedirects(android.webkit.WebView, android.os.Message, android.os.Message);
- method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
- method public deprecated void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
+ method public void onUnhandledKeyEvent(android.webkit.WebView, android.view.KeyEvent);
method public deprecated android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, java.lang.String);
method public android.webkit.WebResourceResponse shouldInterceptRequest(android.webkit.WebView, android.webkit.WebResourceRequest);
method public boolean shouldOverrideKeyEvent(android.webkit.WebView, android.view.KeyEvent);
@@ -48022,7 +48017,7 @@
method public int getHyphenationFrequency();
method public int getImeActionId();
method public java.lang.CharSequence getImeActionLabel();
- method public android.util.LocaleList getImeHintLocales();
+ method public android.os.LocaleList getImeHintLocales();
method public int getImeOptions();
method public boolean getIncludeFontPadding();
method public android.os.Bundle getInputExtras(boolean);
@@ -48061,7 +48056,7 @@
method public java.lang.CharSequence getText();
method public final android.content.res.ColorStateList getTextColors();
method public java.util.Locale getTextLocale();
- method public android.util.LocaleList getTextLocales();
+ method public android.os.LocaleList getTextLocales();
method public float getTextScaleX();
method public float getTextSize();
method public int getTotalPaddingBottom();
@@ -48129,7 +48124,7 @@
method public void setHorizontallyScrolling(boolean);
method public void setHyphenationFrequency(int);
method public void setImeActionLabel(java.lang.CharSequence, int);
- method public void setImeHintLocales(android.util.LocaleList);
+ method public void setImeHintLocales(android.os.LocaleList);
method public void setImeOptions(int);
method public void setIncludeFontPadding(boolean);
method public void setInputExtras(int) throws java.io.IOException, org.xmlpull.v1.XmlPullParserException;
@@ -48175,7 +48170,7 @@
method public final void setTextKeepState(java.lang.CharSequence);
method public final void setTextKeepState(java.lang.CharSequence, android.widget.TextView.BufferType);
method public void setTextLocale(java.util.Locale);
- method public void setTextLocales(android.util.LocaleList);
+ method public void setTextLocales(android.os.LocaleList);
method public void setTextScaleX(float);
method public void setTextSize(float);
method public void setTextSize(int, float);
diff --git a/api/test-removed.txt b/api/test-removed.txt
index 0db555f..a160218 100644
--- a/api/test-removed.txt
+++ b/api/test-removed.txt
@@ -466,6 +466,14 @@
}
+package android.webkit {
+
+ public class WebViewClient {
+ method public void onUnhandledInputEvent(android.webkit.WebView, android.view.InputEvent);
+ }
+
+}
+
package android.widget {
public class TextView extends android.view.View implements android.view.ViewTreeObserver.OnPreDrawListener {
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index 19cb927..4470eda 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -301,14 +301,13 @@
private IIntentSender.Stub mLocalSender = new IIntentSender.Stub() {
@Override
- public int send(int code, Intent intent, String resolvedType,
+ public void send(int code, Intent intent, String resolvedType,
IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
try {
mResult.offer(intent, 5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
- return 0;
}
};
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 0726c43..6d405f6 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -1688,10 +1688,10 @@
}
/**
- * Request the Keyboard Shortcuts screen to show up. If it succeeds, this will trigger
+ * Request the Keyboard Shortcuts screen to show up. This will trigger
* {@link #onProvideKeyboardShortcuts} to retrieve the shortcuts for the foreground activity.
*/
- public final void requestKeyboardShortcutsHelper() {
+ public final void requestShowKeyboardShortcuts() {
Intent intent = new Intent(Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS);
intent.setComponent(new ComponentName(KEYBOARD_SHORTCUTS_RECEIVER_PKG_NAME,
KEYBOARD_SHORTCUTS_RECEIVER_CLASS_NAME));
@@ -7007,6 +7007,8 @@
* @return True if caption is displayed on content, false if it pushes the content down.
*
* @see {@link #setOverlayWithDecorCaptionEnabled(boolean)}
+ *
+ * @hide
*/
public boolean isOverlayWithDecorCaptionEnabled() {
return mWindow.isOverlayWithDecorCaptionEnabled();
@@ -7018,6 +7020,8 @@
* This affects only freeform windows since they display the caption and only the main
* window of the activity. The caption is used to drag the window around and also shows
* maximize and close action buttons.
+ *
+ * @hide
*/
public void setOverlayWithDecorCaptionEnabled(boolean enabled) {
mWindow.setOverlayWithDecorCaptionEnabled(enabled);
diff --git a/core/java/android/app/ActivityManagerNative.java b/core/java/android/app/ActivityManagerNative.java
index a4f404f..6ba6b0f 100644
--- a/core/java/android/app/ActivityManagerNative.java
+++ b/core/java/android/app/ActivityManagerNative.java
@@ -2977,6 +2977,22 @@
reply.writeNoException();
return true;
}
+ case SEND_INTENT_SENDER_TRANSACTION: {
+ data.enforceInterface(IActivityManager.descriptor);
+ IIntentSender sender = IIntentSender.Stub.asInterface(data.readStrongBinder());
+ int scode = data.readInt();
+ Intent intent = data.readInt() != 0 ? Intent.CREATOR.createFromParcel(data) : null;
+ String resolvedType = data.readString();
+ IIntentReceiver finishedReceiver = IIntentReceiver.Stub.asInterface(
+ data.readStrongBinder());
+ String requiredPermission = data.readString();
+ Bundle options = data.readInt() != 0 ? Bundle.CREATOR.createFromParcel(data) : null;
+ int result = sendIntentSender(sender, scode, intent, resolvedType, finishedReceiver,
+ requiredPermission, options);
+ reply.writeNoException();
+ reply.writeInt(result);
+ return true;
+ }
}
return super.onTransact(code, data, reply, flags);
@@ -6973,5 +6989,37 @@
reply.recycle();
}
+ public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
+ IIntentReceiver finishedReceiver, String requiredPermission, Bundle options)
+ throws RemoteException {
+ Parcel data = Parcel.obtain();
+ Parcel reply = Parcel.obtain();
+ data.writeInterfaceToken(IActivityManager.descriptor);
+ data.writeStrongBinder(target.asBinder());
+ data.writeInt(code);
+ if ((intent!=null)) {
+ data.writeInt(1);
+ intent.writeToParcel(data, 0);
+ }
+ else {
+ data.writeInt(0);
+ }
+ data.writeString(resolvedType);
+ data.writeStrongBinder((((finishedReceiver!=null))?(finishedReceiver.asBinder()):(null)));
+ data.writeString(requiredPermission);
+ if ((options!=null)) {
+ data.writeInt(1);
+ options.writeToParcel(data, 0);
+ }
+ else {
+ data.writeInt(0);
+ }
+ mRemote.transact(SEND_INTENT_SENDER_TRANSACTION, data, reply, 0);
+ final int res = reply.readInt();
+ data.recycle();
+ reply.recycle();
+ return res;
+ }
+
private IBinder mRemote;
}
diff --git a/core/java/android/app/ActivityOptions.java b/core/java/android/app/ActivityOptions.java
index a30f629..4c8ddc7 100644
--- a/core/java/android/app/ActivityOptions.java
+++ b/core/java/android/app/ActivityOptions.java
@@ -161,10 +161,10 @@
private static final String KEY_LAUNCH_TASK_ID = "android.activity.launchTaskId";
/**
- * See {@link #setAvoidMoveToFront}.
+ * See {@link #setTaskOverlay}.
* @hide
*/
- private static final String KEY_DONT_MOVE_TO_FRONT = "android.activity.dontMoveToFront";
+ private static final String KEY_TASK_OVERLAY = "android.activity.taskOverlay";
/**
* Where the docked stack should be positioned.
@@ -239,7 +239,7 @@
private int mLaunchStackId = INVALID_STACK_ID;
private int mLaunchTaskId = -1;
private int mDockCreateMode = DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT;
- private boolean mAvoidMoveToFront;
+ private boolean mTaskOverlay;
private AppTransitionAnimationSpec mAnimSpecs[];
/**
@@ -782,7 +782,7 @@
}
mLaunchStackId = opts.getInt(KEY_LAUNCH_STACK_ID, INVALID_STACK_ID);
mLaunchTaskId = opts.getInt(KEY_LAUNCH_TASK_ID, -1);
- mAvoidMoveToFront = opts.getBoolean(KEY_DONT_MOVE_TO_FRONT, false);
+ mTaskOverlay = opts.getBoolean(KEY_TASK_OVERLAY, false);
mDockCreateMode = opts.getInt(KEY_DOCK_CREATE_MODE, DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT);
if (opts.containsKey(KEY_ANIM_SPECS)) {
Parcelable[] specs = opts.getParcelableArray(KEY_ANIM_SPECS);
@@ -961,20 +961,20 @@
}
/**
- * Set's whether the task should be moved to the front. This is different from
- * {@link #getLaunchTaskBehind()} as we don't want to have an animation at all when launching
- * an activity that shouldn't be moved to the front.
+ * Set's whether the activity launched with this option should be a task overlay. That is the
+ * activity will always be the top activity of the task and doesn't cause the task to be moved
+ * to the front when it is added.
* @hide
*/
- public void setAvoidMoveToFront(boolean avoidMoveToFront) {
- mAvoidMoveToFront = avoidMoveToFront;
+ public void setTaskOverlay(boolean taskOverlay) {
+ mTaskOverlay = taskOverlay;
}
/**
* @hide
*/
- public boolean getAvoidMoveToFront() {
- return mAvoidMoveToFront;
+ public boolean getTaskOverlay() {
+ return mTaskOverlay;
}
/** @hide */
@@ -1130,7 +1130,7 @@
}
b.putInt(KEY_LAUNCH_STACK_ID, mLaunchStackId);
b.putInt(KEY_LAUNCH_TASK_ID, mLaunchTaskId);
- b.putBoolean(KEY_DONT_MOVE_TO_FRONT, mAvoidMoveToFront);
+ b.putBoolean(KEY_TASK_OVERLAY, mTaskOverlay);
b.putInt(KEY_DOCK_CREATE_MODE, mDockCreateMode);
if (mAnimSpecs != null) {
b.putParcelableArray(KEY_ANIM_SPECS, mAnimSpecs);
diff --git a/core/java/android/app/IActivityManager.java b/core/java/android/app/IActivityManager.java
index 2fcad0d..81788da 100644
--- a/core/java/android/app/IActivityManager.java
+++ b/core/java/android/app/IActivityManager.java
@@ -653,6 +653,10 @@
public void startConfirmDeviceCredentialIntent(Intent intent) throws RemoteException;
+ public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
+ IIntentReceiver finishedReceiver, String requiredPermission, Bundle options)
+ throws RemoteException;
+
/*
* Private non-Binder interfaces
*/
@@ -1038,4 +1042,5 @@
int NOTIFY_LOCKED_PROFILE = IBinder.FIRST_CALL_TRANSACTION + 373;
int START_CONFIRM_DEVICE_CREDENTIAL_INTENT = IBinder.FIRST_CALL_TRANSACTION + 374;
int SEND_IDLE_JOB_TRIGGER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 375;
+ int SEND_INTENT_SENDER_TRANSACTION = IBinder.FIRST_CALL_TRANSACTION + 376;
}
diff --git a/core/java/android/app/LoadedApk.java b/core/java/android/app/LoadedApk.java
index 7d43a11..3f87000 100644
--- a/core/java/android/app/LoadedApk.java
+++ b/core/java/android/app/LoadedApk.java
@@ -1046,11 +1046,17 @@
@Override
public void performReceive(Intent intent, int resultCode, String data,
Bundle extras, boolean ordered, boolean sticky, int sendingUser) {
- LoadedApk.ReceiverDispatcher rd = mDispatcher.get();
+ final LoadedApk.ReceiverDispatcher rd;
+ if (intent == null) {
+ Log.wtf(TAG, "Null intent received");
+ rd = null;
+ } else {
+ rd = mDispatcher.get();
+ }
if (ActivityThread.DEBUG_BROADCAST) {
int seq = intent.getIntExtra("seq", -1);
- Slog.i(ActivityThread.TAG, "Receiving broadcast " + intent.getAction() + " seq=" + seq
- + " to " + (rd != null ? rd.mReceiver : null));
+ Slog.i(ActivityThread.TAG, "Receiving broadcast " + intent.getAction()
+ + " seq=" + seq + " to " + (rd != null ? rd.mReceiver : null));
}
if (rd != null) {
rd.performReceive(intent, resultCode, data, extras,
diff --git a/core/java/android/app/Notification.java b/core/java/android/app/Notification.java
index 460640e..a666e66 100644
--- a/core/java/android/app/Notification.java
+++ b/core/java/android/app/Notification.java
@@ -55,11 +55,9 @@
import android.text.style.TextAppearanceSpan;
import android.util.Log;
import android.util.SparseArray;
-import android.util.TypedValue;
import android.view.Gravity;
import android.view.NotificationHeaderView;
import android.view.View;
-import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.RemoteViews;
@@ -867,8 +865,9 @@
/**
* {@link #extras} key: whether the chronometer set on the notification should count down
* instead of counting up. Is only relevant if key {@link #EXTRA_SHOW_CHRONOMETER} is present.
+ * This extra is a boolean. The default is false.
*/
- public static final String EXTRA_CHRONOMETER_COUNTS_DOWN = "android.chronometerCountsDown";
+ public static final String EXTRA_CHRONOMETER_COUNT_DOWN = "android.chronometerCountDown";
/**
* {@link #extras} key: whether {@link #when} should be shown,
@@ -934,12 +933,13 @@
/**
* {@link #extras} key: the username to be displayed for all messages sent by the user including
* direct replies
- * {@link android.app.Notification.MessagingStyle} notification.
+ * {@link android.app.Notification.MessagingStyle} notification. This extra is a
+ * {@link CharSequence}
*/
public static final String EXTRA_SELF_DISPLAY_NAME = "android.selfDisplayName";
/**
- * {@link #extras} key: a {@link String} to be displayed as the title to a conversation
+ * {@link #extras} key: a {@link CharSequence} to be displayed as the title to a conversation
* represented by a {@link android.app.Notification.MessagingStyle}
*/
public static final String EXTRA_CONVERSATION_TITLE = "android.conversationTitle";
@@ -947,7 +947,8 @@
/**
* {@link #extras} key: an array of {@link android.app.Notification.MessagingStyle.Message}
* bundles provided by a
- * {@link android.app.Notification.MessagingStyle} notification.
+ * {@link android.app.Notification.MessagingStyle} notification. This extra is a parcelable
+ * array of bundles.
*/
public static final String EXTRA_MESSAGES = "android.messages";
@@ -2337,11 +2338,11 @@
* Useful when showing an elapsed time (like an ongoing phone call).
*
* The counter can also be set to count down to <code>when</code> when using
- * {@link #setChronometerCountsDown(boolean)}.
+ * {@link #setChronometerCountDown(boolean)}.
*
* @see android.widget.Chronometer
* @see Notification#when
- * @see #setChronometerCountsDown(boolean)
+ * @see #setChronometerCountDown(boolean)
*/
public Builder setUsesChronometer(boolean b) {
mN.extras.putBoolean(EXTRA_SHOW_CHRONOMETER, b);
@@ -2356,8 +2357,8 @@
*
* @see #setUsesChronometer(boolean)
*/
- public Builder setChronometerCountsDown(boolean countsDown) {
- mN.extras.putBoolean(EXTRA_CHRONOMETER_COUNTS_DOWN, countsDown);
+ public Builder setChronometerCountDown(boolean countDown) {
+ mN.extras.putBoolean(EXTRA_CHRONOMETER_COUNT_DOWN, countDown);
return this;
}
@@ -3288,7 +3289,7 @@
contentView.setLong(R.id.chronometer, "setBase",
mN.when + (SystemClock.elapsedRealtime() - System.currentTimeMillis()));
contentView.setBoolean(R.id.chronometer, "setStarted", true);
- boolean countsDown = mN.extras.getBoolean(EXTRA_CHRONOMETER_COUNTS_DOWN);
+ boolean countsDown = mN.extras.getBoolean(EXTRA_CHRONOMETER_COUNT_DOWN);
contentView.setChronometerCountDown(R.id.chronometer, countsDown);
} else {
contentView.setViewVisibility(R.id.time, View.VISIBLE);
@@ -3559,8 +3560,8 @@
savedBundle.getBoolean(EXTRA_SHOW_WHEN));
publicExtras.putBoolean(EXTRA_SHOW_CHRONOMETER,
savedBundle.getBoolean(EXTRA_SHOW_CHRONOMETER));
- publicExtras.putBoolean(EXTRA_CHRONOMETER_COUNTS_DOWN,
- savedBundle.getBoolean(EXTRA_CHRONOMETER_COUNTS_DOWN));
+ publicExtras.putBoolean(EXTRA_CHRONOMETER_COUNT_DOWN,
+ savedBundle.getBoolean(EXTRA_CHRONOMETER_COUNT_DOWN));
publicExtras.putCharSequence(EXTRA_TITLE,
mContext.getString(R.string.notification_hidden_text));
mN.extras = publicExtras;
@@ -4459,8 +4460,8 @@
super.restoreFromExtras(extras);
mMessages.clear();
- mUserDisplayName = extras.getString(EXTRA_SELF_DISPLAY_NAME);
- mConversationTitle = extras.getString(EXTRA_CONVERSATION_TITLE);
+ mUserDisplayName = extras.getCharSequence(EXTRA_SELF_DISPLAY_NAME);
+ mConversationTitle = extras.getCharSequence(EXTRA_CONVERSATION_TITLE);
Parcelable[] parcelables = extras.getParcelableArray(EXTRA_MESSAGES);
if (parcelables != null && parcelables instanceof Parcelable[]) {
mMessages = Message.getMessagesFromBundleArray(parcelables);
@@ -4726,8 +4727,7 @@
static Message getMessageFromBundle(Bundle bundle) {
try {
- if (!bundle.containsKey(KEY_TEXT) || !bundle.containsKey(KEY_TIMESTAMP) ||
- !bundle.containsKey(KEY_SENDER)) {
+ if (!bundle.containsKey(KEY_TEXT) || !bundle.containsKey(KEY_TIMESTAMP)) {
return null;
} else {
Message message = new Message(bundle.getCharSequence(KEY_TEXT),
diff --git a/core/java/android/app/PendingIntent.java b/core/java/android/app/PendingIntent.java
index 412b098..cb15392 100644
--- a/core/java/android/app/PendingIntent.java
+++ b/core/java/android/app/PendingIntent.java
@@ -803,7 +803,8 @@
String resolvedType = intent != null ?
intent.resolveTypeIfNeeded(context.getContentResolver())
: null;
- int res = mTarget.send(code, intent, resolvedType,
+ int res = ActivityManagerNative.getDefault().sendIntentSender(
+ mTarget, code, intent, resolvedType,
onFinished != null
? new FinishedDispatcher(this, onFinished, handler)
: null,
diff --git a/core/java/android/app/ResourcesManager.java b/core/java/android/app/ResourcesManager.java
index f411178..b4e9db8 100644
--- a/core/java/android/app/ResourcesManager.java
+++ b/core/java/android/app/ResourcesManager.java
@@ -29,10 +29,10 @@
import android.content.res.ResourcesKey;
import android.hardware.display.DisplayManagerGlobal;
import android.os.IBinder;
+import android.os.LocaleList;
import android.os.Trace;
import android.util.ArrayMap;
import android.util.DisplayMetrics;
-import android.util.LocaleList;
import android.util.Log;
import android.util.Pair;
import android.util.Slog;
diff --git a/core/java/android/app/UiAutomation.java b/core/java/android/app/UiAutomation.java
index 5ec59b4..0d4d007 100644
--- a/core/java/android/app/UiAutomation.java
+++ b/core/java/android/app/UiAutomation.java
@@ -322,7 +322,10 @@
/**
* Destroy this UiAutomation. After calling this method, attempting to use the object will
* result in errors.
+ *
+ * @hide
*/
+ @TestApi
public void destroy() {
disconnect();
mIsDestroyed = true;
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index f78ed1e..a672d80 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -5062,26 +5062,6 @@
}
/**
- * Called by the system to get the user restrictions for a user.
- *
- * @param admin Which {@link DeviceAdminReceiver} this request is associated with.
- * @param userHandle user id the admin is running as.
- *
- * @hide
- */
- public Bundle getUserRestrictionsForUser(@NonNull ComponentName admin, int userHandle) {
- Bundle ret = null;
- if (mService != null) {
- try {
- ret = mService.getUserRestrictionsForUser(admin, userHandle);
- } catch (RemoteException e) {
- throw e.rethrowFromSystemServer();
- }
- }
- return ret == null ? new Bundle() : ret;
- }
-
- /**
* Called by profile or device owners to hide or unhide packages. When a package is hidden it is
* unavailable for use, but the data and actual package file remain.
*
diff --git a/core/java/android/app/admin/IDevicePolicyManager.aidl b/core/java/android/app/admin/IDevicePolicyManager.aidl
index 447ee29..ddec412 100644
--- a/core/java/android/app/admin/IDevicePolicyManager.aidl
+++ b/core/java/android/app/admin/IDevicePolicyManager.aidl
@@ -174,7 +174,6 @@
void setUserRestriction(in ComponentName who, in String key, boolean enable);
Bundle getUserRestrictions(in ComponentName who);
- Bundle getUserRestrictionsForUser(in ComponentName who, int userId);
void addCrossProfileIntentFilter(in ComponentName admin, in IntentFilter filter, int flags);
void clearCrossProfileIntentFilters(in ComponentName admin);
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 8f5ddf8..a43d06e 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -342,6 +342,14 @@
* {@link android.R.attr#isolatedProcess isolated},
* {@link android.R.attr#externalService external} service. This binds the service into the
* calling application's package, rather than the package in which the service is declared.
+ * <p>
+ * When using this flag, the code for the service being bound will execute under the calling
+ * application's package name and user ID. Because the service must be an isolated process,
+ * it will not have direct access to the application's data, though.
+ *
+ * The purpose of this flag is to allow applications to provide services that are attributed
+ * to the app using the service, rather than the application providing the service.
+ * </p>
*/
public static final int BIND_EXTERNAL_SERVICE = 0x80000000;
diff --git a/core/java/android/content/IIntentSender.aidl b/core/java/android/content/IIntentSender.aidl
index f3affa7..45c62d4 100644
--- a/core/java/android/content/IIntentSender.aidl
+++ b/core/java/android/content/IIntentSender.aidl
@@ -21,7 +21,7 @@
import android.os.Bundle;
/** @hide */
-interface IIntentSender {
- int send(int code, in Intent intent, String resolvedType,
+oneway interface IIntentSender {
+ void send(int code, in Intent intent, String resolvedType,
IIntentReceiver finishedReceiver, String requiredPermission, in Bundle options);
}
diff --git a/core/java/android/content/IntentSender.java b/core/java/android/content/IntentSender.java
index 13a767e..32ca6c2 100644
--- a/core/java/android/content/IntentSender.java
+++ b/core/java/android/content/IntentSender.java
@@ -17,10 +17,6 @@
package android.content;
import android.app.ActivityManagerNative;
-import android.content.Context;
-import android.content.Intent;
-import android.content.IIntentSender;
-import android.content.IIntentReceiver;
import android.os.Bundle;
import android.os.RemoteException;
import android.os.Handler;
@@ -191,7 +187,8 @@
String resolvedType = intent != null ?
intent.resolveTypeIfNeeded(context.getContentResolver())
: null;
- int res = mTarget.send(code, intent, resolvedType,
+ int res = ActivityManagerNative.getDefault().sendIntentSender(mTarget,
+ code, intent, resolvedType,
onFinished != null
? new FinishedDispatcher(this, onFinished, handler)
: null,
diff --git a/core/java/android/content/res/ColorStateList.java b/core/java/android/content/res/ColorStateList.java
index fb5bfd3..273522a 100644
--- a/core/java/android/content/res/ColorStateList.java
+++ b/core/java/android/content/res/ColorStateList.java
@@ -46,29 +46,81 @@
/**
*
* Lets you map {@link android.view.View} state sets to colors.
- *
+ * <p>
* {@link android.content.res.ColorStateList}s are created from XML resource files defined in the
- * "color" subdirectory directory of an application's resource directory. The XML file contains
- * a single "selector" element with a number of "item" elements inside. For example:
- *
+ * "color" subdirectory directory of an application's resource directory. The XML file contains
+ * a single "selector" element with a number of "item" elements inside. For example:
* <pre>
* <selector xmlns:android="http://schemas.android.com/apk/res/android">
- * <item android:state_focused="true" android:color="@color/testcolor1"/>
- * <item android:state_pressed="true" android:state_enabled="false" android:color="@color/testcolor2" />
- * <item android:state_enabled="false" android:color="@color/testcolor3" />
- * <item android:color="@color/testcolor5"/>
+ * <item android:state_focused="true"
+ * android:color="@color/sample_focused" />
+ * <item android:state_pressed="true"
+ * android:state_enabled="false"
+ * android:color="@color/sample_disabled_pressed" />
+ * <item android:state_enabled="false"
+ * android:color="@color/sample_disabled_not_pressed" />
+ * <item android:color="@color/sample_default" />
* </selector>
* </pre>
*
* This defines a set of state spec / color pairs where each state spec specifies a set of
* states that a view must either be in or not be in and the color specifies the color associated
- * with that spec. The list of state specs will be processed in order of the items in the XML file.
- * An item with no state spec is considered to match any set of states and is generally useful as
- * a final item to be used as a default. Note that if you have such an item before any other items
- * in the list then any subsequent items will end up being ignored.
- * <p>For more information, see the guide to <a
- * href="{@docRoot}guide/topics/resources/color-list-resource.html">Color State
- * List Resource</a>.</p>
+ * with that spec.
+ *
+ * <a name="StateSpec"></a>
+ * <h3>State specs</h3>
+ * <p>
+ * Each item defines a set of state spec and color pairs, where the state spec is a series of
+ * attributes set to either {@code true} or {@code false} to represent inclusion or exclusion. If
+ * an attribute is not specified for an item, it may be any value.
+ * <p>
+ * For example, the following item will be matched whenever the focused state is set; any other
+ * states may be set or unset:
+ * <pre>
+ * <item android:state_focused="true"
+ * android:color="@color/sample_focused" />
+ * </pre>
+ * <p>
+ * Typically, a color state list will reference framework-defined state attributes such as
+ * {@link android.R.attr#state_focused android:state_focused} or
+ * {@link android.R.attr#state_enabled android:state_enabled}; however, app-defined attributes may
+ * also be used.
+ * <p>
+ * <strong>Note:</strong> The list of state specs will be matched against in the order that they
+ * appear in the XML file. For this reason, more-specific items should be placed earlier in the
+ * file. An item with no state spec is considered to match any set of states and is generally
+ * useful as a final item to be used as a default.
+ * <p>
+ * If an item with no state spec if placed before other items, those items
+ * will be ignored.
+ *
+ * <a name="ItemAttributes"></a>
+ * <h3>Item attributes</h3>
+ * <p>
+ * Each item must define an {@link android.R.attr#color android:color} attribute, which may be
+ * an HTML-style hex color, a reference to a color resource, or -- in API 23 and above -- a theme
+ * attribute that resolves to a color.
+ * <p>
+ * Starting with API 23, items may optionally define an {@link android.R.attr#alpha android:alpha}
+ * attribute to modify the base color's opacity. This attribute takes a either floating-point value
+ * between 0 and 1 or a theme attribute that resolves as such. The item's overall color is
+ * calculated by multiplying by the base color's alpha channel by the {@code alpha} value. For
+ * example, the following item represents the theme's accent color at 50% opacity:
+ * <pre>
+ * <item android:state_enabled="false"
+ * android:color="?android:attr/colorAccent"
+ * android:alpha="0.5" />
+ * </pre>
+ *
+ * <a name="DeveloperGuide"></a>
+ * <h3>Developer guide</h3>
+ * <p>
+ * For more information, see the guide to
+ * <a href="{@docRoot}guide/topics/resources/color-list-resource.html">Color State
+ * List Resource</a>.
+ *
+ * @attr ref android.R.styleable#ColorStateListItem_alpha
+ * @attr ref android.R.styleable#ColorStateListItem_color
*/
public class ColorStateList extends ComplexColor implements Parcelable {
private static final String TAG = "ColorStateList";
diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java
index 2d0e74c..29e5b5d 100644
--- a/core/java/android/content/res/Configuration.java
+++ b/core/java/android/content/res/Configuration.java
@@ -28,10 +28,10 @@
import android.content.pm.ActivityInfo;
import android.content.pm.ActivityInfo.Config;
import android.os.Build;
+import android.os.LocaleList;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.TextUtils;
-import android.util.LocaleList;
import android.view.View;
import java.io.IOException;
diff --git a/core/java/android/content/res/ResourcesImpl.java b/core/java/android/content/res/ResourcesImpl.java
index 110df5d..dada612 100644
--- a/core/java/android/content/res/ResourcesImpl.java
+++ b/core/java/android/content/res/ResourcesImpl.java
@@ -35,10 +35,10 @@
import android.graphics.drawable.Drawable;
import android.icu.text.PluralRules;
import android.os.Build;
+import android.os.LocaleList;
import android.os.Trace;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
-import android.util.LocaleList;
import android.util.Log;
import android.util.LongSparseArray;
import android.util.Slog;
diff --git a/core/java/android/hardware/input/KeyboardLayout.java b/core/java/android/hardware/input/KeyboardLayout.java
index 2cafa08..d395578 100644
--- a/core/java/android/hardware/input/KeyboardLayout.java
+++ b/core/java/android/hardware/input/KeyboardLayout.java
@@ -17,9 +17,9 @@
package android.hardware.input;
import android.annotation.NonNull;
+import android.os.LocaleList;
import android.os.Parcel;
import android.os.Parcelable;
-import android.util.LocaleList;
import java.util.Locale;
diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java
index 923be5e..4799773 100644
--- a/core/java/android/inputmethodservice/InputMethodService.java
+++ b/core/java/android/inputmethodservice/InputMethodService.java
@@ -1714,18 +1714,9 @@
private void clearInsetOfPreviousIme() {
if (DEBUG) Log.v(TAG, "clearInsetOfPreviousIme() "
+ " mShouldClearInsetOfPreviousIme=" + mShouldClearInsetOfPreviousIme);
- if (!mShouldClearInsetOfPreviousIme || mWindow == null) return;
- try {
- // We do not call onWindowShown() and onWindowHidden() so as not to make the IME author
- // confused.
- // TODO: Find out a better way which has less side-effect.
- mWindow.show();
- mWindow.hide();
- } catch (WindowManager.BadTokenException e) {
- if (DEBUG) Log.v(TAG, "clearInsetOfPreviousIme: BadTokenException: IME is done.");
- mWindowVisible = false;
- mWindowAdded = false;
- }
+ if (!mShouldClearInsetOfPreviousIme) return;
+
+ mImm.clearLastInputMethodWindowForTransition(mToken);
mShouldClearInsetOfPreviousIme = false;
}
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java
index 43d9bf32..a45e6f5 100644
--- a/core/java/android/net/ConnectivityManager.java
+++ b/core/java/android/net/ConnectivityManager.java
@@ -3362,6 +3362,10 @@
/**
* Determines if the calling application is subject to metered network restrictions while
* running on background.
+ *
+ * @return {@link #RESTRICT_BACKGROUND_STATUS_DISABLED},
+ * {@link #RESTRICT_BACKGROUND_STATUS_ENABLED},
+ * or {@link #RESTRICT_BACKGROUND_STATUS_WHITELISTED}
*/
public @RestrictBackgroundStatus int getRestrictBackgroundStatus() {
try {
diff --git a/core/java/android/net/INetworkPolicyListener.aidl b/core/java/android/net/INetworkPolicyListener.aidl
index 812f1fe..93463b4 100644
--- a/core/java/android/net/INetworkPolicyListener.aidl
+++ b/core/java/android/net/INetworkPolicyListener.aidl
@@ -23,5 +23,6 @@
void onMeteredIfacesChanged(in String[] meteredIfaces);
void onRestrictBackgroundChanged(boolean restrictBackground);
void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted);
+ void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted);
}
diff --git a/core/java/android/net/UidRange.java b/core/java/android/net/UidRange.java
index 2e586b3..fd465d9 100644
--- a/core/java/android/net/UidRange.java
+++ b/core/java/android/net/UidRange.java
@@ -48,6 +48,17 @@
return start / PER_USER_RANGE;
}
+ public boolean contains(int uid) {
+ return start <= uid && uid <= stop;
+ }
+
+ /**
+ * @return {@code true} if this range contains every UID contained by the {@param other} range.
+ */
+ public boolean containsRange(UidRange other) {
+ return start <= other.start && other.stop <= stop;
+ }
+
@Override
public int hashCode() {
int result = 17;
diff --git a/core/java/android/nfc/NfcAdapter.java b/core/java/android/nfc/NfcAdapter.java
index 8406bcf..41ff9fd 100644
--- a/core/java/android/nfc/NfcAdapter.java
+++ b/core/java/android/nfc/NfcAdapter.java
@@ -392,6 +392,7 @@
/**
* A callback that is invoked when a tag is removed from the field.
+ * @see NfcAdapter#ignore
*/
public interface OnTagRemovedListener {
void onTagRemoved();
diff --git a/core/java/android/nfc/cardemulation/HostNfcFService.java b/core/java/android/nfc/cardemulation/HostNfcFService.java
index 1d4baf4..27c4976 100644
--- a/core/java/android/nfc/cardemulation/HostNfcFService.java
+++ b/core/java/android/nfc/cardemulation/HostNfcFService.java
@@ -42,8 +42,13 @@
* exactly one System Code and one NFCID2. For details about the use of
* System Code and NFCID2, see the NFC Forum Digital specification.</p>
* <p>To statically register a System Code and NFCID2 with the service, a {@link #SERVICE_META_DATA}
- * entry must be included in the declaration of the service. An example of a HostNfcFService
- * manifest declaration is shown below:
+ * entry must be included in the declaration of the service.
+ *
+ * <p>All {@link HostNfcFService HostNfcFService} declarations in the manifest must require the
+ * {@link android.Manifest.permission#BIND_NFC_SERVICE} permission
+ * in their <service> tag, to ensure that only the platform can bind to your service.</p>
+ *
+ * <p>An example of a HostNfcFService manifest declaration is shown below:
*
* <pre> <service android:name=".MyHostNfcFService" android:exported="true" android:permission="android.permission.BIND_NFC_SERVICE">
* <intent-filter>
diff --git a/core/java/android/os/IUserManager.aidl b/core/java/android/os/IUserManager.aidl
index 55b0d2a..b27cb32 100644
--- a/core/java/android/os/IUserManager.aidl
+++ b/core/java/android/os/IUserManager.aidl
@@ -58,6 +58,7 @@
boolean canHaveRestrictedProfile(int userHandle);
int getUserSerialNumber(int userHandle);
int getUserHandle(int userSerialNumber);
+ int getUserRestrictionSource(String restrictionKey, int userHandle);
Bundle getUserRestrictions(int userHandle);
boolean hasBaseUserRestriction(String restrictionKey, int userHandle);
boolean hasUserRestriction(in String restrictionKey, int userHandle);
diff --git a/core/java/android/util/LocaleList.aidl b/core/java/android/os/LocaleList.aidl
similarity index 96%
rename from core/java/android/util/LocaleList.aidl
rename to core/java/android/os/LocaleList.aidl
index f5de354..acb3648 100644
--- a/core/java/android/util/LocaleList.aidl
+++ b/core/java/android/os/LocaleList.aidl
@@ -14,6 +14,6 @@
* limitations under the License.
*/
-package android.util;
+package android.os;
parcelable LocaleList;
diff --git a/core/java/android/util/LocaleList.java b/core/java/android/os/LocaleList.java
similarity index 99%
rename from core/java/android/util/LocaleList.java
rename to core/java/android/os/LocaleList.java
index 3c3db58..8136796 100644
--- a/core/java/android/util/LocaleList.java
+++ b/core/java/android/os/LocaleList.java
@@ -14,15 +14,13 @@
* limitations under the License.
*/
-package android.util;
+package android.os;
import android.annotation.IntRange;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Size;
import android.icu.util.ULocale;
-import android.os.Parcel;
-import android.os.Parcelable;
import com.android.internal.annotations.GuardedBy;
diff --git a/core/java/android/os/UserManager.java b/core/java/android/os/UserManager.java
index 1948df9..dcec982 100644
--- a/core/java/android/os/UserManager.java
+++ b/core/java/android/os/UserManager.java
@@ -18,6 +18,7 @@
import android.Manifest;
import android.accounts.AccountManager;
+import android.annotation.IntDef;
import android.annotation.Nullable;
import android.annotation.RequiresPermission;
import android.annotation.SystemApi;
@@ -43,6 +44,8 @@
import com.android.internal.R;
import java.io.IOException;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
import java.util.ArrayList;
import java.util.List;
@@ -63,6 +66,41 @@
private final Context mContext;
/**
+ * @hide
+ * No user restriction.
+ */
+ @SystemApi
+ public static final int RESTRICTION_NOT_SET = 0x0;
+
+ /**
+ * @hide
+ * User restriction set by system/user.
+ */
+ @SystemApi
+ public static final int RESTRICTION_SOURCE_SYSTEM = 0x1;
+
+ /**
+ * @hide
+ * User restriction set by a device owner.
+ */
+ @SystemApi
+ public static final int RESTRICTION_SOURCE_DEVICE_OWNER = 0x2;
+
+ /**
+ * @hide
+ * User restriction set by a profile owner.
+ */
+ @SystemApi
+ public static final int RESTRICTION_SOURCE_PROFILE_OWNER = 0x4;
+
+ /** @hide */
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag=true, value={RESTRICTION_NOT_SET, RESTRICTION_SOURCE_SYSTEM,
+ RESTRICTION_SOURCE_DEVICE_OWNER, RESTRICTION_SOURCE_PROFILE_OWNER})
+ @SystemApi
+ public @interface UserRestrictionSource {}
+
+ /**
* Specifies if a user is disallowed from adding and removing accounts, unless they are
* {@link android.accounts.AccountManager#addAccountExplicitly programmatically} added by
* Authenticator.
@@ -1023,6 +1061,27 @@
}
/**
+ * @hide
+ *
+ * Returns who set a user restriction on a user.
+ * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
+ * @param restrictionKey the string key representing the restriction
+ * @param userHandle the UserHandle of the user for whom to retrieve the restrictions.
+ * @return The source of user restriction. Any combination of {@link #RESTRICTION_NOT_SET},
+ * {@link #RESTRICTION_SOURCE_SYSTEM}, {@link #RESTRICTION_SOURCE_DEVICE_OWNER}
+ * and {@link #RESTRICTION_SOURCE_PROFILE_OWNER}
+ */
+ @SystemApi
+ @UserRestrictionSource
+ public int getUserRestrictionSource(String restrictionKey, UserHandle userHandle) {
+ try {
+ return mService.getUserRestrictionSource(restrictionKey, userHandle.getIdentifier());
+ } catch (RemoteException re) {
+ throw re.rethrowFromSystemServer();
+ }
+ }
+
+ /**
* Returns the user-wide restrictions imposed on this user.
* @return a Bundle containing all the restrictions.
*/
diff --git a/core/java/android/os/health/SystemHealthManager.java b/core/java/android/os/health/SystemHealthManager.java
index 7c37fa4..32e8425 100644
--- a/core/java/android/os/health/SystemHealthManager.java
+++ b/core/java/android/os/health/SystemHealthManager.java
@@ -53,6 +53,8 @@
/**
* Obtain a SystemHealthManager object for the supplied context.
+ *
+ * @hide
*/
public static SystemHealthManager from(Context context) {
return (SystemHealthManager)context.getSystemService(Context.SYSTEM_HEALTH_SERVICE);
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 76f5175..8cc165d 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -48,6 +48,7 @@
import android.os.Bundle;
import android.os.DropBoxManager;
import android.os.IBinder;
+import android.os.LocaleList;
import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
@@ -58,7 +59,6 @@
import android.util.AndroidException;
import android.util.ArrayMap;
import android.util.ArraySet;
-import android.util.LocaleList;
import android.util.Log;
import android.util.MemoryIntArray;
@@ -2650,7 +2650,7 @@
* The serialized system locale value.
*
* Do not use this value directory.
- * To get system locale, use {@link android.util.LocaleList#getDefault} instead.
+ * To get system locale, use {@link LocaleList#getDefault} instead.
* To update system locale, use {@link com.android.internal.app.LocalePicker#updateLocales}
* instead.
* @hide
diff --git a/core/java/android/text/style/LocaleSpan.java b/core/java/android/text/style/LocaleSpan.java
index 91990df..b842851 100644
--- a/core/java/android/text/style/LocaleSpan.java
+++ b/core/java/android/text/style/LocaleSpan.java
@@ -21,11 +21,11 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.graphics.Paint;
+import android.os.LocaleList;
import android.os.Parcel;
import android.text.ParcelableSpan;
import android.text.TextPaint;
import android.text.TextUtils;
-import android.util.LocaleList;
import java.util.Locale;
diff --git a/core/java/android/view/Display.java b/core/java/android/view/Display.java
index 48eee05..2f2fe57 100644
--- a/core/java/android/view/Display.java
+++ b/core/java/android/view/Display.java
@@ -1168,6 +1168,9 @@
public HdrCapabilities() {
}
+ /**
+ * @hide
+ */
public HdrCapabilities(int[] supportedHdrTypes, float maxLuminance,
float maxAverageLuminance, float minLuminance) {
mSupportedHdrTypes = supportedHdrTypes;
diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java
index 0dfbe70..fb482b4 100644
--- a/core/java/android/view/DragEvent.java
+++ b/core/java/android/view/DragEvent.java
@@ -160,6 +160,8 @@
* ACTION_DRAG_STARTED.
* </p>
* @see #ACTION_DRAG_ENDED
+ * @see #getX()
+ * @see #getY()
*/
public static final int ACTION_DRAG_STARTED = 1;
@@ -323,17 +325,16 @@
/**
* Gets the X coordinate of the drag point. The value is only valid if the event action is
- * {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}.
- * @return The current drag point's Y coordinate
+ * {@link #ACTION_DRAG_STARTED}, {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}.
+ * @return The current drag point's X coordinate
*/
public float getX() {
return mX;
}
/**
- * Gets the Y coordinate of the drag point. The value is valid if the
- * event action is {@link #ACTION_DRAG_ENTERED}, {@link #ACTION_DRAG_LOCATION},
- * {@link #ACTION_DROP}, or {@link #ACTION_DRAG_EXITED}.
+ * Gets the Y coordinate of the drag point. The value is only valid if the event action is
+ * {@link #ACTION_DRAG_STARTED}, {@link #ACTION_DRAG_LOCATION} or {@link #ACTION_DROP}.
* @return The current drag point's Y coordinate
*/
public float getY() {
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 4ba97d5..f8a6a17 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -163,7 +163,12 @@
IAppTransitionAnimationSpecsFuture specsFuture, IRemoteCallback startedCallback,
boolean scaleUp);
void executeAppTransition();
- void setAppStartingWindow(IBinder token, String pkg, int theme,
+
+ /**
+ * Called to set the starting window for the input token and returns true if the starting
+ * window was set for the token.
+ */
+ boolean setAppStartingWindow(IBinder token, String pkg, int theme,
in CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes,
int icon, int logo, int windowFlags, IBinder transferFrom, boolean createIfNeeded);
void setAppVisibility(IBinder token, boolean visible);
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index ccb5ec4..d59c8ac 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -82,6 +82,13 @@
* and
* {@link SurfaceHolder.Callback#surfaceDestroyed SurfaceHolder.Callback.surfaceDestroyed()}.
* </ul>
+ *
+ * <p class="note"><strong>Note:</strong> Starting in platform version
+ * {@link android.os.Build.VERSION_CODES#N}, SurfaceView's window position is
+ * updated synchronously with other View rendering. This means that translating
+ * and scaling a SurfaceView on screen will not cause rendering artifacts. Such
+ * artifacts may occur on previous versions of the platform when its window is
+ * positioned asynchronously.</p>
*/
public class SurfaceView extends View {
static private final String TAG = "SurfaceView";
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index b060fa7..2f23b61 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -1579,7 +1579,19 @@
Log.d(View.VIEW_LOG_TAG, "Sending drag-started to view: " + child);
}
+ final float tx = mCurrentDragStartEvent.mX;
+ final float ty = mCurrentDragStartEvent.mY;
+
+ final float[] point = getTempPoint();
+ point[0] = tx;
+ point[1] = ty;
+ transformPointToViewLocal(point, child);
+
+ mCurrentDragStartEvent.mX = point[0];
+ mCurrentDragStartEvent.mY = point[1];
final boolean canAccept = child.dispatchDragEvent(mCurrentDragStartEvent);
+ mCurrentDragStartEvent.mX = tx;
+ mCurrentDragStartEvent.mY = ty;
if (canAccept) {
mChildrenInterestedInDrag.add(child);
if (!child.canAcceptDrag()) {
diff --git a/core/java/android/view/WindowManagerInternal.java b/core/java/android/view/WindowManagerInternal.java
index 4b188c4..610dff8 100644
--- a/core/java/android/view/WindowManagerInternal.java
+++ b/core/java/android/view/WindowManagerInternal.java
@@ -261,6 +261,13 @@
public abstract void saveLastInputMethodWindowForTransition();
/**
+ * Clears last input method window for transition.
+ *
+ * Note that it is assumed that this method is called only by InputMethodManagerService.
+ */
+ public abstract void clearLastInputMethodWindowForTransition();
+
+ /**
* Returns true when the hardware keyboard is available.
*/
public abstract boolean isHardKeyboardAvailable();
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 908a99d..e6f5b83 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -938,7 +938,11 @@
* be correct.
*
* @param attrs The LayoutParams of the window.
- * @param rotation Rotation of the display.
+ * @param taskBounds The bounds of the task this window is on or {@code null} if no task is
+ * associated with the window.
+ * @param displayRotation Rotation of the display.
+ * @param displayWidth The width of the display.
+ * @param displayHeight The height of the display.
* @param outContentInsets The areas covered by system windows, expressed as positive insets.
* @param outStableInsets The areas covered by stable system windows irrespective of their
* current visibility. Expressed as positive insets.
@@ -946,8 +950,9 @@
* @return Whether to always consume the navigation bar.
* See {@link #isNavBarForcedShownLw(WindowState)}.
*/
- public boolean getInsetHintLw(WindowManager.LayoutParams attrs, int rotation,
- Rect outContentInsets, Rect outStableInsets, Rect outOutsets);
+ public boolean getInsetHintLw(WindowManager.LayoutParams attrs, Rect taskBounds,
+ int displayRotation, int displayWidth, int displayHeight, Rect outContentInsets,
+ Rect outStableInsets, Rect outOutsets);
/**
* Called when layout of the windows is finished. After this function has
diff --git a/core/java/android/view/inputmethod/EditorInfo.java b/core/java/android/view/inputmethod/EditorInfo.java
index 85893b0..7b7ccae 100644
--- a/core/java/android/view/inputmethod/EditorInfo.java
+++ b/core/java/android/view/inputmethod/EditorInfo.java
@@ -18,11 +18,11 @@
import android.annotation.Nullable;
import android.os.Bundle;
+import android.os.LocaleList;
import android.os.Parcel;
import android.os.Parcelable;
import android.text.InputType;
import android.text.TextUtils;
-import android.util.LocaleList;
import android.util.Printer;
/**
diff --git a/core/java/android/view/inputmethod/InputMethodManager.java b/core/java/android/view/inputmethod/InputMethodManager.java
index 5a9a212..16187589 100644
--- a/core/java/android/view/inputmethod/InputMethodManager.java
+++ b/core/java/android/view/inputmethod/InputMethodManager.java
@@ -2140,6 +2140,28 @@
}
/**
+ * Tells the system that the IME decided to not show a window and the system no longer needs to
+ * use the previous IME's inset.
+ *
+ * <p>Caveat: {@link android.inputmethodservice.InputMethodService#clearInsetOfPreviousIme()}
+ * is the only expected caller of this method. Do not depend on this anywhere else.</p>
+ *
+ * <p>TODO: We probably need to reconsider how IME should be handled.</p>
+ * @hide
+ * @param token Supplies the identifying token given to an input method when it was started,
+ * which allows it to perform this operation on itself.
+ */
+ public void clearLastInputMethodWindowForTransition(final IBinder token) {
+ synchronized (mH) {
+ try {
+ mService.clearLastInputMethodWindowForTransition(token);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+ }
+
+ /**
* Force switch to the last used input method and subtype. If the last input method didn't have
* any subtypes, the framework will simply switch to the last input method with no subtype
* specified.
diff --git a/core/java/android/webkit/WebViewClient.java b/core/java/android/webkit/WebViewClient.java
index 8318656..76d3fb1 100644
--- a/core/java/android/webkit/WebViewClient.java
+++ b/core/java/android/webkit/WebViewClient.java
@@ -403,9 +403,7 @@
*
* @param view The WebView that is initiating the callback.
* @param event The key event.
- * @deprecated This method is subsumed by the more generic onUnhandledInputEvent.
*/
- @Deprecated
public void onUnhandledKeyEvent(WebView view, KeyEvent event) {
onUnhandledInputEventInternal(view, event);
}
@@ -427,6 +425,7 @@
*
* @param view The WebView that is initiating the callback.
* @param event The input event.
+ * @removed
*/
public void onUnhandledInputEvent(WebView view, InputEvent event) {
if (event instanceof KeyEvent) {
diff --git a/core/java/android/widget/DatePickerCalendarDelegate.java b/core/java/android/widget/DatePickerCalendarDelegate.java
index 332e89c..0a23b34 100755
--- a/core/java/android/widget/DatePickerCalendarDelegate.java
+++ b/core/java/android/widget/DatePickerCalendarDelegate.java
@@ -24,6 +24,8 @@
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.TypedArray;
+import android.icu.text.DisplayContext;
+import android.icu.text.SimpleDateFormat;
import android.os.Parcelable;
import android.text.format.DateFormat;
import android.text.format.DateUtils;
@@ -38,7 +40,6 @@
import android.widget.DayPickerView.OnDaySelectedListener;
import android.widget.YearPickerView.OnYearSelectedListener;
-import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Locale;
@@ -303,6 +304,7 @@
// Update the date formatter.
final String datePattern = DateFormat.getBestDateTimePattern(locale, "EMMMd");
mMonthDayFormat = new SimpleDateFormat(datePattern, locale);
+ mMonthDayFormat.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
mYearFormat = new SimpleDateFormat("y", locale);
// Update the header text.
diff --git a/core/java/android/widget/Editor.java b/core/java/android/widget/Editor.java
index 2813f0c..622567c 100644
--- a/core/java/android/widget/Editor.java
+++ b/core/java/android/widget/Editor.java
@@ -42,6 +42,7 @@
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
+import android.os.LocaleList;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.ParcelableParcel;
@@ -70,7 +71,6 @@
import android.text.style.TextAppearanceSpan;
import android.text.style.URLSpan;
import android.util.DisplayMetrics;
-import android.util.LocaleList;
import android.util.Log;
import android.util.SparseArray;
import android.view.ActionMode;
diff --git a/core/java/android/widget/SimpleMonthView.java b/core/java/android/widget/SimpleMonthView.java
index d8c7c35..97d834a 100644
--- a/core/java/android/widget/SimpleMonthView.java
+++ b/core/java/android/widget/SimpleMonthView.java
@@ -30,6 +30,7 @@
import android.graphics.Paint.Style;
import android.graphics.Rect;
import android.graphics.Typeface;
+import android.icu.text.DisplayContext;
import android.icu.text.SimpleDateFormat;
import android.os.Bundle;
import android.text.TextPaint;
@@ -184,6 +185,7 @@
private void updateMonthYearLabel() {
final String format = DateFormat.getBestDateTimePattern(mLocale, MONTH_YEAR_FORMAT);
final SimpleDateFormat formatter = new SimpleDateFormat(format, mLocale);
+ formatter.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
mMonthYearLabel = formatter.format(mCalendar.getTime());
}
diff --git a/core/java/android/widget/TextView.java b/core/java/android/widget/TextView.java
index a0843c7..3909307 100644
--- a/core/java/android/widget/TextView.java
+++ b/core/java/android/widget/TextView.java
@@ -52,6 +52,7 @@
import android.graphics.drawable.Drawable;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.LocaleList;
import android.os.Parcel;
import android.os.Parcelable;
import android.os.ParcelableParcel;
@@ -107,7 +108,6 @@
import android.text.style.UpdateAppearance;
import android.text.util.Linkify;
import android.util.AttributeSet;
-import android.util.LocaleList;
import android.util.Log;
import android.util.TypedValue;
import android.view.AccessibilityIterators.TextSegmentIterator;
diff --git a/core/java/com/android/internal/app/LocaleHelper.java b/core/java/com/android/internal/app/LocaleHelper.java
index 7e9587a..106999b 100644
--- a/core/java/com/android/internal/app/LocaleHelper.java
+++ b/core/java/com/android/internal/app/LocaleHelper.java
@@ -18,7 +18,7 @@
import android.icu.text.ListFormatter;
import android.icu.util.ULocale;
-import android.util.LocaleList;
+import android.os.LocaleList;
import java.text.Collator;
import java.util.Comparator;
diff --git a/core/java/com/android/internal/app/LocalePicker.java b/core/java/com/android/internal/app/LocalePicker.java
index b1b019c..472f583 100644
--- a/core/java/com/android/internal/app/LocalePicker.java
+++ b/core/java/com/android/internal/app/LocalePicker.java
@@ -26,9 +26,9 @@
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.Bundle;
+import android.os.LocaleList;
import android.os.RemoteException;
import android.provider.Settings;
-import android.util.LocaleList;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
diff --git a/core/java/com/android/internal/app/LocalePickerWithRegion.java b/core/java/com/android/internal/app/LocalePickerWithRegion.java
index ea62899..04929a7 100644
--- a/core/java/com/android/internal/app/LocalePickerWithRegion.java
+++ b/core/java/com/android/internal/app/LocalePickerWithRegion.java
@@ -21,8 +21,8 @@
import android.app.ListFragment;
import android.content.Context;
import android.os.Bundle;
+import android.os.LocaleList;
import android.text.TextUtils;
-import android.util.LocaleList;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
diff --git a/core/java/com/android/internal/app/procstats/ProcessState.java b/core/java/com/android/internal/app/procstats/ProcessState.java
index 80d6070..8c5df08 100644
--- a/core/java/com/android/internal/app/procstats/ProcessState.java
+++ b/core/java/com/android/internal/app/procstats/ProcessState.java
@@ -277,7 +277,7 @@
if (!mDead) {
return;
}
- Slog.wtfStack(TAG, "ProcessState dead: name=" + mName
+ Slog.w(TAG, "ProcessState dead: name=" + mName
+ " pkg=" + mPackage + " uid=" + mUid + " common.name=" + mCommonProcess.mName);
}
diff --git a/core/java/com/android/internal/inputmethod/InputMethodUtils.java b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
index 6dc0c60..a028449 100644
--- a/core/java/com/android/internal/inputmethod/InputMethodUtils.java
+++ b/core/java/com/android/internal/inputmethod/InputMethodUtils.java
@@ -26,13 +26,13 @@
import android.content.pm.IPackageManager;
import android.content.pm.PackageManager;
import android.content.res.Resources;
+import android.os.LocaleList;
import android.os.RemoteException;
import android.provider.Settings;
import android.text.TextUtils;
import android.text.TextUtils.SimpleStringSplitter;
import android.util.ArrayMap;
import android.util.ArraySet;
-import android.util.LocaleList;
import android.util.Pair;
import android.util.Printer;
import android.util.Slog;
diff --git a/core/java/com/android/internal/inputmethod/LocaleUtils.java b/core/java/com/android/internal/inputmethod/LocaleUtils.java
index 2aa660e..b18f83c 100644
--- a/core/java/com/android/internal/inputmethod/LocaleUtils.java
+++ b/core/java/com/android/internal/inputmethod/LocaleUtils.java
@@ -22,7 +22,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.icu.util.ULocale;
-import android.util.LocaleList;
+import android.os.LocaleList;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/core/java/com/android/internal/os/ZygoteInit.java b/core/java/com/android/internal/os/ZygoteInit.java
index 5554182..a3e41e4 100644
--- a/core/java/com/android/internal/os/ZygoteInit.java
+++ b/core/java/com/android/internal/os/ZygoteInit.java
@@ -56,6 +56,8 @@
import java.io.InputStreamReader;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
+import java.security.Security;
+import java.security.Provider;
import java.util.ArrayList;
/**
@@ -198,6 +200,7 @@
// Ask the WebViewFactory to do any initialization that must run in the zygote process,
// for memory sharing purposes.
WebViewFactory.prepareWebViewInZygote();
+ warmUpJcaProviders();
Log.d(TAG, "end preload");
}
@@ -220,6 +223,24 @@
}
/**
+ * Warm up the providers that are already registered.
+ *
+ * By doing it here we avoid that each app does it when requesting a service from the
+ * provider for the first time.
+ */
+ private static void warmUpJcaProviders() {
+ long startTime = SystemClock.uptimeMillis();
+ Trace.traceBegin(
+ Trace.TRACE_TAG_DALVIK, "Starting warm up of JCA providers");
+ for (Provider p : Security.getProviders()) {
+ p.warmUpServiceProvision();
+ }
+ Log.i(TAG, "Warmed up JCA providers in "
+ + (SystemClock.uptimeMillis()-startTime) + "ms.");
+ Trace.traceEnd(Trace.TRACE_TAG_DALVIK);
+ }
+
+ /**
* Performs Zygote process initialization. Loads and initializes
* commonly used classes.
*
diff --git a/core/java/com/android/internal/policy/BackdropFrameRenderer.java b/core/java/com/android/internal/policy/BackdropFrameRenderer.java
index b781fd4..28281b3c 100644
--- a/core/java/com/android/internal/policy/BackdropFrameRenderer.java
+++ b/core/java/com/android/internal/policy/BackdropFrameRenderer.java
@@ -109,9 +109,15 @@
Drawable captionBackgroundDrawableDrawable, Drawable userCaptionBackgroundDrawable,
int statusBarColor, int navigationBarColor) {
mDecorView = decorView;
- mResizingBackgroundDrawable = resizingBackgroundDrawable;
- mCaptionBackgroundDrawable = captionBackgroundDrawableDrawable;
- mUserCaptionBackgroundDrawable = userCaptionBackgroundDrawable;
+ mResizingBackgroundDrawable = resizingBackgroundDrawable != null
+ ? resizingBackgroundDrawable.getConstantState().newDrawable()
+ : null;
+ mCaptionBackgroundDrawable = captionBackgroundDrawableDrawable != null
+ ? captionBackgroundDrawableDrawable.getConstantState().newDrawable()
+ : null;
+ mUserCaptionBackgroundDrawable = userCaptionBackgroundDrawable != null
+ ? userCaptionBackgroundDrawable.getConstantState().newDrawable()
+ : null;
if (mCaptionBackgroundDrawable == null) {
mCaptionBackgroundDrawable = mResizingBackgroundDrawable;
}
diff --git a/core/java/com/android/internal/util/ArrayUtils.java b/core/java/com/android/internal/util/ArrayUtils.java
index 18f715e..a9a6364 100644
--- a/core/java/com/android/internal/util/ArrayUtils.java
+++ b/core/java/com/android/internal/util/ArrayUtils.java
@@ -162,6 +162,13 @@
}
/**
+ * Checks if given array is null or has zero elements.
+ */
+ public static boolean isEmpty(@Nullable boolean[] array) {
+ return array == null || array.length == 0;
+ }
+
+ /**
* Checks that value is present as at least one of the elements of the array.
* @param array the array to check in
* @param value the value to check for
diff --git a/core/java/com/android/internal/view/IInputMethodManager.aidl b/core/java/com/android/internal/view/IInputMethodManager.aidl
index 94c94c1..cb7c3bf 100644
--- a/core/java/com/android/internal/view/IInputMethodManager.aidl
+++ b/core/java/com/android/internal/view/IInputMethodManager.aidl
@@ -79,5 +79,7 @@
boolean setInputMethodEnabled(String id, boolean enabled);
void setAdditionalInputMethodSubtypes(String id, in InputMethodSubtype[] subtypes);
int getInputMethodWindowVisibleHeight();
+ void clearLastInputMethodWindowForTransition(in IBinder token);
+
oneway void notifyUserAction(int sequenceNumber);
}
diff --git a/core/java/com/android/internal/widget/FloatingToolbar.java b/core/java/com/android/internal/widget/FloatingToolbar.java
index 8cc8509..594581a 100644
--- a/core/java/com/android/internal/widget/FloatingToolbar.java
+++ b/core/java/com/android/internal/widget/FloatingToolbar.java
@@ -899,6 +899,8 @@
mOverflowPanel.setAlpha(1);
mOverflowPanel.setVisibility(View.VISIBLE);
mOverflowButton.setImageDrawable(mArrow);
+ mOverflowButton.setContentDescription(mContext.getString(
+ R.string.floating_toolbar_close_overflow_description));
// Update x-coordinates depending on RTL state.
if (isRTL()) {
@@ -940,6 +942,8 @@
mOverflowPanel.setAlpha(0);
mOverflowPanel.setVisibility(View.INVISIBLE);
mOverflowButton.setImageDrawable(mOverflow);
+ mOverflowButton.setContentDescription(mContext.getString(
+ R.string.floating_toolbar_open_overflow_description));
if (hasOverflow()) {
// Update x-coordinates depending on RTL state.
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index 07912cd..886265a 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -119,6 +119,9 @@
// These are the components that are enabled by default as VR mode listener services.
final ArraySet<ComponentName> mDefaultVrComponents = new ArraySet<>();
+ // These are the permitted backup transport service components
+ final ArraySet<ComponentName> mBackupTransportWhitelist = new ArraySet<>();
+
public static SystemConfig getInstance() {
synchronized (SystemConfig.class) {
if (sInstance == null) {
@@ -176,6 +179,10 @@
return mDefaultVrComponents;
}
+ public ArraySet<ComponentName> getBackupTransportWhitelist() {
+ return mBackupTransportWhitelist;
+ }
+
SystemConfig() {
// Read configuration from system
readPermissions(Environment.buildPath(
@@ -452,6 +459,23 @@
mDefaultVrComponents.add(new ComponentName(pkgname, clsname));
}
XmlUtils.skipCurrentTag(parser);
+ } else if ("backup-transport-whitelisted-service".equals(name) && allowFeatures) {
+ String serviceName = parser.getAttributeValue(null, "service");
+ if (serviceName == null) {
+ Slog.w(TAG, "<backup-transport-whitelisted-service> without service in "
+ + permFile + " at " + parser.getPositionDescription());
+ } else {
+ ComponentName cn = ComponentName.unflattenFromString(serviceName);
+ if (cn == null) {
+ Slog.w(TAG,
+ "<backup-transport-whitelisted-service> with invalid service name "
+ + serviceName + " in "+ permFile
+ + " at " + parser.getPositionDescription());
+ } else {
+ mBackupTransportWhitelist.add(cn);
+ }
+ }
+ XmlUtils.skipCurrentTag(parser);
} else {
XmlUtils.skipCurrentTag(parser);
continue;
diff --git a/core/res/res/layout/time_picker_header_material.xml b/core/res/res/layout/time_picker_header_material.xml
index 7019ced..8fd87b8 100644
--- a/core/res/res/layout/time_picker_header_material.xml
+++ b/core/res/res/layout/time_picker_header_material.xml
@@ -82,7 +82,10 @@
android:id="@+id/am_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:padding="8dp"
+ android:paddingLeft="4dp"
+ android:paddingRight="4dp"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
android:layout_marginBottom="-8dp"
android:textAppearance="@style/TextAppearance.Material.TimePicker.AmPmLabel"
android:lines="1"
@@ -96,7 +99,10 @@
android:id="@+id/pm_label"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:padding="8dp"
+ android:paddingLeft="4dp"
+ android:paddingRight="4dp"
+ android:paddingTop="8dp"
+ android:paddingBottom="8dp"
android:textAppearance="@style/TextAppearance.Material.TimePicker.AmPmLabel"
android:lines="1"
android:ellipsize="none"
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index ac36a2f..9b7fbd8 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -2322,6 +2322,8 @@
<java-symbol type="layout" name="floating_popup_overflow_list_item" />
<java-symbol type="layout" name="floating_popup_overflow_image_list_item" />
<java-symbol type="layout" name="floating_popup_overflow_button" />
+ <java-symbol type="string" name="floating_toolbar_open_overflow_description" />
+ <java-symbol type="string" name="floating_toolbar_close_overflow_description" />
<java-symbol type="dimen" name="floating_toolbar_height" />
<java-symbol type="dimen" name="floating_toolbar_menu_button_side_padding" />
<java-symbol type="dimen" name="floating_toolbar_overflow_side_padding" />
diff --git a/core/tests/coretests/src/android/content/res/ResourcesManagerTest.java b/core/tests/coretests/src/android/content/res/ResourcesManagerTest.java
index d4bb0f3..39a2907 100644
--- a/core/tests/coretests/src/android/content/res/ResourcesManagerTest.java
+++ b/core/tests/coretests/src/android/content/res/ResourcesManagerTest.java
@@ -18,9 +18,9 @@
import android.annotation.NonNull;
import android.app.ResourcesManager;
import android.os.Binder;
+import android.os.LocaleList;
import android.support.test.filters.SmallTest;
import android.util.DisplayMetrics;
-import android.util.LocaleList;
import android.util.TypedValue;
import android.view.Display;
import junit.framework.TestCase;
diff --git a/core/tests/coretests/src/android/util/LocaleListTest.java b/core/tests/coretests/src/android/os/LocaleListTest.java
similarity index 98%
rename from core/tests/coretests/src/android/util/LocaleListTest.java
rename to core/tests/coretests/src/android/os/LocaleListTest.java
index de1382d..17ef773 100644
--- a/core/tests/coretests/src/android/util/LocaleListTest.java
+++ b/core/tests/coretests/src/android/os/LocaleListTest.java
@@ -13,10 +13,9 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package android.util;
+package android.os;
import android.test.suitebuilder.annotation.SmallTest;
-import android.util.LocaleList;
import java.util.Locale;
diff --git a/core/tests/coretests/src/android/print/BasePrintTest.java b/core/tests/coretests/src/android/print/BasePrintTest.java
index d56a405..2c2ee8c 100644
--- a/core/tests/coretests/src/android/print/BasePrintTest.java
+++ b/core/tests/coretests/src/android/print/BasePrintTest.java
@@ -29,6 +29,7 @@
import android.content.res.Configuration;
import android.content.res.Resources;
import android.os.CancellationSignal;
+import android.os.LocaleList;
import android.os.ParcelFileDescriptor;
import android.os.SystemClock;
import android.print.PrintAttributes;
@@ -43,7 +44,6 @@
import android.printservice.PrintService;
import android.test.InstrumentationTestCase;
import android.util.DisplayMetrics;
-import android.util.LocaleList;
import org.mockito.stubbing.Answer;
diff --git a/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java b/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java
index 6b5e4ad..97ea885 100644
--- a/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java
+++ b/core/tests/coretests/src/com/android/internal/inputmethod/InputMethodUtilsTest.java
@@ -22,12 +22,12 @@
import android.content.pm.ServiceInfo;
import android.content.res.Configuration;
import android.content.res.Resources;
+import android.os.LocaleList;
import android.os.Parcel;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.ArrayMap;
import android.util.ArraySet;
-import android.util.LocaleList;
import android.view.inputmethod.InputMethodInfo;
import android.view.inputmethod.InputMethodSubtype.InputMethodSubtypeBuilder;
import android.view.inputmethod.InputMethodSubtype;
diff --git a/core/tests/coretests/src/com/android/internal/inputmethod/LocaleUtilsTest.java b/core/tests/coretests/src/com/android/internal/inputmethod/LocaleUtilsTest.java
index deba40f..cd339fb 100644
--- a/core/tests/coretests/src/com/android/internal/inputmethod/LocaleUtilsTest.java
+++ b/core/tests/coretests/src/com/android/internal/inputmethod/LocaleUtilsTest.java
@@ -16,9 +16,9 @@
package com.android.internal.inputmethod;
+import android.os.LocaleList;
import android.test.InstrumentationTestCase;
import android.test.suitebuilder.annotation.SmallTest;
-import android.util.LocaleList;
import java.util.ArrayList;
import java.util.Locale;
diff --git a/docs/html-intl/intl/es/preview/features/background-optimization.jd b/docs/html-intl/intl/es/preview/features/background-optimization.jd
index 3f5cf22..151b5fc 100644
--- a/docs/html-intl/intl/es/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/es/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=Optimizaciones en segundo plano
page.metaDescription=Nuevas restricciones para difusiones implícitas.
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/es/preview/features/direct-boot.jd b/docs/html-intl/intl/es/preview/features/direct-boot.jd
index 1992e48..14a2edf 100644
--- a/docs/html-intl/intl/es/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/es/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=Arranque directo
page.keywords=preview,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/es/preview/features/icu4j-framework.jd b/docs/html-intl/intl/es/preview/features/icu4j-framework.jd
index 4c5fc7b..b91a05e 100644
--- a/docs/html-intl/intl/es/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/es/preview/features/icu4j-framework.jd
@@ -1,4 +1,5 @@
page.title=API de ICU4J del framework de Android
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/es/preview/features/multilingual-support.jd b/docs/html-intl/intl/es/preview/features/multilingual-support.jd
index 3963f98..70ee22a 100644
--- a/docs/html-intl/intl/es/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/es/preview/features/multilingual-support.jd
@@ -1,4 +1,6 @@
page.title=Idioma y configuración regional
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/es/preview/features/security-config.jd b/docs/html-intl/intl/es/preview/features/security-config.jd
index 862fcd9..fc0a4bc 100644
--- a/docs/html-intl/intl/es/preview/features/security-config.jd
+++ b/docs/html-intl/intl/es/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=Configuración de seguridad de la red
page.keywords=preview,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/es/preview/features/tv-recording-api.jd b/docs/html-intl/intl/es/preview/features/tv-recording-api.jd
index 459d48f..a01a70c 100644
--- a/docs/html-intl/intl/es/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/es/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=Grabación de TV
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/in/preview/features/background-optimization.jd b/docs/html-intl/intl/in/preview/features/background-optimization.jd
index 2836959..ae8d973 100644
--- a/docs/html-intl/intl/in/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/in/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=Optimisasi Latar Belakang
page.metaDescription=Pembatasan baru untuk siaran implisit.
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/in/preview/features/direct-boot.jd b/docs/html-intl/intl/in/preview/features/direct-boot.jd
index 2952bb5..622475d 100644
--- a/docs/html-intl/intl/in/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/in/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=Direct Boot
page.keywords=preview,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/in/preview/features/icu4j-framework.jd b/docs/html-intl/intl/in/preview/features/icu4j-framework.jd
index 5b7547f..d50758e 100644
--- a/docs/html-intl/intl/in/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/in/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
page.title=ICU4J Android Framework API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/in/preview/features/multilingual-support.jd b/docs/html-intl/intl/in/preview/features/multilingual-support.jd
index 0a73bcf..573b3c5 100644
--- a/docs/html-intl/intl/in/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/in/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
page.title=Bahasa dan Lokal
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/in/preview/features/security-config.jd b/docs/html-intl/intl/in/preview/features/security-config.jd
index 2eb45d4..3d7758d 100644
--- a/docs/html-intl/intl/in/preview/features/security-config.jd
+++ b/docs/html-intl/intl/in/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=Network Security Configuration
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/in/preview/features/tv-recording-api.jd b/docs/html-intl/intl/in/preview/features/tv-recording-api.jd
index 2f9ad7e..7b9ca01 100644
--- a/docs/html-intl/intl/in/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/in/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=Perekaman TV
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ja/preview/features/background-optimization.jd b/docs/html-intl/intl/ja/preview/features/background-optimization.jd
index 278e545..a002147 100644
--- a/docs/html-intl/intl/ja/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/ja/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=バックグラウンド処理の最適化
page.metaDescription=暗黙的なブロードキャストに対する新しい制限。
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ja/preview/features/direct-boot.jd b/docs/html-intl/intl/ja/preview/features/direct-boot.jd
index 3b3bcb1..fe0d720 100644
--- a/docs/html-intl/intl/ja/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/ja/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=ダイレクト ブート
page.keywords=preview,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd
index 791a67f..c6b3d62 100644
--- a/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
page.title=ICU4J Android フレームワーク API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ja/preview/features/multilingual-support.jd b/docs/html-intl/intl/ja/preview/features/multilingual-support.jd
index b84ac60..543ecdd 100644
--- a/docs/html-intl/intl/ja/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/ja/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
page.title=言語とロケール
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ja/preview/features/security-config.jd b/docs/html-intl/intl/ja/preview/features/security-config.jd
index 6facba6..adc99af 100644
--- a/docs/html-intl/intl/ja/preview/features/security-config.jd
+++ b/docs/html-intl/intl/ja/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=ネットワーク セキュリティ構成
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd
index a212935..775ed66 100644
--- a/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/ja/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=TV の録画
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ko/preview/features/background-optimization.jd b/docs/html-intl/intl/ko/preview/features/background-optimization.jd
index 817d216..e671017 100644
--- a/docs/html-intl/intl/ko/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/ko/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=백그라운드 최적화
page.metaDescription=암시적 브로드캐스트에 대한 새로운 제한.
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ko/preview/features/direct-boot.jd b/docs/html-intl/intl/ko/preview/features/direct-boot.jd
index 6ffb387..4ff1354 100644
--- a/docs/html-intl/intl/ko/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/ko/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=직접 부팅
-page.keywords=preview,sdk,direct boot
+page.keywords=androidn,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd
index 77f1feb..724ee65 100644
--- a/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
page.title=ICU4J Android 프레임워크 API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ko/preview/features/multilingual-support.jd b/docs/html-intl/intl/ko/preview/features/multilingual-support.jd
index eb8e8a7..f2c9cb9 100644
--- a/docs/html-intl/intl/ko/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/ko/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
page.title=언어 및 로케일
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ko/preview/features/security-config.jd b/docs/html-intl/intl/ko/preview/features/security-config.jd
index 505df81..8e68e49 100644
--- a/docs/html-intl/intl/ko/preview/features/security-config.jd
+++ b/docs/html-intl/intl/ko/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=네트워크 보안 구성
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd
index 73bba1f..d29260f 100644
--- a/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/ko/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=TV 녹화
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd b/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd
index a328d89..244c188 100644
--- a/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=Otimizações em segundo plano
page.metaDescription=Novas restrições a transmissões implícitas.
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd b/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd
index a462b23..830e389 100644
--- a/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=Inicialização direta
page.keywords=preview,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd b/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd
index 290ea0d..f93f82b 100644
--- a/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
page.title=APIs de estrutura do Android para ICU4J
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd b/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd
index 77ad4b7..3a8ec3a 100644
--- a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
page.title=Idioma e localidade
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/pt-br/preview/features/security-config.jd b/docs/html-intl/intl/pt-br/preview/features/security-config.jd
index 673de0f..e5185d8 100644
--- a/docs/html-intl/intl/pt-br/preview/features/security-config.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=Configurações de segurança de rede
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd b/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd
index 95b5787..9b72f3a 100644
--- a/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/pt-br/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=Gravação para TV
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ru/preview/features/background-optimization.jd b/docs/html-intl/intl/ru/preview/features/background-optimization.jd
index a222343..b84e785 100644
--- a/docs/html-intl/intl/ru/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/ru/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=Оптимизация фоновых процессов
page.metaDescription=Новые ограничения для неявных широковещательных сообщений.
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ru/preview/features/direct-boot.jd b/docs/html-intl/intl/ru/preview/features/direct-boot.jd
index 2bf03f6..b49624b 100644
--- a/docs/html-intl/intl/ru/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/ru/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=Режим Direct Boot
page.keywords=preview,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd
index 8d92dd4..7d22408 100644
--- a/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
page.title=API-интерфейсы ICU4J в платформе Android
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd
index f9c47d3..83dd2b4 100644
--- a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
page.title=Язык и языковой стандарт
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/ru/preview/features/security-config.jd b/docs/html-intl/intl/ru/preview/features/security-config.jd
index ff3494f..de117d6 100644
--- a/docs/html-intl/intl/ru/preview/features/security-config.jd
+++ b/docs/html-intl/intl/ru/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=Конфигурация сетевой безопасности
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd b/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd
index ff1c84e..5e6ce45 100644
--- a/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/ru/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=Запись ТВ
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/vi/preview/features/background-optimization.jd b/docs/html-intl/intl/vi/preview/features/background-optimization.jd
index 3fdb8d7..9554725 100644
--- a/docs/html-intl/intl/vi/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/vi/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=Tối ưu hóa Chạy ngầm
page.metaDescription=Các hạn chế mới đối với truyền phát không biểu thị.
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/vi/preview/features/direct-boot.jd b/docs/html-intl/intl/vi/preview/features/direct-boot.jd
index b844a0f..d95d831 100644
--- a/docs/html-intl/intl/vi/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/vi/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=Khởi động Trực tiếp
page.keywords=preview,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd b/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd
index 96316e9..63f6825 100644
--- a/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
page.title=API Khuôn khổ Android ICU4J
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/vi/preview/features/multilingual-support.jd b/docs/html-intl/intl/vi/preview/features/multilingual-support.jd
index 21252f8..94a7127 100644
--- a/docs/html-intl/intl/vi/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/vi/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
page.title=Ngôn ngữ và Bản địa
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/vi/preview/features/security-config.jd b/docs/html-intl/intl/vi/preview/features/security-config.jd
index 8d8bf34..797e198 100644
--- a/docs/html-intl/intl/vi/preview/features/security-config.jd
+++ b/docs/html-intl/intl/vi/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=Cấu hình Bảo mật mạng
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd b/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd
index be91c29..6dfb53e 100644
--- a/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/vi/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=Ghi lại TV
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd b/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd
index 7a12ecf..baa9bbb 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=后台优化
page.metaDescription=隐式广播的新限制。
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd b/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd
index 176896a..07bab2e 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=直接启动
page.keywords=preview,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd b/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd
index 1dd5a74..779ed8d 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
page.title=ICU4J Android 框架 API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd b/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd
index 4c32313..0446207 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
page.title=语言和区域设置
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/zh-cn/preview/features/security-config.jd b/docs/html-intl/intl/zh-cn/preview/features/security-config.jd
index dc09c78..2c87a3a 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/security-config.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=网络安全配置
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd b/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd
index 1b15879..83d6653 100644
--- a/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/zh-cn/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=TV 录制
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd b/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd
index 3a85c45..d088381 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=背景最佳化
page.metaDescription=對隱含式廣播的新限制。
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd b/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd
index 22865c0..a42ec11 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=直接開機
page.keywords=preview,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd b/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd
index 77bbc4d..b6816b8 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd
@@ -1,4 +1,6 @@
page.title=ICU4J Android 架構 API
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd b/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd
index aada78f..5570b4d 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
page.title=語言和地區設定
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html-intl/intl/zh-tw/preview/features/security-config.jd b/docs/html-intl/intl/zh-tw/preview/features/security-config.jd
index a74712a..4fe8d0d 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/security-config.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=網路安全性設定
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd b/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd
index 7d50a3c..d857477 100644
--- a/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd
+++ b/docs/html-intl/intl/zh-tw/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=電視錄製
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml
index 69e598a..4211c6f 100644
--- a/docs/html/_redirects.yaml
+++ b/docs/html/_redirects.yaml
@@ -703,8 +703,18 @@
to: /training/location/index.html
- from: /google/gcm/adv.html
to: /google/gcm/gcm.html
-- from: /work
- to: /training/enterprise/index.html
+- from: /training/enterprise/index.html
+ to: /work/index.html
+- from: /training/enterprise/app-compatibility.html
+ to: /work/managed-profiles.html
+- from: /training/enterprise/app-restrictions.html
+ to: /work/app-restrictions.html
+- from: /training/enterprise/cosu.html
+ to: /work/cosu.html
+- from: /training/enterprise/device-management-policy.html
+ to: /work/device-management-policy.html
+- from: /training/enterprise/work-policy-ctrl.html
+ to: https://developers.google.com/android/work/build-dpc
- from: /distribute/tools/promote/badge-files.html
to: https://play.google.com/intl/en_us/badges/
- from: /google/gcm/...
@@ -824,11 +834,11 @@
- from: /r/studio-ui/avd-manager.html
to: /studio/run/managing-avds.html
- from: /r/studio-ui/rundebugconfig.html
- to: /studio/run/emulator.html
+ to: /studio/run/index.html
- from: /r/studio-ui/devicechooser.html
to: /studio/run/emulator.html
- from: /r/studio-ui/virtualdeviceconfig.html
- to: /studio/run/emulator.html
+ to: /studio/run/managing-avds.html
- from: /r/studio-ui/emulator.html
to: /studio/run/emulator.html
- from: /r/studio-ui/instant-run.html
@@ -973,6 +983,8 @@
to: /studio/test/monkeyrunner/index.html
- from: /tools/help/MonkeyRunner.html
to: /studio/test/monkeyrunner/MonkeyRunner.html
+- from: /tools/help/monitor.html
+ to: /studio/profile/monitor.html
- from: /tools/help/proguard.html
to: /studio/build/shrink-code.html
- from: /tools/help/sdk-manager.html
diff --git a/docs/html/about/dashboards/index.jd b/docs/html/about/dashboards/index.jd
index c61837b..31e37bf 100644
--- a/docs/html/about/dashboards/index.jd
+++ b/docs/html/about/dashboards/index.jd
@@ -247,86 +247,86 @@
{"api":0},{"api":1},{"api":2},{"api":3},
{
"api":4,
- "link":"<a href='/about/versions/android-1.6.html'>1.6</a>",
+ "link":'<a href="/about/versions/android-1.6.html">1.6</a>',
"codename":"Donut",
},
{ "api":5},
{ "api":6},
{
"api":7,
- "link":"<a href='/about/versions/android-2.1.html'>2.1</a>",
+ "link":'<a href="/about/versions/android-2.1.html">2.1</a>',
"codename":"Eclair",
},
{
"api":8,
- "link":"<a href='/about/versions/android-2.2.html'>2.2</a>",
+ "link":'<a href="/about/versions/android-2.2.html">2.2</a>',
"codename":"Froyo"
},
{
"api":9,
- "link":"<a href='/about/versions/android-2.3.html'>2.3 -<br>2.3.2</a>",
+ "link":'<a href="/about/versions/android-2.3.html">2.3 -<br>2.3.2</a>',
"codename":"Gingerbread"
},
{
"api":10,
- "link":"<a href='/about/versions/android-2.3.3.html'>2.3.3 -<br>2.3.7</a>",
+ "link":'<a href="/about/versions/android-2.3.3.html">2.3.3 -<br>2.3.7</a>',
"codename":"Gingerbread"
},
{ "api":11},
{
"api":12,
- "link":"<a href='/about/versions/android-3.1.html'>3.1</a>",
+ "link":'<a href="/about/versions/android-3.1.html">3.1</a>',
"codename":"Honeycomb"
},
{
"api":13,
- "link":"<a href='/about/versions/android-3.2.html'>3.2</a>",
+ "link":'<a href="/about/versions/android-3.2.html">3.2</a>',
"codename":"Honeycomb"
},
{ "api":14},
{
"api":15,
- "link":"<a href='/about/versions/android-4.0.html'>4.0.3 -<br>4.0.4</a>",
+ "link":'<a href="/about/versions/android-4.0.html">4.0.3 -<br>4.0.4</a>',
"codename":"Ice Cream Sandwich"
},
{
"api":16,
- "link":"<a href='/about/versions/android-4.1.html'>4.1.x</a>",
+ "link":'<a href="/about/versions/android-4.1.html">4.1.x</a>',
"codename":"Jelly Bean"
},
{
"api":17,
- "link":"<a href='/about/versions/android-4.2.html'>4.2.x</a>",
+ "link":'<a href="/about/versions/android-4.2.html">4.2.x</a>',
"codename":"Jelly Bean"
},
{
"api":18,
- "link":"<a href='/about/versions/android-4.3.html'>4.3</a>",
+ "link":'<a href="/about/versions/android-4.3.html">4.3</a>',
"codename":"Jelly Bean"
},
{
"api":19,
- "link":"<a href='/about/versions/android-4.4.html'>4.4</a>",
+ "link":'<a href="/about/versions/android-4.4.html">4.4</a>',
"codename":"KitKat"
},
{
"api":20,
- "link":"<a href='/about/versions/android-4.4.html'>4.4W</a>",
+ "link":'<a href="/about/versions/android-4.4.html">4.4W</a>',
"codename":"KitKat for Wear"
},
{
"api":21,
- "link":"<a href='/about/versions/android-5.0.html'>5.0</a>",
+ "link":'<a href="/about/versions/android-5.0.html">5.0</a>',
"codename":"Lollipop"
},
{
"api":22,
- "link":"<a href='/about/versions/android-5.1.html'>5.1</a>",
+ "link":'<a href="/about/versions/android-5.1.html">5.1</a>',
"codename":"Lollipop"
},
{
"api":23,
- "link":"<a href='/about/versions/marshmallow/index.html'>6.0</a>",
+ "link":'<a href="/about/versions/marshmallow/index.html">6.0</a>',
"codename":"Marshmallow"
}
];
diff --git a/docs/html/develop/index.jd b/docs/html/develop/index.jd
index fb86295..bd933f4 100644
--- a/docs/html/develop/index.jd
+++ b/docs/html/develop/index.jd
@@ -28,19 +28,16 @@
support for N Preview development on top of the faster Android Emulator and
Instant Run feature from 2.0.</p>
-<div class="cols">
- <div class="col-1of2">
+<p style="margin-top:24px">
<a class="dac-hero-cta" href="{@docRoot}studio/index.html">
<span class="dac-sprite dac-auto-chevron"></span>
Get Android Studio
</a>
- </div>
- <div class="col-1of2">
+ <wbr>
<a class="dac-hero-cta" href="{@docRoot}studio/releases/index.html">
<span class="dac-sprite dac-auto-chevron"></span>
See the release notes</a>
- </div>
-</div>
+</p>
</div>
</div>
@@ -72,10 +69,9 @@
<div class="resource-widget resource-flow-layout col-16"
data-query="collection:develop/landing/tools"
data-cardSizes="6x6"
- data-maxResults="15"
+ data-maxResults="24"
data-initial-results="3"
- data-items-per-page="6"
- data-sortOrder="random"></div>
+ data-items-per-page="6"></div>
</div></section>
<section class="dac-section dac-gray"><div class="wrap">
diff --git a/docs/html/distribute/googleplay/work/about.jd b/docs/html/distribute/googleplay/work/about.jd
index a31bca2..79e8a89 100644
--- a/docs/html/distribute/googleplay/work/about.jd
+++ b/docs/html/distribute/googleplay/work/about.jd
@@ -52,10 +52,13 @@
<h3 id="design">Develop a great app for business</h3>
<ul>
- <li>Follow best practices for security and manage user data properly. Businesses
- are more conscious of data security and employee productivity, especially when it
- comes to features that share information with other services.</li>
- <li>Support the <a href="{@docRoot}training/enterprise/app-restrictions.html">App Configuration framework</a> to let an administrator remotely configure app settings such as:
+ <li>Follow best practices for security and manage user data
+ properly. Businesses are more conscious of data security and
+ employee productivity, especially when it comes to features that
+ share information with other services.</li>
+ <li>Support the <a href="{@docRoot}work/app-restrictions.html"
+ >App Configuration framework</a> to let an administrator remotely
+ configure app settings such as:
<ul>
<li>Server address and protocol settings</li>
<li>The ability to switch features on and off</li>
@@ -65,11 +68,15 @@
</li>
<li>Request the minimum permissions that your app needs.</li>
<li>Make sure communication to your backend and data in your backend is secure.</li>
- <li>Implement authorization policies that will minimize the number of your employees that can access user data.</li>
- <li><a href={@docRoot}training/enterprise/app-compatibility.html>Offer compatibility with work
- profile</a> and test that with the <a href="{@docRoot}samples/BasicManagedProfile/index.html"
- >BasicManagedProfile sample app</a>.</li>
- <li>Support <a href="{@docRoot}training/enterprise/app-restrictions.html">app restrictions</a> so that IT admins can remotely configure your app through leading EMM solutions.</li>
+ <li>Implement authorization policies that will minimize the number of your
+ employees that can access user data.</li>
+ <li><a href="{@docRoot}work/managed-profiles.html">Offer compatibility with work
+ profile</a> and test that with the
+ <a href="{@docRoot}samples/BasicManagedProfile/index.html"
+ >BasicManagedProfile sample app</a>.</li>
+ <li>Support <a href="{@docRoot}work/app-restrictions.html">app restrictions</a>
+ so that IT admins can remotely configure your app through leading
+ EMM solutions.</li>
</ul>
<h3 id="support">Provide support and maintenance</h3>
diff --git a/docs/html/google/play/billing/billing_admin.jd b/docs/html/google/play/billing/billing_admin.jd
index 2203f71..a1135bf 100644
--- a/docs/html/google/play/billing/billing_admin.jd
+++ b/docs/html/google/play/billing/billing_admin.jd
@@ -26,193 +26,164 @@
</div>
<p>In-app billing frees you from processing financial transactions, but you still need to perform a
-few administrative tasks, including setting up and maintaining your product list on the Google Play
-Developer Console, registering test accounts, and handling refunds when necessary.</p>
+few administrative tasks. These tasks include the following:</p>
+<ul>
+ <li>Setting up and maintaining your product list on the Google Play Developer Console.</li>
+ <li>Registering test accounts.</li>
+ <li>Handling refunds when necessary.</li>
+</ul>
+</p>
-<p>You must have a Google Play publisher account to register test accounts. And you must have a
-Google payments merchant account to create a product list and issue refunds to your users. If you
+<p>To register a test account, you must have a Google Play publisher account. If you
already have a publisher account on Google Play, you can use your existing account. You do not
-need to register for a new account to support in-app billing.</p>
+need to register for a new account to support in-app billing. If you don't have a publisher
+account, you can register as a Google Play developer and set up a publisher account through the <a
+href="http://play.google.com/apps/publish">Google Play Developer Console</a>.</p>
-<p>If you do not have a publisher account, you can register as a Google Play
-developer and set up a publisher account at the <a
-href="http://play.google.com/apps/publish">Google Play Developer Console</a>. If you do not
-have a Google payments merchant account, you can register for one through the
-Developer Console.</p>
+<p>If you want to create a product list and issue refunds to your users, you must have a
+Google payments merchant account. If you don't have a merchant account, you can
+register for one through the Developer Console.</p>
<h2 id="billing-list-setup">Creating a Product List</h2>
<p>The Google Play Developer Console provides a product list for each of your published
-applications. You can sell an item using Google Play's in-app billing feature only if the item is
-listed on an application's product list. Each application has its own product list; you cannot sell
-items that appear on another application's product list.</p>
+apps. You can sell an item using Google Play's in-app billing feature only if the item is
+listed on an app's product list. Each app has its own product list; you cannot sell
+items that appear on another app's product list.</p>
-<div class="figure-right">
- <figure id="fig-iap">
- <img src="{@docRoot}images/in-app-billing/in_app_products.png" width="700"
- alt="The Mythical Journey app lists two in-app products, Invisibility Potion and Sleeping Potion.">
- <figcaption>
- <b>Figure 1. </b>You can access an application's product list by
- selecting the <strong>In-app Products</strong> link in the main Apps
- navigation.
- </figcaption>
- </figure>
-</div>
+<p>You can access an app's product list by opening the <strong>In-app Products</strong>
+page for an app that is listed in your developer account. The link to the
+<strong>In-app Products</strong> page appears only if you have a Google payments merchant
+account and the app's manifest includes the
+<code>com.android.vending.BILLING</code> permission. For more information about this
+permission, see <a href="{@docRoot}google/play/billing/billing_integrate.html#billing-permission">
+Updating Your App's Manifest</a>.</p>
-<p>You can access an application's product list by clicking the <strong>In-App Products</strong>
-link in applications listed in your developer account (see
-figure 1). The <strong>In-App Products</strong> link appears only if you have a Google payments
-merchant account and the application's manifest includes the <code>com.android.vending.BILLING</code>
-permission.</p>
+<p>A product list specifies items you are selling in an app: in-app products,
+subscriptions, or a combination of both. For each item, the product list contains information
+such as product ID, product description, and price. You can create a product list for any
+published app, including apps published to the alpha and beta channels.</p>
-<p>A product list specifies items you are selling in an application — in-app products,
-subscriptions, or a combination of both. For each item, the product list contains information such as a product id,
-product description, and price. The product list stores only metadata about the items
-you are selling in your application. It does not store any digital content. You are responsible for
-storing and delivering the digital content that you sell in your applications.</p>
-
-<p>You can create a product list for any published application, or any
-application in the alpha or beta channels, that's been
-uploaded and saved to the Developer Console. However, you must have a Google payments merchant
-account and the application's manifest must include the <code>com.android.vending.BILLING</code>
-permission. If an application's manifest does not include this permission, you will be able to edit
-existing items in the product list, but you won't be able to add new items to the list. For more
-information about this permission, see
-<a href="{@docRoot}google/play/billing/billing_integrate.html#billing-permission">Updating Your
-Application's Manifest</a>.</p>
+<p>The product list stores only metadata about the items you are selling in your app.
+It does not store any digital content. You are responsible for storing and delivering
+the digital content that you sell in your apps.</p>
<p class="note"><strong>Note:</strong> Previously, you could test an app by
-uploading an unpublished "draft" version. This functionality is no longer
+uploading an unpublished draft version. This functionality is no longer
supported; instead, you must publish it to the alpha or beta distribution
channel. For more information, see <a
href="{@docRoot}google/play/billing/billing_testing.html#draft_apps">Draft Apps
are No Longer Supported</a>.
-<p>In addition, an application package can have only one product list. If you create a product
-list for an application, and you use the <a
+<p>In addition, an app package can have only one product list. If you create a product
+list for an app, and you use the <a
href="{@docRoot}google/play/publishing/multiple-apks.html">multiple APK feature</a> to distribute
-more than one APK for that application, the product list applies to all APK versions that are
-associated with the application listing. You cannot create individual product lists for each APK if
+more than one APK for that app, the product list applies to all APK versions that are
+associated with the app listing. You cannot create individual product lists for each APK if
you are using the multiple APK feature.</p>
-<p>You can add items to a product list two ways: you can add items one at a time by using the In-app
-Products UI (see figure 2), or you can add a batch of items by importing the items from a
+<p>You can add items to a product list two ways: you can add items one at a time on the <strong>In-app
+Products</strong> page, or you can add a batch of items by importing the items from a
comma-separated values (CSV) file. Adding items one at a time is useful if your
-application has only a few in-app items or you are adding only a few items to a
-product list for testing purposes. The CSV file method is useful if your application has a large
+app has only a few in-app items or you are adding only a few items to a
+product list for testing purposes. The CSV file method is useful if your app has a large
number of in-app items.</p>
-<p class="note"><strong>Note:</strong> Batch upload of product lists containing subscriptions is not yet supported.
-Also, you cannot perform a batch upload containing changes to in-app products that are linked to a
+<p class="note"><strong>Note:</strong> Batch upload of product lists containing
+ subscriptions is not supported. Also, when updating existing items in a batch upload,
+ you cannot include changes to in-app products that are linked to a
<a href="#pricing-template">pricing template</a>.</p>
<h3 id="billing-form-add">Adding items one at a time to a product list</h3>
-<p>To add an item to a product list using the In-app Products UI, follow these steps:</p>
+<p>To add an item to a product list using the Developer Console UI, follow these steps:</p>
<ol>
<li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
- <li>In the <strong>All Applications</strong> panel, click on the
- app name, then select <strong>In-app Products</strong>.</li>
- <li>Click <strong>Add new product</strong> (see figure 2) and provide the product type and ID for the item you are
- selling. Click <strong>Continue</strong>.</li>
- <li>Enter additional information about the item, then click <strong>Save</strong> or <strong>Publish</strong>.
+ <li>In the <strong>All applications</strong> panel, click on the
+ app name, then open the <strong>In-app Products</strong> page.</li>
+ <li><p>Click <strong>Add new product</strong>. After you provide the product type and ID for the item you are
+ selling, click <strong>Continue</strong>.</p>
+ <dl>
+ <dt>Product Type</dt>
+ <dd>
+ <p>The product type can be <strong>Managed product</strong> or <strong>Subscription</strong>. You cannot
+ change an item's product type after you create the item. For more information, see
+ <a href="#billing-purchase-type">Choosing a Product Type</a>.</p>
+ <p class="note"><strong>Note: </strong>For subscription items, you cannot change the
+ item's price once you have published the item.</p>
+ </dd>
+ <dt>Product ID</dt>
+ <dd>
+ <p>Product IDs are unique across an app's namespace. A product ID must start with a
+ lowercase letter or a number and must be composed of only lowercase letters (a-z), numbers
+ (0-9), underscores (_), and periods (.). The product ID <code>android.test</code> is reserved, as are all
+ product IDs that start with <code>android.test</code>.</p>
+ <p class="note"><strong>Note: </strong>Be sure to plan your product ID namespace carefully. You
+ cannot modify an item's product ID after the item is created, and you cannot reuse
+ a product ID within an app.</p>
+ </dd>
+ </dl>
+ </li>
+ <li><p>Enter additional information about the item, then click <strong>Save</strong>.</p>
+ <dl>
+ <dt>Publishing State</dt>
+ <dd>
+ <p>An item's publishing state can be <strong>Active</strong> or
+ <strong>Inactive</strong>. To be visible to a user during checkout, an item's publishing state must be set to
+ <strong>Active</strong>, and the item's app must be published on Google Play.</p>
+ <p class="note"><strong>Note:</strong> If you're using a test account, users can see active items
+ within unpublished apps, as well. For more information, see <a
+ href="{@docRoot}google/play/billing/billing_testing.html#billing-testing-real">Testing In-app
+ Billing</a>.</p>
+ </dd>
+ <dt>Languages and Translations</dt>
+ <dd>
+ <p>By default, in-app products inherit their default language from the parent app.</p>
+ <p>You can provide localized titles and descriptions for your in-app
+ products by selecting <strong>Add Translations</strong>. If you want Google
+ Play to translate your title and description for you, based on the title and
+ description in the default language, just choose the languages that you
+ want to offer. You can also provide custom translations in specific
+ languages.</p>
+ </dd>
+ <dt>Title</dt>
+ <dd>
+ The title is a short descriptor for the item. An example of a title is: "Sleeping potion."
+ Every item must have a title. The title is visible to users during checkout. For optimum appearance,
+ titles should be no longer than 25 characters; however, titles can be up to 55 characters in length.
+ </dd>
+ <dt>Description</dt>
+ <dd>
+ The description is a long descriptor for the item. An example of a description is:
+ "Instantly puts creatures to sleep. Does not work on angry elves." Every item must have a description.
+ Descriptions can be up to 80 characters in length.
+ </dd>
+ <dt>Price</dt>
+ <dd>
+ <p>Provide a price in your home currency, or link the price to an existing
+ pricing template. Based on the price you enter or the prices
+ from the pricing template, the system autofills country-specific prices for
+ different currencies. These generated prices use current exchange rates and
+ locally relevant pricing patterns (see figure 1).</p>
+ <p>You can also change prices for other currencies manually, but you can do
+ this only if a currency is used in one of the target countries for your
+ app. You can specify target countries for your app on the
+ <strong>Pricing & Distribution</strong> page in the Google Play
+ Developer Console.</p>
+ </dd>
+ </dl>
+ </li>
</ol>
-<div class="figure-right">
- <figure id="fig-anp">
- <img src="{@docRoot}images/in-app-billing/add_new_product.png" width="300"
- alt="Adding a managed product with a Product ID of basic_sleeping_potion.">
- <figcaption>
- <b>Figure 2. </b>The <em>Add New Product</em> page lets you
- provide basic information about a paid app or in-app product.
- </figcaption>
- </figure>
-</div>
-
-<div class="figure-right">
- <figure id="fig-nmp">
- <img src="{@docRoot}images/in-app-billing/new_managed_product.png" width="700"
- alt="">
- <figcaption>
- <b>Figure 3. </b>The <em>New Managed Product</em> page lets you finish
- adding items to an app’s product list.
- </figcaption>
- </figure>
-</div>
-
-<div class="figure-right">
- <figure id="fig-elp">
- <img src="{@docRoot}images/in-app-billing/edit_local_prices.png" width="700"
- alt="An item that costs 1.99 in USD usually costs a different amount in AUD,
- EUR, or BOB. Some countries also add tax to the price.">
- <figcaption>
- <b>Figure 4. </b>Specifying additional currencies for an in-app product.
- </figcaption>
- </figure>
-</div>
-
-<p>You must enter the following information for each item in a product list (see
- figures 2 and 3):</p>
-<ul>
- <li><strong>In-app Product ID</strong>
- <p>Product IDs are unique across an application's namespace. A product ID must start with a
- lowercase letter or a number, and must be composed using only lowercase letters (a-z), numbers
- (0-9), underscores (_), and dots (.). The product ID <code>"android.test"</code> is reserved, as are all
- product IDs that start with <code>"android.test"</code>.</p>
- <p class="note"><strong>Note: </strong>Be sure to plan your product ID namespace carefully. You
- cannot modify an item's product ID after it is created, and you cannot reuse
- a product ID.</p>
- </li>
- <li><strong>Product Type</strong>
- <p>The product type can be <strong>Managed product</strong> or <strong>Subscription</strong>. You cannot
- change an item's product type after you set it. For more information, see
- <a href="#billing-purchase-type">Choosing a product type</a>.</p>
- <p class="note"><strong>Note: </strong>For subscription items, note that you cannot change the
- item's price once you have published it.</p>
- </li>
- <li><strong>Publishing State</strong>
- <p>An item's publishing state can be <strong>Published</strong> or <strong>Unpublished
- </strong>. To be visible to a user during checkout, an item's publishing state must be set to
- <strong>Published</strong>, and the item's application must be published on Google Play.</p>
- <p class="note"><strong>Note:</strong> This is not true for test accounts. An item is visible to
- a test account if the application is not published and the item is published. See <a
- href="{@docRoot}google/play/billing/billing_testing.html#billing-testing-real">Testing In-app
- Billing</a> for more information.</p>
- </li>
- <li><strong>Languages and Translations</strong>
- <p>You can provide localized titles and descriptions for your in-app
- products by selecting <strong>Add Translations</strong>. If you want Google
- Play to translate your title and description for you, based on the title and
- description in the default language, just choose the languages that you
- want to offer. If you want to provide custom translations in specific
- languages, you can also do that. By default, an in-app product inherits its
- default language from the parent application.</p>
- </li>
- <li><strong>Title</strong>
- <p>The title is a short descriptor for the item. For example, "Sleeping potion."
- Every item must have a title. The title is visible to
- users during checkout. For optimum appearance, titles should be no longer than 25 characters;
- however, titles can be up to 55 characters in length.</p>
- </li>
- <li><strong>Description</strong>
- <p>The description is a long descriptor for the item. For example, "Instantly puts creatures to
- sleep. Does not work on angry elves." Every item must have a description. Descriptions can be
- up to 80 characters in length.</p>
- </li>
- <li><strong>Price</strong>
- <p>Provide a price in your home currency, or link the price to an existing
- pricing template (see figure 4). Based on the price you enter or the prices
- from the pricing template, the system autofills country-specific prices for
- different currencies. These generated prices use today's exchange rates and
- locally-relevant pricing patterns.</p>
- <p>You can also change prices for other currencies manually, but you can do
- this only if a currency is used in one of the target countries for your
- application. You can specify target countries for your app on the
- <strong>Pricing & Distribution</strong> page in the Google Play
- Developer Console.</p>
- </li>
-</ul>
+<figure id="fig-elp">
+ <img class="border-img" src="{@docRoot}images/in-app-billing/edit_local_prices.png"
+ width="700" alt="An item that costs 1.99 in USD usually costs a different
+ amount in AUD, EUR, or BOB. Some countries also add tax to the price.">
+ <figcaption>
+ <b>Figure 1. </b>Specifying additional currencies for an in-app product.
+ </figcaption>
+</figure>
<h3 id="billing-bulk-add">Adding a batch of items to a product list</h3>
@@ -227,18 +198,16 @@
do not use auto-fill, prices you provide must include tax.</p>
<p class="note"><strong>Note:</strong> Batch upload of product lists containing
-subscriptions is not yet supported. Also, you cannot perform a batch upload
-containing changes to in-app products that are linked to a
+subscriptions is not supported. Also, when updating existing items in a batch
+upload, you cannot include changes to in-app products that are linked to a
<a href="#pricing-template">pricing template</a>.</p>
-
-
<p>To import the items that are specified in your CSV file, do the following:</p>
<ol>
<li><a href="http://play.google.com/apps/publish">Log in</a> to your publisher account.</li>
- <li>In the <strong>All Applications</strong> panel, click on the app
- name, then select <strong>In-app Products</strong>.</li>
+ <li>In the <strong>All applications</strong> panel, select the app
+ name, then open the <strong>In-app Products</strong> page.</li>
<li>On the In-app Products List page, click <strong>Import/Export</strong>
> <strong>Import in-app products from CSV file</strong>, then select your
CSV file.
@@ -260,8 +229,8 @@
<h4 id="billing-bulk-format">Formatting batches of items</h4>
-<p>The CSV file uses commas (,) and semi-colons (;) to separate data values.
-Commas are used to separate primary data values, and semi-colons are used to
+<p>The CSV file uses commas (,) and semicolons (;) to separate data values.
+Commas are used to separate primary data values, and semicolons are used to
separate subvalues. For example, the syntax for the CSV file is as follows:</p>
<p>"<em>product_id</em>","<em>publish_state</em>","<em>purchase_type</em>","<em>autotranslate</em>
@@ -271,86 +240,108 @@
<p>Descriptions and usage details are provided below.</p>
-<ul>
- <li><em>product_id</em>
- <p>This is equivalent to the In-app Product ID setting in the In-app Products UI. If you specify
+<dl>
+ <dt>product_id</dt>
+ <dd>
+ This is equivalent to the In-app Product ID setting in the In-app Products UI. If you specify
a <em>product_id</em> that already exists in a product list, and you choose to overwrite
the product list while importing the CSV file, the data for the existing item is overwritten with
the values specified in the CSV file. The overwrite feature does not delete items that are on a
- product list but not present in the CSV file.</p>
- </li>
- <li><em>publish_state</em>
- <p>This is equivalent to the Publishing State setting in the In-app Products UI. Can be <code>
- published</code> or <code>unpublished</code>.</p>
- </li>
- <li><em>purchase_type</em>
- <p>This is equivalent to the Product Type setting in the In-app Products UI. Can be <code>
+ product list but not present in the CSV file.
+ </dd>
+ <dt>publish_state</dt>
+ <dd>
+ This is equivalent to the Publishing State setting in the In-app Products UI. Can be <code>
+ published</code> or <code>unpublished</code>.
+ </dd>
+ <dt>purchase_type</dt>
+ <dd>
+ This is equivalent to the Product Type setting in the In-app Products UI. Can be <code>
managed_by_android</code>, which is equivalent to <strong>Managed per user account
</strong> in the In-app Products UI, or <code>managed_by_publisher</code>, which is equivalent
- to <strong>Unmanaged</strong> in the In-app Products UI.</p>
- </li>
- <li><em>autotranslate</em>
- <p>This is equivalent to selecting the <strong>Fill fields with auto translation</strong>
- checkbox in the In-app Products UI. Can be <code>true</code> or <code>false</code>.</p>
- </li>
- <li><em>locale</em>
+ to <strong>Unmanaged</strong> in the In-app Products UI.
+ </dd>
+ <dt>autotranslate</dt>
+ <dd>
+ This is equivalent to selecting the <strong>Fill fields with auto translation</strong>
+ checkbox in the In-app Products UI. Can be <code>true</code> or <code>false</code>.
+ </dd>
+ <dt>locale</dt>
+ <dd>
<p>This is equivalent to the Language setting in the In-app Products UI. You must have an entry
for the default locale. The default locale must be the first entry in the list of
locales, and it must include a <em>title</em> and <em>description</em>. If you want to provide
translated versions of the <em>title</em> and <em>description</em> in addition to the default,
you must use the following syntax rules:</p>
- <p>If <em>autotranslate</em> is <code>true</code>, you must specify the default locale,
- default title, default description, and other locales using the following format:</p>
- <p>"true,"<em>default_locale</em>; <em>default_locale_title</em>;
- <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_3</em>, ..."</p>
- <p>If <em>autotranslate</em> is <code>false</code>, you must specify the default locale,
- default title, and default description as well as the translated titles and descriptions using
- the following format:</p>
- <p>"false,"<em>default_locale</em>; <em>default_locale_title</em>;
- <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_2_title</em>;
- <em>local_2_description</em>; <em>locale_3</em>; <em>locale_3_title</em>;
- <em>locale_3_description</em>; ..."</p>
+ <ul>
+ <li>
+ <p>If <em>autotranslate</em> is <code>true</code>, you must specify the default locale,
+ default title, default description, and other locales using the following format:</p>
+ <p>"true,"<em>default_locale</em>; <em>default_locale_title</em>;
+ <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_3</em>, ..."</p>
+ </li>
+ <li>
+ <p>If <em>autotranslate</em> is <code>false</code>, you must specify the default locale,
+ default title, and default description as well as the translated titles and descriptions using
+ the following format:</p>
+ <p>"false,"<em>default_locale</em>; <em>default_locale_title</em>;
+ <em>default_locale_description</em>; <em>locale_2</em>; <em>locale_2_title</em>;
+ <em>local_2_description</em>; <em>locale_3</em>; <em>locale_3_title</em>;
+ <em>locale_3_description</em>; ..."</p>
+ </li>
+ </ul>
<p>See table 1 for a list of the language codes you can use with the <em>locale</em> field.</p>
- </li>
- <li><em>title</em>
- <p>This is equivalent to the Title setting in the In-app Products UI. If the <em>title</em>
- contains a semicolon, it must be escaped with a backslash (for example, "\;"). A backslash
- should also be escaped with a backslash (for example, "\\").</p>
- </li>
- <li><em>description</em>
- <p>This is equivalent to the Description in the In-app Products UI. If the <em>description</em>
- contains a semicolon, it must be escaped with a backslash (for example, "\;"). A backslash
- should also be escaped with a backslash (for example, "\\").</p>
- </li>
- <li><em>autofill</em>
+ </dd>
+ <dt>title</dt>
+ <dd>
+ This is equivalent to the Title setting in the In-app Products UI. If the <em>title</em>
+ contains a semicolon, it must be escaped with a backslash (for example, <code>\;</code>). Also, a backslash
+ must be escaped with a backslash (for example, <code>\\</code>).
+ </dd>
+ <dt>description</dt>
+ <dd>
+ This is equivalent to the Description in the In-app Products UI. If the <em>description</em>
+ contains a semicolon, it must be escaped with a backslash (for example, <code>\;</code>). Also, a backslash
+ must be escaped with a backslash (for example, <code>\\</code>).
+ </dd>
+ <dt>autofill</dt>
+ <dd>
<p>This is equivalent to clicking <strong>Auto Fill</strong> in the In-app Products UI. Can be
<code>true</code> or <code>false</code>. The syntax for specifying the <em>country</em>
- and <em>price</em> varies depending on which <em>autofill</em> setting you use.</p>
- <p>If <em>autofill</em> is set to <code>true</code>, you need to specify only the default
- price in your home currency, and you must use this syntax:</p>
- <p>"true","<em>default_price_in_home_currency</em>"
- <p>If <em>autofill</em> is set to <code>false</code>, you need to specify a <em>country</em>
- and a <em>price</em> for each currency, and you must use the following syntax:</p>
- <p>"false", "<em>home_country</em>; <em>default_price_in_home_currency</em>; <em>country_2</em>;
- <em>country_2_price</em>; <em>country_3</em>; <em>country_3_price</em>; ..."</p>
+ and <em>price</em> varies depending on which <em>autofill</em> setting you use:</p>
+ <ul>
+ <li>
+ <p>If <em>autofill</em> is set to <code>true</code>, you need to specify only the default
+ price in your home currency, and you must use this syntax:</p>
+ <p>"true","<em>default_price_in_home_currency</em>"
+ </li>
+ <li>
+ <p>If <em>autofill</em> is set to <code>false</code>, you need to specify a <em>country</em>
+ and a <em>price</em> for each currency, and you must use the following syntax:</p>
+ <p>"false", "<em>home_country</em>; <em>default_price_in_home_currency</em>; <em>country_2</em>;
+ <em>country_2_price</em>; <em>country_3</em>; <em>country_3_price</em>; ..."</p>
+ </li>
+ </ul>
<p class="note"><strong>Note: </strong>If you use an <em>autofill</em> value of <code>false</code>
and set country prices manually, you must incorporate country-specific
pricing patterns, including tax rates, into the prices you provide.</p>
- </li>
- <li><em>country</em>
- <p>The country for which you are specifying a price. You can only list countries that your
- application is targeting. The country codes are two-letter uppercase
+ </dd>
+ <dt>country</dt>
+ <dd>
+ The country for which you are specifying a price. You can only list countries that your
+ app is targeting. The country codes are two-letter uppercase
ISO country codes (such as "US"), as defined by
- <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-2</a>.</p>
- </li>
- <li><em>price</em>
- <p>This is equivalent to the Price in the In-app Products UI. The price must be specified in
+ <a href="http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2">ISO 3166-2</a>.
+ </dd>
+ <dt>price</dt>
+ <dd>
+ This is equivalent to the Price in the In-app Products UI. The price must be specified in
micro-units. To convert a currency value to micro-units, you multiply the real value by
1,000,000.
For example, if you want to sell an in-app item for $1.99, you specify <code>1990000</code> in the
- <em>price</em> field.</p>
- </li>
-</ul>
+ <em>price</em> field.
+ </dd>
+</dl>
<p class="table-caption" id="language-table"><strong>Table 1.</strong> Language codes you can use
with the <em>locale</em> field.</p>
@@ -430,8 +421,8 @@
</h2>
<p>
- If you sell multiple apps at the same price—or multiple in-app products at
- the same price across one or more apps—you can add <em>pricing
+ If you sell multiple apps at the same price, or if you sell multiple in-app
+ products at the same price across one or more apps, you can add <em>pricing
templates</em>. These templates make it easier to manage shared prices.
</p>
@@ -440,25 +431,9 @@
</h3>
<p>
- When creating a template, you can provide new pricing information, or you can
- apply pricing information from an existing paid app or in-app product.
-</p>
-
-<div class="figure-right">
- <figure id="fig-npt">
- <img src="{@docRoot}images/in-app-billing/new_pricing_template.png"
- srcset="{@docRoot}images/in-app-billing/new_pricing_template.png 1x, {@docRoot}images/in-app-billing/new_pricing_template_2x.png 2x"
- width="400" alt="A template with the name Basic inventory uses a price of
- USD 0.99.">
- <figcaption>
- <b>Figure 5. </b>The <em>Pricing template</em> page, where you add pricing
- details for the new template you're creating.
- </figcaption>
- </figure>
-</div>
-
-<p>
- To add a pricing template, do the following:
+ When creating a pricing template, you provide new pricing information that you
+ can apply to paid apps and in-app products. To add a pricing template, do the
+ following:
</p>
<ol>
@@ -467,21 +442,20 @@
account.
</li>
- <li>In the <strong>Settings</strong> panel, select <strong>Pricing
- template</strong>.
+ <li>In the <strong>Settings</strong> panel, open the <strong>Pricing
+ template</strong> page.
</li>
<li>
<p>
If you are adding your first pricing template, the <strong>Add a Pricing
Template</strong> banner appears. Select <strong>Add template</strong> to
- create a new template. The <strong>Pricing Template</strong> page
- appears.
+ create a new template. The new template's <em>Pricing</em> tab appears.
</p>
<p>
Otherwise, you see a list of your pricing templates. Select <strong>New
- pricing template</strong>. The <strong>Pricing Template</strong> page
+ pricing template</strong>. The new template's <em>Pricing</em> tab
appears.
</p>
</li>
@@ -494,7 +468,7 @@
</p>
<p>
Based on the price and tax option you provide, the Developer Console
- generates prices for international currencies using today's exchange
+ generates prices for international currencies using current exchange
rates and country-specific pricing patterns.
</p>
</li>
@@ -507,44 +481,26 @@
</h3>
<p>
- You can link shared prices across paid apps or in-app products to a pricing
- template. To complete the linking process, use either the template's
- <em>Linked Items</em> tab or the Price section within a paid app or in-app
- product's pricing page.
+ You can create links between pricing templates and sets of paid apps and
+ in-app products that share the same price. After completing this linking
+ process, any changes you make to the pricing template are applied to the
+ prices of items that you've linked to the template. To complete the linking
+ process, use either the pricing template's <em>Linked Items</em> tab or the
+ Price section within a paid app or in-app product's pricing page.
</p>
<p class="note">
<strong>Note:</strong> Since a subscription within your app has a constant
price, you cannot link a subscription with a pricing template. You can,
- however, import the prices from a template and apply them to a new
+ however, import the prices from a pricing template and apply them to a new
subscription.
</p>
<h4>
- Linking a pricing template or paid app to an in-app product
+ Linking a pricing template to in-app products and paid apps
</h4>
<p>
- After you create a pricing template, you can link the prices of in-app
- products and paid apps to that template. After completing this linking
- process, any changes you make to the pricing template are applied to the
- prices of items that you've linked to the template.
-</p>
-
-<div class="figure-right">
- <figure id="fig-lpt">
- <img src="{@docRoot}images/in-app-billing/link_pricing_template.png"
- width="700" alt="The Sleeping Potion in-app product is linked to the Basic
- Inventory item, but the Invisibility Potion is not.">
- <figcaption>
- <b>Figure 6. </b>Use the Linked Items tab of the
- <em>Pricing Template</em> page to change which in-app products and paid
- apps are linked to a pricing template.
- </figcaption>
- </figure>
-</div>
-
-<p>
To link a pricing template to an in-app product, do the following:
</p>
@@ -554,23 +510,24 @@
account.
</li>
- <li>In the <strong>Settings</strong> panel, select <strong>Pricing
- template</strong>. The <strong>Pricing Template</strong> page appears,
- showing the list of pricing templates you have created for your account.
+ <li>In the <strong>Settings</strong> panel, open the <strong>Pricing
+ template</strong> page. This page shows the list of pricing templates you have
+ created for your account.
</li>
- <li>Choose the pricing template that you want to link to an in-app product,
- then select the <em>Linked Items</em> tab. A page appears, showing options to
- link your pricing template to in-app products and paid apps.
+ <li>Choose an existing pricing template that you want to link to an in-app
+ product, then select the template's <em>Linked Items</em> tab. This tab shows
+ options to link your pricing template to in-app products and paid apps
+ (see figure 2).
</li>
- <li>In the Link In-App Products section of the page, enter or choose the name
+ <li>In the Link In-App Products section of the tab, enter or choose the name
of an app. This app should contain the in-app product that you want to link
to your pricing template.
</li>
<li>Based on the app that you selected, you see a list of in-app products
- that are active and are not yet linked to a pricing template. Select the
+ that are active and are not yet linked to a pricing template. Choose the
in-app product that you want to link to the pricing template by selecting the
<strong>Link</strong> button that appears in the same row as the in-app
product.
@@ -588,27 +545,23 @@
app in the Link Paid Apps section.
</p>
+<figure id="fig-lpt">
+ <img class="border-img"
+ src="{@docRoot}images/in-app-billing/link_pricing_template.png" width="700"
+ alt="The Sleeping Potion in-app product is linked to the Basic Inventory item,
+ but the Invisibility Potion is not.">
+ <figcaption>
+ <b>Figure 2. </b>On a pricing template's <em>Linked Items</em> tab, you can
+ change which in-app products and paid apps are linked to the pricing
+ template.
+ </figcaption>
+</figure>
+
<h4>
- Linking an in-app product or paid app with a pricing template
+ Linking an in-app product or paid app to a pricing template
</h4>
<p>
- After you create a paid app or in-app product, you can link its pricing
- information to a pricing template.
-</p>
-
-<div class="figure-right">
- <figure id="fig-spt">
- <img src="{@docRoot}images/in-app-billing/select_pricing_template.png"
- width="700" alt="">
- <figcaption>
- <b>Figure 7. </b>Choosing a pricing template to link to a particular
- in-app product or paid app.
- </figcaption>
- </figure>
-</div>
-
-<p>
To link an in-app product to a pricing template, do the following:
</p>
@@ -618,20 +571,16 @@
account.
</li>
- <li>In the <strong>All Applications</strong> panel, choose the app that
- contains the in-app product that you want to link to a pricing template.
- </li>
-
- <li>Within the app's panel, choose the <strong>In-app Products</strong>
- sub-panel.
+ <li>In the <strong>All applications</strong> panel, select the app name, then
+ open the <strong>In-app Products</strong> page.
</li>
<li>Choose the in-app product that you want to link to a pricing template.
- The <em>Managed Product Details</em> page appears.
+ The item's details page appears.
</li>
<li>In the Pricing section, choose the pricing template that you want to link
- to the price of this in-app product (see figure 7).
+ to the price of this in-app product.
</li>
<li>The price of the in-app product is now linked to the pricing template you
@@ -642,8 +591,7 @@
<p>
To link the price of a paid app to a pricing template, you follow a similar
- process within the app's <strong>Pricing & Distribution</strong>
- sub-panel.
+ process on the app's <strong>Pricing & Distribution</strong> page.
</p>
<h3 id="delete-linked-item">
@@ -652,27 +600,16 @@
<p>
As your app evolves, you may find it useful to remove older versions of
- in-app products or apps, some of which may be linked to pricing templates. To
- delete an in-app product or app that is linked to a pricing template, simply
- remove it by completing the following steps. You don't need to unlink the
- in-app product or app from the pricing template beforehand.
+ in-app products or unpublish paid apps, some of which may be linked to pricing
+ templates. To delete an in-app product or unpublish a paid app that is linked
+ to a pricing template, complete the following steps. You don't need to unlink
+ the in-app product or paid app from the pricing template beforehand.
</p>
<h4>
Deleting an in-app product that is linked to a template
</h4>
-<div class="figure-right">
- <figure id="fig-diap">
- <img src="{@docRoot}images/in-app-billing/delete_iap.png"
- width="700" alt="">
- <figcaption>
- <b>Figure 8. </b>Deleting an in-app product that is linked to a pricing
- template.
- </figcaption>
- </figure>
-</div>
-
<p>
To delete an in-app product that is linked to a template, do the following:
</p>
@@ -683,8 +620,7 @@
account.
</li>
- <li>In the Google Play Developer Console, navigate to the app that contains
- the in-app product you want to delete.
+ <li>Select the app that contains the in-app product you want to delete.
</li>
<li>Open the app's <strong>In-app Products</strong> page.
@@ -694,16 +630,25 @@
</li>
<li>Select the button that indicates whether the in-app product is active or
- inactive (enclosed in a box within figure 8). The drop-down menu includes a
+ inactive (enclosed in a box within figure 3). The drop-down menu includes a
<strong>Delete</strong> option.
</li>
- <li>Select <strong>Delete</strong>, then select <strong>Yes</strong> in the
+ <li>Select <strong>Delete</strong>, then choose <strong>Yes</strong> in the
confirmation dialog that appears.
</li>
</ol>
+<figure id="fig-diap">
+ <img class="border-img" src="{@docRoot}images/in-app-billing/delete_iap.png"
+ width="500" alt="">
+ <figcaption>
+ <b>Figure 3. </b>Deleting an in-app product that is linked to a pricing
+ template.
+ </figcaption>
+</figure>
+
<h4>
- Deleting a paid app that is linked to a template
+ Unpublishing a paid app that is linked to a template
</h4>
<div class="figure-right">
@@ -711,14 +656,15 @@
<img src="{@docRoot}images/in-app-billing/unpublish_paid_app.png"
width="700" alt="">
<figcaption>
- <b>Figure 9. </b>Unpublishing an app that has already been published and is
+ <b>Figure 4. </b>Unpublishing an app that has already been published and is
linked to a pricing template.
</figcaption>
</figure>
</div>
<p>
- To delete a paid app that is linked to a template, do the following:
+ To unpublish a paid app that is already published and is linked to a template,
+ do the following:
</p>
<ol>
@@ -727,15 +673,12 @@
account.
</li>
- <li>In the Google Play Developer Console, choose the app that you want to
- delete.
+ <li>Select the app that you want to unpublish.
</li>
- <li>Choose either <strong>Unpublish app</strong> (enclosed in a box within
- figure 9) if you have already published the app, or
- <strong>Delete app</strong> if your app is still in the "draft" state.
- </li>
- <li>Confirm your choice in the dialog that appears.
+ <li>Select <strong>Unpublish app</strong> (enclosed in a box within figure 4),
+ then choose <strong>Unpublish</strong> in the confirmation dialog that
+ appears.
</li>
</ol>
@@ -754,17 +697,16 @@
account.
</li>
- <li>In the <strong>Settings</strong> panel, select <strong>Pricing
- template</strong>. The <strong>Pricing Template</strong> page appears,
- showing the list of pricing templates you have created for your account.
+ <li>In the <strong>Settings</strong> panel, open the <strong>Pricing
+ template</strong> page, which shows the list of pricing templates you have
+ created for your account.
</li>
<li>Select the pricing template that you wish to delete.
</li>
- <li>In the <em>Linked Items</em> tab on the pricing template details page,
- unlink the pricing template from all in-app products and paid apps.
- </li>
+ <li>On the pricing template's <em>Linked Items</em> tab, unlink all in-app
+ products that are linked to the template.</li>
<li>Select <strong>Delete template</strong>.
</li>
@@ -772,23 +714,21 @@
<h2 id="billing-purchase-type">Choosing a Product Type</h3>
-<p>An item's product type controls how Google Play manages the purchase of the item. There are
-several product types, including "managed per user account", "unmanaged," and "subscription." However,
-note that the product types supported vary
-across In-app Billing Version, so you should always choose a product type that's valid for the
-version of In-app BIlling that your app uses. </p>
+<p>An item's product type controls how Google Play manages the purchase of the item. The supported
+product types include "managed product" and "subscription." Since support for different product
+types can vary among versions of the In-app Billing API, make sure that you choose a product
+type that's valid for the version of the In-app Billing API that your app uses. </p>
-<p>For details, refer to the documentation for <a
-href="{@docRoot}google/play/billing/api.html#producttype">In-app Billing Version
-3</a>.
+<p>For details, refer to the documentation for the <a
+href="{@docRoot}google/play/billing/api.html#producttype">In-app Billing API</a>.
<h2 id="billing-refunds">Handling Refunds</h2>
<p>In-app billing does not allow users to send a refund request to Google Play. Refunds for
-in-app purchases must be directed to you (the application developer). You can then process the
+in-app purchases must be directed to you (the app developer). You can then process the
refund through your Google payments merchant account. When you do this, Google Play receives a
refund notification from Google payments, and Google Play sends a refund message to your
-application. For more information, see <a
+app. For more information, see <a
href="{@docRoot}google/play/billing/v2/api.html#billing-action-notify">Handling
IN_APP_NOTIFY messages</a> and <a
href="http://support.google.com/googleplay/android-developer/bin/answer.py?hl=en&answer=1153485">
@@ -834,22 +774,22 @@
<p>The Google Play Developer Console lets you set up one or more test accounts.
A test account is a regular Google account that you register on the Developer
Console as a test account. Test accounts are authorized to make in-app purchases
-from applications that you have uploaded to the Google Play Developer Console
+from apps that you have uploaded to the Google Play Developer Console
but have not yet published.</p>
<p>You can use any Google account as a test account. Test accounts are useful if you want to let
-multiple people test In-app Billing on applications without giving them access to your publisher
+multiple people test In-app Billing on apps without giving them access to your publisher
account's sign-in credentials. If you want to own and control the test accounts, you can create the
accounts yourself and distribute the credentials to your developers or testers.</p>
<p>Test accounts have three limitations:</p>
<ul>
- <li>Test account users can make purchase requests only within applications that are already
- uploaded to your publisher account (although the application doesn't need to be published).</li>
+ <li>Test account users can make purchase requests only within apps that are already
+ uploaded to your publisher account (although the app doesn't need to be published).</li>
<li>Test accounts can only be used to purchase items that are listed (and published) in an
- application's product list.</li>
- <li>Test account users do not have access to your publisher account and cannot upload applications
+ app's product list.</li>
+ <li>Test account users do not have access to your publisher account and cannot upload apps
to your publisher account.</li>
</ul>
@@ -869,29 +809,28 @@
<p>The Google Play Developer Console provides a public licensing key for each
app.</p>
-<div class="figure-right">
- <figure id="fig-bak">
- <img src="{@docRoot}images/in-app-billing/billing_app_key.png"
- width="700" alt="">
- <figcaption>
- <b>Figure 10. </b>You can find the license key for each app in the
- <strong>Services & APIs</strong> panel.
- </figcaption>
- </figure>
-</div>
-
-<p>To get the key for an app, follow these steps:</p>
+<p>To locate the key for an app, follow these steps:</p>
<ol>
- <li>Open the <strong>All Applications</strong> panel.</li>
- <li>Click on the app name, then select <strong>Services & APIs</strong>.</li>
- <li>Scroll down to the <strong>Your License Key for this Application</strong>
-field to locate the key for the app, as shown in figure 10.</li>
+ <li>Open the <strong>All applications</strong> panel.</li>
+ <li>Click on the app name, then open the <strong>Services & APIs</strong>
+ page.</li>
+ <li>Scroll down to the section of the page labeled Your License Key for This
+ Application, as shown in figure 5.</li>
</ol>
<p>Previously, the Developer Console provided a single public key per developer
account. To transition apps to the new per-app public key, the Developer Console
-set the app-specific key as the former developer key. This ensures compatibility
+sets the app-specific key as the former developer key. This ensures compatibility
for apps that depend on the (former) developer key. </p>
+<figure id="fig-bak">
+ <img class="border-img" src="{@docRoot}images/in-app-billing/billing_app_key.png"
+ width="700" alt="">
+ <figcaption>
+ <b>Figure 5. </b>You can find the license key for each app on the
+ <strong>Services & APIs</strong> page.
+ </figcaption>
+</figure>
+
<h2 id="billing-support">Where to Get Support</h2>
<p>If you have questions or encounter problems while implementing In-app Billing, contact the
diff --git a/docs/html/google/play/billing/billing_integrate.jd b/docs/html/google/play/billing/billing_integrate.jd
index c658f70..8ffb45c 100755
--- a/docs/html/google/play/billing/billing_integrate.jd
+++ b/docs/html/google/play/billing/billing_integrate.jd
@@ -111,13 +111,13 @@
<li>Select <strong>File > New > Directory</strong> and enter {@code aidl} in the
<em>New Directory</em> window, then select <strong>OK</strong>.
- <li>Select <strong>File > New > Package</strong> and enter
+ <li>Select <strong>File > New > Package</strong> and enter
{@code com.android.vending.billing} in the <em>New Package</em> window, then select
<strong>OK</strong>.</li>
- <li>Using your operating system file explorer, navigate to
- {@code <sdk>/extras/google/play_billing/}, copy the
- {@code IInAppBillingService.aidl} file, and paste it into the
+ <li>Using your operating system file explorer, navigate to
+ {@code <sdk>/extras/google/play_billing/}, copy the
+ {@code IInAppBillingService.aidl} file, and paste it into the
{@code com.android.vending.billing} package in your project.
</li>
</ol>
@@ -137,7 +137,7 @@
</li>
</ol>
-<h2 id="billing-permission">Updating Your Application's Manifest</h2>
+<h2 id="billing-permission">Updating Your App's Manifest</h2>
<p>
In-app billing relies on the Google Play application, which handles all
diff --git a/docs/html/google/play/billing/billing_overview.jd b/docs/html/google/play/billing/billing_overview.jd
index 2954a83..a05cc8d 100644
--- a/docs/html/google/play/billing/billing_overview.jd
+++ b/docs/html/google/play/billing/billing_overview.jd
@@ -132,11 +132,11 @@
purchases for that product.</p>
<p>If you sell several of your apps or in-app products at the same price, you
can add <em>pricing templates</em> to manage these price points from a
-centralized location. When using pricing templates, you can include the local
-tax within the prices you provide, or you can provide prices and have the system
+centralized location. When using pricing templates, you can include local taxes
+within the prices you provide, or you can provide prices and have the system
add local taxes to these prices. You can make changes to the prices in your
-templates—such as refreshing the exchange rates for certain
-countries—and your changes are applied to the apps and in-app products
+pricing templates, such as refreshing the exchange rates for certain
+countries, and your changes are applied to the apps and in-app products
that you link to the template.</p>
<p>You can also create test accounts to authorize
access for testing applications that are unpublished.</p>
diff --git a/docs/html/google/play/billing/index.jd b/docs/html/google/play/billing/index.jd
index 795aceb..80934ae 100644
--- a/docs/html/google/play/billing/index.jd
+++ b/docs/html/google/play/billing/index.jd
@@ -18,7 +18,8 @@
apps and in-app products that they distribute to multiple countries, the
system automatically sets local prices for different currencies using
today’s exchange rates and country-specific pricing patterns. To satisfy
- specific pricing needs, developers can also adjust these prices manually.</li>
+ particular pricing needs, developers can also adjust these prices manually.
+ </li>
<li><strong>Pricing Templates</strong>—Developers can add pricing
templates and link these templates to app prices or in-app product prices.
These templates include local prices across all markets. By using a
diff --git a/docs/html/guide/topics/admin/device-admin.jd b/docs/html/guide/topics/admin/device-admin.jd
index 45bd76a..e2fef04 100644
--- a/docs/html/guide/topics/admin/device-admin.jd
+++ b/docs/html/guide/topics/admin/device-admin.jd
@@ -48,11 +48,12 @@
provided by the Device Administration API to provide stronger security for
employee devices that are powered by Android.</p>
-<p class="note"><strong>Note</strong> For information on building a Work Policy
-Controller for Android for Work deployments, see <a
-href="{@docRoot}training/enterprise/work-policy-ctrl.html">Building a Work
-Policy Controller</a>.</p>
-
+<p class="note">
+ <strong>Note</strong> For information on building a Work Policy
+ Controller for Android for Work deployments, see
+ <a href="https://developers.google.com/android/work/build-dpc"
+ >Build a Device Policy Controller</a>.
+</p>
<h2 id="overview">Device Administration API Overview</h2>
diff --git a/docs/html/images/cards/card-nyc_2x.jpg b/docs/html/images/cards/card-nyc_2x.jpg
new file mode 100644
index 0000000..b0b324881
--- /dev/null
+++ b/docs/html/images/cards/card-nyc_2x.jpg
Binary files differ
diff --git a/docs/html/images/in-app-billing/add_new_product.png b/docs/html/images/in-app-billing/add_new_product.png
deleted file mode 100644
index 2281ec0..0000000
--- a/docs/html/images/in-app-billing/add_new_product.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/in-app-billing/billing_app_key.png b/docs/html/images/in-app-billing/billing_app_key.png
index 4c5300e..5adca9c 100644
--- a/docs/html/images/in-app-billing/billing_app_key.png
+++ b/docs/html/images/in-app-billing/billing_app_key.png
Binary files differ
diff --git a/docs/html/images/in-app-billing/delete_iap.png b/docs/html/images/in-app-billing/delete_iap.png
index bbaea9e..4603452 100644
--- a/docs/html/images/in-app-billing/delete_iap.png
+++ b/docs/html/images/in-app-billing/delete_iap.png
Binary files differ
diff --git a/docs/html/images/in-app-billing/in_app_products.png b/docs/html/images/in-app-billing/in_app_products.png
deleted file mode 100644
index 04031cc..0000000
--- a/docs/html/images/in-app-billing/in_app_products.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/in-app-billing/new_managed_product.png b/docs/html/images/in-app-billing/new_managed_product.png
deleted file mode 100644
index bdccc96..0000000
--- a/docs/html/images/in-app-billing/new_managed_product.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/in-app-billing/new_pricing_template.png b/docs/html/images/in-app-billing/new_pricing_template.png
deleted file mode 100644
index 8525787..0000000
--- a/docs/html/images/in-app-billing/new_pricing_template.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/in-app-billing/new_pricing_template_2x.png b/docs/html/images/in-app-billing/new_pricing_template_2x.png
deleted file mode 100644
index ce4094b..0000000
--- a/docs/html/images/in-app-billing/new_pricing_template_2x.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/in-app-billing/select_pricing_template.png b/docs/html/images/in-app-billing/select_pricing_template.png
deleted file mode 100644
index fa8c7b6..0000000
--- a/docs/html/images/in-app-billing/select_pricing_template.png
+++ /dev/null
Binary files differ
diff --git a/docs/html/images/in-app-billing/unpublish_paid_app.png b/docs/html/images/in-app-billing/unpublish_paid_app.png
index a36d8ce..64bbd0d 100644
--- a/docs/html/images/in-app-billing/unpublish_paid_app.png
+++ b/docs/html/images/in-app-billing/unpublish_paid_app.png
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/3D-Image-viewer.gif b/docs/html/images/topic/instant-apps/3D-Image-viewer.gif
new file mode 100644
index 0000000..b46f2d9
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/3D-Image-viewer.gif
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/BandH-Photo.gif b/docs/html/images/topic/instant-apps/BandH-Photo.gif
new file mode 100644
index 0000000..fa2cdfc
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/BandH-Photo.gif
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/Buzzfeed.gif b/docs/html/images/topic/instant-apps/Buzzfeed.gif
new file mode 100644
index 0000000..af7cc66
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/Buzzfeed.gif
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/Park-and-Pay.gif b/docs/html/images/topic/instant-apps/Park-and-Pay.gif
new file mode 100644
index 0000000..f5cbfb0
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/Park-and-Pay.gif
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/instant-apps-section-2.png b/docs/html/images/topic/instant-apps/instant-apps-section-2.png
new file mode 100644
index 0000000..8060c57
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/instant-apps-section-2.png
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/instant-apps-section-4.png b/docs/html/images/topic/instant-apps/instant-apps-section-4.png
new file mode 100644
index 0000000..8e0fcf8
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/instant-apps-section-4.png
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/instant-apps-section-5.png b/docs/html/images/topic/instant-apps/instant-apps-section-5.png
new file mode 100644
index 0000000..e92ec80
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/instant-apps-section-5.png
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/play-services-features-2x.png b/docs/html/images/topic/instant-apps/play-services-features-2x.png
new file mode 100644
index 0000000..098f91c
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/play-services-features-2x.png
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/s3-BandH-animated.gif b/docs/html/images/topic/instant-apps/s3-BandH-animated.gif
new file mode 100644
index 0000000..efa8827
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/s3-BandH-animated.gif
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/s3-BandH-static.png b/docs/html/images/topic/instant-apps/s3-BandH-static.png
new file mode 100644
index 0000000..004afb7
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/s3-BandH-static.png
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/s3-BuzzFeed-animated.gif b/docs/html/images/topic/instant-apps/s3-BuzzFeed-animated.gif
new file mode 100644
index 0000000..16c4619
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/s3-BuzzFeed-animated.gif
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/s3-BuzzFeed-static.png b/docs/html/images/topic/instant-apps/s3-BuzzFeed-static.png
new file mode 100644
index 0000000..cdd0dc8
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/s3-BuzzFeed-static.png
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/s3-ParkandPay-animated.gif b/docs/html/images/topic/instant-apps/s3-ParkandPay-animated.gif
new file mode 100644
index 0000000..f5cbfb0
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/s3-ParkandPay-animated.gif
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/s3-ParkandPay-static.png b/docs/html/images/topic/instant-apps/s3-ParkandPay-static.png
new file mode 100644
index 0000000..1e07a74
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/s3-ParkandPay-static.png
Binary files differ
diff --git a/docs/html/images/topic/instant-apps/upgrade-your-app-2x.png b/docs/html/images/topic/instant-apps/upgrade-your-app-2x.png
new file mode 100644
index 0000000..60fe373
--- /dev/null
+++ b/docs/html/images/topic/instant-apps/upgrade-your-app-2x.png
Binary files differ
diff --git a/docs/html/images/work/cards/android-studio_600px.png b/docs/html/images/work/cards/android-studio_600px.png
new file mode 100644
index 0000000..d2ce8d7
--- /dev/null
+++ b/docs/html/images/work/cards/android-studio_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/briefcase_600px.png b/docs/html/images/work/cards/briefcase_600px.png
new file mode 100644
index 0000000..9c30cf0
--- /dev/null
+++ b/docs/html/images/work/cards/briefcase_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/work-cloud_600px.png b/docs/html/images/work/cards/work-cloud_600px.png
new file mode 100644
index 0000000..9e63a0c
--- /dev/null
+++ b/docs/html/images/work/cards/work-cloud_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/work-devhub_600px.png b/docs/html/images/work/cards/work-devhub_600px.png
new file mode 100644
index 0000000..b63b917
--- /dev/null
+++ b/docs/html/images/work/cards/work-devhub_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/work-folder_600px.png b/docs/html/images/work/cards/work-folder_600px.png
new file mode 100644
index 0000000..1804d6f
--- /dev/null
+++ b/docs/html/images/work/cards/work-folder_600px.png
Binary files differ
diff --git a/docs/html/images/work/cards/work-profile_600px.png b/docs/html/images/work/cards/work-profile_600px.png
new file mode 100644
index 0000000..60284ff
--- /dev/null
+++ b/docs/html/images/work/cards/work-profile_600px.png
Binary files differ
diff --git a/docs/html/images/work/cosu-pinning_vs_locktaskmode.png b/docs/html/images/work/cosu-pinning_vs_locktaskmode.png
new file mode 100644
index 0000000..8fa470b
--- /dev/null
+++ b/docs/html/images/work/cosu-pinning_vs_locktaskmode.png
Binary files differ
diff --git a/docs/html/images/work/cosu-pinning_vs_locktaskmode_2x.png b/docs/html/images/work/cosu-pinning_vs_locktaskmode_2x.png
new file mode 100644
index 0000000..d7690f4
--- /dev/null
+++ b/docs/html/images/work/cosu-pinning_vs_locktaskmode_2x.png
Binary files differ
diff --git a/docs/html/images/work/guide-app-restrictions.png b/docs/html/images/work/guide-app-restrictions.png
new file mode 100644
index 0000000..83c2b42
--- /dev/null
+++ b/docs/html/images/work/guide-app-restrictions.png
Binary files differ
diff --git a/docs/html/images/work/guide-app-restrictions_2x.png b/docs/html/images/work/guide-app-restrictions_2x.png
new file mode 100644
index 0000000..4e64a1c
--- /dev/null
+++ b/docs/html/images/work/guide-app-restrictions_2x.png
Binary files differ
diff --git a/docs/html/images/work/guide-managed-overview.png b/docs/html/images/work/guide-managed-overview.png
new file mode 100644
index 0000000..caead68
--- /dev/null
+++ b/docs/html/images/work/guide-managed-overview.png
Binary files differ
diff --git a/docs/html/images/work/guide-managed-overview_2x.png b/docs/html/images/work/guide-managed-overview_2x.png
new file mode 100644
index 0000000..53518ad
--- /dev/null
+++ b/docs/html/images/work/guide-managed-overview_2x.png
Binary files differ
diff --git a/docs/html/images/work/hero_650px.png b/docs/html/images/work/hero_650px.png
new file mode 100644
index 0000000..5c790fa
--- /dev/null
+++ b/docs/html/images/work/hero_650px.png
Binary files differ
diff --git a/docs/html/images/work/hero_650px_2x.png b/docs/html/images/work/hero_650px_2x.png
new file mode 100644
index 0000000..d3e5049
--- /dev/null
+++ b/docs/html/images/work/hero_650px_2x.png
Binary files differ
diff --git a/docs/html/images/enterprise/work-launcher.png b/docs/html/images/work/work-launcher.png
similarity index 100%
rename from docs/html/images/enterprise/work-launcher.png
rename to docs/html/images/work/work-launcher.png
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index 28b8626..c69acab 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -38,7 +38,7 @@
</a><br>-->
</a>
</div>
- <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:0em;padding-right:1.5em;">
+ <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
<a href="{@docRoot}preview/index.html">
<img style="" class="dac-hero-image" src="/images/home/n-preview-hero.png"
srcset="/images/home/n-preview-hero.png 1x,
diff --git a/docs/html/jd_collections.js b/docs/html/jd_collections.js
index 824cbd3..26231be 100644
--- a/docs/html/jd_collections.js
+++ b/docs/html/jd_collections.js
@@ -365,7 +365,7 @@
"resources": [
"https://www.android.com/work/",
"https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
- "training/enterprise/index.html"
+ "work/index.html"
]
},
"distribute/essentials": {
@@ -1749,26 +1749,6 @@
"training/monitoring-device-state/index.html"
]
},
- "training/work/apps": {
- "title": "",
- "resources": [
- "training/enterprise/app-compatibility.html",
- "training/enterprise/app-restrictions.html",
- "training/enterprise/cosu.html",
- "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
- "samples/AppRestrictionSchema/index.html",
- "https://www.youtube.com/watch?v=dH41OutAMNM",
- "samples/AppRestrictionEnforcer/index.html"
- ]
- },
- "training/work/admin": {
- "title": "",
- "resources": [
- "training/enterprise/work-policy-ctrl.html",
- "samples/BasicManagedProfile/index.html",
- "https://www.youtube.com/watch?v=j3QC6hcpy90"
- ]
- },
"tools/help/log": {
"title": "",
"resources": [
@@ -1887,4 +1867,45 @@
"https://medium.com/google-developers/writing-more-code-by-writing-less-code-with-android-studio-live-templates-244f648d17c7#.hczcm02du",
]
},
-}
+ "work/landing/primary": {
+ "title": "",
+ "resources": [
+ "work/overview.html",
+ "work/guide.html",
+ "https://www.google.com/work/android/developers/applyDevHub/",
+ "work/app-restrictions.html",
+ "work/cosu.html",
+ "work/managed-profiles.html"
+ ]
+ },
+ "work/landing/resources": {
+ "title": "",
+ "resources": [
+ "https://developers.google.com/android/work/",
+ "https://www.google.com/work/android/",
+ "https://developers.google.com/android/work/build-dpc",
+ "https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+ "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+ "https://www.youtube.com/watch?v=dH41OutAMNM&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX"
+ ]
+ },
+ "work/apps": {
+ "title": "",
+ "resources": [
+ "work/managed-profiles.html",
+ "work/app-restrictions.html",
+ "work/cosu.html",
+ "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+ "samples/AppRestrictionSchema/index.html",
+ "samples/AppRestrictionEnforcer/index.html"
+ ]
+ },
+ "work/admin": {
+ "title": "",
+ "resources": [
+ "https://developers.google.com/android/work/build-dpc",
+ "samples/BasicManagedProfile/index.html",
+ "https://www.youtube.com/watch?v=j3QC6hcpy90"
+ ]
+ }
+};
diff --git a/docs/html/jd_extras.js b/docs/html/jd_extras.js
index 225d4ec..13a51b1 100644
--- a/docs/html/jd_extras.js
+++ b/docs/html/jd_extras.js
@@ -3270,19 +3270,55 @@
"type":"distribute"
},
{
- "title":"Android for Work",
+ "title":"Join the Android for Work DevHub",
"titleFriendly":"",
- "summary":"Learn more about how Android for Work makes your favorite phones and tablets the perfect business tools.",
- "url":"https://www.android.com/work/",
+ "summary":"The Android for Work DevHub is a place to help developers keep up with Android in the workplace.",
+ "url":"https://www.google.com/work/android/developers/applyDevHub/",
+ "group":"",
+ "keywords": ["work", "enterprise", "isv", "devhub"],
+ "tags": [],
+ "image":"images/work/cards/work-devhub_600px.png",
+ "lang":"en",
+ "type":"Community"
+ },
+ {
+ "title":"Enterprise Mobility Managers",
+ "titleFriendly":"",
+ "summary":"Integrate Android for Work into your enterprise mobility management (EMM) solution.",
+ "url":"https://developers.google.com/android/work/",
"group":"",
"keywords": ["work", "enterprise", "emm"],
"tags": [],
- "image":"images/cards/card-android-work_2x.png",
+ "image":"images/work/cards/work-cloud_600px.png",
+ "lang":"en",
+ "type":"guide"
+ },
+ {
+ "title":"Learn More About Android for Work",
+ "titleFriendly":"",
+ "summary":"Android for Work makes your favorite phones and tablets the perfect business tools.",
+ "url":"https://www.google.com/work/android/",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/work-profile_600px.png",
"lang":"en",
"type":"about"
},
{
- "title":"Android for Work DevBytes",
+ "title":"Build a Device Policy Controller",
+ "titleFriendly":"",
+ "summary":"Create and administer a managed profile on an employee's device.",
+ "url":"https://developers.google.com/android/work/build-dpc",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/work-folder_600px.png",
+ "lang":"en",
+ "type":"guide"
+ },
+ {
+ "title":"Android for Work for Developers",
"titleFriendly":"",
"summary":"Watch the videos in this playlist to understand more about Android for Work and get tips on developing enterprise apps.",
"url":"https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
@@ -3306,10 +3342,10 @@
"type":"youtube"
},
{
- "title":"Building an enterprise ready app",
+ "title":"Building an Enterprise Ready App",
"titleFriendly":"",
"summary":"A holistic view of Android for Work for developers.",
- "url":"https://www.youtube.com/watch?v=dH41OutAMNM",
+ "url":"https://www.youtube.com/watch?v=dH41OutAMNM&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
"group":"",
"keywords": ["work", "enterprise", "emm"],
"tags": [],
@@ -3438,18 +3474,6 @@
"type":"Video"
},
{
- "title":"Android for Work: Single Use Devices",
- "titleFriendly":"",
- "summary":"Android M is bringing the power of Android to all kinds of workplaces.",
- "url":"https://www.youtube.com/watch?v=j3QC6hcpy90",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/j3QC6hcpy90/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
"title":"Runtime Permissions in Android 6.0 Marshmallow",
"titleFriendly":"",
"summary":"Learn how to integrate runtime permissions into your Android app.",
diff --git a/docs/html/jd_extras_en.js b/docs/html/jd_extras_en.js
index fb85f9d..02e6a2f 100644
--- a/docs/html/jd_extras_en.js
+++ b/docs/html/jd_extras_en.js
@@ -706,6 +706,42 @@
"type":"youtube"
},
{
+ "title":"Enable Android Studio's "Dex In Process" for Faster App Builds",
+ "category":"",
+ "summary":"Android Studio 2.1 enables Dex In Process, a feature that can dramatically improve all your build times. To take advantage of Dex In Process, you’ll need to modify your gradle.properties file and increase the amount of memory allocated to the Gradle Daemon VM by 1 Gb, to a minimum of 2 Gb, using the org.gradle.jvmargs property.",
+ "url":"https://www.youtube.com/watch?v=-SY5nkNVUn0&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "group":"",
+ "keywords": ["studio", "tools"],
+ "tags": [
+ ],
+ "image":"https://i1.ytimg.com/vi/-SY5nkNVUn0/maxresdefault.jpg",
+ "type":"youtube"
+ },
+ {
+ "title":"Configuring Parallel Canary / Stable Android Studio Installations",
+ "category":"",
+ "summary":"Android Tool Time Protip: Maintain parallel Android Studio installations on canary and stable channels to take advantage of all the new hotness, without risking your stable dev environment.",
+ "url":"https://www.youtube.com/watch?v=SBbWGxXCMqQ&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "group":"",
+ "keywords": ["studio", "tools"],
+ "tags": [
+ ],
+ "image":"https://i1.ytimg.com/vi/SBbWGxXCMqQ/maxresdefault.jpg",
+ "type":"youtube"
+ },
+ {
+ "title":"What’s New in Android Studio 2.0",
+ "category":"",
+ "summary":"Android Studio 2.0 is focused on making your workflow faster. Faster builds, faster deployment, faster emulators. Everything. Faster.",
+ "url":"https://www.youtube.com/watch?v=xxx3Fn7EowU&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "group":"",
+ "keywords": ["studio", "tools"],
+ "tags": [
+ ],
+ "image":"https://i1.ytimg.com/vi/xxx3Fn7EowU/maxresdefault.jpg",
+ "type":"youtube"
+ },
+ {
"title":"Google Play Services 7.5",
"category":"",
"summary":"This update brings App Invites, topics to GCM, GCMNetworkManager, Cast Remote Display API, Smart Lock for Passwords, Maps API for Android Wear, Google Fit extensions and more.",
@@ -3182,19 +3218,127 @@
},
{
"title":"Android for Work",
- "category":"Enterprise",
- "summary":"Learn more about how Android for Work makes your favorite phones and tablets the perfect business tools.",
- "url":"https://www.android.com/work/",
+ "titleFriendly":"",
+ "summary": "Develop apps for Android for Work to take advantage of security and management features built into Android.",
+ "url":"https://developer.android.com/work",
"group":"",
"keywords": ["work", "enterprise", "emm"],
"tags": [],
- "image":"images/cards/card-android-work_2x.png",
+ "image":"images/work/cards/briefcase_600px.png",
+ "lang":"en",
+ "type":"work"
+ },
+ {
+ "title":"Android for Work Developer Overview",
+ "titleFriendly":"",
+ "summary": "Learn how to build Android apps for the enterprise and take advantage of Google's Android for Work program.",
+ "url":"https://developer.android.com/work/overview.html",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/briefcase_600px.png",
+ "lang":"en",
+ "type":"guide"
+ },
+ {
+ "title":"Android for Work Developer Guide",
+ "titleFriendly":"",
+ "summary": "Android for Work provides organizations with a secure, flexible, and unified Android mobility platform combining devices, applications, and management.",
+ "url":"https://developer.android.com/work/guide.html",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/android-studio_600px.png",
+ "lang":"en",
+ "type":"guide"
+ },
+ {
+ "title":"Set up App Restrictions",
+ "titleFriendly":"",
+ "summary": "Learn how to implement app restrictions and configuration settings that can be changed by other apps on the same device.",
+ "url":"https://developer.android.com/work/app-restrictions.html",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/briefcase_600px.png",
+ "lang":"en",
+ "type":"guide"
+ },
+ {
+ "title":"Set up Managed Profiles",
+ "titleFriendly":"",
+ "summary": "Learn how to make sure your apps operate smoothly in a corporate environment by following some best practices.",
+ "url":"https://developer.android.com/work/managed-profiles.html",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/briefcase_600px.png",
+ "lang":"en",
+ "type":"guide"
+ },
+ {
+ "title":"Set up Single-Purpose Devices",
+ "titleFriendly":"",
+ "summary": "Learn how to develop single-use solutions for Android devices.",
+ "url":"https://developer.android.com/work/cosu.html",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/briefcase_600px.png",
+ "lang":"en",
+ "type":"guide"
+ },
+ {
+ "title":"Join the Android for Work DevHub",
+ "titleFriendly":"",
+ "summary":"The Android for Work DevHub is a place to help developers keep up with Android in the workplace.",
+ "url":"https://www.google.com/work/android/developers/applyDevHub/",
+ "group":"",
+ "keywords": ["work", "enterprise", "isv", "devhub"],
+ "tags": [],
+ "image":"images/work/cards/work-devhub_600px.png",
+ "lang":"en",
+ "type":"Community"
+ },
+ {
+ "title":"Enterprise Mobility Managers",
+ "titleFriendly":"",
+ "summary":"Integrate Android for Work into your enterprise mobility management (EMM) solution.",
+ "url":"https://developers.google.com/android/work/",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/work-cloud_600px.png",
+ "lang":"en",
+ "type":"guide"
+ },
+ {
+ "title":"Learn More About Android for Work",
+ "titleFriendly":"",
+ "summary":"Learn more about how Android for Work makes your favorite phones and tablets the perfect business tools.",
+ "url":"https://www.google.com/work/android/",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/work-profile_600px.png",
"lang":"en",
"type":"about"
},
{
- "title":"Android for Work DevBytes",
- "category":"Enterprise",
+ "title":"Build a Device Policy Controller",
+ "titleFriendly":"",
+ "summary":"Learn how to develop a Device Policy Controller to create and administer a managed profile on an employee's device.",
+ "url":"https://developers.google.com/android/work/build-dpc",
+ "group":"",
+ "keywords": ["work", "enterprise", "emm"],
+ "tags": [],
+ "image":"images/work/cards/work-folder_600px.png",
+ "lang":"en",
+ "type":"guide"
+ },
+ {
+ "title":"Android for Work for Developers",
+ "titleFriendly":"",
"summary":"Watch the videos in this playlist to understand more about Android for Work and get tips on developing enterprise apps.",
"url":"https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
"group":"",
@@ -3202,11 +3346,11 @@
"tags": [],
"image":"https://i1.ytimg.com/vi/jQWB_-o1kz4/maxresdefault.jpg",
"lang":"en",
- "type":"video"
+ "type":"youtube"
},
{
"title":"App Configurations, Testing and Launchers",
- "category":"Enterprise",
+ "titleFriendly":"",
"summary":"With Android for Work you can make your apps remotely configurable. We also cover how to test your app in a managed environment.",
"url":"https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
"group":"",
@@ -3214,23 +3358,23 @@
"tags": [],
"image":"https://i1.ytimg.com/vi/39NkpWkaH8M/maxresdefault.jpg",
"lang":"en",
- "type":"video"
+ "type":"youtube"
},
{
- "title":"Building an enterprise ready app",
- "category":"Enterprise",
+ "title":"Building an Enterprise Ready App",
+ "titleFriendly":"",
"summary":"A holistic view of Android for Work for developers.",
- "url":"https://www.youtube.com/watch?v=dH41OutAMNM",
+ "url":"https://www.youtube.com/watch?v=dH41OutAMNM&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
"group":"",
"keywords": ["work", "enterprise", "emm"],
"tags": [],
"image":"https://i1.ytimg.com/vi/dH41OutAMNM/maxresdefault.jpg",
"lang":"en",
- "type":"video"
+ "type":"youtube"
},
{
"title":"Android for Work: Single Use Devices",
- "category":"Enterprise",
+ "titleFriendly":"",
"summary":"Single-purpose computers are everywhere, and Android can meet that need.",
"url":"https://www.youtube.com/watch?v=j3QC6hcpy90",
"group":"",
@@ -3238,7 +3382,7 @@
"tags": [],
"image":"https://i1.ytimg.com/vi/j3QC6hcpy90/maxresdefault.jpg",
"lang":"en",
- "type":"video"
+ "type":"youtube"
},
{
"title":"Discover YouTube cards",
@@ -3779,10 +3923,16 @@
"develop/landing/tools": {
"title": "",
"resources": [
- "https://www.youtube.com/watch?v=StqAZ1OQbqA&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
"https://www.youtube.com/watch?v=ZOz_yr8Yxq8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
"https://www.youtube.com/watch?v=eOV2owswDkE&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
- "https://www.youtube.com/watch?v=4rI4tTd7-J8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa"
+ "https://www.youtube.com/watch?v=StqAZ1OQbqA&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "https://www.youtube.com/watch?v=-SY5nkNVUn0&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "https://www.youtube.com/watch?v=4rI4tTd7-J8&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "https://www.youtube.com/watch?v=SBbWGxXCMqQ&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "https://www.youtube.com/watch?v=xxx3Fn7EowU&list=PLWz5rJ2EKKc_w6fodMGrA1_tsI3pqPbqa",
+ "https://www.youtube.com/watch?v=cD7NPxuuXYY&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
+ "https://www.youtube.com/watch?v=2I6fuD20qlY&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
+ "https://www.youtube.com/watch?v=5Be2mJzP-Uw&list=PLWz5rJ2EKKc9e0d55YHgJFHXNZbGHEXJX"
]
},
"google/landing/services": {
@@ -3908,7 +4058,7 @@
"resources": [
"https://www.android.com/work/",
"https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
- "training/enterprise/index.html"
+ "work/index.html"
]
},
"distribute/essentials": {
@@ -5078,26 +5228,6 @@
"training/monitoring-device-state/index.html"
]
},
- "training/work/apps": {
- "title": "",
- "resources": [
- "training/enterprise/app-compatibility.html",
- "training/enterprise/app-restrictions.html",
- "training/enterprise/cosu.html",
- "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
- "samples/AppRestrictionSchema/index.html",
- "https://www.youtube.com/watch?v=dH41OutAMNM",
- "samples/AppRestrictionEnforcer/index.html"
- ]
- },
- "training/work/admin": {
- "title": "",
- "resources": [
- "training/enterprise/work-policy-ctrl.html",
- "samples/BasicManagedProfile/index.html",
- "https://www.youtube.com/watch?v=j3QC6hcpy90"
- ]
- },
"tools/help/log": {
"title": "",
"resources": [
@@ -5248,9 +5378,51 @@
"preview/features/icu4j-framework.html",
"preview/features/multilingual-support.html",
"preview/features/scoped-folder-access.html",
+ "preview/features/security-config.html",
"preview/features/picture-in-picture.html",
"preview/features/tv-recording-api.html"
]
+ },
+ "work/landing/primary": {
+ "title": "",
+ "resources": [
+ "work/overview.html",
+ "work/guide.html",
+ "https://www.google.com/work/android/developers/applyDevHub/",
+ "work/app-restrictions.html",
+ "work/cosu.html",
+ "work/managed-profiles.html"
+ ]
+ },
+ "work/landing/resources": {
+ "title": "",
+ "resources": [
+ "https://developers.google.com/android/work/",
+ "https://www.google.com/work/android/",
+ "https://developers.google.com/android/work/build-dpc",
+ "https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+ "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+ "https://www.youtube.com/watch?v=dH41OutAMNM&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX"
+ ]
+ },
+ "work/apps": {
+ "title": "",
+ "resources": [
+ "work/managed-profiles.html",
+ "work/app-restrictions.html",
+ "work/cosu.html",
+ "https://www.youtube.com/watch?v=39NkpWkaH8M&index=2&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
+ "samples/AppRestrictionSchema/index.html",
+ "samples/AppRestrictionEnforcer/index.html"
+ ]
+ },
+ "work/admin": {
+ "title": "",
+ "resources": [
+ "https://developers.google.com/android/work/build-dpc",
+ "samples/BasicManagedProfile/index.html",
+ "https://www.youtube.com/watch?v=j3QC6hcpy90"
+ ]
}
};
diff --git a/docs/html/jd_tag_helpers.js b/docs/html/jd_tag_helpers.js
index 3ad3633..0ec0d67 100644
--- a/docs/html/jd_tag_helpers.js
+++ b/docs/html/jd_tag_helpers.js
@@ -15,6 +15,7 @@
SAMPLES_RESOURCES,
TOOLS_RESOURCES,
TRAINING_RESOURCES,
+ WORK_RESOURCES,
YOUTUBE_RESOURCES,
BLOGGER_RESOURCES,
PREVIEW_RESOURCES
@@ -74,6 +75,7 @@
'tools': TOOLS_RESOURCES,
'training': TRAINING_RESOURCES,
'preview': PREVIEW_RESOURCES,
+ 'work': WORK_RESOURCES,
'youtube': YOUTUBE_RESOURCES,
'blog': BLOGGER_RESOURCES
};
@@ -112,4 +114,4 @@
ALL_RESOURCES_BY_URL[url] = res;
}
}
-var IS_RESOURCE_IN_LANG = buildResourceLookupMap(ALL_RESOURCES_BY_LANG);
\ No newline at end of file
+var IS_RESOURCE_IN_LANG = buildResourceLookupMap(ALL_RESOURCES_BY_LANG);
diff --git a/docs/html/preview/api-overview.jd b/docs/html/preview/api-overview.jd
index 09227f2..c643dc7 100644
--- a/docs/html/preview/api-overview.jd
+++ b/docs/html/preview/api-overview.jd
@@ -9,36 +9,37 @@
<div id="qv-wrapper">
<div id="qv">
- <h2>Key developer features</h2>
+ <h2>Key Developer Features</h2>
<ol>
<ul style="list-style-type:none;">
- <li><a href="#multi-window_support">Multi-window support</a></li>
+ <li><a href="#multi-window_support">Multi-window Support</a></li>
<li><a href="#notification_enhancements">Notifications</a></li>
- <li><a href="#jit_aot">JIT/AOT compilation</a></li>
- <li><a href="#quick_path_to_app_install">Quick path to app install</a></li>
- <li><a href="#doze_on_the_go">Doze on the go</a></li>
- <li><a href="#background_optimizations">Background optimizations</a></li>
+ <li><a href="#jit_aot">JIT/AOT Compilation</a></li>
+ <li><a href="#quick_path_to_app_install">Quick Path to App Install</a></li>
+ <li><a href="#doze_on_the_go">Doze on the Go</a></li>
+ <li><a href="#background_optimizations">Background Optimizations</a></li>
<li><a href="#data_saver">Data Saver</a></li>
<li><a href="#vulkan">Vulkan API</a></li>
<li><a href="#tile_api">Quick Settings Tile API</a></li>
- <li><a href="#number-blocking">Number-blocking</a></li>
- <li><a href="#call_screening">Call screening</a></li>
- <li><a href="#multi-locale_languages">Locales and languages</a></li>
+ <li><a href="#number-blocking">Number Blocking</a></li>
+ <li><a href="#call_screening">Call Screening</a></li>
+ <li><a href="#multi-locale_languages">Locales and Languages</a></li>
<li><a href="#emoji">New Emojis</a></li>
<li><a href="#icu4">ICU4J APIs in Android</a></li>
<li><a href="#gles_32">OpenGL ES 3.2 API</a></li>
- <li><a href="#android_tv_recording">Android TV recording</a></li>
+ <li><a href="#android_tv_recording">Android TV Recording</a></li>
<li><a href="#android_for_work">Android for Work</a></li>
<li><a href="#accessibility_enhancements">Accessibility</a></li>
<li><a href="#direct_boot">Direct Boot</a></li>
<li><a href="#key_attestation">Key Attestation</a></li>
<li><a href="#network_security_config">Network Security Config</a></li>
<li><a href="#default_trusted_ca">Default Trusted CA</a></li>
- <li><a href="#apk_signature_v2">APK signature scheme v2</a></li>
- <li><a href="#scoped_directory_access">Scoped directory access</a></li>
+ <li><a href="#apk_signature_v2">APK Signature Scheme v2</a></li>
+ <li><a href="#scoped_directory_access">Scoped Directory Access</a></li>
<li><a href="#keyboard_shortcuts_helper">Keyboard Shortcuts Helper</a></li>
<li><a href="#sustained_performance_api">Sustained Performance API</a></li>
- <li><a href="#print_svc">Print service enhancements</a></li>
+ <li><a href="#vr">VR Support</a></li>
+ <li><a href="#print_svc">Print Service Enhancements</a></li>
<li><a href="#virtual_files">Virtual Files</a></li>
<li><a href="#framemetrics_api">FrameMetricsListener API</a></li>
</ol>
@@ -60,7 +61,7 @@
new APIs.
</p>
-<h2 id="multi-window_support">Multi-window support</h2>
+<h2 id="multi-window_support">Multi-window Support</h2>
<p>In Android N, we're introducing a new and much-requested multitasking feature
@@ -85,6 +86,7 @@
<p class="img-caption">
<strong>Figure 1.</strong> Apps running in split-screen mode.
</p>
+
</div>
<p>Especially on tablets and other larger-screen devices, multi-window support
@@ -104,7 +106,7 @@
developer documentation.
</p>
-<h2 id="notification_enhancements">Notification enhancements</h2>
+<h2 id="notification_enhancements">Notification Enhancements</h2>
<p>In Android N we've redesigned notifications to make them easier and faster to
use. Some of the changes include:</p>
@@ -170,7 +172,7 @@
-<h2 id="jit_aot">Profile-guided JIT/AOT compilation</h2>
+<h2 id="jit_aot">Profile-guided JIT/AOT Compilation</h2>
<p>In Android N, we've added a Just in Time (JIT) compiler with code profiling to
ART, which lets it constantly improve the performance of Android apps as they
@@ -192,14 +194,14 @@
device battery. It does precompilation only when then the device is idle and
charging, saving time and battery by doing that work in advance.</p>
-<h2 id="quick_path_to_app_install">Quick path to app install</h2>
+<h2 id="quick_path_to_app_install">Quick Path to App Install</h2>
<p>One of the most tangible benefits of ART's JIT compiler is the speed of app
installs and system updates. Even large apps that required several minutes to
optimize and install in Android 6.0 can now install in just a matter of
seconds. System updates are also faster, since there's no more optimizing step. </p>
-<h2 id="doze_on_the_go">Doze on the go...</h2>
+<h2 id="doze_on_the_go">Doze on the Go...</h2>
<p>Android 6.0 introduced Doze, a system mode that saves battery by deferring
apps' CPU and network activities when the device is idle, such as when it's
@@ -237,7 +239,7 @@
href="{@docRoot}training/monitoring-device-state/doze-standby.html#assessing_your_app">adapting
your app to Doze</a> now.</p>
-<h2 id="background_optimizations">Project Svelte: Background optimizations</h2>
+<h2 id="background_optimizations">Project Svelte: Background Optimizations</h2>
<p>Project Svelte is an ongoing effort to minimize RAM use by system and apps
across the range of Android devices in the ecosystem. In Android N, Project
@@ -401,22 +403,22 @@
</p>
<p>
- For information about creating an app tile, see the
+ For information about creating an app tile, see the documentation for
<code>android.service.quicksettings.Tile</code> in the downloadable <a href=
"{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
</p>
-<h2 id="number-blocking">Number-blocking</h2>
+<h2 id="number-blocking">Number Blocking</h2>
-<p>Android N now supports number-blocking in the platform and provides a
+<p>Android N now supports number blocking in the platform and provides a
framework API to let service providers maintain a blocked-number list. The
default SMS app, the default phone app, and carrier apps can read from and
write to the blocked-number list. The list is not accessible to other apps.</p>
-<p>By making number-blocking a standard feature of the platform, Android provides
-a consistent way for apps to support number-blocking across a wide range of
+<p>By making number blocking a standard feature of the platform, Android provides
+a consistent way for apps to support number blocking across a wide range of
devices. Among the other benefits that apps can take advantage of are:</p>
<ul>
@@ -437,7 +439,7 @@
Reference</a>.
</p>
-<h2 id="call_screening">Call screening</h2>
+<h2 id="call_screening">Call Screening</h2>
<p>
Android N allows the default phone app to screen incoming calls. The phone
@@ -459,7 +461,7 @@
</p>
-<h2 id="multi-locale_languages">Multi-locale support, more languages</h2>
+<h2 id="multi-locale_languages">Multi-locale Support, More Languages</h2>
<p>Android N now lets users select <strong>multiple locales</strong> in Settings,
@@ -474,8 +476,9 @@
languages such as English, Spanish, French, and Arabic. It also adds partial
support for more than 100 new languages.</p>
-<p>Apps can get the list of locales set by the user by calling <code>LocaleList.GetDefault()</code>. To support the expanded number of locales, Android N is changing the way
-that it resolves resources. Make sure that you test and verify that your apps
+<p>Apps can get the list of locales set by the user by calling
+<code>LocaleList.GetDefault()</code>. To support the expanded number of locales, Android N is
+changing the way that it resolves resources. Make sure that you test and verify that your apps
working as expected with the new resource resolution logic.</p>
<p>To learn about the new resource-resolution behavior and the best practices you
@@ -550,7 +553,8 @@
<ul>
<li> All extensions from the <a class="external-link"
-href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">Android Extension Pack</a></a> (AEP) except for <code>EXT_texture_sRGB_decode</code>.
+href="https://www.khronos.org/registry/gles/extensions/ANDROID/ANDROID_extension_pack_es31a.txt">
+Android Extension Pack</a></a> (AEP) except for <code>EXT_texture_sRGB_decode</code>.
<li> Floating-point framebuffers for HDR and deferred shading.
<li> BaseVertex draw calls to enable better batching and streaming.
<li> Robust buffer access control to reduce WebGL overhead.
@@ -566,7 +570,7 @@
href="{@docRoot}guide/topics/graphics/opengl.html">OpenGL ES API guide</a>.</p>
-<h2 id="android_tv_recording">Android TV recording</h2>
+<h2 id="android_tv_recording">Android TV Recording</h2>
<p>Android N adds the ability to record and playback content from Android TV input
services via new recording APIs. Building on top of existing time-shifting
@@ -649,7 +653,7 @@
customizes the flow with a corporate logo.
</p>
-<h2 id="accessibility_enhancements">Accessibility enhancements</h2>
+<h2 id="accessibility_enhancements">Accessibility Enhancements</h2>
<p>Android N now offers Vision Settings directly on the Welcome screen for new
device setup. This makes it much easier for users to discover and configure
@@ -670,7 +674,7 @@
in the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.</p>
-<h2 id="direct_boot">Direct boot</h2>
+<h2 id="direct_boot">Direct Boot</h2>
<p>Direct boot improves device startup times and lets registered
apps have limited functionality even after an unexpected reboot.
@@ -775,7 +779,7 @@
<a href="{@docRoot}preview/features/security-config.html">Network Security Config</a> to
specify how user CAs should be trusted.</p>
-<h2 id="apk_signature_v2">APK signature scheme v2</h2>
+<h2 id="apk_signature_v2">APK Signature Scheme v2</h2>
<p>
Android N introduces APK Signature Scheme v2, a new app-signing scheme that
@@ -826,7 +830,7 @@
the build file for signing apps</a> using the Android Plugin for Gradle.
</p>
-<h2 id="scoped_directory_access">Scoped directory access</h2>
+<h2 id="scoped_directory_access">Scoped Directory Access</h2>
<p>In Android N, apps can use new APIs to request access to specific <a
href="{@docRoot}guide/topics/data/data-storage.html#filesExternal">external
@@ -850,22 +854,18 @@
<h2 id="keyboard_shortcuts_helper">Keyboard Shortcuts Helper</h2>
<p>
-In Android N, the user can press Meta+/ to trigger a Keyboard Shortcuts
+In Android N, the user can press "Alt + /" to trigger a <em>Keyboard Shortcuts</em>
screen that displays all shortcuts available both from the system and from
the app in focus. These are retrieved automatically from the app’s menu if
available, but developers can provide their own fine-tuned shortcuts lists
-for the screen. This is done simply by overriding the following method
-in {@code Activity.java}:
+for the screen. You can do this by overriding the new
+<code>Activity.onProvideKeyboardShortcuts()</code> method, described in the downloadable
+<a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
</p>
-<pre>
-public void onProvideKeyboardShortcuts(
- List<KeyboardShortcutGroup> data, Menu menu, int deviceId)
-</pre>
-
<p>
To trigger the Keyboard Shortcuts Helper from anywhere in your app,
-call {@code requestKeyboardShortcutsHelper} for the relevant activity.
+call {@code Activity.requestKeyboardShortcutsHelper()} for the relevant activity.
</p>
<h2 id="sustained_performance_api">Sustained Performance API</h2>
@@ -879,9 +879,9 @@
<p>
To address these limitations, Android N includes support for
-<em>sustained performance mode</em>, enabling OEMs to provide hints on
-device-performance capabilities for long-running applications. App developers
-can use these hints to tune applications for a predictable,
+<em>sustained performance mode</em>, enabling OEMs to provide hints about
+device-performance capabilities for long-running apps. App developers
+can use these hints to tune apps for a predictable,
consistent level of device performance over long periods of time.
</p>
@@ -890,10 +890,23 @@
Nexus 6P devices only. To use this feature,
set the sustained performance window flag for the window
you want to run in sustained performance mode. Set this flag using the
-{@code setSustainedPerformanceMode(boolean)} method. The system automatically
+{@code Window.setSustainedPerformanceMode()} method. The system automatically
disables this mode when the window is no longer in focus.
</p>
+<h2 id="vr">VR Support</h2>
+
+<p>
+Android N adds platform support and optimizations for a new VR Mode to let developers
+build high-quality mobile VR experiences for users. There are a number of performance
+enhancements, including access to an exclusive CPU core for VR apps.
+Within your apps, you can take advantage of intelligent head-tracking,
+and stereo notifications that work for VR. Most importantly, Android N provides for
+very low latency graphics. For complete information about building VR apps for Android N,
+see the <a href="https://developers.google.com/vr/android/">Google VR SDK for Android</a>.
+</p>
+
+
<h2 id="print_svc">Print Service Enhancements</h2>
<p>
@@ -939,10 +952,10 @@
<p>
The FrameMetricsListener API allows an app to monitor its UI rendering
-performance by exposing a streaming pubsub API to transfer frame
+performance. The API provides this capability by exposing a streaming Pub/Sub API to transfer frame
timing info for the app's current window. The data returned is
-equivalent to that displayed by {@code adb shell dumpsys gfxinfo framestats},
-but is not limited to the past 120 frames.
+equivalent to that which <code><a href="{@docRoot}tools/help/shell.html#shellcommands">adb shell</a>
+dumpsys gfxinfo framestats</code> displays, but is not limited to the past 120 frames.
</p>
<p>
@@ -958,25 +971,20 @@
</p>
<p>
-The API provides a callback interface to be implemented and
-registered on the window that you wish to monitor:
+To monitor a window, implement the <code>FrameMetricsListener.onMetricsAvailable()</code>
+callback method and register it on that window. For more information, refer to
+the {@code FrameMetricsListener} class documentation in
+the downloadable <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
</p>
-<pre>
- public interface FrameMetricsListener {
- void onMetricsAvailable(Window window, FrameMetrics frameMetrics,
- int dropCountSinceLastInvocation);
- }
-</pre>
-
<p>
-The API returns a FrameMetrics object, which contains timing data that
+The API provides a {@code FrameMetrics} object, which contains timing data that
the rendering subsystem reports for various milestones in a frame lifecycle.
The supported metrics are: {@code UNKNOWN_DELAY_DURATION},
{@code INPUT_HANDLING_DURATION}, {@code ANIMATION_DURATION},
{@code LAYOUT_MEASURE_DURATION}, {@code DRAW_DURATION}, {@code SYNC_DURATION},
{@code COMMAND_ISSUE_DURATION}, {@code SWAP_BUFFERS_DURATION},
-{@code TOTAL_DURATION}, and {@code FIRST_DRAW_FRAME}
+{@code TOTAL_DURATION}, and {@code FIRST_DRAW_FRAME}.
</p>
diff --git a/docs/html/preview/behavior-changes.jd b/docs/html/preview/behavior-changes.jd
index 7c8bfe8..66dce7a 100644
--- a/docs/html/preview/behavior-changes.jd
+++ b/docs/html/preview/behavior-changes.jd
@@ -19,10 +19,8 @@
</ol>
</li>
<li><a href="#perm">Permissions Changes</a>
- <ol>
- <li><a href="#permfilesys">File System Permission Changes</a></li>
- </ol>
</li>
+ <li><a href="#sharing-files">Sharing Files Between Apps</a></li>
<li><a href="#accessibility">Accessibility Improvements</a>
<ol>
<li><a href="#screen-zoom">Screen Zoom</a></li>
@@ -58,14 +56,13 @@
</p>
-<h2 id="perf">Performance Improvements</h2>
+<h2 id="perf">Battery and Memory</h2>
<p>
- Android N contains system behavior changes aimed at improving the battery
- life of devices, RAM usage, and app performance. These changes can impact the
- availability of system resources and system notifications to your app. You
- should review these changes and evaluate how your app may need to adjust to
- them.
+Android N includes system behavior changes aimed at improving the battery life
+of devices and reducing RAM usage. These changes can affect your app’s access to
+system resources, along with the way your app interacts with other apps via
+certain implicit intents.
</p>
<h3 id="doze">Doze</h3>
@@ -141,7 +138,7 @@
</p>
<p>
- Similarly, apps can register to receive implicit {@link
+ Similarly, in previous versions of Android, apps could register to receive implicit {@link
android.hardware.Camera#ACTION_NEW_PICTURE} and {@link
android.hardware.Camera#ACTION_NEW_VIDEO} broadcasts from other apps, such as
Camera. When a user takes a picture with the Camera app, these apps wake up
@@ -188,29 +185,16 @@
<h2 id="perm">Permissions Changes</h2>
<p>
- Android N includes changes to permissions that may affect your app,
- including user accounts permissions and a new permission for writing to
- external storage. Here is a summary of the permissions that have changed in
- the preview:
+ Android N includes changes to permissions that may affect your app.
</p>
-<ul>
- <li>{@code GET_ACCOUNTS} (Deprecated)
- <p>
- The GET_ACCOUNTS permission is now deprecated. The system ignores this
- permission for apps that target Android N.
- </p>
- </li>
-
-</ul>
-
<h3 id="permfilesys">File system permission changes</h3>
<p>
In order to improve the security of private files, the private directory of
- apps targeting Android N or higher has restricted access (0700). This prevents
- leakage of metadata of private files, such as their size or existence. This
- has multiple side effects:
+ apps targeting Android N or higher has restricted access (<code>0700</code>).
+ This setting prevents leakage of metadata of private files, such as their size
+ or existence. This permission change has multiple side effects:
</p>
<ul>
@@ -246,17 +230,37 @@
Legacy applications that set the download location to a public location by
using
{@link
- android.app.DownloadManager.Request#setDestinationInExternalFilesDir} or
+ android.app.DownloadManager.Request#setDestinationInExternalFilesDir
+ DownloadManager.Request.setDestinationInExternalFilesDir()} or
{@link
- android.app.DownloadManager.Request#setDestinationInExternalPublicDir}
+ android.app.DownloadManager.Request#setDestinationInExternalPublicDir
+ DownloadManager.Request.setDestinationInExternalPublicDir()}
can still access the path in
{@link android.app.DownloadManager#COLUMN_LOCAL_FILENAME}, however, this
method is strongly discouraged. The preferred way of accessing a file
exposed by the {@link android.app.DownloadManager} is using
- {@link android.content.ContentResolver#openFileDescriptor}.
+ {@link android.content.ContentResolver#openFileDescriptor
+ ContentResolver.openFileDescriptor()}.
</li>
</ul>
+<h2 id="sharing-files">Sharing Files Between Apps</h2>
+
+<p>
+For apps targeting Android N, the Android framework enforces
+the {@link android.os.StrictMode} API policy that prohibits exposing {@code file://} URIs
+outside your app. If an intent containing a file URI leaves your app, the app fails
+with a {@code FileUriExposedException} exception.
+</p>
+
+<p>
+To share files between applications, you should send a {@code content://} URI
+and grant a temporary access permission on the URI. The easiest way to grant this permission is by
+using the {@link android.support.v4.content.FileProvider} class. For more information
+on permissions and sharing files,
+see <a href="{@docRoot}training/secure-file-sharing/index.html">Sharing Files</a>.
+</p>
+
<h2 id="accessibility">Accessibility Improvements</h2>
<p>
@@ -487,7 +491,7 @@
running in device owner mode, the <code>DISALLOW_ADD_USER</code> restriction
is automatically set. This prevents users from creating unmanaged secondary
users. In addition, the <code>CreateUser()</code> and
- <code>createAndInitial()</code> methods are deprecated; the new
+ <code>createAndInitializeUser()</code> methods are deprecated; the new
<code>DevicePolicyManager.createAndManageUser()</code> method replaces them.
</li>
@@ -496,6 +500,10 @@
<code>DevicePolicyManagewr.getWifiMacAddress()</code>. If Wi-Fi has never
been enabled on the device, this method returns a value of {@code null}.
</li>
+
+ <li>The Work Mode setting controls access to work apps. When work mode is off the
+ system launcher indicates work apps are unavailable by greying them out. Enabling
+ work mode again restores normal behavior.
</ul>
<p>
@@ -576,5 +584,33 @@
which causes {@code ActivityThread.StopInfo} to throw a
{@code RuntimeException} when your app targets Android N.
</li>
+
+<li>
+If an app posts {@link java.lang.Runnable} tasks to a {@link android.view.View}, and
+the {@link android.view.View}
+is not attached to a window, the system
+queues the {@link java.lang.Runnable} task with the {@link android.view.View};
+the {@link java.lang.Runnable} task does not execute until the
+{@link android.view.View} is attached
+to a window. This behavior fixes the following bugs:
+<ul>
+ <li>If an app posted to a {@link android.view.View} from a thread other than the intended
+ window’s UI thread, the {@link java.lang.Runnable} may run on the wrong thread as a result.
+ </li>
+ <li>If the {@link java.lang.Runnable} task was posted from a thread other than
+ a looper thread, the app could expose the {@link java.lang.Runnable} task.</li>
+</ul>
+</li>
+
+<li>
+If an app on Android N with
+{@link android.Manifest.permission#DELETE_PACKAGES DELETE_PACKAGES}
+permission tries to delete a package, but a different app had installed that package,
+the system requires user confirmation. In this scenario, apps should expect
+{@link android.content.pm.PackageInstaller#STATUS_PENDING_USER_ACTION STATUS_PENDING_USER_ACTION}
+as the return status when they invoke
+{@link android.content.pm.PackageInstaller#uninstall PackageInstaller.uninstall()}.
+</li>
+
</ul>
diff --git a/docs/html/preview/download-ota.jd b/docs/html/preview/download-ota.jd
index 7e70f57..2058501 100644
--- a/docs/html/preview/download-ota.jd
+++ b/docs/html/preview/download-ota.jd
@@ -203,72 +203,72 @@
<tr id="bullhead">
<td>Nexus 5X <br>"bullhead"</td>
<td><a href="#top" onclick="onDownload(this)"
- >bullhead-ota-npc91k-dfcbfda0.zip</a><br>
- MD5: af537dc0c06e85f32a929c10aaf12e0a<br>
- SHA-1: 12a32b09223eb8f98bc0f0f05d951789d5fbe12e
+ >bullhead-ota-npd35k-b8cfbd80.zip</a><br>
+ MD5: 15fe2eba9b01737374196bdf0a792fe9<br>
+ SHA-1: 5014b2bba77f9e1a680ac3f90729621c85a14283
</td>
</tr>
<tr id="shamu">
<td>Nexus 6 <br>"shamu"</td>
<td><a href="#top" onclick="onDownload(this)"
- >shamu-ota-npc91k-201dd8d1.zip</a><br>
- MD5: 016d60b4734151ca70d977c04d737487<br>
- SHA-1: 09ca7c0712366c53e61abb7a6142ce703e2ac62c
+ >shamu-ota-npd35k-078e6fa5.zip</a><br>
+ MD5: e8b12f7721c53af9a450f7058928a5fc<br>
+ SHA-1: b7a9b756f84a1d2e482ff9c16749d65f6e51425a
</td>
</tr>
<tr id="angler">
<td>Nexus 6P <br>"angler"</td>
<td><a href="#top" onclick="onDownload(this)"
- >angler-ota-npc91k-7399f083.zip</a><br>
- MD5: eacc5307ef4f00ba4b61ac9c1620def9<br>
- SHA-1: 6a9f36cad4bd8fd63e7719c00e0b75bd991614ff
+ >angler-ota-npd35k-88457699.zip</a><br>
+ MD5: 3fac09fef759dde26e57cb80b20b6477<br>
+ SHA-1: 27d6caa786577d8a38b2da5bf94b33b4524a1a1c
</td>
</tr>
<tr id="volantis">
<td>Nexus 9 <br>"volantis"</td>
<td><a href="#top" onclick="onDownload(this)"
- >volantis-ota-npc91k-42fc9c84.zip</a><br>
- MD5: e1f3f5504aa3389ef4fbac7ac42a995f<br>
- SHA-1: 1e49e2867479ad1a1c58f52584c62575bb9c2c3b
+ >volantis-ota-npd35k-51dbae76.zip</a><br>
+ MD5: 58312c4a5971818ef5c77a3f446003da<br>
+ SHA-1: aad9005be33d3e2bab480509a6ab74c3c3b9d921
</td>
</tr>
<tr id="volantisg">
<td>Nexus 9G <br>"volantisg"</td>
<td><a href="#top" onclick="onDownload(this)"
- >volantisg-ota-npc91k-4aa98b9f.zip</a><br>
- MD5: ad2e60aa9b1a063f906eb8904388e5f8<br>
- SHA-1: 4edfa8ab5d2d02ec46afffce62466aa715420558
+ >volantisg-ota-npd35k-834f047f.zip</a><br>
+ MD5: 92b7d1fa252f7394e70f957c72d4aac8<br>
+ SHA-1: b6c057c84d90893630e303cbb60530e20ddb8361
</td>
</tr>
<tr id="fugu">
<td>Nexus Player <br>"fugu"</td>
<td><a href="#top" onclick="onDownload(this)"
- >fugu-ota-npc91o-b1d73dd5.zip</a><br>
- MD5: d7fbccde75e0b6d860102320ea76d58f<br>
- SHA-1: b1d73dd5a6498fb6c66e022bd0a6c8b6a6a2374b
+ >fugu-ota-npd35k-6ac91298.zip</a><br>
+ MD5: 1461622ad53ea842b2722fa7b49b8172<br>
+ SHA-1: 409c061668ab270774877d7f3eae44fa48d2b931
</td>
</tr>
<tr id="ryu">
<td>Pixel C <br>"ryu"</td>
<td><a href="#top" onclick="onDownload(this)"
- >ryu-ota-npc91k-80971fa8.zip</a><br>
- MD5: 9d66ca3c5673586bb5ade9fdda6fb924<br>
- SHA-1: 329209b6f1ee08a29e4be32139672a30901a19b7
+ >ryu-ota-npd35k-a0b2347f.zip</a><br>
+ MD5: c60117f3640cc6db12386fd632289c7d<br>
+ SHA-1: 87349c767c69efb4172c90ce1d88cf578c3d28b3
</td>
</tr>
<tr id="seed">
<td>General Mobile 4G (Android One) <br>"seed"</td>
<td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-ota-npc91k-8e8c8777.zip</a><br>
- MD5: d21d417d7b5525633b5f7bcfa8b23245<br>
- SHA-1: bfe42c7e291ca667d3f4d7c80825e5cf8830fc9a
+ >seed_l8150-ota-npd35k-09897a1d.zip</a><br>
+ MD5: a55cf94f7cce0393ec6c0b35041766b7<br>
+ SHA-1: 6f33742290eb46f2561891f38ca2e754b4e50c6a
</td>
</tr>
diff --git a/docs/html/preview/download.jd b/docs/html/preview/download.jd
index b0f5369..b4f7e46 100644
--- a/docs/html/preview/download.jd
+++ b/docs/html/preview/download.jd
@@ -302,72 +302,72 @@
<tr id="bullhead">
<td>Nexus 5X <br>"bullhead"</td>
<td><a href="#top" onclick="onDownload(this)"
- >bullhead-npc91k-factory-d09b15b5.tgz</a><br>
- MD5: f5aa4b0b10213435569ed4833dd973f8<br>
- SHA-1: d09b15b5f8978e2fee3fbd799554de90b7012d64
+ >bullhead-npd35k-factory-5ba40535.tgz</a><br>
+ MD5: b6c5d79a21815ee21db41822dcf61e9f<br>
+ SHA-1: 5ba4053577007d15c96472206e3a79bc80ab194c
</td>
</tr>
<tr id="shamu">
<td>Nexus 6 <br>"shamu"</td>
<td><a href="#top" onclick="onDownload(this)"
- >shamu-npc91k-factory-7c9936dc.tgz</a><br>
- MD5: 271b758d01f61cdef71a3e4c14e90e85<br>
- SHA-1: 7c9936dca492dd9a5b279612962e3439031fcc06
+ >shamu-npd35k-factory-a33bf20c.tgz</a><br>
+ MD5: e1cf9c57cfb11bebe7f1f5bfbf05d7ab<br>
+ SHA-1: a33bf20c719206bcf08d1edd8da6c0ff9d50f69c
</td>
</tr>
<tr id="angler">
<td>Nexus 6P <br>"angler"</td>
<td><a href="#top" onclick="onDownload(this)"
- >angler-npc91k-factory-dcd13c44.tgz</a><br>
- MD5: 3f304dc1d5044768af26c8503d3fbf18<br>
- SHA-1: dcd13c44e7254916fcf7cb7fa31e0dc03737a3f5
+ >angler-npd35k-factory-81c341d5.tgz</a><br>
+ MD5: e93de7949433339856124c3729c15ebb<br>
+ SHA-1: 81c341d57ef2cd139569b055d5d59e9e592a7abd
</td>
</tr>
<tr id="volantis">
<td>Nexus 9 <br>"volantis"</td>
<td><a href="#top" onclick="onDownload(this)"
- >volantis-npc91k-factory-ed835af7.tgz</a><br>
- MD5: 466a9873111a320e5a19891de61e5609<br>
- SHA-1: ed835af7bebf26d4c12b5c30c8b1a337c06c9623
+ >volantis-npd35k-factory-2b50e19d.tgz</a><br>
+ MD5: 565be87ebb2d5937e2abe1a42645864b<br>
+ SHA-1: 2b50e19dae2667b27f911e3c61ed64860caf43e1
</td>
</tr>
<tr id="volantisg">
<td>Nexus 9G <br>"volantisg"</td>
<td><a href="#top" onclick="onDownload(this)"
- >volantisg-npc91k-factory-6f20b9f6.tgz</a><br>
- MD5: 419f76cdf886b18d2e7281915b9c77b0<br>
- SHA-1: 6f20b9f6b0d77dc17793db32cd2da5a0b0aa63c9
+ >volantisg-npd35k-factory-2e89ebe6.tgz</a><br>
+ MD5: a8464e15c6683fe2afa378a63e205fda<br>
+ SHA-1: 2e89ebe67a46b2f3beb050746c13341cd11fa678
</td>
</tr>
<tr id="fugu">
<td>Nexus Player <br>"fugu"</td>
<td><a href="#top" onclick="onDownload(this)"
- >fugu-npc91o-factory-3b8e3f56.tgz</a><br>
- MD5: b88b70ecbfb80c983c90b97cb243628b<br>
- SHA-1: 3b8e3f56a4c35b559783c2928e740df2aab8b377
+ >fugu-npd35k-factory-1de74874.tgz</a><br>
+ MD5: c0dbb7db671f61b2785da5001cedefcb<br>
+ SHA-1: 1de74874f8d83e14d642f13b5a2130fc2aa55873
</td>
</tr>
<tr id="ryu">
<td>Pixel C <br>"ryu"</td>
<td><a href="#top" onclick="onDownload(this)"
- >ryu-npc91k-factory-463030f2.tgz</a><br>
- MD5: 24e8981a3c95637867eb768c0f84c96c<br>
- SHA-1: 463030f2ecdcfe9e92ddf9f3a224ac7aa5ed5866
+ >ryu-npd35k-factory-b4eed85d.tgz</a><br>
+ MD5: bdcb6f770e753668b5fadff2a6678e0d<br>
+ SHA-1: b4eed85de0d42c200348a8629084f78e24f72ac2
</td>
</tr>
<tr id="seed">
<td>General Mobile 4G (Android One) <br>"seed"</td>
<td><a href="#top" onclick="onDownload(this)"
- >seed_l8150-npc91k-factory-7026d89d.tgz</a><br>
- MD5: a614984799c887d9b5af2d366fefc8e3<br>
- SHA-1: 7026d89d79decd8421da8df844a1fcd9e27df163
+ >seed_l8150-npd35k-factory-5ab1212b.tgz</a><br>
+ MD5: 7d34a9774fdd6e025d485ce6cfc23c4c<br>
+ SHA-1: 5ab1212bc9417269d391aacf1e672fff24b4ecc5
</td>
</tr>
diff --git a/docs/html/preview/features/background-optimization.jd b/docs/html/preview/features/background-optimization.jd
index 810d283..3c33b9d 100644
--- a/docs/html/preview/features/background-optimization.jd
+++ b/docs/html/preview/features/background-optimization.jd
@@ -1,6 +1,8 @@
page.title=Background Optimizations
page.metaDescription=New restrictions to implicit broadcasts.
page.keywords="android N", "implicit broadcasts", "job scheduler"
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
@@ -377,7 +379,7 @@
<li style="list-style: none; display: inline">
<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
+{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
</pre>
</li>
@@ -387,7 +389,7 @@
<li style="list-style: none; display: inline">
<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
+{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
</pre>
</li>
-</ul>
\ No newline at end of file
+</ul>
diff --git a/docs/html/preview/features/data-saver.jd b/docs/html/preview/features/data-saver.jd
index c4cab18..761556e 100644
--- a/docs/html/preview/features/data-saver.jd
+++ b/docs/html/preview/features/data-saver.jd
@@ -1,6 +1,7 @@
page.title=Data Saver
metaDescription=User-enabled data usage optimization.
page.keywords="android N", "data usage", "metered network"
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/preview/features/direct-boot.jd b/docs/html/preview/features/direct-boot.jd
index e6800fd..3d442d0 100644
--- a/docs/html/preview/features/direct-boot.jd
+++ b/docs/html/preview/features/direct-boot.jd
@@ -1,6 +1,7 @@
page.title=Direct Boot
page.keywords=preview,sdk,direct boot
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html/preview/features/icu4j-framework.jd b/docs/html/preview/features/icu4j-framework.jd
index 6698194..839c077 100644
--- a/docs/html/preview/features/icu4j-framework.jd
+++ b/docs/html/preview/features/icu4j-framework.jd
@@ -1,4 +1,5 @@
page.title=ICU4J Android Framework APIs
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html/preview/features/multilingual-support.jd b/docs/html/preview/features/multilingual-support.jd
index 89ecd5d..ff21b52 100644
--- a/docs/html/preview/features/multilingual-support.jd
+++ b/docs/html/preview/features/multilingual-support.jd
@@ -1,4 +1,7 @@
page.title=Language and Locale
+page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
+
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/preview/features/notification-updates.jd b/docs/html/preview/features/notification-updates.jd
index c405360..0163337 100644
--- a/docs/html/preview/features/notification-updates.jd
+++ b/docs/html/preview/features/notification-updates.jd
@@ -209,9 +209,10 @@
The notification must be either updated or cancelled after the app has
received remote input. When the user replies to a remote update
using Direct Reply,
- do not cancel the notification. Instead, update the notification to display the user's reply. You can update the notification using a
- <code>MessagingStyle</code>, or you can append the user's reply to the remote
- input history.
+ do not cancel the notification. Instead, update the notification to display the user's reply.
+For notifications using {@code MessagingStyle}, you should add
+the reply as the latest message. When using other templates, you can
+append the user's reply to the remote-input history.
</p>
<h2 id="bundle">Bundled Notifications</h2>
@@ -395,4 +396,4 @@
.addMessage("What's up?", timestamp2, "Coworker")
.addMessage("Not much", timestamp3, null)
.addMessage("How about lunch?", timestamp4, "Coworker"));
-</pre>
\ No newline at end of file
+</pre>
diff --git a/docs/html/preview/features/security-config.jd b/docs/html/preview/features/security-config.jd
index 42c4ff5..633c0e5 100644
--- a/docs/html/preview/features/security-config.jd
+++ b/docs/html/preview/features/security-config.jd
@@ -1,5 +1,6 @@
page.title=Network Security Configuration
-page.keywords=preview,security,network
+page.keywords=androidn,security,network
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html/preview/features/tv-recording-api.jd b/docs/html/preview/features/tv-recording-api.jd
index 65ab340..6619821 100644
--- a/docs/html/preview/features/tv-recording-api.jd
+++ b/docs/html/preview/features/tv-recording-api.jd
@@ -1,6 +1,7 @@
page.title=TV Recording
page.keywords=preview,sdk,tv,recording
page.tags=androidn
+page.image=images/cards/card-nyc_2x.jpg
@jd:body
diff --git a/docs/html/preview/index.jd b/docs/html/preview/index.jd
index bce5dec..b0631ad 100644
--- a/docs/html/preview/index.jd
+++ b/docs/html/preview/index.jd
@@ -103,7 +103,18 @@
</div><!-- end .wrap -->
</div>
-<section class="dac-section dac-light"><div class="wrap">
+<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
+ <h2 class="norule">Latest</h2>
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="type:blog+tag:androidn+tag:featured, type:youtube+tag:androidn+tag:featured"
+ data-sortOrder="-timestamp"
+ data-cardSizes="6x6"
+ data-items-per-page="6"
+ data-maxResults="15"
+ data-initial-results="3"></div>
+</div></section>
+
+<section class="dac-section dac-gray"><div class="wrap">
<h1 class="dac-section-title">Resources</h1>
<div class="dac-section-subtitle">
Essential information to help you get your apps ready for Android N.
diff --git a/docs/html/preview/overview.jd b/docs/html/preview/overview.jd
index 0369490..1b45c1a 100644
--- a/docs/html/preview/overview.jd
+++ b/docs/html/preview/overview.jd
@@ -153,7 +153,7 @@
<ul>
<li><strong><a href="{@docRoot}preview/support.html#dp1">Preview 1</a></strong> (initial release, alpha)</li>
<li><strong><a href="{@docRoot}preview/support.html#dp2">Preview 2</a></strong> (incremental update, alpha)</li>
- <li><strong>Preview 3</strong> (incremental update, beta)</li>
+ <li><strong><a href="{@docRoot}preview/support.html#dp3">Preview 3</a></strong> (incremental update, beta)</li>
<li><strong>Preview 4</strong> (final APIs and official SDK, Play publishing)</li>
<li><strong>Preview 5</strong> (near-final system images for final testing)</li>
<li><strong>Final release</strong> to AOSP and ecosystem</li>
diff --git a/docs/html/preview/setup-sdk.jd b/docs/html/preview/setup-sdk.jd
index 60568ac..13e89893 100644
--- a/docs/html/preview/setup-sdk.jd
+++ b/docs/html/preview/setup-sdk.jd
@@ -91,11 +91,11 @@
</tr>
<tr>
<td style="white-space: nowrap">
- <a href="{@docRoot}shareables/preview/n-preview-2-docs.zip"
- >n-preview-2-docs.zip</a></td>
+ <a href="{@docRoot}shareables/preview/n-preview-3-docs.zip"
+ >n-preview-3-docs.zip</a></td>
<td width="100%">
- MD5: c02732760f468bd97cd94c1b76361229<br>
- SHA-1: 591eabe168c909799f6d8dcbe7b126c25ea8b04d
+ MD5: 19bcfd057a1f9dd01ffbb3d8ff7b8d81<br>
+ SHA-1: 9224bd4445cd7f653c4c294d362ccb195a2101e7
</td>
</tr>
<table>
diff --git a/docs/html/preview/support.jd b/docs/html/preview/support.jd
index 83ecde2..272e1fb 100644
--- a/docs/html/preview/support.jd
+++ b/docs/html/preview/support.jd
@@ -5,6 +5,34 @@
@jd:body
+
+<div id="qv-wrapper">
+<div id="qv">
+
+<h2>In this document</h2>
+
+<ul>
+ <li><a href="#dp3">Developer Preview 3</a>
+ <ul>
+ <li><a href="#general">General advisories</a></li>
+ <li><a href="#new">New in DP3</a></li>
+ <li><a href="#ki">Known issues</a></li>
+ </ul>
+ </li>
+ <li><a href="#dp2">Developer Preview 2</a></li>
+ <li><a href="#dp1">Developer Preview 1</a></li>
+</ul>
+
+<!--
+<h2>See Also</h2>
+<ol>
+ <li></li>
+</ol>
+-->
+
+</div>
+</div>
+
<p>
Two primary support channels are available to you when developing and testing
with the Android N Developer Preview: Please file bugs at <a href=
@@ -23,68 +51,452 @@
<div class="cols">
<div class="col-6of12">
<p>
- <em>Date: April 2016<br>
- Builds: TODO<br>
+ <em>Date: May 2016<br>
+ Build: NPD35K<br>
Emulator support: x86 & ARM (32/64-bit)<br>
- Google Play services: TODO</em>
+ Google Play services: 8.4</em>
</p>
</div>
</div>
</div>
+<h3 id="general">General advisories</h3>
+
+<p>
+ This Developer Preview release is for <strong>app developers and other early
+ adopters</strong> and is available for daily use, development, or
+ compatibility testing. Please be aware of these general notes about the
+ release:
+</p>
+
+<ul>
+ <li>This release may have various <strong>stability issues</strong> on
+ supported devices. Users may encounter system instability, such as kernel
+ panics and crashes.
+ </li>
+
+ <li>Some apps <strong>may not function as expected</strong> on the new
+ platform version. This includes Google’s apps as well as other apps. You can
+ let developers know about app compatibility issues using the <a href=
+ "{@docRoot}preview/bugs">N Developer Preview issue tracker</a>.
+ </li>
+
+ <li>Developer Preview 3 is <strong>Compatibility Test Suite (CTS)
+ approved</strong> on these devices: Nexus 5X, Nexus 6, Nexus 6P, and Pixel
+ C. Apps that depend on CTS approved builds should
+ work normally on these devices (Android Pay for example).
+ </li>
+
+ <li>Developer Preview 3 is <strong>available on all supported
+ devices:</strong> Nexus 5X, Nexus 6, Nexus 6P, Nexus 9, Nexus Player, Pixel
+ C, General Mobile 4G (Android One), as well as Sony Xperia Z3 (D6603 and
+ D6653 models).
+
+ </li>
+</ul>
+
+
<h3 id="new">New in DP3</h3>
+<h4 id="">VR Mode for Android</h4>
-<h4 id="api-changes">API changes</h4>
+<p>
+ Android N adds platform support and optimizations for a new VR Mode to let
+ developers build high quality mobile VR experiences for users. There are a
+ number of performance enhancements, including access to an exclusive CPU core
+ for VR apps. Within your apps, you can take advantage of intelligent
+ head-tracking, and stereo notifications that work for VR. Most importantly,
+ Android N provides for very low latency graphics.
+</p>
+
+<p>
+ For more information, see the <a href=
+ "https://developers.google.com/vr/android/">Google VR SDK for Android</a>.
+</p>
+
+<h4 id="">Sustained performance mode</h4>
+
+<p>
+ Android N includes optional support for <a href=
+ "{@docRoot}preview/api-overview.html#sustained_performance_api">sustained
+ performance mode</a>, enabling OEMs to provide hints on device performance
+ capabilities for long running applications. App developers can then use these
+ hints to tune applications for a predictable, consistent level of device
+ performance over long periods of time. App developers can try out this new
+ API in the developer preview on Nexus 6P devices only.
+</p>
+
+<h4>Multiprocess WebView</h4>
+
+<p>
+ Starting with version 51 in Android N, WebView will run web content in a
+ separate sandboxed process when the developer option "Multiprocess WebView"
+ is enabled. The WebView team is looking for feedback on compatibility and
+ runtime performance in N before enabling multiprocess WebView in a future
+ version of Android. In this version, regressions in startup time, total
+ memory usage and software rendering performance are expected.
+</p>
+
+<p>
+ If you find unexpected issues in multiprocess mode we’d like to hear about
+ them. Please get in touch with the WebView team by <a href=
+ "https://bugs.chromium.org/p/chromium/issues/entry?template=Webview%20Bugs">
+ filing a bug</a>.
+</p>
+
+<h4 id="">Keyboard Shortcuts helper</h4>
+
+<p>
+ Android N lets users press <code>Meta+/</code> to trigger a <strong>Keyboard
+ Shortcuts</strong> screen that displays all shortcuts available both from the
+ system and from the app in focus. Developers can add their own shortcuts or
+ trigger the Shortcuts screen from their apps. See <a href=
+ "{@docRoot}preview/api-overview.html#keyboard_shortcuts_helper">Keyboard
+ Shortcuts helper</a> for details.
+</p>
+
+<h4 id="">FrameMetrics API</h4>
+
+<p>
+ DP3 introduces a new <a href=
+ "{@docRoot}preview/api-overview.html#framemetrics_api">FrameMetrics API</a>
+ that allows an app to monitor its UI rendering performance by exposing a
+ streaming pubsub API to transfer frame timing info for the application’s
+ current window. <code>FrameMetricsListener</code> can be used to measure
+ interaction-level UI performance in production with higher granularity and
+ without the need for a USB connection.
+</p>
+
+<h4 id="api-changes">Feature and API changes</h4>
<dl>
- <dt><a href="{@docRoot}preview/api-overview.html#number-blocking"
- >Number-blocking</a></dt>
- <dd>If an unauthorized user attempts to block or unblock a number, the operation
- now fails with {@link java.lang.SecurityException}. (Previously, the
- operation threw {@link java.lang.UnsupportedOperationException}.)</dd>
+ <dt>
+ Launcher Shortcuts and the Launcher Shortcuts API
+ </dt>
- <dt><a href="{@docRoot}preview/api-overview.html#tile_api">Quick
- Settings Tile API</a></dt>
- <dd>The system now uses the activity's metadata to decide on the tile mode.
+ <dd>
+ We’ve decided to defer this feature to a future release of Android. We plan
+ to remove the Launcher Shortcuts APIs (ShortcutManager and others) from the
+ public Android N API starting in the next developer preview.
+ </dd>
+
+ <dt>
+ WebView Javascript run before page load
+ </dt>
+
+ <dd>
+ Starting with apps targeting Android N, the Javascript context is reset
+ when a new page is loaded. Currently, the context is carried over for the
+ first page loaded in a new {@link android.webkit.WebView} instance.
+ Developers looking to inject Javascript into the {@link
+ android.webkit.WebView} should execute the script after the page has
+ started to load.
+ </dd>
+
+ <dt>
+ WebView Geolocation on insecure origins
+ </dt>
+
+ <dd>
+ Starting with apps targeting Android N, the geolocation API will only be
+ allowed on secure origins (over HTTPS.) This policy is designed to protect
+ users' private information when they're using an insecure connection.
+ </dd>
+
+ <dt>
+ Data Saver
+ </dt>
+
+ <dd>
+ Starting in Developer Preview 3, apps can use use an intent to display a
+ system dialog that lets the user directly add the app to the Data Saver
+ exemption whitelist. See the <a href=
+ "{@docRoot}preview/api-overview.html#data_saver">Data Saver
+ documentation</a> for details.
+ </dd>
+
+ <dt>
+ <a href=
+ "{@docRoot}preview/api-overview.html#number-blocking">Number-blocking</a>
+ </dt>
+
+ <dd>
+ If an unauthorized user attempts to block or unblock a number, the
+ operation now fails with {@link java.lang.SecurityException}. (Previously,
+ the operation threw {@link java.lang.UnsupportedOperationException}.)
+ </dd>
+
+ <dt>
+ <a href="{@docRoot}preview/api-overview.html#tile_api">Quick Settings Tile
+ API</a>
+ </dt>
+
+ <dd>
+ The system now uses the activity's metadata to decide on the tile mode.
(Previously, tile mode was determined by the return value of
<code>TileService.onTileAdded()</code>.) For more information, see
- <code>TileService.META_DATA_ACTIVE_TILE</code> in the downloadable
- <a href="{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
+ <code>TileService.META_DATA_ACTIVE_TILE</code> in the downloadable <a href=
+ "{@docRoot}preview/setup-sdk.html#docs-dl">API Reference</a>.
</dd>
</dl>
-<h4 id="dp2-fixes">Fixes for issues reported by developers</h4>
+<h4 id="dp3-fixes">Fixes for issues reported by developers</h4>
<p>
A number of issues reported by developers have been fixed, including:
</p>
<ul>
- <li>TODO</li>
+ <li>Bluetooth Audio playback interrupted after 1 song (bug <a href=
+ "https://code.google.com/p/android/issues/detail?id=206889">206889</a>)
+ </li>
+
+ <li>Pixel C Consistently Crashes (bug <a href=
+ "https://code.google.com/p/android/issues/detail?id=206962">206962</a>)
+ </li>
+
+ <li>Clock and Toast notification issues (bug <a href=
+ "https://code.google.com/p/android/issues/detail?id=203094">203094</a>)
+ </li>
+
+ <li>Pixel C reboots when connected to MacBook Pro via USB C Cable (bug
+ <a href=
+ "https://code.google.com/p/android/issues/detail?id=205432">205432</a>)
+ </li>
+
+ <li>Calandar offset by one day (bug <a href=
+ "https://code.google.com/p/android/issues/detail?id=203002">203002</a>)
+ </li>
+
+ <li>TelephonyManager.getAllCellInfo returning invalid data (bug <a href=
+ "https://code.google.com/p/android/issues/detail?id=203022">203022</a>)
+ </li>
+
+ <li>Nexus 6p, Bluetooth keeps disconnecting (bug <a href=
+ "https://code.google.com/p/android/issues/detail?id=208062">208062</a>)
+ </li>
</ul>
-<h3 id="general">General advisories</h3>
-
-<p>
- This Developer Preview release is for <strong>app developers only</strong>
- and is designed for use in compatibility testing and early development only.
- Please be aware of these general notes about the release:
-</p>
-
-<ul>
-
- <li>TODO</li>
-</ul>
+<p>For the full list of fixed issues, see <a href="https://goo.gl/6uCKtf">the
+issue tracker</a>.</p>
<h3 id="ki">Known Issues</h3>
-<p>TODO</p>
+<h4>Accessibility</h4>
+<ul>
+ <li>Unable to listen to TTS output when pitch is set near maximum level.
+ </li>
+
+ <li>Accessibility features and settings may be disrupted with the user adds a
+ Work profile, including magnification gesture and setting. Accessibility
+ state is restored when the user next touches the associated settings.
+ </li>
+</ul>
+
+<h4>Camera</h4>
+
+<ul>
+ <li>The Camera app has exhibited instability; it may crash in various
+ circumstances, such as when launched in multi-window mode.
+ </li>
+
+ <li>Pressing the shutter continuously in panorama mode may cause the Camera
+ app to crash.
+ </li>
+</ul>
+
+<h4>Audio</h4>
+<ul>
+ <li>A platform audio player issue prevents some apps from functioning
+ normally. For example, Skype and other apps are affected by this issue.
+ </li>
+</ul>
+
+<h4>Connectivity</h4>
+
+
+<ul>
+ <li>When a Bluetooth Low Energy (BLE) peripheral role device advertises a
+ service and a BLE central role device connects, the peripheral role device
+ disconnects very quickly.
+ </li>
+
+ <li>Wi-Fi connection may be dropped when the screen is off.
+ </li>
+
+ <li>RFCOMM connections are unstable and may result in data corruption and
+ dangling connections.
+ </li>
+
+ <li>The active network state ({@link android.net.NetworkInfo#getState
+ NetworkInfo.getState()} and {@link android.net.NetworkInfo#getDetailedState
+ NetworkInfo.getDetailedState()}) might return incorrect values during some
+ restricted background scenarios.
+ </li>
+</ul>
+
+
+<h4>
+ Launcher
+</h4>
+
+<ul>
+ <li>The default launcher’s All Apps tray may become unresponsive after
+ cycling screen off / screen on. Returning to the homescreen and relaunching
+ the All Apps tray may resolve this issue.
+ </li>
+</ul>
+
+<h4>
+ Keyboard
+</h4>
+
+<ul>
+ <li>When updating a device running Android 6.0 or earlier to the N Developer
+ Preview, Google Keyboard does not preserve preferences data such as recent
+ emoji and sound settings.
+ </li>
+
+ <li>Google Indic Managed Keyboard may be unstable.
+ </li>
+
+ <li>When entering text in a password field, the user can select Russian as
+ the input language but the keyboard remains in English. This prevents the
+ user from entering Russian-language passwords.
+ </li>
+</ul>
+
+<h4>
+ Locale and languages
+</h4>
+
+<ul>
+ <li>When using a right-to-left (RTL) locale, the system may unexpectedly
+ switch to left-to-right (LTR) presentation after restarting the device.
+ </li>
+</ul>
+
+<h4>Media</h4>
+
+<ul>
+ <li>Media playback be be unreliable on Nexus 9 and Nexus Player, including
+ issues playing HD video.
+ </li>
+</ul>
+
+<h4>
+ Multi-window mode
+</h4>
+
+<ul>
+ <li>Device may freeze when changing orientation in multi-window mode.
+ </li>
+
+ <li>Several apps currently have issues with multi-window mode:
+ <ul>
+ <li>The system UI may crash when docking Settings > Display >
+ Screen brightness to multi-window.
+ </li>
+
+ <li>The Camera app may crash when launched in multi-window mode.
+ </li>
+
+ <li>YouTube may crash when launched into multi-window mode. To fix the
+ issue, you can clear the YouTube app’s data at Storage > Apps >
+ YouTube.
+ </li>
+ </ul>
+ </li>
+</ul>
+
+<h4>
+ Google Play services
+</h4>
+
+<ul>
+ <li>Apps using Google Cast through Google Play services may be unstable when
+ the user selects a system locale that uses letters and numbers outside of the
+ ASCII range.
+ </li>
+</ul>
+
+<h4>
+ Work and enterprise
+</h4>
+
+<ul>
+ <li>The Device Policy app may crash when the user unlocks the device with the
+ "device policy status" screen pinned.
+ </li>
+
+ <li>After setting up a work profile with file-based encryption enabled and
+ then turning off Work, users must unlock primary profile screen lock to once
+ again access Work apps.
+ </li>
+
+ <li>Cannot open work apps after reboot in file-based-encryption with work
+ mode off.
+ </li>
+
+ <li>Device reboots when removing the security pattern lock and opening work
+ app/personal app in the multi-window.
+ </li>
+
+ <li>Setting DISALLOW_VPN_CONFIG is causing the consent dialog to appear in
+ always-on-vpn set by Device Policy Client.
+ </li>
+
+ <li>Traffic is not locked down until VPN is connected in always-on-vpn mode.
+ </li>
+</ul>
+
+<h4>
+ External storage
+</h4>
+
+<ul>
+ <li>Apps may become unstable when the user moves them from internal storage
+ to adoptable external storage (this can include SD card or devices attached
+ over USB).
+ </li>
+</ul>
+
+<h4>
+ Screen zoom and multiple APKs in Google Play
+</h4>
+
+<ul>
+ <li>On devices running Android N, Google Play services 9.0.83 incorrectly reports
+ the current screen density rather than the stable screen density. When screen
+ zoom is enabled on these devices, this can cause Google Play to select a
+ version of a multi-APK app that’s designed for smaller screens. This issue is
+ fixed in the next version of Google Play services and will be included in a
+ later Developer Preview release.
+ </li>
+
+ <li>On devices running Android N, Google Play services 9.0.83 currently reports
+ Vulkan support but not Vulkan version. This can cause Google Play to select a
+ version of a multi-APK app that’s designed for lower Vulkan support on
+ devices with higher version support. Currently, the Google Play Store does
+ not accept uploads of Apps which use Vulkan version targeting. This support
+ will be added to the Google Play Store in the future and fixed in the next
+ version of Google Play services (to be included in a later Developer Preview
+ release) any N devices using the version of Google Play services 9.0.83 will
+ continue to receive versions of Apps targeting basic Vulkan support.
+ </li>
+</ul>
+
+<h4 id="">Notifications</h4>
+
+<ul>
+ <li>MessagingStyle does not show notifications with "null" (self) sender.
+ </li>
+</ul>
+
+<!-- TODO, if any
<h4>Device-specific issues</h4>
-<p>TODO</p>
-
<dl>
<dt>
<strong>Device Name</strong>
@@ -99,6 +511,8 @@
</dd>
</dl>
+-->
+
<!-- DP2 Release Notes Archive -->
<h2 id="dp2">Developer Preview 2</h2>
diff --git a/docs/html/sitemap.txt b/docs/html/sitemap.txt
deleted file mode 100644
index d41950a..0000000
--- a/docs/html/sitemap.txt
+++ /dev/null
@@ -1,6747 +0,0 @@
-http://developer.android.com/
-http://developer.android.com/index.html
-http://developer.android.com/design/index.html
-http://developer.android.com/develop/index.html
-http://developer.android.com/distribute/index.html
-http://developer.android.com/about/index.html
-http://developer.android.com/design/style/index.html
-http://developer.android.com/design/patterns/index.html
-http://developer.android.com/design/building-blocks/index.html
-http://developer.android.com/design/downloads/index.html
-http://developer.android.com/design/videos/index.html
-http://developer.android.com/training/index.html
-http://developer.android.com/guide/components/index.html
-http://developer.android.com/reference/packages.html
-http://developer.android.com/tools/index.html
-http://developer.android.com/studio/index.html
-http://developer.android.com/google/index.html
-http://developer.android.com/distribute/googleplay/publish/index.html
-http://developer.android.com/distribute/googleplay/promote/index.html
-http://developer.android.com/distribute/essentials/quality/index.html
-http://developer.android.com/distribute/stories/index.html
-http://developer.android.com/distribute/open.html
-http://developer.android.com/about/versions/jelly-bean.html
-http://developer.android.com/support.html
-http://developer.android.com/legal.html
-http://developer.android.com/license.html
-http://developer.android.com/design/get-started/creative-vision.html
-http://developer.android.com/design/get-started/principles.html
-http://developer.android.com/design/get-started/ui-overview.html
-http://developer.android.com/design/style/devices-displays.html
-http://developer.android.com/design/style/themes.html
-http://developer.android.com/design/style/touch-feedback.html
-http://developer.android.com/design/style/metrics-grids.html
-http://developer.android.com/design/style/typography.html
-http://developer.android.com/design/style/color.html
-http://developer.android.com/design/style/iconography.html
-http://developer.android.com/design/style/writing.html
-http://developer.android.com/design/patterns/new.html
-http://developer.android.com/design/patterns/gestures.html
-http://developer.android.com/design/patterns/app-structure.html
-http://developer.android.com/design/patterns/navigation.html
-http://developer.android.com/design/patterns/actionbar.html
-http://developer.android.com/design/patterns/multi-pane-layouts.html
-http://developer.android.com/design/patterns/swipe-views.html
-http://developer.android.com/design/patterns/selection.html
-http://developer.android.com/design/patterns/confirming-acknowledging.html
-http://developer.android.com/design/patterns/notifications.html
-http://developer.android.com/design/patterns/widgets.html
-http://developer.android.com/design/patterns/settings.html
-http://developer.android.com/design/patterns/help.html
-http://developer.android.com/design/patterns/compatibility.html
-http://developer.android.com/design/patterns/accessibility.html
-http://developer.android.com/design/patterns/pure-android.html
-http://developer.android.com/design/building-blocks/tabs.html
-http://developer.android.com/design/building-blocks/lists.html
-http://developer.android.com/design/building-blocks/grid-lists.html
-http://developer.android.com/design/building-blocks/scrolling.html
-http://developer.android.com/design/building-blocks/spinners.html
-http://developer.android.com/design/building-blocks/buttons.html
-http://developer.android.com/design/building-blocks/text-fields.html
-http://developer.android.com/design/building-blocks/seek-bars.html
-http://developer.android.com/design/building-blocks/progress.html
-http://developer.android.com/design/building-blocks/switches.html
-http://developer.android.com/design/building-blocks/dialogs.html
-http://developer.android.com/design/building-blocks/pickers.html
-http://developer.android.com/google/play-services/maps.html
-http://developer.android.com/distribute/essentials/quality/tablet.html
-http://developer.android.com/distribute/stories/tablets.html
-http://developer.android.com/distribute/essentials/quality/core.html
-http://developer.android.com/guide/topics/ui/notifiers/notifications.html
-http://developer.android.com/guide/topics/ui/dialogs.html
-http://developer.android.com/downloads/design/Android_Design_Downloads_20120823.zip
-http://developer.android.com/downloads/design/Android_Design_Fireworks_Stencil_20120814.png
-http://developer.android.com/downloads/design/Android_Design_Illustrator_Vectors_20120814.ai
-http://developer.android.com/downloads/design/Android_Design_OmniGraffle_Stencil_20120814.graffle
-http://developer.android.com/downloads/design/Android_Design_Holo_Widgets_20120814.zip
-http://developer.android.com/downloads/design/Android_Design_Icons_20130926.zip
-http://developer.android.com/downloads/design/Roboto_Hinted_20120823.zip
-http://developer.android.com/downloads/design/Roboto_Specimen_Book_20111129.pdf
-http://developer.android.com/downloads/design/Android_Design_Color_Swatches_20120229.zip
-http://developer.android.com/sdk/installing/bundle.html
-http://developer.android.com/studio/install.html
-http://developer.android.com/sdk/installing/installing-adt.html
-http://developer.android.com/studio/intro/update.html
-http://developer.android.com/studio/intro/update.html
-http://developer.android.com/tools/sdk/ndk/index.html
-http://developer.android.com/tools/workflow/index.html
-http://developer.android.com/tools/devices/index.html
-http://developer.android.com/tools/devices/managing-avds.html
-http://developer.android.com/tools/devices/managing-avds-cmdline.html
-http://developer.android.com/tools/devices/emulator.html
-http://developer.android.com/tools/device.html
-http://developer.android.com/tools/projects/index.html
-http://developer.android.com/tools/projects/projects-eclipse.html
-http://developer.android.com/tools/projects/projects-cmdline.html
-http://developer.android.com/tools/building/index.html
-http://developer.android.com/tools/building/building-eclipse.html
-http://developer.android.com/tools/building/building-cmdline.html
-http://developer.android.com/tools/testing/index.html
-http://developer.android.com/tools/testing/testing_android.html
-http://developer.android.com/tools/testing/testing_eclipse.html
-http://developer.android.com/tools/testing/testing_otheride.html
-http://developer.android.com/tools/testing/activity_testing.html
-http://developer.android.com/tools/testing/service_testing.html
-http://developer.android.com/tools/testing/contentprovider_testing.html
-http://developer.android.com/tools/testing/testing_accessibility.html
-http://developer.android.com/tools/testing/testing_ui.html
-http://developer.android.com/tools/testing/what_to_test.html
-http://developer.android.com/tools/testing/activity_test.html
-http://developer.android.com/tools/debugging/index.html
-http://developer.android.com/tools/debugging/debugging-projects.html
-http://developer.android.com/tools/debugging/debugging-projects-cmdline.html
-http://developer.android.com/tools/debugging/ddms.html
-http://developer.android.com/tools/debugging/debugging-log.html
-http://developer.android.com/tools/debugging/improving-w-lint.html
-http://developer.android.com/tools/debugging/debugging-ui.html
-http://developer.android.com/tools/debugging/debugging-tracing.html
-http://developer.android.com/tools/debugging/systrace.html
-http://developer.android.com/tools/debugging/debugging-devtools.html
-http://developer.android.com/tools/publishing/publishing_overview.html
-http://developer.android.com/tools/publishing/preparing.html
-http://developer.android.com/tools/publishing/versioning.html
-http://developer.android.com/tools/publishing/app-signing.html
-http://developer.android.com/tools/help/index.html
-http://developer.android.com/tools/help/adb.html
-http://developer.android.com/tools/help/adt.html
-http://developer.android.com/tools/help/android.html
-http://developer.android.com/tools/help/avd-manager.html
-http://developer.android.com/tools/help/bmgr.html
-http://developer.android.com/tools/help/monitor.html
-http://developer.android.com/tools/help/dmtracedump.html
-http://developer.android.com/tools/help/draw9patch.html
-http://developer.android.com/tools/help/emulator.html
-http://developer.android.com/tools/help/etc1tool.html
-http://developer.android.com/tools/help/hierarchy-viewer.html
-http://developer.android.com/tools/help/hprof-conv.html
-http://developer.android.com/tools/help/jobb.html
-http://developer.android.com/tools/help/lint.html
-http://developer.android.com/tools/help/logcat.html
-http://developer.android.com/tools/help/mksdcard.html
-http://developer.android.com/tools/help/monkey.html
-http://developer.android.com/tools/help/monkeyrunner_concepts.html
-http://developer.android.com/tools/help/MonkeyDevice.html
-http://developer.android.com/tools/help/MonkeyImage.html
-http://developer.android.com/tools/help/MonkeyRunner.html
-http://developer.android.com/tools/help/proguard.html
-http://developer.android.com/tools/help/sdk-manager.html
-http://developer.android.com/tools/help/systrace.html
-http://developer.android.com/tools/help/gltracer.html
-http://developer.android.com/tools/help/traceview.html
-http://developer.android.com/tools/help/uiautomator/index.html
-http://developer.android.com/tools/help/uiautomator/IAutomationSupport.html
-http://developer.android.com/tools/help/uiautomator/UiAutomatorTestCase.html
-http://developer.android.com/tools/help/uiautomator/UiCollection.html
-http://developer.android.com/tools/help/uiautomator/UiDevice.html
-http://developer.android.com/tools/help/uiautomator/UiObject.html
-http://developer.android.com/tools/help/uiautomator/UiObjectNotFoundException.html
-http://developer.android.com/tools/help/uiautomator/UiScrollable.html
-http://developer.android.com/tools/help/uiautomator/UiSelector.html
-http://developer.android.com/tools/help/uiautomator/UiWatcher.html
-http://developer.android.com/tools/help/zipalign.html
-http://developer.android.com/tools/revisions/index.html
-http://developer.android.com/tools/sdk/tools-notes.html
-http://developer.android.com/tools/sdk/eclipse-adt.html
-http://developer.android.com/tools/revisions/platforms.html
-http://developer.android.com/tools/extras/index.html
-http://developer.android.com/tools/support-library/index.html
-http://developer.android.com/tools/extras/oem-usb.html
-http://developer.android.com/tools/samples/index.html
-http://developer.android.com/tools/adk/index.html
-http://developer.android.com/tools/adk/adk2.html
-http://developer.android.com/tools/adk/adk.html
-http://developer.android.com/distribute/googleplay/about/visibility.html
-http://developer.android.com/distribute/googleplay/about/monetizing.html
-http://developer.android.com/distribute/googleplay/about/distribution.html
-http://developer.android.com/distribute/googleplay/start.html
-http://developer.android.com/distribute/googleplay/publish/console.html
-http://developer.android.com/distribute/tools/launch-checklist.html
-http://developer.android.com/distribute/tools/promote/linking.html
-http://developer.android.com/distribute/googleplay/promote/badges.html
-http://developer.android.com/distribute/promote/device-art.html
-http://developer.android.com/distribute/tools/promote/brand.html
-http://developer.android.com/distribute/googleplay/strategies/app-quality.html
-http://developer.android.com/google/play/billing/index.html
-http://developer.android.com/google/play/licensing/index.html
-http://developer.android.com/about/start.html
-http://developer.android.com/about/versions/android-4.2.html
-http://developer.android.com/about/versions/android-4.1.html
-http://developer.android.com/about/versions/android-4.0-highlights.html
-http://developer.android.com/about/versions/android-4.0.3.html
-http://developer.android.com/about/versions/android-4.0.html
-http://developer.android.com/about/versions/android-3.0-highlights.html
-http://developer.android.com/about/versions/android-3.2.html
-http://developer.android.com/about/versions/android-3.1.html
-http://developer.android.com/about/versions/android-3.0.html
-http://developer.android.com/about/versions/android-2.3-highlights.html
-http://developer.android.com/about/versions/android-2.3.4.html
-http://developer.android.com/about/versions/android-2.3.3.html
-http://developer.android.com/about/dashboards/index.html
-http://developer.android.com/google/gcm/index.html
-http://developer.android.com/guide/components/fundamentals.html
-http://developer.android.com/guide/components/activities.html
-http://developer.android.com/guide/components/fragments.html
-http://developer.android.com/guide/components/loaders.html
-http://developer.android.com/guide/components/tasks-and-back-stack.html
-http://developer.android.com/guide/components/services.html
-http://developer.android.com/guide/components/bound-services.html
-http://developer.android.com/guide/components/aidl.html
-http://developer.android.com/guide/topics/providers/content-providers.html
-http://developer.android.com/guide/topics/providers/content-provider-basics.html
-http://developer.android.com/guide/topics/providers/content-provider-creating.html
-http://developer.android.com/guide/topics/providers/calendar-provider.html
-http://developer.android.com/guide/topics/providers/contacts-provider.html
-http://developer.android.com/guide/components/intents-filters.html
-http://developer.android.com/guide/components/processes-and-threads.html
-http://developer.android.com/guide/topics/security/permissions.html
-http://developer.android.com/guide/topics/appwidgets/index.html
-http://developer.android.com/guide/topics/manifest/manifest-intro.html
-http://developer.android.com/guide/topics/manifest/action-element.html
-http://developer.android.com/guide/topics/manifest/activity-element.html
-http://developer.android.com/guide/topics/manifest/activity-alias-element.html
-http://developer.android.com/guide/topics/manifest/application-element.html
-http://developer.android.com/guide/topics/manifest/category-element.html
-http://developer.android.com/guide/topics/manifest/compatible-screens-element.html
-http://developer.android.com/guide/topics/manifest/data-element.html
-http://developer.android.com/guide/topics/manifest/grant-uri-permission-element.html
-http://developer.android.com/guide/topics/manifest/instrumentation-element.html
-http://developer.android.com/guide/topics/manifest/intent-filter-element.html
-http://developer.android.com/guide/topics/manifest/manifest-element.html
-http://developer.android.com/guide/topics/manifest/meta-data-element.html
-http://developer.android.com/guide/topics/manifest/path-permission-element.html
-http://developer.android.com/guide/topics/manifest/permission-element.html
-http://developer.android.com/guide/topics/manifest/permission-group-element.html
-http://developer.android.com/guide/topics/manifest/permission-tree-element.html
-http://developer.android.com/guide/topics/manifest/provider-element.html
-http://developer.android.com/guide/topics/manifest/receiver-element.html
-http://developer.android.com/guide/topics/manifest/service-element.html
-http://developer.android.com/guide/topics/manifest/supports-gl-texture-element.html
-http://developer.android.com/guide/topics/manifest/supports-screens-element.html
-http://developer.android.com/guide/topics/manifest/uses-configuration-element.html
-http://developer.android.com/guide/topics/manifest/uses-feature-element.html
-http://developer.android.com/guide/topics/manifest/uses-library-element.html
-http://developer.android.com/guide/topics/manifest/uses-permission-element.html
-http://developer.android.com/guide/topics/manifest/uses-sdk-element.html
-http://developer.android.com/guide/topics/ui/index.html
-http://developer.android.com/guide/topics/ui/overview.html
-http://developer.android.com/guide/topics/ui/declaring-layout.html
-http://developer.android.com/guide/topics/ui/layout/linear.html
-http://developer.android.com/guide/topics/ui/layout/relative.html
-http://developer.android.com/guide/topics/ui/layout/listview.html
-http://developer.android.com/guide/topics/ui/layout/gridview.html
-http://developer.android.com/guide/topics/ui/controls.html
-http://developer.android.com/guide/topics/ui/controls/button.html
-http://developer.android.com/guide/topics/ui/controls/text.html
-http://developer.android.com/guide/topics/ui/controls/checkbox.html
-http://developer.android.com/guide/topics/ui/controls/radiobutton.html
-http://developer.android.com/guide/topics/ui/controls/togglebutton.html
-http://developer.android.com/guide/topics/ui/controls/spinner.html
-http://developer.android.com/guide/topics/ui/controls/pickers.html
-http://developer.android.com/guide/topics/ui/ui-events.html
-http://developer.android.com/guide/topics/ui/menus.html
-http://developer.android.com/guide/topics/ui/actionbar.html
-http://developer.android.com/guide/topics/ui/settings.html
-http://developer.android.com/guide/topics/ui/notifiers/toasts.html
-http://developer.android.com/guide/topics/search/index.html
-http://developer.android.com/guide/topics/search/search-dialog.html
-http://developer.android.com/guide/topics/search/adding-recent-query-suggestions.html
-http://developer.android.com/guide/topics/search/adding-custom-suggestions.html
-http://developer.android.com/guide/topics/search/searchable-config.html
-http://developer.android.com/guide/topics/ui/drag-drop.html
-http://developer.android.com/guide/topics/ui/accessibility/index.html
-http://developer.android.com/guide/topics/ui/accessibility/apps.html
-http://developer.android.com/guide/topics/ui/accessibility/checklist.html
-http://developer.android.com/guide/topics/ui/accessibility/services.html
-http://developer.android.com/guide/topics/ui/themes.html
-http://developer.android.com/guide/topics/ui/custom-components.html
-http://developer.android.com/guide/topics/resources/index.html
-http://developer.android.com/guide/topics/resources/overview.html
-http://developer.android.com/guide/topics/resources/providing-resources.html
-http://developer.android.com/guide/topics/resources/accessing-resources.html
-http://developer.android.com/guide/topics/resources/runtime-changes.html
-http://developer.android.com/guide/topics/resources/localization.html
-http://developer.android.com/guide/topics/resources/available-resources.html
-http://developer.android.com/guide/topics/resources/animation-resource.html
-http://developer.android.com/guide/topics/resources/color-list-resource.html
-http://developer.android.com/guide/topics/resources/drawable-resource.html
-http://developer.android.com/guide/topics/resources/layout-resource.html
-http://developer.android.com/guide/topics/resources/menu-resource.html
-http://developer.android.com/guide/topics/resources/string-resource.html
-http://developer.android.com/guide/topics/resources/style-resource.html
-http://developer.android.com/guide/topics/resources/more-resources.html
-http://developer.android.com/guide/topics/graphics/index.html
-http://developer.android.com/guide/topics/graphics/overview.html
-http://developer.android.com/guide/topics/graphics/prop-animation.html
-http://developer.android.com/guide/topics/graphics/view-animation.html
-http://developer.android.com/guide/topics/graphics/drawable-animation.html
-http://developer.android.com/guide/topics/graphics/2d-graphics.html
-http://developer.android.com/guide/topics/graphics/opengl.html
-http://developer.android.com/guide/topics/graphics/hardware-accel.html
-http://developer.android.com/guide/topics/renderscript/index.html
-http://developer.android.com/guide/topics/renderscript/compute.html
-http://developer.android.com/guide/topics/renderscript/advanced.html
-http://developer.android.com/guide/topics/renderscript/reference.html
-http://developer.android.com/guide/topics/media/index.html
-http://developer.android.com/guide/topics/media/mediaplayer.html
-http://developer.android.com/guide/appendix/media-formats.html
-http://developer.android.com/guide/topics/media/audio-capture.html
-http://developer.android.com/guide/topics/media/jetplayer.html
-http://developer.android.com/guide/topics/media/camera.html
-http://developer.android.com/guide/topics/sensors/index.html
-http://developer.android.com/guide/topics/location/index.html
-http://developer.android.com/guide/topics/location/strategies.html
-http://developer.android.com/guide/topics/sensors/sensors_overview.html
-http://developer.android.com/guide/topics/sensors/sensors_motion.html
-http://developer.android.com/guide/topics/sensors/sensors_position.html
-http://developer.android.com/guide/topics/sensors/sensors_environment.html
-http://developer.android.com/guide/topics/connectivity/index.html
-http://developer.android.com/guide/topics/connectivity/bluetooth.html
-http://developer.android.com/guide/topics/connectivity/nfc/index.html
-http://developer.android.com/guide/topics/connectivity/nfc/nfc.html
-http://developer.android.com/guide/topics/connectivity/nfc/advanced-nfc.html
-http://developer.android.com/guide/topics/connectivity/wifip2p.html
-http://developer.android.com/guide/topics/connectivity/usb/index.html
-http://developer.android.com/guide/topics/connectivity/usb/accessory.html
-http://developer.android.com/guide/topics/connectivity/usb/host.html
-http://developer.android.com/guide/topics/connectivity/sip.html
-http://developer.android.com/guide/topics/text/index.html
-http://developer.android.com/guide/topics/text/copy-paste.html
-http://developer.android.com/guide/topics/text/creating-input-method.html
-http://developer.android.com/guide/topics/text/spell-checker-framework.html
-http://developer.android.com/guide/topics/data/index.html
-http://developer.android.com/guide/topics/data/data-storage.html
-http://developer.android.com/guide/topics/data/backup.html
-http://developer.android.com/guide/topics/data/install-location.html
-http://developer.android.com/guide/topics/admin/index.html
-http://developer.android.com/guide/topics/admin/device-admin.html
-http://developer.android.com/guide/webapps/index.html
-http://developer.android.com/guide/webapps/overview.html
-http://developer.android.com/guide/webapps/targeting.html
-http://developer.android.com/guide/webapps/webview.html
-http://developer.android.com/guide/webapps/debugging.html
-http://developer.android.com/guide/webapps/best-practices.html
-http://developer.android.com/guide/practices/index.html
-http://developer.android.com/guide/practices/compatibility.html
-http://developer.android.com/guide/practices/screens_support.html
-http://developer.android.com/guide/practices/screens-distribution.html
-http://developer.android.com/guide/practices/screen-compat-mode.html
-http://developer.android.com/guide/practices/tablets-and-handsets.html
-http://developer.android.com/training/basics/activity-lifecycle/index.html
-http://developer.android.com/training/basics/fragments/index.html
-http://developer.android.com/training/sharing/index.html
-http://developer.android.com/training/basics/firstapp/index.html
-http://developer.android.com/training/basics/firstapp/creating-project.html
-http://developer.android.com/training/basics/firstapp/running-app.html
-http://developer.android.com/training/basics/firstapp/building-ui.html
-http://developer.android.com/training/basics/firstapp/starting-activity.html
-http://developer.android.com/training/basics/activity-lifecycle/starting.html
-http://developer.android.com/training/basics/activity-lifecycle/pausing.html
-http://developer.android.com/training/basics/activity-lifecycle/stopping.html
-http://developer.android.com/training/basics/activity-lifecycle/recreating.html
-http://developer.android.com/training/basics/supporting-devices/index.html
-http://developer.android.com/training/basics/supporting-devices/languages.html
-http://developer.android.com/training/basics/supporting-devices/screens.html
-http://developer.android.com/training/basics/supporting-devices/platforms.html
-http://developer.android.com/training/basics/fragments/creating.html
-http://developer.android.com/training/basics/fragments/fragment-ui.html
-http://developer.android.com/training/basics/fragments/communicating.html
-http://developer.android.com/training/basics/data-storage/index.html
-http://developer.android.com/training/basics/data-storage/shared-preferences.html
-http://developer.android.com/training/basics/data-storage/files.html
-http://developer.android.com/training/basics/data-storage/databases.html
-http://developer.android.com/training/basics/intents/index.html
-http://developer.android.com/training/basics/intents/sending.html
-http://developer.android.com/training/basics/intents/result.html
-http://developer.android.com/training/basics/intents/filters.html
-http://developer.android.com/training/sharing/send.html
-http://developer.android.com/training/sharing/receive.html
-http://developer.android.com/training/sharing/shareaction.html
-http://developer.android.com/training/building-multimedia.html
-http://developer.android.com/training/managing-audio/index.html
-http://developer.android.com/training/managing-audio/volume-playback.html
-http://developer.android.com/training/managing-audio/audio-focus.html
-http://developer.android.com/training/managing-audio/audio-output.html
-http://developer.android.com/training/camera/index.html
-http://developer.android.com/training/camera/photobasics.html
-http://developer.android.com/training/camera/videobasics.html
-http://developer.android.com/training/camera/cameradirect.html
-http://developer.android.com/training/building-graphics.html
-http://developer.android.com/training/displaying-bitmaps/index.html
-http://developer.android.com/training/displaying-bitmaps/load-bitmap.html
-http://developer.android.com/training/displaying-bitmaps/process-bitmap.html
-http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
-http://developer.android.com/training/displaying-bitmaps/display-bitmap.html
-http://developer.android.com/training/graphics/opengl/index.html
-http://developer.android.com/training/graphics/opengl/environment.html
-http://developer.android.com/training/graphics/opengl/shapes.html
-http://developer.android.com/training/graphics/opengl/draw.html
-http://developer.android.com/training/graphics/opengl/projection.html
-http://developer.android.com/training/graphics/opengl/motion.html
-http://developer.android.com/training/graphics/opengl/touch.html
-http://developer.android.com/training/animation/index.html
-http://developer.android.com/training/animation/crossfade.html
-http://developer.android.com/training/animation/screen-slide.html
-http://developer.android.com/training/animation/cardflip.html
-http://developer.android.com/training/animation/zoom.html
-http://developer.android.com/training/animation/layout.html
-http://developer.android.com/training/building-connectivity.html
-http://developer.android.com/training/connect-devices-wirelessly/index.html
-http://developer.android.com/training/connect-devices-wirelessly/nsd.html
-http://developer.android.com/training/connect-devices-wirelessly/wifi-direct.html
-http://developer.android.com/training/connect-devices-wirelessly/nsd-wifi-direct.html
-http://developer.android.com/training/basics/network-ops/index.html
-http://developer.android.com/training/basics/network-ops/connecting.html
-http://developer.android.com/training/basics/network-ops/managing.html
-http://developer.android.com/training/basics/network-ops/xml.html
-http://developer.android.com/training/efficient-downloads/index.html
-http://developer.android.com/training/efficient-downloads/efficient-network-access.html
-http://developer.android.com/training/efficient-downloads/regular_updates.html
-http://developer.android.com/training/efficient-downloads/redundant_redundant.html
-http://developer.android.com/training/efficient-downloads/connectivity_patterns.html
-http://developer.android.com/training/cloudsync/index.html
-http://developer.android.com/training/cloudsync/backupapi.html
-http://developer.android.com/training/cloudsync/gcm.html
-http://developer.android.com/training/building-userinfo.html
-http://developer.android.com/training/id-auth/index.html
-http://developer.android.com/training/id-auth/identify.html
-http://developer.android.com/training/id-auth/authenticate.html
-http://developer.android.com/training/id-auth/custom_auth.html
-http://developer.android.com/training/basics/location/index.html
-http://developer.android.com/training/basics/location/locationmanager.html
-http://developer.android.com/training/basics/location/currentlocation.html
-http://developer.android.com/training/basics/location/geocoding.html
-http://developer.android.com/training/best-ux.html
-http://developer.android.com/training/design-navigation/index.html
-http://developer.android.com/training/design-navigation/screen-planning.html
-http://developer.android.com/training/design-navigation/multiple-sizes.html
-http://developer.android.com/training/design-navigation/descendant-lateral.html
-http://developer.android.com/training/design-navigation/ancestral-temporal.html
-http://developer.android.com/training/design-navigation/wireframing.html
-http://developer.android.com/training/implementing-navigation/index.html
-http://developer.android.com/training/implementing-navigation/lateral.html
-http://developer.android.com/training/implementing-navigation/ancestral.html
-http://developer.android.com/training/implementing-navigation/temporal.html
-http://developer.android.com/training/implementing-navigation/descendant.html
-http://developer.android.com/training/notify-user/index.html
-http://developer.android.com/training/notify-user/build-notification.html
-http://developer.android.com/training/notify-user/navigation.html
-http://developer.android.com/training/notify-user/managing.html
-http://developer.android.com/training/notify-user/expanded.html
-http://developer.android.com/training/notify-user/display-progress.html
-http://developer.android.com/training/search/index.html
-http://developer.android.com/training/search/setup.html
-http://developer.android.com/training/search/search.html
-http://developer.android.com/training/search/backward-compat.html
-http://developer.android.com/training/multiscreen/index.html
-http://developer.android.com/training/multiscreen/screensizes.html
-http://developer.android.com/training/multiscreen/screendensities.html
-http://developer.android.com/training/multiscreen/adaptui.html
-http://developer.android.com/training/tv/index.html
-http://developer.android.com/training/tv/optimizing-layouts-tv.html
-http://developer.android.com/training/tv/optimizing-navigation-tv.html
-http://developer.android.com/training/tv/unsupported-features-tv.html
-http://developer.android.com/training/custom-views/index.html
-http://developer.android.com/training/custom-views/create-view.html
-http://developer.android.com/training/custom-views/custom-drawing.html
-http://developer.android.com/training/custom-views/making-interactive.html
-http://developer.android.com/training/custom-views/optimizing-view.html
-http://developer.android.com/training/backward-compatible-ui/index.html
-http://developer.android.com/training/backward-compatible-ui/abstracting.html
-http://developer.android.com/training/backward-compatible-ui/new-implementation.html
-http://developer.android.com/training/backward-compatible-ui/older-implementation.html
-http://developer.android.com/training/backward-compatible-ui/using-component.html
-http://developer.android.com/training/accessibility/index.html
-http://developer.android.com/training/accessibility/accessible-app.html
-http://developer.android.com/training/accessibility/service.html
-http://developer.android.com/training/best-performance.html
-http://developer.android.com/training/articles/perf-tips.html
-http://developer.android.com/training/improving-layouts/index.html
-http://developer.android.com/training/improving-layouts/optimizing-layout.html
-http://developer.android.com/training/improving-layouts/reusing-layouts.html
-http://developer.android.com/training/improving-layouts/loading-ondemand.html
-http://developer.android.com/training/improving-layouts/smooth-scrolling.html
-http://developer.android.com/training/monitoring-device-state/index.html
-http://developer.android.com/training/monitoring-device-state/battery-monitoring.html
-http://developer.android.com/training/monitoring-device-state/docking-monitoring.html
-http://developer.android.com/training/monitoring-device-state/connectivity-monitoring.html
-http://developer.android.com/training/monitoring-device-state/manifest-receivers.html
-http://developer.android.com/training/articles/perf-anr.html
-http://developer.android.com/training/articles/perf-jni.html
-http://developer.android.com/training/articles/smp.html
-http://developer.android.com/training/best-security.html
-http://developer.android.com/training/articles/security-tips.html
-http://developer.android.com/training/enterprise/index.html
-http://developer.android.com/training/enterprise/device-management-policy.html
-http://developer.android.com/training/distribute.html
-http://developer.android.com/training/in-app-billing/index.html
-http://developer.android.com/training/in-app-billing/preparing-iab-app.html
-http://developer.android.com/training/in-app-billing/list-iab-products.html
-http://developer.android.com/training/in-app-billing/purchase-iab-products.html
-http://developer.android.com/training/in-app-billing/test-iab-app.html
-http://developer.android.com/training/multiple-apks/index.html
-http://developer.android.com/training/multiple-apks/api.html
-http://developer.android.com/training/multiple-apks/screensize.html
-http://developer.android.com/training/multiple-apks/texture.html
-http://developer.android.com/training/multiple-apks/multiple.html
-http://developer.android.com/training/monetization/index.html
-http://developer.android.com/training/monetization/ads-and-ux.html
-http://developer.android.com/reference/android/app/DialogFragment.html
-http://developer.android.com/reference/android/app/AlertDialog.html
-http://developer.android.com/reference/android/app/Dialog.html
-http://developer.android.com/reference/android/app/DatePickerDialog.html
-http://developer.android.com/reference/android/app/TimePickerDialog.html
-http://developer.android.com/reference/android/app/ProgressDialog.html
-http://developer.android.com/reference/android/widget/ProgressBar.html
-http://developer.android.com/reference/android/support/v4/app/DialogFragment.html
-http://developer.android.com/reference/android/support/v4/app/Fragment.html
-http://developer.android.com/reference/android/app/AlertDialog.Builder.html
-http://developer.android.com/reference/android/content/DialogInterface.OnClickListener.html
-http://developer.android.com/reference/android/widget/ListAdapter.html
-http://developer.android.com/reference/android/support/v4/content/Loader.html
-http://developer.android.com/reference/java/util/ArrayList.html
-http://developer.android.com/reference/android/widget/EditText.html
-http://developer.android.com/reference/android/view/LayoutInflater.html
-http://developer.android.com/reference/android/app/Activity.html
-http://developer.android.com/reference/android/R.style.html
-http://developer.android.com/reference/android/support/v4/app/FragmentManager.html
-http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html
-http://developer.android.com/reference/android/app/Fragment.html
-http://developer.android.com/reference/android/view/TouchDelegate.html
-http://developer.android.com/guide/practices/ui_guidelines/widget_design.html
-http://developer.android.com/google/play/publishing/multiple-apks.html
-http://developer.android.com/google/play-services/index.html
-http://developer.android.com/google/play-services/setup.html
-http://developer.android.com/google/play-services/auth.html
-http://developer.android.com/google/play-services/plus.html
-http://developer.android.com/reference/gms-packages.html
-http://developer.android.com/google/play/billing/billing_overview.html
-http://developer.android.com/google/play/billing/api.html
-http://developer.android.com/google/play/billing/billing_integrate.html
-http://developer.android.com/google/play/billing/billing_reference.html
-http://developer.android.com/google/play/billing/v2/api.html
-http://developer.android.com/google/play/billing/v2/billing_integrate.html
-http://developer.android.com/google/play/billing/v2/billing_subscriptions.html
-http://developer.android.com/google/play/billing/v2/billing_reference.html
-http://developer.android.com/google/play/billing/billing_best_practices.html
-http://developer.android.com/google/play/billing/billing_testing.html
-http://developer.android.com/google/play/billing/billing_admin.html
-http://developer.android.com/google/play/billing/versions.html
-http://developer.android.com/google/play/dist.html
-http://developer.android.com/google/play/filters.html
-http://developer.android.com/google/play/expansion-files.html
-http://developer.android.com/google/play/licensing/overview.html
-http://developer.android.com/google/play/licensing/setting-up.html
-http://developer.android.com/google/play/licensing/adding-licensing.html
-http://developer.android.com/google/play/licensing/licensing-reference.html
-http://developer.android.com/google/gcm/gs.html
-http://developer.android.com/google/gcm/gcm.html
-http://developer.android.com/google/gcm/demo.html
-http://developer.android.com/google/gcm/adv.html
-http://developer.android.com/google/gcm/c2dm.html
-http://developer.android.com/reference/gcm-packages.html
-http://developer.android.com/google/backup/index.html
-http://developer.android.com/google/backup/signup.html
-http://developer.android.com/guide/practices/responsiveness.html
-http://developer.android.com/reference/android/os/StrictMode.html
-http://developer.android.com/reference/android/os/StrictMode.ThreadPolicy.Builder.html
-http://developer.android.com/resources/faq/troubleshooting.html
-http://developer.android.com/reference/android/content/Intent.html
-http://developer.android.com/reference/android/content/IntentFilter.html
-http://developer.android.com/reference/android/content/BroadcastReceiver.html
-http://developer.android.com/reference/android/content/pm/PackageManager.html
-http://developer.android.com/reference/android/content/Context.html
-http://developer.android.com/reference/android/content/ComponentName.html
-http://developer.android.com/reference/android/os/Bundle.html
-http://developer.android.com/guide/appendix/g-app-intents.html
-http://developer.android.com/resources/samples/index.html
-http://developer.android.com/resources/samples/NotePad/index.html
-http://developer.android.com/reference/android/view/Menu.html
-http://developer.android.com/reference/android/content/pm/PackageItemInfo.html
-http://developer.android.com/reference/android/test/InstrumentationTestRunner.html
-http://developer.android.com/reference/junit/framework/TestSuite.html
-http://developer.android.com/reference/android/test/package-summary.html
-http://developer.android.com/reference/junit/framework/TestCase.html
-http://developer.android.com/reference/android/test/InstrumentationTestCase.html
-http://developer.android.com/reference/android/test/PerformanceTestCase.html
-http://developer.android.com/reference/java/lang/String.html
-http://developer.android.com/reference/android/content/res/Resources.html
-http://developer.android.com/reference/android/text/Html.html
-http://developer.android.com/reference/android/text/TextUtils.html
-http://developer.android.com/reference/android/animation/ValueAnimator.html
-http://developer.android.com/reference/android/animation/ObjectAnimator.html
-http://developer.android.com/reference/android/animation/TypeEvaluator.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/index.html
-http://developer.android.com/reference/android/animation/TimeInterpolator.html
-http://developer.android.com/reference/android/view/animation/AccelerateDecelerateInterpolator.html
-http://developer.android.com/reference/android/animation/IntEvaluator.html
-http://developer.android.com/reference/android/view/View.html
-http://developer.android.com/reference/android/animation/package-summary.html
-http://developer.android.com/reference/android/view/animation/package-summary.html
-http://developer.android.com/reference/android/animation/Animator.html
-http://developer.android.com/reference/android/animation/AnimatorSet.html
-http://developer.android.com/reference/android/animation/FloatEvaluator.html
-http://developer.android.com/reference/android/animation/ArgbEvaluator.html
-http://developer.android.com/reference/android/view/animation/AccelerateInterpolator.html
-http://developer.android.com/reference/android/view/animation/AnticipateInterpolator.html
-http://developer.android.com/reference/android/view/animation/AnticipateOvershootInterpolator.html
-http://developer.android.com/reference/android/view/animation/BounceInterpolator.html
-http://developer.android.com/reference/android/view/animation/CycleInterpolator.html
-http://developer.android.com/reference/android/view/animation/DecelerateInterpolator.html
-http://developer.android.com/reference/android/view/animation/LinearInterpolator.html
-http://developer.android.com/reference/android/view/animation/OvershootInterpolator.html
-http://developer.android.com/reference/android/animation/ValueAnimator.AnimatorUpdateListener.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/BouncingBalls.html
-http://developer.android.com/reference/android/animation/Animator.AnimatorListener.html
-http://developer.android.com/reference/android/animation/AnimatorListenerAdapter.html
-http://developer.android.com/reference/android/animation/LayoutTransition.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimations.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/LayoutAnimationsByDefault.html
-http://developer.android.com/resources/samples/ApiDemos/res/layout/layout_animations_by_default.html
-http://developer.android.com/reference/android/animation/Keyframe.html
-http://developer.android.com/reference/android/animation/PropertyValuesHolder.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/animation/MultiPropertyAnimation.html
-http://developer.android.com/reference/android/view/ViewPropertyAnimator.html
-http://developer.android.com/shareables/training/DeviceManagement.zip
-http://developer.android.com/reference/android/app/admin/DevicePolicyManager.html
-http://developer.android.com/reference/java/lang/SecurityException.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.html
-http://developer.android.com/reference/android/app/PendingIntent.html
-http://developer.android.com/reference/android/app/NotificationManager.html
-http://developer.android.com/reference/java/lang/Object.html
-http://developer.android.com/reference/android/app/Notification.html
-http://developer.android.com/reference/android/os/Build.html
-http://developer.android.com/reference/android/app/ActionBar.html
-http://developer.android.com/resources/samples/SpellChecker/SampleSpellCheckerService/index.html
-http://developer.android.com/resources/samples/SpellChecker/HelloSpellChecker/index.html
-http://developer.android.com/reference/android/service/textservice/SpellCheckerService.html
-http://developer.android.com/reference/android/app/Service.html
-http://developer.android.com/reference/android/service/textservice/SpellCheckerService.Session.html
-http://developer.android.com/reference/android/view/textservice/SentenceSuggestionsInfo.html
-http://developer.android.com/reference/android/Manifest.permission.html
-http://developer.android.com/reference/android/widget/TextView.html
-http://developer.android.com/shareables/training/TabCompat.zip
-http://developer.android.com/reference/java/lang/VerifyError.html
-http://developer.android.com/reference/android/app/ActionBar.Tab.html
-http://developer.android.com/reference/android/widget/LinearLayout.html
-http://developer.android.com/reference/android/widget/ListView.html
-http://developer.android.com/reference/android/widget/GridView.html
-http://developer.android.com/tools/help/layoutopt.html
-http://developer.android.com/reference/android/widget/RelativeLayout.html
-http://developer.android.com/reference/android/widget/ImageView.html
-http://developer.android.com/reference/android/widget/FrameLayout.html
-http://developer.android.com/reference/android/widget/ScrollView.html
-http://developer.android.com/reference/android/widget/GridLayout.html
-http://developer.android.com/resources/samples/SampleSyncAdapter/index.html
-http://developer.android.com/reference/android/accounts/AccountManager.html
-http://developer.android.com/reference/android/net/Uri.html
-http://developer.android.com/reference/java/util/List.html
-http://developer.android.com/reference/android/graphics/NinePatch.html
-http://developer.android.com/reference/android/hardware/usb/package-summary.html
-http://developer.android.com/reference/android/hardware/usb/UsbManager.html
-http://developer.android.com/reference/android/hardware/usb/UsbAccessory.html
-http://developer.android.com/reference/java/io/FileInputStream.html
-http://developer.android.com/reference/java/io/FileOutputStream.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.html
-http://developer.android.com/guide/practices/optimizing-for-3.0.html
-http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase2.html
-http://developer.android.com/reference/android/test/ActivityUnitTestCase.html
-http://developer.android.com/reference/junit/framework/Assert.html
-http://developer.android.com/reference/android/test/SingleLaunchActivityTestCase.html
-http://developer.android.com/reference/android/test/mock/package-summary.html
-http://developer.android.com/reference/android/test/mock/MockApplication.html
-http://developer.android.com/reference/android/test/ViewAsserts.html
-http://developer.android.com/shareables/training/Animations.zip
-http://developer.android.com/reference/android/R.integer.html
-http://developer.android.com/shareables/training/NotifyUser.zip
-http://developer.android.com/reference/android/os/PatternMatcher.html
-http://developer.android.com/reference/android/widget/TabWidget.html
-http://developer.android.com/reference/android/widget/TabHost.html
-http://developer.android.com/reference/android/app/FragmentTransaction.html
-http://developer.android.com/reference/android/app/FragmentManager.html
-http://developer.android.com/reference/android/app/FragmentManager.OnBackStackChangedListener.html
-http://developer.android.com/reference/android/webkit/WebView.html
-http://developer.android.com/reference/android/package-summary.html
-http://developer.android.com/reference/android/accessibilityservice/package-summary.html
-http://developer.android.com/reference/android/accounts/package-summary.html
-http://developer.android.com/reference/android/app/package-summary.html
-http://developer.android.com/reference/android/app/admin/package-summary.html
-http://developer.android.com/reference/android/app/backup/package-summary.html
-http://developer.android.com/reference/android/appwidget/package-summary.html
-http://developer.android.com/reference/android/bluetooth/package-summary.html
-http://developer.android.com/reference/android/content/package-summary.html
-http://developer.android.com/reference/android/content/pm/package-summary.html
-http://developer.android.com/reference/android/content/res/package-summary.html
-http://developer.android.com/reference/android/database/package-summary.html
-http://developer.android.com/reference/android/database/sqlite/package-summary.html
-http://developer.android.com/reference/android/drm/package-summary.html
-http://developer.android.com/reference/android/gesture/package-summary.html
-http://developer.android.com/reference/android/graphics/package-summary.html
-http://developer.android.com/reference/android/graphics/drawable/package-summary.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/package-summary.html
-http://developer.android.com/reference/android/hardware/package-summary.html
-http://developer.android.com/reference/android/hardware/display/package-summary.html
-http://developer.android.com/reference/android/hardware/input/package-summary.html
-http://developer.android.com/reference/android/inputmethodservice/package-summary.html
-http://developer.android.com/reference/android/location/package-summary.html
-http://developer.android.com/reference/android/media/package-summary.html
-http://developer.android.com/reference/android/media/audiofx/package-summary.html
-http://developer.android.com/reference/android/media/effect/package-summary.html
-http://developer.android.com/reference/android/mtp/package-summary.html
-http://developer.android.com/reference/android/net/package-summary.html
-http://developer.android.com/reference/android/net/http/package-summary.html
-http://developer.android.com/reference/android/net/nsd/package-summary.html
-http://developer.android.com/reference/android/net/rtp/package-summary.html
-http://developer.android.com/reference/android/net/sip/package-summary.html
-http://developer.android.com/reference/android/net/wifi/package-summary.html
-http://developer.android.com/reference/android/net/wifi/p2p/package-summary.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/package-summary.html
-http://developer.android.com/reference/android/nfc/package-summary.html
-http://developer.android.com/reference/android/nfc/tech/package-summary.html
-http://developer.android.com/reference/android/opengl/package-summary.html
-http://developer.android.com/reference/android/os/package-summary.html
-http://developer.android.com/reference/android/os/storage/package-summary.html
-http://developer.android.com/reference/android/preference/package-summary.html
-http://developer.android.com/reference/android/provider/package-summary.html
-http://developer.android.com/reference/android/renderscript/package-summary.html
-http://developer.android.com/reference/android/sax/package-summary.html
-http://developer.android.com/reference/android/security/package-summary.html
-http://developer.android.com/reference/android/service/dreams/package-summary.html
-http://developer.android.com/reference/android/service/textservice/package-summary.html
-http://developer.android.com/reference/android/service/wallpaper/package-summary.html
-http://developer.android.com/reference/android/speech/package-summary.html
-http://developer.android.com/reference/android/speech/tts/package-summary.html
-http://developer.android.com/reference/android/support/v13/app/package-summary.html
-http://developer.android.com/reference/android/support/v4/accessibilityservice/package-summary.html
-http://developer.android.com/reference/android/support/v4/app/package-summary.html
-http://developer.android.com/reference/android/support/v4/content/package-summary.html
-http://developer.android.com/reference/android/support/v4/content/pm/package-summary.html
-http://developer.android.com/reference/android/support/v4/database/package-summary.html
-http://developer.android.com/reference/android/support/v4/net/package-summary.html
-http://developer.android.com/reference/android/support/v4/os/package-summary.html
-http://developer.android.com/reference/android/support/v4/util/package-summary.html
-http://developer.android.com/reference/android/support/v4/view/package-summary.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/package-summary.html
-http://developer.android.com/reference/android/support/v4/widget/package-summary.html
-http://developer.android.com/reference/android/telephony/package-summary.html
-http://developer.android.com/reference/android/telephony/cdma/package-summary.html
-http://developer.android.com/reference/android/telephony/gsm/package-summary.html
-http://developer.android.com/reference/android/test/suitebuilder/package-summary.html
-http://developer.android.com/reference/android/text/package-summary.html
-http://developer.android.com/reference/android/text/format/package-summary.html
-http://developer.android.com/reference/android/text/method/package-summary.html
-http://developer.android.com/reference/android/text/style/package-summary.html
-http://developer.android.com/reference/android/text/util/package-summary.html
-http://developer.android.com/reference/android/util/package-summary.html
-http://developer.android.com/reference/android/view/package-summary.html
-http://developer.android.com/reference/android/view/accessibility/package-summary.html
-http://developer.android.com/reference/android/view/inputmethod/package-summary.html
-http://developer.android.com/reference/android/view/textservice/package-summary.html
-http://developer.android.com/reference/android/webkit/package-summary.html
-http://developer.android.com/reference/android/widget/package-summary.html
-http://developer.android.com/reference/dalvik/bytecode/package-summary.html
-http://developer.android.com/reference/dalvik/system/package-summary.html
-http://developer.android.com/reference/java/awt/font/package-summary.html
-http://developer.android.com/reference/java/beans/package-summary.html
-http://developer.android.com/reference/java/io/package-summary.html
-http://developer.android.com/reference/java/lang/package-summary.html
-http://developer.android.com/reference/java/lang/annotation/package-summary.html
-http://developer.android.com/reference/java/lang/ref/package-summary.html
-http://developer.android.com/reference/java/lang/reflect/package-summary.html
-http://developer.android.com/reference/java/math/package-summary.html
-http://developer.android.com/reference/java/net/package-summary.html
-http://developer.android.com/reference/java/nio/package-summary.html
-http://developer.android.com/reference/java/nio/channels/package-summary.html
-http://developer.android.com/reference/java/nio/channels/spi/package-summary.html
-http://developer.android.com/reference/java/nio/charset/package-summary.html
-http://developer.android.com/reference/java/nio/charset/spi/package-summary.html
-http://developer.android.com/reference/java/security/package-summary.html
-http://developer.android.com/reference/java/security/acl/package-summary.html
-http://developer.android.com/reference/java/security/cert/package-summary.html
-http://developer.android.com/reference/java/security/interfaces/package-summary.html
-http://developer.android.com/reference/java/security/spec/package-summary.html
-http://developer.android.com/reference/java/sql/package-summary.html
-http://developer.android.com/reference/java/text/package-summary.html
-http://developer.android.com/reference/java/util/package-summary.html
-http://developer.android.com/reference/java/util/concurrent/package-summary.html
-http://developer.android.com/reference/java/util/concurrent/atomic/package-summary.html
-http://developer.android.com/reference/java/util/concurrent/locks/package-summary.html
-http://developer.android.com/reference/java/util/jar/package-summary.html
-http://developer.android.com/reference/java/util/logging/package-summary.html
-http://developer.android.com/reference/java/util/prefs/package-summary.html
-http://developer.android.com/reference/java/util/regex/package-summary.html
-http://developer.android.com/reference/java/util/zip/package-summary.html
-http://developer.android.com/reference/javax/crypto/package-summary.html
-http://developer.android.com/reference/javax/crypto/interfaces/package-summary.html
-http://developer.android.com/reference/javax/crypto/spec/package-summary.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/package-summary.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/package-summary.html
-http://developer.android.com/reference/javax/net/package-summary.html
-http://developer.android.com/reference/javax/net/ssl/package-summary.html
-http://developer.android.com/reference/javax/security/auth/package-summary.html
-http://developer.android.com/reference/javax/security/auth/callback/package-summary.html
-http://developer.android.com/reference/javax/security/auth/login/package-summary.html
-http://developer.android.com/reference/javax/security/auth/x500/package-summary.html
-http://developer.android.com/reference/javax/security/cert/package-summary.html
-http://developer.android.com/reference/javax/sql/package-summary.html
-http://developer.android.com/reference/javax/xml/package-summary.html
-http://developer.android.com/reference/javax/xml/datatype/package-summary.html
-http://developer.android.com/reference/javax/xml/namespace/package-summary.html
-http://developer.android.com/reference/javax/xml/parsers/package-summary.html
-http://developer.android.com/reference/javax/xml/transform/package-summary.html
-http://developer.android.com/reference/javax/xml/transform/dom/package-summary.html
-http://developer.android.com/reference/javax/xml/transform/sax/package-summary.html
-http://developer.android.com/reference/javax/xml/transform/stream/package-summary.html
-http://developer.android.com/reference/javax/xml/validation/package-summary.html
-http://developer.android.com/reference/javax/xml/xpath/package-summary.html
-http://developer.android.com/reference/junit/framework/package-summary.html
-http://developer.android.com/reference/junit/runner/package-summary.html
-http://developer.android.com/reference/org/apache/http/package-summary.html
-http://developer.android.com/reference/org/apache/http/auth/package-summary.html
-http://developer.android.com/reference/org/apache/http/auth/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/entity/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/methods/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/protocol/package-summary.html
-http://developer.android.com/reference/org/apache/http/client/utils/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/routing/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/package-summary.html
-http://developer.android.com/reference/org/apache/http/conn/util/package-summary.html
-http://developer.android.com/reference/org/apache/http/cookie/package-summary.html
-http://developer.android.com/reference/org/apache/http/cookie/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/entity/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/auth/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/client/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/conn/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/entity/package-summary.html
-http://developer.android.com/reference/org/apache/http/impl/io/package-summary.html
-http://developer.android.com/reference/org/apache/http/io/package-summary.html
-http://developer.android.com/reference/org/apache/http/message/package-summary.html
-http://developer.android.com/reference/org/apache/http/params/package-summary.html
-http://developer.android.com/reference/org/apache/http/protocol/package-summary.html
-http://developer.android.com/reference/org/apache/http/util/package-summary.html
-http://developer.android.com/reference/org/json/package-summary.html
-http://developer.android.com/reference/org/w3c/dom/package-summary.html
-http://developer.android.com/reference/org/w3c/dom/ls/package-summary.html
-http://developer.android.com/reference/org/xml/sax/package-summary.html
-http://developer.android.com/reference/org/xml/sax/ext/package-summary.html
-http://developer.android.com/reference/org/xml/sax/helpers/package-summary.html
-http://developer.android.com/reference/org/xmlpull/v1/package-summary.html
-http://developer.android.com/reference/org/xmlpull/v1/sax2/package-summary.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerSession.SpellCheckerSessionListener.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerInfo.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerSession.html
-http://developer.android.com/reference/android/view/textservice/SpellCheckerSubtype.html
-http://developer.android.com/reference/android/view/textservice/SuggestionsInfo.html
-http://developer.android.com/reference/android/view/textservice/TextInfo.html
-http://developer.android.com/reference/android/view/textservice/TextServicesManager.html
-http://developer.android.com/reference/android/os/Parcelable.html
-http://developer.android.com/reference/android/os/Parcelable.Creator.html
-http://developer.android.com/reference/android/os/Parcel.html
-http://developer.android.com/reference/java/lang/Class.html
-http://developer.android.com/shareables/training/OpenGLES.zip
-http://developer.android.com/reference/android/opengl/GLSurfaceView.html
-http://developer.android.com/reference/android/view/MotionEvent.html
-http://developer.android.com/reference/android/location/LocationManager.html
-http://developer.android.com/reference/android/location/LocationProvider.html
-http://developer.android.com/reference/com/google/android/gms/maps/MapView.html
-http://developer.android.com/reference/android/app/ActionBar.OnMenuVisibilityListener.html
-http://developer.android.com/reference/android/app/ActionBar.OnNavigationListener.html
-http://developer.android.com/reference/android/app/ActionBar.TabListener.html
-http://developer.android.com/reference/android/app/Application.ActivityLifecycleCallbacks.html
-http://developer.android.com/reference/android/app/DatePickerDialog.OnDateSetListener.html
-http://developer.android.com/reference/android/app/FragmentBreadCrumbs.OnBreadCrumbClickListener.html
-http://developer.android.com/reference/android/app/FragmentManager.BackStackEntry.html
-http://developer.android.com/reference/android/app/KeyguardManager.OnKeyguardExitResult.html
-http://developer.android.com/reference/android/app/LoaderManager.LoaderCallbacks.html
-http://developer.android.com/reference/android/app/PendingIntent.OnFinished.html
-http://developer.android.com/reference/android/app/SearchManager.OnCancelListener.html
-http://developer.android.com/reference/android/app/SearchManager.OnDismissListener.html
-http://developer.android.com/reference/android/app/TimePickerDialog.OnTimeSetListener.html
-http://developer.android.com/reference/android/app/ActionBar.LayoutParams.html
-http://developer.android.com/reference/android/app/ActivityGroup.html
-http://developer.android.com/reference/android/app/ActivityManager.html
-http://developer.android.com/reference/android/app/ActivityManager.MemoryInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.ProcessErrorStateInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RecentTaskInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningServiceInfo.html
-http://developer.android.com/reference/android/app/ActivityManager.RunningTaskInfo.html
-http://developer.android.com/reference/android/app/ActivityOptions.html
-http://developer.android.com/reference/android/app/AlarmManager.html
-http://developer.android.com/reference/android/app/AliasActivity.html
-http://developer.android.com/reference/android/app/Application.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.AnrInfo.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.BatteryInfo.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.CrashInfo.html
-http://developer.android.com/reference/android/app/ApplicationErrorReport.RunningServiceInfo.html
-http://developer.android.com/reference/android/app/DownloadManager.html
-http://developer.android.com/reference/android/app/DownloadManager.Query.html
-http://developer.android.com/reference/android/app/DownloadManager.Request.html
-http://developer.android.com/reference/android/app/ExpandableListActivity.html
-http://developer.android.com/reference/android/app/Fragment.SavedState.html
-http://developer.android.com/reference/android/app/FragmentBreadCrumbs.html
-http://developer.android.com/reference/android/app/Instrumentation.html
-http://developer.android.com/reference/android/app/Instrumentation.ActivityMonitor.html
-http://developer.android.com/reference/android/app/Instrumentation.ActivityResult.html
-http://developer.android.com/reference/android/app/IntentService.html
-http://developer.android.com/reference/android/app/KeyguardManager.html
-http://developer.android.com/reference/android/app/KeyguardManager.KeyguardLock.html
-http://developer.android.com/reference/android/app/LauncherActivity.html
-http://developer.android.com/reference/android/app/LauncherActivity.IconResizer.html
-http://developer.android.com/reference/android/app/LauncherActivity.ListItem.html
-http://developer.android.com/reference/android/app/ListActivity.html
-http://developer.android.com/reference/android/app/ListFragment.html
-http://developer.android.com/reference/android/app/LoaderManager.html
-http://developer.android.com/reference/android/app/LocalActivityManager.html
-http://developer.android.com/reference/android/app/MediaRouteActionProvider.html
-http://developer.android.com/reference/android/app/MediaRouteButton.html
-http://developer.android.com/reference/android/app/NativeActivity.html
-http://developer.android.com/reference/android/app/Notification.BigPictureStyle.html
-http://developer.android.com/reference/android/app/Notification.BigTextStyle.html
-http://developer.android.com/reference/android/app/Notification.Builder.html
-http://developer.android.com/reference/android/app/Notification.InboxStyle.html
-http://developer.android.com/reference/android/app/Notification.Style.html
-http://developer.android.com/reference/android/app/Presentation.html
-http://developer.android.com/reference/android/app/SearchableInfo.html
-http://developer.android.com/reference/android/app/SearchManager.html
-http://developer.android.com/reference/android/app/TabActivity.html
-http://developer.android.com/reference/android/app/TaskStackBuilder.html
-http://developer.android.com/reference/android/app/UiModeManager.html
-http://developer.android.com/reference/android/app/WallpaperInfo.html
-http://developer.android.com/reference/android/app/WallpaperManager.html
-http://developer.android.com/reference/android/app/Fragment.InstantiationException.html
-http://developer.android.com/reference/android/app/PendingIntent.CanceledException.html
-http://developer.android.com/reference/android/content/DialogInterface.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.html
-http://developer.android.com/reference/java/lang/CharSequence.html
-http://developer.android.com/reference/java/text/NumberFormat.html
-http://developer.android.com/reference/android/content/DialogInterface.OnCancelListener.html
-http://developer.android.com/reference/android/widget/Button.html
-http://developer.android.com/reference/android/view/KeyEvent.html
-http://developer.android.com/reference/android/os/Message.html
-http://developer.android.com/reference/android/view/ViewGroup.LayoutParams.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityEvent.html
-http://developer.android.com/reference/android/view/Window.html
-http://developer.android.com/reference/android/view/ActionMode.html
-http://developer.android.com/reference/android/view/MenuItem.html
-http://developer.android.com/reference/android/view/ContextMenu.html
-http://developer.android.com/reference/android/view/ContextMenu.ContextMenuInfo.html
-http://developer.android.com/reference/android/view/KeyEvent.Callback.html
-http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html
-http://developer.android.com/reference/android/view/ActionMode.Callback.html
-http://developer.android.com/reference/android/content/DialogInterface.OnDismissListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnKeyListener.html
-http://developer.android.com/reference/android/content/DialogInterface.OnShowListener.html
-http://developer.android.com/reference/android/view/View.OnCreateContextMenuListener.html
-http://developer.android.com/reference/android/view/Window.Callback.html
-http://developer.android.com/reference/android/widget/RemoteViews.html
-http://developer.android.com/reference/android/graphics/Bitmap.html
-http://developer.android.com/reference/android/media/AudioManager.html
-http://developer.android.com/guide/topics/fundamentals/tasks-and-back-stack.html
-http://developer.android.com/reference/android/os/Build.VERSION_CODES.html
-http://developer.android.com/reference/android/os/Vibrator.html
-http://developer.android.com/reference/java/lang/System.html
-http://developer.android.com/shareables/training/MobileAds.zip
-http://developer.android.com/reference/android/media/JetPlayer.html
-http://developer.android.com/resources/samples/JetBoy/index.html
-http://developer.android.com/guide/topics/media/jet/jetcreator_manual.html
-http://developer.android.com/reference/android/test/ServiceTestCase.html
-http://developer.android.com/reference/android/test/RenamingDelegatingContext.html
-http://developer.android.com/reference/android/os/IBinder.html
-http://developer.android.com/reference/android/test/AndroidTestCase.html
-http://developer.android.com/reference/android/view/ViewGroup.html
-http://developer.android.com/reference/android/widget/CheckBox.html
-http://developer.android.com/reference/android/widget/RadioButton.html
-http://developer.android.com/reference/android/widget/Gallery.html
-http://developer.android.com/reference/android/widget/Spinner.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.html
-http://developer.android.com/reference/android/widget/ImageSwitcher.html
-http://developer.android.com/reference/android/widget/TextSwitcher.html
-http://developer.android.com/guide/topics/ui/layout-objects.html
-http://developer.android.com/reference/android/graphics/Canvas.html
-http://developer.android.com/reference/android/view/SurfaceView.html
-http://developer.android.com/resources/samples/ApiDemos/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/LabelView.html
-http://developer.android.com/resources/samples/ApiDemos/res/layout/custom_view_1.html
-http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NoteEditor.html
-http://developer.android.com/sdk/api_diff/10/changes.html
-http://developer.android.com/reference/android/hardware/usb/UsbDevice.html
-http://developer.android.com/reference/android/animation/LayoutTransition.TransitionListener.html
-http://developer.android.com/reference/android/animation/TimeAnimator.TimeListener.html
-http://developer.android.com/reference/android/animation/AnimatorInflater.html
-http://developer.android.com/reference/android/animation/AnimatorSet.Builder.html
-http://developer.android.com/reference/android/animation/TimeAnimator.html
-http://developer.android.com/shareables/training/CustomView.zip
-http://developer.android.com/sdk/eclipse-adt.html
-http://developer.android.com/reference/android/content/res/TypedArray.html
-http://developer.android.com/reference/android/support/v4/app/FragmentManager.BackStackEntry.html
-http://developer.android.com/reference/android/support/v4/app/FragmentManager.OnBackStackChangedListener.html
-http://developer.android.com/reference/android/support/v4/app/LoaderManager.LoaderCallbacks.html
-http://developer.android.com/reference/android/support/v4/app/ActivityCompat.html
-http://developer.android.com/reference/android/support/v4/app/Fragment.SavedState.html
-http://developer.android.com/reference/android/support/v4/app/FragmentPagerAdapter.html
-http://developer.android.com/reference/android/support/v4/app/FragmentStatePagerAdapter.html
-http://developer.android.com/reference/android/support/v4/app/FragmentTabHost.html
-http://developer.android.com/reference/android/support/v4/app/FragmentTransaction.html
-http://developer.android.com/reference/android/support/v4/app/ListFragment.html
-http://developer.android.com/reference/android/support/v4/app/LoaderManager.html
-http://developer.android.com/reference/android/support/v4/app/NavUtils.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Action.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigPictureStyle.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.BigTextStyle.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.InboxStyle.html
-http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Style.html
-http://developer.android.com/reference/android/support/v4/app/ServiceCompat.html
-http://developer.android.com/reference/android/support/v4/app/ShareCompat.html
-http://developer.android.com/reference/android/support/v4/app/ShareCompat.IntentBuilder.html
-http://developer.android.com/reference/android/support/v4/app/ShareCompat.IntentReader.html
-http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.html
-http://developer.android.com/reference/android/support/v4/app/TaskStackBuilderHoneycomb.html
-http://developer.android.com/reference/android/support/v4/app/Fragment.InstantiationException.html
-http://developer.android.com/reference/android/content/ComponentCallbacks.html
-http://developer.android.com/reference/java/io/FileDescriptor.html
-http://developer.android.com/reference/java/io/PrintWriter.html
-http://developer.android.com/reference/java/util/Formatter.html
-http://developer.android.com/reference/android/content/res/Configuration.html
-http://developer.android.com/reference/android/view/animation/Animation.html
-http://developer.android.com/reference/android/view/MenuInflater.html
-http://developer.android.com/reference/android/util/AttributeSet.html
-http://developer.android.com/reference/java/lang/InstantiationException.html
-http://developer.android.com/reference/android/widget/AdapterView.html
-http://developer.android.com/reference/android/app/backup/BackupManager.html
-http://developer.android.com/reference/android/app/backup/BackupAgent.html
-http://developer.android.com/reference/android/app/backup/BackupAgentHelper.html
-http://developer.android.com/reference/android/content/SharedPreferences.html
-http://developer.android.com/reference/android/app/backup/BackupDataOutput.html
-http://developer.android.com/reference/android/app/backup/BackupDataInput.html
-http://developer.android.com/resources/samples/BackupRestore/src/com/example/android/backuprestore/ExampleAgent.html
-http://developer.android.com/resources/samples/BackupRestore/index.html
-http://developer.android.com/reference/android/app/backup/SharedPreferencesBackupHelper.html
-http://developer.android.com/reference/android/app/backup/FileBackupHelper.html
-http://developer.android.com/reference/android/content/ContextWrapper.html
-http://developer.android.com/reference/android/content/pm/PackageInfo.html
-http://developer.android.com/reference/android/os/UserHandle.html
-http://developer.android.com/reference/android/content/IntentSender.html
-http://developer.android.com/reference/android/os/Handler.html
-http://developer.android.com/reference/android/os/Process.html
-http://developer.android.com/reference/android/test/PerformanceTestCase.Intermediates.html
-http://developer.android.com/reference/android/test/TestSuiteProvider.html
-http://developer.android.com/reference/android/test/ActivityInstrumentationTestCase.html
-http://developer.android.com/reference/android/test/ActivityTestCase.html
-http://developer.android.com/reference/android/test/AndroidTestRunner.html
-http://developer.android.com/reference/android/test/ApplicationTestCase.html
-http://developer.android.com/reference/android/test/InstrumentationTestSuite.html
-http://developer.android.com/reference/android/test/IsolatedContext.html
-http://developer.android.com/reference/android/test/LoaderTestCase.html
-http://developer.android.com/reference/android/test/MoreAsserts.html
-http://developer.android.com/reference/android/test/ProviderTestCase.html
-http://developer.android.com/reference/android/test/ProviderTestCase2.html
-http://developer.android.com/reference/android/test/SyncBaseInstrumentation.html
-http://developer.android.com/reference/android/test/TouchUtils.html
-http://developer.android.com/reference/android/test/AssertionFailedError.html
-http://developer.android.com/reference/android/test/ComparisonFailure.html
-http://developer.android.com/reference/android/view/ActionProvider.html
-http://developer.android.com/reference/android/widget/ShareActionProvider.html
-http://developer.android.com/shareables/training/PhotoIntentActivity.zip
-http://developer.android.com/reference/android/hardware/Sensor.html
-http://developer.android.com/reference/android/hardware/SensorEvent.html
-http://developer.android.com/reference/android/hardware/SensorManager.html
-http://developer.android.com/reference/android/hardware/SensorEventListener.html
-http://developer.android.com/resources/samples/AccelerometerPlay/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/RotationVectorDemo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/os/Sensors.html
-http://developer.android.com/reference/android/os/CancellationSignal.OnCancelListener.html
-http://developer.android.com/reference/android/os/Handler.Callback.html
-http://developer.android.com/reference/android/os/IBinder.DeathRecipient.html
-http://developer.android.com/reference/android/os/IInterface.html
-http://developer.android.com/reference/android/os/MessageQueue.IdleHandler.html
-http://developer.android.com/reference/android/os/Parcelable.ClassLoaderCreator.html
-http://developer.android.com/reference/android/os/RecoverySystem.ProgressListener.html
-http://developer.android.com/reference/android/os/AsyncTask.html
-http://developer.android.com/reference/android/os/BatteryManager.html
-http://developer.android.com/reference/android/os/Binder.html
-http://developer.android.com/reference/android/os/Build.VERSION.html
-http://developer.android.com/reference/android/os/CancellationSignal.html
-http://developer.android.com/reference/android/os/ConditionVariable.html
-http://developer.android.com/reference/android/os/CountDownTimer.html
-http://developer.android.com/reference/android/os/Debug.html
-http://developer.android.com/reference/android/os/Debug.InstructionCount.html
-http://developer.android.com/reference/android/os/Debug.MemoryInfo.html
-http://developer.android.com/reference/android/os/DropBoxManager.html
-http://developer.android.com/reference/android/os/DropBoxManager.Entry.html
-http://developer.android.com/reference/android/os/Environment.html
-http://developer.android.com/reference/android/os/FileObserver.html
-http://developer.android.com/reference/android/os/HandlerThread.html
-http://developer.android.com/reference/android/os/Looper.html
-http://developer.android.com/reference/android/os/MemoryFile.html
-http://developer.android.com/reference/android/os/MessageQueue.html
-http://developer.android.com/reference/android/os/Messenger.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseInputStream.html
-http://developer.android.com/reference/android/os/ParcelFileDescriptor.AutoCloseOutputStream.html
-http://developer.android.com/reference/android/os/ParcelUuid.html
-http://developer.android.com/reference/android/os/PowerManager.html
-http://developer.android.com/reference/android/os/PowerManager.WakeLock.html
-http://developer.android.com/reference/android/os/RecoverySystem.html
-http://developer.android.com/reference/android/os/RemoteCallbackList.html
-http://developer.android.com/reference/android/os/ResultReceiver.html
-http://developer.android.com/reference/android/os/StatFs.html
-http://developer.android.com/reference/android/os/StrictMode.ThreadPolicy.html
-http://developer.android.com/reference/android/os/StrictMode.VmPolicy.html
-http://developer.android.com/reference/android/os/StrictMode.VmPolicy.Builder.html
-http://developer.android.com/reference/android/os/SystemClock.html
-http://developer.android.com/reference/android/os/TokenWatcher.html
-http://developer.android.com/reference/android/os/UserManager.html
-http://developer.android.com/reference/android/os/WorkSource.html
-http://developer.android.com/reference/android/os/AsyncTask.Status.html
-http://developer.android.com/reference/android/os/BadParcelableException.html
-http://developer.android.com/reference/android/os/DeadObjectException.html
-http://developer.android.com/reference/android/os/NetworkOnMainThreadException.html
-http://developer.android.com/reference/android/os/OperationCanceledException.html
-http://developer.android.com/reference/android/os/ParcelFormatException.html
-http://developer.android.com/reference/android/os/RemoteException.html
-http://developer.android.com/reference/android/os/TransactionTooLargeException.html
-http://developer.android.com/reference/java/io/Closeable.html
-http://developer.android.com/reference/java/net/DatagramSocket.html
-http://developer.android.com/reference/java/net/Socket.html
-http://developer.android.com/reference/java/io/File.html
-http://developer.android.com/reference/java/io/IOException.html
-http://developer.android.com/reference/java/io/FileNotFoundException.html
-http://developer.android.com/reference/java/lang/ref/ReferenceQueue.html
-http://developer.android.com/reference/java/lang/Throwable.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeConstants.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeConstants.Field.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeFactory.html
-http://developer.android.com/reference/javax/xml/datatype/Duration.html
-http://developer.android.com/reference/javax/xml/datatype/XMLGregorianCalendar.html
-http://developer.android.com/reference/javax/xml/datatype/DatatypeConfigurationException.html
-http://developer.android.com/reference/android/view/ActionProvider.VisibilityListener.html
-http://developer.android.com/reference/android/view/Choreographer.FrameCallback.html
-http://developer.android.com/reference/android/view/CollapsibleActionView.html
-http://developer.android.com/reference/android/view/GestureDetector.OnDoubleTapListener.html
-http://developer.android.com/reference/android/view/GestureDetector.OnGestureListener.html
-http://developer.android.com/reference/android/view/InputQueue.Callback.html
-http://developer.android.com/reference/android/view/LayoutInflater.Factory.html
-http://developer.android.com/reference/android/view/LayoutInflater.Factory2.html
-http://developer.android.com/reference/android/view/LayoutInflater.Filter.html
-http://developer.android.com/reference/android/view/MenuItem.OnActionExpandListener.html
-http://developer.android.com/reference/android/view/MenuItem.OnMenuItemClickListener.html
-http://developer.android.com/reference/android/view/ScaleGestureDetector.OnScaleGestureListener.html
-http://developer.android.com/reference/android/view/SubMenu.html
-http://developer.android.com/reference/android/view/SurfaceHolder.html
-http://developer.android.com/reference/android/view/SurfaceHolder.Callback.html
-http://developer.android.com/reference/android/view/SurfaceHolder.Callback2.html
-http://developer.android.com/reference/android/view/TextureView.SurfaceTextureListener.html
-http://developer.android.com/reference/android/view/View.OnAttachStateChangeListener.html
-http://developer.android.com/reference/android/view/View.OnClickListener.html
-http://developer.android.com/reference/android/view/View.OnDragListener.html
-http://developer.android.com/reference/android/view/View.OnFocusChangeListener.html
-http://developer.android.com/reference/android/view/View.OnGenericMotionListener.html
-http://developer.android.com/reference/android/view/View.OnHoverListener.html
-http://developer.android.com/reference/android/view/View.OnKeyListener.html
-http://developer.android.com/reference/android/view/View.OnLayoutChangeListener.html
-http://developer.android.com/reference/android/view/View.OnLongClickListener.html
-http://developer.android.com/reference/android/view/View.OnSystemUiVisibilityChangeListener.html
-http://developer.android.com/reference/android/view/View.OnTouchListener.html
-http://developer.android.com/reference/android/view/ViewGroup.OnHierarchyChangeListener.html
-http://developer.android.com/reference/android/view/ViewManager.html
-http://developer.android.com/reference/android/view/ViewParent.html
-http://developer.android.com/reference/android/view/ViewStub.OnInflateListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnDrawListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalFocusChangeListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnGlobalLayoutListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnPreDrawListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnScrollChangedListener.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.OnTouchModeChangeListener.html
-http://developer.android.com/reference/android/view/WindowManager.html
-http://developer.android.com/reference/android/view/AbsSavedState.html
-http://developer.android.com/reference/android/view/Choreographer.html
-http://developer.android.com/reference/android/view/ContextThemeWrapper.html
-http://developer.android.com/reference/android/view/Display.html
-http://developer.android.com/reference/android/view/DragEvent.html
-http://developer.android.com/reference/android/view/FocusFinder.html
-http://developer.android.com/reference/android/view/GestureDetector.html
-http://developer.android.com/reference/android/view/GestureDetector.SimpleOnGestureListener.html
-http://developer.android.com/reference/android/view/Gravity.html
-http://developer.android.com/reference/android/view/HapticFeedbackConstants.html
-http://developer.android.com/reference/android/view/InputDevice.html
-http://developer.android.com/reference/android/view/InputDevice.MotionRange.html
-http://developer.android.com/reference/android/view/InputEvent.html
-http://developer.android.com/reference/android/view/InputQueue.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.KeyData.html
-http://developer.android.com/reference/android/view/KeyEvent.DispatcherState.html
-http://developer.android.com/reference/android/view/MotionEvent.PointerCoords.html
-http://developer.android.com/reference/android/view/MotionEvent.PointerProperties.html
-http://developer.android.com/reference/android/view/OrientationEventListener.html
-http://developer.android.com/reference/android/view/OrientationListener.html
-http://developer.android.com/reference/android/view/ScaleGestureDetector.html
-http://developer.android.com/reference/android/view/ScaleGestureDetector.SimpleOnScaleGestureListener.html
-http://developer.android.com/reference/android/view/SoundEffectConstants.html
-http://developer.android.com/reference/android/view/Surface.html
-http://developer.android.com/reference/android/view/TextureView.html
-http://developer.android.com/reference/android/view/VelocityTracker.html
-http://developer.android.com/reference/android/view/View.AccessibilityDelegate.html
-http://developer.android.com/reference/android/view/View.BaseSavedState.html
-http://developer.android.com/reference/android/view/View.DragShadowBuilder.html
-http://developer.android.com/reference/android/view/View.MeasureSpec.html
-http://developer.android.com/reference/android/view/ViewConfiguration.html
-http://developer.android.com/reference/android/view/ViewDebug.html
-http://developer.android.com/reference/android/view/ViewGroup.MarginLayoutParams.html
-http://developer.android.com/reference/android/view/ViewStub.html
-http://developer.android.com/reference/android/view/ViewTreeObserver.html
-http://developer.android.com/reference/android/view/ViewDebug.HierarchyTraceType.html
-http://developer.android.com/reference/android/view/ViewDebug.RecyclerTraceType.html
-http://developer.android.com/reference/android/view/InflateException.html
-http://developer.android.com/reference/android/view/KeyCharacterMap.UnavailableException.html
-http://developer.android.com/reference/android/view/Surface.OutOfResourcesException.html
-http://developer.android.com/reference/android/view/SurfaceHolder.BadSurfaceTypeException.html
-http://developer.android.com/reference/android/view/WindowManager.BadTokenException.html
-http://developer.android.com/reference/android/view/WindowManager.InvalidDisplayException.html
-http://developer.android.com/reference/java/lang/Runnable.html
-http://developer.android.com/reference/java/util/prefs/NodeChangeListener.html
-http://developer.android.com/reference/java/util/prefs/PreferenceChangeListener.html
-http://developer.android.com/reference/java/util/prefs/PreferencesFactory.html
-http://developer.android.com/reference/java/util/prefs/AbstractPreferences.html
-http://developer.android.com/reference/java/util/prefs/NodeChangeEvent.html
-http://developer.android.com/reference/java/util/prefs/PreferenceChangeEvent.html
-http://developer.android.com/reference/java/util/prefs/Preferences.html
-http://developer.android.com/reference/java/util/prefs/BackingStoreException.html
-http://developer.android.com/reference/java/util/prefs/InvalidPreferencesFormatException.html
-http://developer.android.com/reference/android/util/Printer.html
-http://developer.android.com/reference/android/util/AtomicFile.html
-http://developer.android.com/reference/android/util/Base64.html
-http://developer.android.com/reference/android/util/Base64InputStream.html
-http://developer.android.com/reference/android/util/Base64OutputStream.html
-http://developer.android.com/reference/android/util/Config.html
-http://developer.android.com/reference/android/util/DebugUtils.html
-http://developer.android.com/reference/android/util/DisplayMetrics.html
-http://developer.android.com/reference/android/util/EventLog.html
-http://developer.android.com/reference/android/util/EventLog.Event.html
-http://developer.android.com/reference/android/util/EventLogTags.html
-http://developer.android.com/reference/android/util/EventLogTags.Description.html
-http://developer.android.com/reference/android/util/FloatMath.html
-http://developer.android.com/reference/android/util/JsonReader.html
-http://developer.android.com/reference/android/util/JsonWriter.html
-http://developer.android.com/reference/android/util/Log.html
-http://developer.android.com/reference/android/util/LogPrinter.html
-http://developer.android.com/reference/android/util/LongSparseArray.html
-http://developer.android.com/reference/android/util/LruCache.html
-http://developer.android.com/reference/android/util/MonthDisplayHelper.html
-http://developer.android.com/reference/android/util/Pair.html
-http://developer.android.com/reference/android/util/Patterns.html
-http://developer.android.com/reference/android/util/PrintStreamPrinter.html
-http://developer.android.com/reference/android/util/PrintWriterPrinter.html
-http://developer.android.com/reference/android/util/Property.html
-http://developer.android.com/reference/android/util/SparseArray.html
-http://developer.android.com/reference/android/util/SparseBooleanArray.html
-http://developer.android.com/reference/android/util/SparseIntArray.html
-http://developer.android.com/reference/android/util/StateSet.html
-http://developer.android.com/reference/android/util/StringBuilderPrinter.html
-http://developer.android.com/reference/android/util/TimeUtils.html
-http://developer.android.com/reference/android/util/TimingLogger.html
-http://developer.android.com/reference/android/util/TypedValue.html
-http://developer.android.com/reference/android/util/Xml.html
-http://developer.android.com/reference/android/util/JsonToken.html
-http://developer.android.com/reference/android/util/Xml.Encoding.html
-http://developer.android.com/reference/android/util/AndroidException.html
-http://developer.android.com/reference/android/util/AndroidRuntimeException.html
-http://developer.android.com/reference/android/util/Base64DataException.html
-http://developer.android.com/reference/android/util/MalformedJsonException.html
-http://developer.android.com/reference/android/util/NoSuchPropertyException.html
-http://developer.android.com/reference/android/util/TimeFormatException.html
-http://developer.android.com/reference/java/lang/Math.html
-http://developer.android.com/reference/java/io/PrintStream.html
-http://developer.android.com/reference/java/lang/StringBuilder.html
-http://developer.android.com/reference/android/content/pm/ApplicationInfo.html
-http://developer.android.com/resources/tutorials/views/hello-formstuff.html
-http://developer.android.com/reference/android/view/inputmethod/EditorInfo.html
-http://developer.android.com/reference/android/widget/ImageButton.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeProvider.html
-http://developer.android.com/reference/android/widget/DatePicker.html
-http://developer.android.com/reference/android/provider/MediaStore.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.OnScanCompletedListener.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.Media.html
-http://developer.android.com/reference/android/content/ContentProvider.html
-http://developer.android.com/guide/topics/security/security.html
-http://developer.android.com/reference/java/util/concurrent/BlockingDeque.html
-http://developer.android.com/reference/java/util/concurrent/BlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/Callable.html
-http://developer.android.com/reference/java/util/concurrent/CompletionService.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentNavigableMap.html
-http://developer.android.com/reference/java/util/concurrent/Delayed.html
-http://developer.android.com/reference/java/util/concurrent/Executor.html
-http://developer.android.com/reference/java/util/concurrent/ExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/Future.html
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionHandler.html
-http://developer.android.com/reference/java/util/concurrent/RunnableFuture.html
-http://developer.android.com/reference/java/util/concurrent/RunnableScheduledFuture.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledFuture.html
-http://developer.android.com/reference/java/util/concurrent/ThreadFactory.html
-http://developer.android.com/reference/java/util/concurrent/AbstractExecutorService.html
-http://developer.android.com/reference/java/util/concurrent/ArrayBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentHashMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentLinkedQueue.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentSkipListMap.html
-http://developer.android.com/reference/java/util/concurrent/ConcurrentSkipListSet.html
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArrayList.html
-http://developer.android.com/reference/java/util/concurrent/CopyOnWriteArraySet.html
-http://developer.android.com/reference/java/util/concurrent/CountDownLatch.html
-http://developer.android.com/reference/java/util/concurrent/CyclicBarrier.html
-http://developer.android.com/reference/java/util/concurrent/DelayQueue.html
-http://developer.android.com/reference/java/util/concurrent/Exchanger.html
-http://developer.android.com/reference/java/util/concurrent/ExecutorCompletionService.html
-http://developer.android.com/reference/java/util/concurrent/Executors.html
-http://developer.android.com/reference/java/util/concurrent/FutureTask.html
-http://developer.android.com/reference/java/util/concurrent/LinkedBlockingDeque.html
-http://developer.android.com/reference/java/util/concurrent/LinkedBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/PriorityBlockingQueue.html
-http://developer.android.com/reference/java/util/concurrent/ScheduledThreadPoolExecutor.html
-http://developer.android.com/reference/java/util/concurrent/Semaphore.html
-http://developer.android.com/reference/java/util/concurrent/SynchronousQueue.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.AbortPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.CallerRunsPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardOldestPolicy.html
-http://developer.android.com/reference/java/util/concurrent/ThreadPoolExecutor.DiscardPolicy.html
-http://developer.android.com/reference/java/util/concurrent/TimeUnit.html
-http://developer.android.com/reference/java/util/concurrent/BrokenBarrierException.html
-http://developer.android.com/reference/java/util/concurrent/CancellationException.html
-http://developer.android.com/reference/java/util/concurrent/ExecutionException.html
-http://developer.android.com/reference/java/util/concurrent/RejectedExecutionException.html
-http://developer.android.com/reference/java/util/concurrent/TimeoutException.html
-http://developer.android.com/reference/java/util/Deque.html
-http://developer.android.com/reference/java/util/Queue.html
-http://developer.android.com/reference/java/util/Map.html
-http://developer.android.com/reference/java/util/NavigableMap.html
-http://developer.android.com/reference/java/util/NavigableSet.html
-http://developer.android.com/reference/java/util/Set.html
-http://developer.android.com/reference/java/util/PriorityQueue.html
-http://developer.android.com/reference/android/appwidget/AppWidgetProvider.html
-http://developer.android.com/reference/android/appwidget/AppWidgetProviderInfo.html
-http://developer.android.com/reference/android/appwidget/AppWidgetManager.html
-http://developer.android.com/reference/android/widget/AnalogClock.html
-http://developer.android.com/reference/android/widget/Chronometer.html
-http://developer.android.com/reference/android/widget/ViewFlipper.html
-http://developer.android.com/reference/android/widget/StackView.html
-http://developer.android.com/reference/android/widget/AdapterViewFlipper.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetProvider.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/appwidget/ExampleAppWidgetConfigure.html
-http://developer.android.com/reference/android/widget/RemoteViewsService.html
-http://developer.android.com/reference/android/widget/ViewAnimator.html
-http://developer.android.com/reference/android/widget/Adapter.html
-http://developer.android.com/reference/android/widget/RemoteViewsService.RemoteViewsFactory.html
-http://developer.android.com/resources/samples/StackWidget/index.html
-http://developer.android.com/reference/android/widget/Toast.html
-http://developer.android.com/resources/samples/WeatherListWidget/index.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHPrivateKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/DHPublicKey.html
-http://developer.android.com/reference/javax/crypto/interfaces/PBEKey.html
-http://developer.android.com/reference/android/widget/LinearLayout.LayoutParams.html
-http://developer.android.com/resources/samples/HoneycombGallery/index.html
-http://developer.android.com/resources/samples/ActionBarCompat/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/index.html
-http://developer.android.com/reference/android/R.attr.html
-http://developer.android.com/reference/android/R.styleable.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_action_bar.html
-http://developer.android.com/reference/android/widget/SearchView.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarShareActionProviderActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarSettingsActionProviderActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentTabs.html
-http://developer.android.com/reference/android/widget/SpinnerAdapter.html
-http://developer.android.com/reference/android/widget/ArrayAdapter.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.html
-http://developer.android.com/resources/samples/HoneycombGallery/src/com/example/android/hcgallery/TitlesFragment.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.html
-http://developer.android.com/reference/android/support/v4/view/accessibility/AccessibilityRecordCompat.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityManager.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityNodeInfo.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityRecord.html
-http://developer.android.com/resources/tutorials/views/index.html
-http://developer.android.com/reference/android/database/Cursor.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemClickListener.html
-http://developer.android.com/reference/android/app/backup/BackupHelper.html
-http://developer.android.com/reference/android/app/backup/BackupDataInputStream.html
-http://developer.android.com/reference/android/app/backup/FullBackupDataOutput.html
-http://developer.android.com/reference/android/app/backup/RestoreObserver.html
-http://developer.android.com/reference/android/text/ClipboardManager.html
-http://developer.android.com/reference/android/net/ConnectivityManager.html
-http://developer.android.com/reference/android/hardware/display/DisplayManager.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodManager.html
-http://developer.android.com/reference/android/hardware/input/InputManager.html
-http://developer.android.com/reference/android/media/MediaRouter.html
-http://developer.android.com/reference/android/nfc/NfcManager.html
-http://developer.android.com/reference/android/net/nsd/NsdManager.html
-http://developer.android.com/reference/android/os/storage/StorageManager.html
-http://developer.android.com/reference/android/telephony/TelephonyManager.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.html
-http://developer.android.com/reference/android/content/ServiceConnection.html
-http://developer.android.com/reference/android/content/res/AssetManager.html
-http://developer.android.com/reference/java/lang/ClassLoader.html
-http://developer.android.com/reference/android/content/ContentResolver.html
-http://developer.android.com/reference/android/content/res/Resources.Theme.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.CursorFactory.html
-http://developer.android.com/reference/android/database/DatabaseErrorHandler.html
-http://developer.android.com/reference/java/io/InputStream.html
-http://developer.android.com/shareables/training/FragmentBasics.zip
-http://developer.android.com/reference/android/content/Loader.html
-http://developer.android.com/reference/android/widget/CursorAdapter.html
-http://developer.android.com/reference/android/content/CursorLoader.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ClientContext.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ClientContextConfigurer.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestAddCookies.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestDefaultHeaders.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestProxyAuthentication.html
-http://developer.android.com/reference/org/apache/http/client/protocol/RequestTargetAuthentication.html
-http://developer.android.com/reference/org/apache/http/client/protocol/ResponseProcessCookies.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpContext.html
-http://developer.android.com/reference/org/apache/http/client/CookieStore.html
-http://developer.android.com/reference/android/content/pm/FeatureInfo.html
-http://developer.android.com/reference/android/content/pm/ConfigurationInfo.html
-http://developer.android.com/reference/java/util/EventListener.html
-http://developer.android.com/reference/android/R.id.html
-http://developer.android.com/reference/android/R.layout.html
-http://developer.android.com/reference/java/lang/RuntimeException.html
-http://developer.android.com/reference/java/lang/Exception.html
-http://developer.android.com/guide/practices/design/responsiveness.html
-http://developer.android.com/reference/java/lang/StackTraceElement.html
-http://developer.android.com/reference/java/lang/Float.html
-http://developer.android.com/reference/android/accessibilityservice/AccessibilityService.html
-http://developer.android.com/reference/android/graphics/Rect.html
-http://developer.android.com/reference/android/graphics/Point.html
-http://developer.android.com/reference/android/graphics/Matrix.html
-http://developer.android.com/reference/android/view/inputmethod/InputConnection.html
-http://developer.android.com/reference/android/graphics/Paint.html
-http://developer.android.com/reference/android/content/ClipData.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.Callback.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityEventSource.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ServiceStartArguments.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalService.html
-http://developer.android.com/reference/java/lang/Thread.html
-http://developer.android.com/reference/android/accounts/AccountAuthenticatorActivity.html
-http://developer.android.com/reference/android/preference/PreferenceActivity.html
-http://developer.android.com/reference/com/google/android/gms/maps/package-summary.html
-http://developer.android.com/reference/java/lang/Integer.html
-http://developer.android.com/reference/android/widget/TabHost.OnTabChangeListener.html
-http://developer.android.com/reference/android/widget/TabHost.TabSpec.html
-http://developer.android.com/reference/android/graphics/Region.html
-http://developer.android.com/reference/android/widget/FrameLayout.LayoutParams.html
-http://developer.android.com/reference/android/view/animation/Transformation.html
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.html
-http://developer.android.com/reference/android/view/animation/Animation.AnimationListener.html
-http://developer.android.com/shareables/training/NetworkUsage.zip
-http://developer.android.com/reference/android/content/ComponentCallbacks2.html
-http://developer.android.com/reference/java/util/HashMap.html
-http://developer.android.com/reference/java/io/Serializable.html
-http://developer.android.com/reference/java/lang/IllegalArgumentException.html
-http://developer.android.com/reference/java/lang/IllegalStateException.html
-http://developer.android.com/reference/java/lang/NullPointerException.html
-http://developer.android.com/reference/java/util/EventObject.html
-http://developer.android.com/reference/android/widget/AbsListView.MultiChoiceModeListener.html
-http://developer.android.com/reference/android/widget/AbsListView.OnScrollListener.html
-http://developer.android.com/reference/android/widget/AbsListView.RecyclerListener.html
-http://developer.android.com/reference/android/widget/AbsListView.SelectionBoundsAdjuster.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemLongClickListener.html
-http://developer.android.com/reference/android/widget/AdapterView.OnItemSelectedListener.html
-http://developer.android.com/reference/android/widget/Advanceable.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.OnDismissListener.html
-http://developer.android.com/reference/android/widget/AutoCompleteTextView.Validator.html
-http://developer.android.com/reference/android/widget/CalendarView.OnDateChangeListener.html
-http://developer.android.com/reference/android/widget/Checkable.html
-http://developer.android.com/reference/android/widget/Chronometer.OnChronometerTickListener.html
-http://developer.android.com/reference/android/widget/CompoundButton.OnCheckedChangeListener.html
-http://developer.android.com/reference/android/widget/DatePicker.OnDateChangedListener.html
-http://developer.android.com/reference/android/widget/ExpandableListAdapter.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnChildClickListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupClickListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupCollapseListener.html
-http://developer.android.com/reference/android/widget/ExpandableListView.OnGroupExpandListener.html
-http://developer.android.com/reference/android/widget/Filter.FilterListener.html
-http://developer.android.com/reference/android/widget/Filterable.html
-http://developer.android.com/reference/android/widget/FilterQueryProvider.html
-http://developer.android.com/reference/android/widget/HeterogeneousExpandableList.html
-http://developer.android.com/reference/android/widget/MediaController.MediaPlayerControl.html
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.Tokenizer.html
-http://developer.android.com/reference/android/widget/NumberPicker.Formatter.html
-http://developer.android.com/reference/android/widget/NumberPicker.OnScrollListener.html
-http://developer.android.com/reference/android/widget/NumberPicker.OnValueChangeListener.html
-http://developer.android.com/reference/android/widget/PopupMenu.OnDismissListener.html
-http://developer.android.com/reference/android/widget/PopupMenu.OnMenuItemClickListener.html
-http://developer.android.com/reference/android/widget/PopupWindow.OnDismissListener.html
-http://developer.android.com/reference/android/widget/RadioGroup.OnCheckedChangeListener.html
-http://developer.android.com/reference/android/widget/RatingBar.OnRatingBarChangeListener.html
-http://developer.android.com/reference/android/widget/SearchView.OnCloseListener.html
-http://developer.android.com/reference/android/widget/SearchView.OnQueryTextListener.html
-http://developer.android.com/reference/android/widget/SearchView.OnSuggestionListener.html
-http://developer.android.com/reference/android/widget/SectionIndexer.html
-http://developer.android.com/reference/android/widget/SeekBar.OnSeekBarChangeListener.html
-http://developer.android.com/reference/android/widget/ShareActionProvider.OnShareTargetSelectedListener.html
-http://developer.android.com/reference/android/widget/SimpleAdapter.ViewBinder.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.CursorToStringConverter.html
-http://developer.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html
-http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.ViewBinder.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerCloseListener.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerOpenListener.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.OnDrawerScrollListener.html
-http://developer.android.com/reference/android/widget/TabHost.TabContentFactory.html
-http://developer.android.com/reference/android/widget/TextView.OnEditorActionListener.html
-http://developer.android.com/reference/android/widget/TimePicker.OnTimeChangedListener.html
-http://developer.android.com/reference/android/widget/ViewSwitcher.ViewFactory.html
-http://developer.android.com/reference/android/widget/WrapperListAdapter.html
-http://developer.android.com/reference/android/widget/ZoomButtonsController.OnZoomListener.html
-http://developer.android.com/reference/android/widget/AbsListView.html
-http://developer.android.com/reference/android/widget/AbsListView.LayoutParams.html
-http://developer.android.com/reference/android/widget/AbsoluteLayout.html
-http://developer.android.com/reference/android/widget/AbsoluteLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/AbsSeekBar.html
-http://developer.android.com/reference/android/widget/AbsSpinner.html
-http://developer.android.com/reference/android/widget/AdapterView.AdapterContextMenuInfo.html
-http://developer.android.com/reference/android/widget/AdapterViewAnimator.html
-http://developer.android.com/reference/android/widget/AlphabetIndexer.html
-http://developer.android.com/reference/android/widget/BaseAdapter.html
-http://developer.android.com/reference/android/widget/BaseExpandableListAdapter.html
-http://developer.android.com/reference/android/widget/CalendarView.html
-http://developer.android.com/reference/android/widget/CheckedTextView.html
-http://developer.android.com/reference/android/widget/CompoundButton.html
-http://developer.android.com/reference/android/widget/CursorTreeAdapter.html
-http://developer.android.com/reference/android/widget/DialerFilter.html
-http://developer.android.com/reference/android/widget/DigitalClock.html
-http://developer.android.com/reference/android/widget/EdgeEffect.html
-http://developer.android.com/reference/android/widget/ExpandableListView.html
-http://developer.android.com/reference/android/widget/ExpandableListView.ExpandableListContextMenuInfo.html
-http://developer.android.com/reference/android/widget/Filter.html
-http://developer.android.com/reference/android/widget/Filter.FilterResults.html
-http://developer.android.com/reference/android/widget/Gallery.LayoutParams.html
-http://developer.android.com/reference/android/widget/GridLayout.Alignment.html
-http://developer.android.com/reference/android/widget/GridLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/GridLayout.Spec.html
-http://developer.android.com/reference/android/widget/HeaderViewListAdapter.html
-http://developer.android.com/reference/android/widget/HorizontalScrollView.html
-http://developer.android.com/reference/android/widget/ListPopupWindow.html
-http://developer.android.com/reference/android/widget/ListView.FixedViewInfo.html
-http://developer.android.com/reference/android/widget/MediaController.html
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.html
-http://developer.android.com/reference/android/widget/MultiAutoCompleteTextView.CommaTokenizer.html
-http://developer.android.com/reference/android/widget/NumberPicker.html
-http://developer.android.com/reference/android/widget/OverScroller.html
-http://developer.android.com/reference/android/widget/PopupMenu.html
-http://developer.android.com/reference/android/widget/PopupWindow.html
-http://developer.android.com/reference/android/widget/QuickContactBadge.html
-http://developer.android.com/reference/android/widget/RadioGroup.html
-http://developer.android.com/reference/android/widget/RadioGroup.LayoutParams.html
-http://developer.android.com/reference/android/widget/RatingBar.html
-http://developer.android.com/reference/android/widget/RelativeLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/ResourceCursorAdapter.html
-http://developer.android.com/reference/android/widget/ResourceCursorTreeAdapter.html
-http://developer.android.com/reference/android/widget/Scroller.html
-http://developer.android.com/reference/android/widget/SeekBar.html
-http://developer.android.com/reference/android/widget/SimpleAdapter.html
-http://developer.android.com/reference/android/widget/SimpleCursorTreeAdapter.html
-http://developer.android.com/reference/android/widget/SimpleExpandableListAdapter.html
-http://developer.android.com/reference/android/widget/SlidingDrawer.html
-http://developer.android.com/reference/android/widget/Space.html
-http://developer.android.com/reference/android/widget/Switch.html
-http://developer.android.com/reference/android/widget/TableLayout.html
-http://developer.android.com/reference/android/widget/TableLayout.LayoutParams.html
-http://developer.android.com/reference/android/widget/TableRow.html
-http://developer.android.com/reference/android/widget/TableRow.LayoutParams.html
-http://developer.android.com/reference/android/widget/TextClock.html
-http://developer.android.com/reference/android/widget/TextView.SavedState.html
-http://developer.android.com/reference/android/widget/TimePicker.html
-http://developer.android.com/reference/android/widget/ToggleButton.html
-http://developer.android.com/reference/android/widget/TwoLineListItem.html
-http://developer.android.com/reference/android/widget/VideoView.html
-http://developer.android.com/reference/android/widget/ViewSwitcher.html
-http://developer.android.com/reference/android/widget/ZoomButton.html
-http://developer.android.com/reference/android/widget/ZoomButtonsController.html
-http://developer.android.com/reference/android/widget/ZoomControls.html
-http://developer.android.com/reference/android/widget/ImageView.ScaleType.html
-http://developer.android.com/reference/android/widget/TextView.BufferType.html
-http://developer.android.com/reference/android/widget/RemoteViews.ActionException.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.html
-http://developer.android.com/guide/topics/ui/binding.html
-http://developer.android.com/reference/java/lang/UnsupportedOperationException.html
-http://developer.android.com/reference/android/content/ClipboardManager.OnPrimaryClipChangedListener.html
-http://developer.android.com/reference/android/content/ContentProvider.PipeDataWriter.html
-http://developer.android.com/reference/android/content/DialogInterface.OnMultiChoiceClickListener.html
-http://developer.android.com/reference/android/content/EntityIterator.html
-http://developer.android.com/reference/android/content/IntentSender.OnFinished.html
-http://developer.android.com/reference/android/content/Loader.OnLoadCanceledListener.html
-http://developer.android.com/reference/android/content/Loader.OnLoadCompleteListener.html
-http://developer.android.com/reference/android/content/SharedPreferences.Editor.html
-http://developer.android.com/reference/android/content/SharedPreferences.OnSharedPreferenceChangeListener.html
-http://developer.android.com/reference/android/content/SyncStatusObserver.html
-http://developer.android.com/reference/android/content/AbstractThreadedSyncAdapter.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerArgs.html
-http://developer.android.com/reference/android/content/AsyncQueryHandler.WorkerHandler.html
-http://developer.android.com/reference/android/content/AsyncTaskLoader.html
-http://developer.android.com/reference/android/content/BroadcastReceiver.PendingResult.html
-http://developer.android.com/reference/android/content/ClipboardManager.html
-http://developer.android.com/reference/android/content/ClipData.Item.html
-http://developer.android.com/reference/android/content/ClipDescription.html
-http://developer.android.com/reference/android/content/ContentProviderClient.html
-http://developer.android.com/reference/android/content/ContentProviderOperation.html
-http://developer.android.com/reference/android/content/ContentProviderOperation.Builder.html
-http://developer.android.com/reference/android/content/ContentProviderResult.html
-http://developer.android.com/reference/android/content/ContentQueryMap.html
-http://developer.android.com/reference/android/content/ContentUris.html
-http://developer.android.com/reference/android/content/ContentValues.html
-http://developer.android.com/reference/android/content/Entity.html
-http://developer.android.com/reference/android/content/Entity.NamedContentValues.html
-http://developer.android.com/reference/android/content/Intent.FilterComparison.html
-http://developer.android.com/reference/android/content/Intent.ShortcutIconResource.html
-http://developer.android.com/reference/android/content/IntentFilter.AuthorityEntry.html
-http://developer.android.com/reference/android/content/Loader.ForceLoadContentObserver.html
-http://developer.android.com/reference/android/content/MutableContextWrapper.html
-http://developer.android.com/reference/android/content/PeriodicSync.html
-http://developer.android.com/reference/android/content/SearchRecentSuggestionsProvider.html
-http://developer.android.com/reference/android/content/SyncAdapterType.html
-http://developer.android.com/reference/android/content/SyncContext.html
-http://developer.android.com/reference/android/content/SyncInfo.html
-http://developer.android.com/reference/android/content/SyncResult.html
-http://developer.android.com/reference/android/content/SyncStats.html
-http://developer.android.com/reference/android/content/UriMatcher.html
-http://developer.android.com/reference/android/content/ActivityNotFoundException.html
-http://developer.android.com/reference/android/content/IntentFilter.MalformedMimeTypeException.html
-http://developer.android.com/reference/android/content/IntentSender.SendIntentException.html
-http://developer.android.com/reference/android/content/OperationApplicationException.html
-http://developer.android.com/reference/android/content/ReceiverCallNotAllowedException.html
-http://developer.android.com/reference/android/app/admin/DeviceAdminReceiver.html
-http://developer.android.com/reference/android/support/v4/content/LocalBroadcastManager.html
-http://developer.android.com/guide/topics/fundamentals.html
-http://developer.android.com/guide/topics/intents/intents-filters.html
-http://developer.android.com/reference/android/hardware/display/DisplayManager.DisplayListener.html
-http://developer.android.com/reference/java/security/spec/AlgorithmParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECField.html
-http://developer.android.com/reference/java/security/spec/KeySpec.html
-http://developer.android.com/reference/java/security/spec/DSAParameterSpec.html
-http://developer.android.com/reference/java/security/spec/DSAPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/DSAPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/ECFieldF2m.html
-http://developer.android.com/reference/java/security/spec/ECFieldFp.html
-http://developer.android.com/reference/java/security/spec/ECGenParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECParameterSpec.html
-http://developer.android.com/reference/java/security/spec/ECPoint.html
-http://developer.android.com/reference/java/security/spec/ECPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/ECPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/EllipticCurve.html
-http://developer.android.com/reference/java/security/spec/EncodedKeySpec.html
-http://developer.android.com/reference/java/security/spec/MGF1ParameterSpec.html
-http://developer.android.com/reference/java/security/spec/PKCS8EncodedKeySpec.html
-http://developer.android.com/reference/java/security/spec/PSSParameterSpec.html
-http://developer.android.com/reference/java/security/spec/RSAKeyGenParameterSpec.html
-http://developer.android.com/reference/java/security/spec/RSAMultiPrimePrivateCrtKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAOtherPrimeInfo.html
-http://developer.android.com/reference/java/security/spec/RSAPrivateCrtKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAPrivateKeySpec.html
-http://developer.android.com/reference/java/security/spec/RSAPublicKeySpec.html
-http://developer.android.com/reference/java/security/spec/X509EncodedKeySpec.html
-http://developer.android.com/reference/java/security/spec/InvalidKeySpecException.html
-http://developer.android.com/reference/java/security/spec/InvalidParameterSpecException.html
-http://developer.android.com/reference/android/media/MediaPlayer.html
-http://developer.android.com/reference/android/media/MediaRecorder.html
-http://developer.android.com/reference/android/media/CamcorderProfile.html
-http://developer.android.com/reference/javax/xml/namespace/QName.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethod.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethod.SessionCallback.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSession.EventCallback.html
-http://developer.android.com/reference/android/view/inputmethod/BaseInputConnection.html
-http://developer.android.com/reference/android/view/inputmethod/CompletionInfo.html
-http://developer.android.com/reference/android/view/inputmethod/CorrectionInfo.html
-http://developer.android.com/reference/android/view/inputmethod/ExtractedText.html
-http://developer.android.com/reference/android/view/inputmethod/ExtractedTextRequest.html
-http://developer.android.com/reference/android/view/inputmethod/InputBinding.html
-http://developer.android.com/reference/android/view/inputmethod/InputConnectionWrapper.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodInfo.html
-http://developer.android.com/reference/android/view/inputmethod/InputMethodSubtype.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html
-http://developer.android.com/reference/android/text/InputType.html
-http://developer.android.com/reference/android/Manifest.html
-http://developer.android.com/reference/android/Manifest.permission_group.html
-http://developer.android.com/reference/android/R.html
-http://developer.android.com/reference/android/R.anim.html
-http://developer.android.com/reference/android/R.animator.html
-http://developer.android.com/reference/android/R.array.html
-http://developer.android.com/reference/android/R.bool.html
-http://developer.android.com/reference/android/R.color.html
-http://developer.android.com/reference/android/R.dimen.html
-http://developer.android.com/reference/android/R.drawable.html
-http://developer.android.com/reference/android/R.fraction.html
-http://developer.android.com/reference/android/R.interpolator.html
-http://developer.android.com/reference/android/R.menu.html
-http://developer.android.com/reference/android/R.mipmap.html
-http://developer.android.com/reference/android/R.plurals.html
-http://developer.android.com/reference/android/R.raw.html
-http://developer.android.com/reference/android/R.string.html
-http://developer.android.com/reference/android/R.xml.html
-http://developer.android.com/reference/android/inputmethodservice/KeyboardView.html
-http://developer.android.com/reference/android/net/nsd/NsdManager.DiscoveryListener.html
-http://developer.android.com/reference/android/net/nsd/NsdManager.RegistrationListener.html
-http://developer.android.com/reference/android/net/nsd/NsdManager.ResolveListener.html
-http://developer.android.com/reference/android/net/nsd/NsdServiceInfo.html
-http://developer.android.com/reference/javax/crypto/SecretKey.html
-http://developer.android.com/reference/javax/crypto/Cipher.html
-http://developer.android.com/reference/javax/crypto/CipherInputStream.html
-http://developer.android.com/reference/javax/crypto/CipherOutputStream.html
-http://developer.android.com/reference/javax/crypto/CipherSpi.html
-http://developer.android.com/reference/javax/crypto/EncryptedPrivateKeyInfo.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanism.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanismSpi.html
-http://developer.android.com/reference/javax/crypto/KeyAgreement.html
-http://developer.android.com/reference/javax/crypto/KeyAgreementSpi.html
-http://developer.android.com/reference/javax/crypto/KeyGenerator.html
-http://developer.android.com/reference/javax/crypto/KeyGeneratorSpi.html
-http://developer.android.com/reference/javax/crypto/Mac.html
-http://developer.android.com/reference/javax/crypto/MacSpi.html
-http://developer.android.com/reference/javax/crypto/NullCipher.html
-http://developer.android.com/reference/javax/crypto/SealedObject.html
-http://developer.android.com/reference/javax/crypto/SecretKeyFactory.html
-http://developer.android.com/reference/javax/crypto/SecretKeyFactorySpi.html
-http://developer.android.com/reference/javax/crypto/BadPaddingException.html
-http://developer.android.com/reference/javax/crypto/ExemptionMechanismException.html
-http://developer.android.com/reference/javax/crypto/IllegalBlockSizeException.html
-http://developer.android.com/reference/javax/crypto/NoSuchPaddingException.html
-http://developer.android.com/reference/javax/crypto/ShortBufferException.html
-http://developer.android.com/reference/android/webkit/WebSettings.html
-http://developer.android.com/reference/android/webkit/WebViewClient.html
-http://developer.android.com/resources/tutorials/views/hello-webview.html
-http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePadProvider.html
-http://developer.android.com/resources/samples/NotePad/src/com/example/android/notepad/NotePad.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.html
-http://developer.android.com/reference/android/content/res/Resources.NotFoundException.html
-http://developer.android.com/reference/org/apache/http/client/methods/AbortableHttpRequest.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpUriRequest.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpDelete.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpEntityEnclosingRequestBase.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpGet.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpHead.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpOptions.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPost.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpPut.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpRequestBase.html
-http://developer.android.com/reference/org/apache/http/client/methods/HttpTrace.html
-http://developer.android.com/reference/org/apache/http/HttpRequest.html
-http://developer.android.com/reference/android/view/animation/Interpolator.html
-http://developer.android.com/reference/android/view/animation/AlphaAnimation.html
-http://developer.android.com/reference/android/view/animation/Animation.Description.html
-http://developer.android.com/reference/android/view/animation/AnimationSet.html
-http://developer.android.com/reference/android/view/animation/AnimationUtils.html
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.html
-http://developer.android.com/reference/android/view/animation/GridLayoutAnimationController.AnimationParameters.html
-http://developer.android.com/reference/android/view/animation/LayoutAnimationController.AnimationParameters.html
-http://developer.android.com/reference/android/view/animation/RotateAnimation.html
-http://developer.android.com/reference/android/view/animation/ScaleAnimation.html
-http://developer.android.com/reference/android/view/animation/TranslateAnimation.html
-http://developer.android.com/reference/java/lang/Cloneable.html
-http://developer.android.com/reference/java/lang/CloneNotSupportedException.html
-http://developer.android.com/reference/android/accounts/AbstractAccountAuthenticator.html
-http://developer.android.com/reference/android/hardware/usb/UsbConstants.html
-http://developer.android.com/reference/android/hardware/usb/UsbDeviceConnection.html
-http://developer.android.com/reference/android/hardware/usb/UsbEndpoint.html
-http://developer.android.com/reference/android/hardware/usb/UsbInterface.html
-http://developer.android.com/reference/android/hardware/usb/UsbRequest.html
-http://developer.android.com/reference/android/content/pm/PackageManager.NameNotFoundException.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.LayoutParams.html
-http://developer.android.com/reference/android/webkit/WebChromeClient.html
-http://developer.android.com/reference/android/webkit/ConsoleMessage.html
-http://developer.android.com/reference/android/webkit/ConsoleMessage.MessageLevel.html
-http://developer.android.com/reference/javax/security/auth/Destroyable.html
-http://developer.android.com/reference/javax/security/auth/AuthPermission.html
-http://developer.android.com/reference/javax/security/auth/PrivateCredentialPermission.html
-http://developer.android.com/reference/javax/security/auth/Subject.html
-http://developer.android.com/reference/javax/security/auth/SubjectDomainCombiner.html
-http://developer.android.com/reference/javax/security/auth/DestroyFailedException.html
-http://developer.android.com/reference/java/util/Collection.html
-http://developer.android.com/reference/java/lang/InterruptedException.html
-http://developer.android.com/reference/java/security/PrivilegedAction.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteOpenHelper.html
-http://developer.android.com/reference/android/provider/BaseColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.Data.html
-http://developer.android.com/reference/android/net/Uri.Builder.html
-http://developer.android.com/reference/android/database/MatrixCursor.html
-http://developer.android.com/reference/android/provider/ContactsContract.html
-http://developer.android.com/reference/java/io/OutputStream.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseOutputStream.html
-http://developer.android.com/reference/java/nio/channels/FileChannel.html
-http://developer.android.com/reference/java/io/Flushable.html
-http://developer.android.com/reference/android/test/mock/MockContentProvider.html
-http://developer.android.com/reference/android/test/mock/MockContentResolver.html
-http://developer.android.com/reference/android/test/mock/MockContext.html
-http://developer.android.com/reference/android/test/mock/MockCursor.html
-http://developer.android.com/reference/android/test/mock/MockDialogInterface.html
-http://developer.android.com/reference/android/test/mock/MockPackageManager.html
-http://developer.android.com/reference/android/test/mock/MockResources.html
-http://developer.android.com/reference/java/lang/Number.html
-http://developer.android.com/downloads/brand/Android_Robot_outlined.ai
-http://developer.android.com/downloads/brand/Google_Play_Store.ai
-http://developer.android.com/downloads/brand/en_app_rgb_wo.ai
-http://developer.android.com/downloads/brand/en_generic_rgb_wo.ai
-http://developer.android.com/reference/org/apache/http/conn/scheme/HostNameResolver.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/LayeredSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/SocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/PlainSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/Scheme.html
-http://developer.android.com/reference/org/apache/http/conn/scheme/SchemeRegistry.html
-http://developer.android.com/reference/android/content/pm/ActivityInfo.html
-http://developer.android.com/reference/android/content/pm/ApplicationInfo.DisplayNameComparator.html
-http://developer.android.com/reference/android/content/pm/ComponentInfo.html
-http://developer.android.com/reference/android/content/pm/InstrumentationInfo.html
-http://developer.android.com/reference/android/content/pm/LabeledIntent.html
-http://developer.android.com/reference/android/content/pm/PackageItemInfo.DisplayNameComparator.html
-http://developer.android.com/reference/android/content/pm/PackageStats.html
-http://developer.android.com/reference/android/content/pm/PathPermission.html
-http://developer.android.com/reference/android/content/pm/PermissionGroupInfo.html
-http://developer.android.com/reference/android/content/pm/PermissionInfo.html
-http://developer.android.com/reference/android/content/pm/ProviderInfo.html
-http://developer.android.com/reference/android/content/pm/ResolveInfo.html
-http://developer.android.com/reference/android/content/pm/ResolveInfo.DisplayNameComparator.html
-http://developer.android.com/reference/android/content/pm/ServiceInfo.html
-http://developer.android.com/reference/android/content/pm/Signature.html
-http://developer.android.com/reference/android/accessibilityservice/AccessibilityServiceInfo.html
-http://developer.android.com/reference/java/math/BigInteger.html
-http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.CursorToStringConverter.html
-http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.ViewBinder.html
-http://developer.android.com/reference/android/support/v4/widget/CursorAdapter.html
-http://developer.android.com/reference/android/support/v4/widget/EdgeEffectCompat.html
-http://developer.android.com/reference/android/support/v4/widget/ResourceCursorAdapter.html
-http://developer.android.com/reference/android/support/v4/widget/SearchViewCompat.html
-http://developer.android.com/reference/android/support/v4/widget/SearchViewCompat.OnQueryTextListenerCompat.html
-http://developer.android.com/reference/android/support/v4/widget/SimpleCursorAdapter.html
-http://developer.android.com/reference/android/support/v4/content/CursorLoader.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItems.html
-http://developer.android.com/resources/samples/ContactManager/index.html
-http://developer.android.com/reference/android/provider/ContactsContract.DataColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.SyncColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContactsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredName.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Email.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Photo.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.StructuredPostal.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.GroupMembership.html
-http://developer.android.com/reference/android/provider/ContactsContract.ContactsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.Profile.html
-http://developer.android.com/reference/android/provider/ContactsContract.Settings.html
-http://developer.android.com/reference/android/provider/ContactsContract.SyncState.html
-http://developer.android.com/reference/android/provider/ContactsContract.Groups.html
-http://developer.android.com/reference/android/provider/ContactsContract.GroupsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.SettingsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Entity.html
-http://developer.android.com/reference/android/provider/ContactsContract.Intents.Insert.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Phone.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.CommonColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItemPhotos.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItemsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItemPhotosColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.DisplayPhoto.html
-http://developer.android.com/reference/android/provider/ContactsContract.StreamItems.StreamItemPhotos.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Photo.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.DisplayPhoto.html
-http://developer.android.com/reference/java/util/Locale.html
-http://developer.android.com/reference/java/util/Calendar.html
-http://developer.android.com/reference/android/accounts/Account.html
-http://developer.android.com/reference/android/graphics/ColorFilter.html
-http://developer.android.com/reference/android/graphics/PorterDuff.Mode.html
-http://developer.android.com/reference/android/graphics/drawable/LevelListDrawable.html
-http://developer.android.com/reference/org/apache/http/message/AbstractHttpMessage.html
-http://developer.android.com/reference/org/apache/http/message/HeaderGroup.html
-http://developer.android.com/reference/org/apache/http/params/HttpParams.html
-http://developer.android.com/reference/java/net/URI.html
-http://developer.android.com/reference/org/apache/http/ProtocolVersion.html
-http://developer.android.com/reference/org/apache/http/RequestLine.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionRequest.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionReleaseTrigger.html
-http://developer.android.com/reference/org/apache/http/Header.html
-http://developer.android.com/reference/org/apache/http/HttpMessage.html
-http://developer.android.com/reference/org/apache/http/HeaderIterator.html
-http://developer.android.com/reference/android/content/res/XmlResourceParser.html
-http://developer.android.com/reference/android/content/res/AssetFileDescriptor.AutoCloseInputStream.html
-http://developer.android.com/reference/android/content/res/AssetManager.AssetInputStream.html
-http://developer.android.com/reference/android/content/res/ColorStateList.html
-http://developer.android.com/reference/android/content/res/ObbInfo.html
-http://developer.android.com/reference/android/content/res/ObbScanner.html
-http://developer.android.com/resources/samples/MultiResolution/index.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design.html
-http://developer.android.com/guide/practices/screens-support-1.5.html
-http://developer.android.com/reference/android/graphics/BitmapFactory.Options.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/DensityActivity.html
-http://developer.android.com/reference/android/graphics/BitmapFactory.html
-http://developer.android.com/resources/dashboard/screens.html
-http://developer.android.com/shareables/training/LocationAware.zip
-http://developer.android.com/reference/android/text/method/MetaKeyKeyListener.html
-http://developer.android.com/reference/java/security/GeneralSecurityException.html
-http://developer.android.com/reference/org/apache/http/protocol/ExecutionContext.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpExpectationVerifier.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpProcessor.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandler.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerResolver.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestInterceptorList.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpResponseInterceptorList.html
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/BasicHttpProcessor.html
-http://developer.android.com/reference/org/apache/http/protocol/DefaultedHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/HTTP.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpDateGenerator.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestExecutor.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpRequestHandlerRegistry.html
-http://developer.android.com/reference/org/apache/http/protocol/HttpService.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestContent.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestDate.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestExpectContinue.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestTargetHost.html
-http://developer.android.com/reference/org/apache/http/protocol/RequestUserAgent.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseConnControl.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseContent.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseDate.html
-http://developer.android.com/reference/org/apache/http/protocol/ResponseServer.html
-http://developer.android.com/reference/org/apache/http/protocol/SyncBasicHttpContext.html
-http://developer.android.com/reference/org/apache/http/protocol/UriPatternMatcher.html
-http://developer.android.com/reference/android/accounts/AccountManagerCallback.html
-http://developer.android.com/reference/android/accounts/AccountManagerFuture.html
-http://developer.android.com/reference/android/accounts/OnAccountsUpdateListener.html
-http://developer.android.com/reference/android/accounts/AccountAuthenticatorResponse.html
-http://developer.android.com/reference/android/accounts/AuthenticatorDescription.html
-http://developer.android.com/reference/android/accounts/AccountsException.html
-http://developer.android.com/reference/android/accounts/AuthenticatorException.html
-http://developer.android.com/reference/android/accounts/NetworkErrorException.html
-http://developer.android.com/reference/android/accounts/OperationCanceledException.html
-http://developer.android.com/reference/android/text/TextWatcher.html
-http://developer.android.com/reference/android/text/method/MovementMethod.html
-http://developer.android.com/reference/android/text/Editable.html
-http://developer.android.com/reference/android/text/TextUtils.TruncateAt.html
-http://developer.android.com/reference/android/text/InputFilter.html
-http://developer.android.com/reference/android/text/method/KeyListener.html
-http://developer.android.com/reference/android/text/Layout.html
-http://developer.android.com/reference/android/text/method/LinkMovementMethod.html
-http://developer.android.com/reference/android/text/TextPaint.html
-http://developer.android.com/reference/android/text/Selection.html
-http://developer.android.com/reference/android/text/method/TransformationMethod.html
-http://developer.android.com/reference/android/graphics/Typeface.html
-http://developer.android.com/reference/android/text/style/URLSpan.html
-http://developer.android.com/reference/android/text/util/Linkify.html
-http://developer.android.com/reference/android/text/Editable.Factory.html
-http://developer.android.com/reference/android/text/Spannable.Factory.html
-http://developer.android.com/reference/org/apache/http/HttpRequestInterceptor.html
-http://developer.android.com/reference/org/apache/http/HttpException.html
-http://developer.android.com/reference/java/util/Comparator.html
-http://developer.android.com/reference/java/util/Enumeration.html
-http://developer.android.com/reference/java/util/Formattable.html
-http://developer.android.com/reference/java/util/Iterator.html
-http://developer.android.com/reference/java/util/ListIterator.html
-http://developer.android.com/reference/java/util/Map.Entry.html
-http://developer.android.com/reference/java/util/Observer.html
-http://developer.android.com/reference/java/util/RandomAccess.html
-http://developer.android.com/reference/java/util/SortedMap.html
-http://developer.android.com/reference/java/util/SortedSet.html
-http://developer.android.com/reference/java/util/AbstractCollection.html
-http://developer.android.com/reference/java/util/AbstractList.html
-http://developer.android.com/reference/java/util/AbstractMap.html
-http://developer.android.com/reference/java/util/AbstractMap.SimpleEntry.html
-http://developer.android.com/reference/java/util/AbstractMap.SimpleImmutableEntry.html
-http://developer.android.com/reference/java/util/AbstractQueue.html
-http://developer.android.com/reference/java/util/AbstractSequentialList.html
-http://developer.android.com/reference/java/util/AbstractSet.html
-http://developer.android.com/reference/java/util/ArrayDeque.html
-http://developer.android.com/reference/java/util/Arrays.html
-http://developer.android.com/reference/java/util/BitSet.html
-http://developer.android.com/reference/java/util/Collections.html
-http://developer.android.com/reference/java/util/Currency.html
-http://developer.android.com/reference/java/util/Date.html
-http://developer.android.com/reference/java/util/Dictionary.html
-http://developer.android.com/reference/java/util/EnumMap.html
-http://developer.android.com/reference/java/util/EnumSet.html
-http://developer.android.com/reference/java/util/EventListenerProxy.html
-http://developer.android.com/reference/java/util/FormattableFlags.html
-http://developer.android.com/reference/java/util/GregorianCalendar.html
-http://developer.android.com/reference/java/util/HashSet.html
-http://developer.android.com/reference/java/util/Hashtable.html
-http://developer.android.com/reference/java/util/IdentityHashMap.html
-http://developer.android.com/reference/java/util/LinkedHashMap.html
-http://developer.android.com/reference/java/util/LinkedHashSet.html
-http://developer.android.com/reference/java/util/LinkedList.html
-http://developer.android.com/reference/java/util/ListResourceBundle.html
-http://developer.android.com/reference/java/util/Observable.html
-http://developer.android.com/reference/java/util/Properties.html
-http://developer.android.com/reference/java/util/PropertyPermission.html
-http://developer.android.com/reference/java/util/PropertyResourceBundle.html
-http://developer.android.com/reference/java/util/Random.html
-http://developer.android.com/reference/java/util/ResourceBundle.html
-http://developer.android.com/reference/java/util/ResourceBundle.Control.html
-http://developer.android.com/reference/java/util/Scanner.html
-http://developer.android.com/reference/java/util/ServiceLoader.html
-http://developer.android.com/reference/java/util/SimpleTimeZone.html
-http://developer.android.com/reference/java/util/Stack.html
-http://developer.android.com/reference/java/util/StringTokenizer.html
-http://developer.android.com/reference/java/util/Timer.html
-http://developer.android.com/reference/java/util/TimerTask.html
-http://developer.android.com/reference/java/util/TimeZone.html
-http://developer.android.com/reference/java/util/TreeMap.html
-http://developer.android.com/reference/java/util/TreeSet.html
-http://developer.android.com/reference/java/util/UUID.html
-http://developer.android.com/reference/java/util/Vector.html
-http://developer.android.com/reference/java/util/WeakHashMap.html
-http://developer.android.com/reference/java/util/Formatter.BigDecimalLayoutForm.html
-http://developer.android.com/reference/java/util/ConcurrentModificationException.html
-http://developer.android.com/reference/java/util/DuplicateFormatFlagsException.html
-http://developer.android.com/reference/java/util/EmptyStackException.html
-http://developer.android.com/reference/java/util/FormatFlagsConversionMismatchException.html
-http://developer.android.com/reference/java/util/FormatterClosedException.html
-http://developer.android.com/reference/java/util/IllegalFormatCodePointException.html
-http://developer.android.com/reference/java/util/IllegalFormatConversionException.html
-http://developer.android.com/reference/java/util/IllegalFormatException.html
-http://developer.android.com/reference/java/util/IllegalFormatFlagsException.html
-http://developer.android.com/reference/java/util/IllegalFormatPrecisionException.html
-http://developer.android.com/reference/java/util/IllegalFormatWidthException.html
-http://developer.android.com/reference/java/util/InputMismatchException.html
-http://developer.android.com/reference/java/util/InvalidPropertiesFormatException.html
-http://developer.android.com/reference/java/util/MissingFormatArgumentException.html
-http://developer.android.com/reference/java/util/MissingFormatWidthException.html
-http://developer.android.com/reference/java/util/MissingResourceException.html
-http://developer.android.com/reference/java/util/NoSuchElementException.html
-http://developer.android.com/reference/java/util/TooManyListenersException.html
-http://developer.android.com/reference/java/util/UnknownFormatConversionException.html
-http://developer.android.com/reference/java/util/UnknownFormatFlagsException.html
-http://developer.android.com/reference/java/util/ServiceConfigurationError.html
-http://developer.android.com/reference/javax/sql/ConnectionEvent.html
-http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedEvent.html
-http://developer.android.com/reference/java/beans/PropertyChangeEvent.html
-http://developer.android.com/reference/javax/sql/RowSetEvent.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingEvent.html
-http://developer.android.com/reference/javax/sql/StatementEvent.html
-http://developer.android.com/reference/javax/sql/PooledConnection.html
-http://developer.android.com/reference/javax/sql/RowSet.html
-http://developer.android.com/reference/javax/net/ssl/SSLSession.html
-http://developer.android.com/reference/java/beans/IndexedPropertyChangeEvent.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List2.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List7.html
-http://developer.android.com/reference/java/security/AlgorithmParameters.html
-http://developer.android.com/reference/java/security/Key.html
-http://developer.android.com/reference/java/security/Provider.html
-http://developer.android.com/reference/java/security/NoSuchAlgorithmException.html
-http://developer.android.com/reference/java/security/InvalidKeyException.html
-http://developer.android.com/reference/java/security/NoSuchProviderException.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScheme.html
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/auth/Credentials.html
-http://developer.android.com/reference/org/apache/http/auth/AUTH.html
-http://developer.android.com/reference/org/apache/http/auth/AuthSchemeRegistry.html
-http://developer.android.com/reference/org/apache/http/auth/AuthScope.html
-http://developer.android.com/reference/org/apache/http/auth/AuthState.html
-http://developer.android.com/reference/org/apache/http/auth/BasicUserPrincipal.html
-http://developer.android.com/reference/org/apache/http/auth/NTCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/NTUserPrincipal.html
-http://developer.android.com/reference/org/apache/http/auth/UsernamePasswordCredentials.html
-http://developer.android.com/reference/org/apache/http/auth/AuthenticationException.html
-http://developer.android.com/reference/org/apache/http/auth/InvalidCredentialsException.html
-http://developer.android.com/reference/org/apache/http/auth/MalformedChallengeException.html
-http://developer.android.com/reference/android/hardware/SensorListener.html
-http://developer.android.com/shareables/training/NewsReader.zip
-http://developer.android.com/sdk/compatibility-library.html
-http://developer.android.com/resources/samples/SearchableDictionary/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewActionBar.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SearchViewFilterMode.html
-http://developer.android.com/resources/samples/SearchableDictionary/src/com/example/android/searchabledict/SearchableDictionary.html
-http://developer.android.com/reference/android/support/v13/app/FragmentTabHost.html
-http://developer.android.com/guide/developing/tools/traceview.html
-http://developer.android.com/reference/java/lang/annotation/Annotation.html
-http://developer.android.com/reference/java/lang/annotation/ElementType.html
-http://developer.android.com/reference/java/lang/annotation/RetentionPolicy.html
-http://developer.android.com/reference/java/lang/annotation/AnnotationTypeMismatchException.html
-http://developer.android.com/reference/java/lang/annotation/IncompleteAnnotationException.html
-http://developer.android.com/reference/java/lang/annotation/AnnotationFormatError.html
-http://developer.android.com/reference/android/media/AudioManager.OnAudioFocusChangeListener.html
-http://developer.android.com/reference/android/media/AudioRecord.OnRecordPositionUpdateListener.html
-http://developer.android.com/reference/android/media/AudioTrack.OnPlaybackPositionUpdateListener.html
-http://developer.android.com/reference/android/media/JetPlayer.OnJetEventListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnBufferingUpdateListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnCompletionListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnErrorListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnInfoListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnPreparedListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnSeekCompleteListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnTimedTextListener.html
-http://developer.android.com/reference/android/media/MediaPlayer.OnVideoSizeChangedListener.html
-http://developer.android.com/reference/android/media/MediaRecorder.OnErrorListener.html
-http://developer.android.com/reference/android/media/MediaRecorder.OnInfoListener.html
-http://developer.android.com/reference/android/media/MediaScannerConnection.MediaScannerConnectionClient.html
-http://developer.android.com/reference/android/media/SoundPool.OnLoadCompleteListener.html
-http://developer.android.com/reference/android/media/AsyncPlayer.html
-http://developer.android.com/reference/android/media/AudioFormat.html
-http://developer.android.com/reference/android/media/AudioRecord.html
-http://developer.android.com/reference/android/media/AudioTrack.html
-http://developer.android.com/reference/android/media/CameraProfile.html
-http://developer.android.com/reference/android/media/ExifInterface.html
-http://developer.android.com/reference/android/media/FaceDetector.html
-http://developer.android.com/reference/android/media/FaceDetector.Face.html
-http://developer.android.com/reference/android/media/MediaActionSound.html
-http://developer.android.com/reference/android/media/MediaCodec.html
-http://developer.android.com/reference/android/media/MediaCodec.BufferInfo.html
-http://developer.android.com/reference/android/media/MediaCodec.CryptoInfo.html
-http://developer.android.com/reference/android/media/MediaCodecInfo.html
-http://developer.android.com/reference/android/media/MediaCodecInfo.CodecCapabilities.html
-http://developer.android.com/reference/android/media/MediaCodecInfo.CodecProfileLevel.html
-http://developer.android.com/reference/android/media/MediaCodecList.html
-http://developer.android.com/reference/android/media/MediaCrypto.html
-http://developer.android.com/reference/android/media/MediaExtractor.html
-http://developer.android.com/reference/android/media/MediaFormat.html
-http://developer.android.com/reference/android/media/MediaMetadataRetriever.html
-http://developer.android.com/reference/android/media/MediaPlayer.TrackInfo.html
-http://developer.android.com/reference/android/media/MediaRecorder.AudioEncoder.html
-http://developer.android.com/reference/android/media/MediaRecorder.AudioSource.html
-http://developer.android.com/reference/android/media/MediaRecorder.OutputFormat.html
-http://developer.android.com/reference/android/media/MediaRecorder.VideoEncoder.html
-http://developer.android.com/reference/android/media/MediaRecorder.VideoSource.html
-http://developer.android.com/reference/android/media/MediaRouter.Callback.html
-http://developer.android.com/reference/android/media/MediaRouter.RouteCategory.html
-http://developer.android.com/reference/android/media/MediaRouter.RouteGroup.html
-http://developer.android.com/reference/android/media/MediaRouter.RouteInfo.html
-http://developer.android.com/reference/android/media/MediaRouter.SimpleCallback.html
-http://developer.android.com/reference/android/media/MediaRouter.UserRouteInfo.html
-http://developer.android.com/reference/android/media/MediaRouter.VolumeCallback.html
-http://developer.android.com/reference/android/media/MediaSyncEvent.html
-http://developer.android.com/reference/android/media/RemoteControlClient.html
-http://developer.android.com/reference/android/media/RemoteControlClient.MetadataEditor.html
-http://developer.android.com/reference/android/media/Ringtone.html
-http://developer.android.com/reference/android/media/RingtoneManager.html
-http://developer.android.com/reference/android/media/SoundPool.html
-http://developer.android.com/reference/android/media/ThumbnailUtils.html
-http://developer.android.com/reference/android/media/TimedText.html
-http://developer.android.com/reference/android/media/ToneGenerator.html
-http://developer.android.com/reference/android/media/MediaCodec.CryptoException.html
-http://developer.android.com/reference/android/media/MediaCryptoException.html
-http://developer.android.com/reference/java/lang/Appendable.html
-http://developer.android.com/reference/java/lang/Comparable.html
-http://developer.android.com/reference/java/lang/Iterable.html
-http://developer.android.com/reference/java/lang/Readable.html
-http://developer.android.com/reference/java/lang/Thread.UncaughtExceptionHandler.html
-http://developer.android.com/reference/java/lang/Boolean.html
-http://developer.android.com/reference/java/lang/Byte.html
-http://developer.android.com/reference/java/lang/Character.html
-http://developer.android.com/reference/java/lang/Character.Subset.html
-http://developer.android.com/reference/java/lang/Character.UnicodeBlock.html
-http://developer.android.com/reference/java/lang/Compiler.html
-http://developer.android.com/reference/java/lang/Double.html
-http://developer.android.com/reference/java/lang/Enum.html
-http://developer.android.com/reference/java/lang/InheritableThreadLocal.html
-http://developer.android.com/reference/java/lang/Long.html
-http://developer.android.com/reference/java/lang/Package.html
-http://developer.android.com/reference/java/lang/Process.html
-http://developer.android.com/reference/java/lang/ProcessBuilder.html
-http://developer.android.com/reference/java/lang/Runtime.html
-http://developer.android.com/reference/java/lang/RuntimePermission.html
-http://developer.android.com/reference/java/lang/SecurityManager.html
-http://developer.android.com/reference/java/lang/Short.html
-http://developer.android.com/reference/java/lang/StrictMath.html
-http://developer.android.com/reference/java/lang/StringBuffer.html
-http://developer.android.com/reference/java/lang/ThreadGroup.html
-http://developer.android.com/reference/java/lang/ThreadLocal.html
-http://developer.android.com/reference/java/lang/Void.html
-http://developer.android.com/reference/java/lang/Thread.State.html
-http://developer.android.com/reference/java/lang/ArithmeticException.html
-http://developer.android.com/reference/java/lang/ArrayIndexOutOfBoundsException.html
-http://developer.android.com/reference/java/lang/ArrayStoreException.html
-http://developer.android.com/reference/java/lang/ClassCastException.html
-http://developer.android.com/reference/java/lang/ClassNotFoundException.html
-http://developer.android.com/reference/java/lang/EnumConstantNotPresentException.html
-http://developer.android.com/reference/java/lang/IllegalAccessException.html
-http://developer.android.com/reference/java/lang/IllegalMonitorStateException.html
-http://developer.android.com/reference/java/lang/IllegalThreadStateException.html
-http://developer.android.com/reference/java/lang/IndexOutOfBoundsException.html
-http://developer.android.com/reference/java/lang/NegativeArraySizeException.html
-http://developer.android.com/reference/java/lang/NoSuchFieldException.html
-http://developer.android.com/reference/java/lang/NoSuchMethodException.html
-http://developer.android.com/reference/java/lang/NumberFormatException.html
-http://developer.android.com/reference/java/lang/StringIndexOutOfBoundsException.html
-http://developer.android.com/reference/java/lang/TypeNotPresentException.html
-http://developer.android.com/reference/java/lang/AbstractMethodError.html
-http://developer.android.com/reference/java/lang/AssertionError.html
-http://developer.android.com/reference/java/lang/ClassCircularityError.html
-http://developer.android.com/reference/java/lang/ClassFormatError.html
-http://developer.android.com/reference/java/lang/Error.html
-http://developer.android.com/reference/java/lang/ExceptionInInitializerError.html
-http://developer.android.com/reference/java/lang/IllegalAccessError.html
-http://developer.android.com/reference/java/lang/IncompatibleClassChangeError.html
-http://developer.android.com/reference/java/lang/InstantiationError.html
-http://developer.android.com/reference/java/lang/InternalError.html
-http://developer.android.com/reference/java/lang/LinkageError.html
-http://developer.android.com/reference/java/lang/NoClassDefFoundError.html
-http://developer.android.com/reference/java/lang/NoSuchFieldError.html
-http://developer.android.com/reference/java/lang/NoSuchMethodError.html
-http://developer.android.com/reference/java/lang/OutOfMemoryError.html
-http://developer.android.com/reference/java/lang/StackOverflowError.html
-http://developer.android.com/reference/java/lang/ThreadDeath.html
-http://developer.android.com/reference/java/lang/UnknownError.html
-http://developer.android.com/reference/java/lang/UnsatisfiedLinkError.html
-http://developer.android.com/reference/java/lang/UnsupportedClassVersionError.html
-http://developer.android.com/reference/java/lang/VirtualMachineError.html
-http://developer.android.com/reference/java/nio/channels/AlreadyConnectedException.html
-http://developer.android.com/reference/java/nio/channels/CancelledKeyException.html
-http://developer.android.com/reference/java/nio/channels/ClosedSelectorException.html
-http://developer.android.com/reference/java/nio/channels/ConnectionPendingException.html
-http://developer.android.com/reference/java/nio/channels/IllegalBlockingModeException.html
-http://developer.android.com/reference/java/nio/InvalidMarkException.html
-http://developer.android.com/reference/java/nio/channels/NoConnectionPendingException.html
-http://developer.android.com/reference/java/nio/channels/NonReadableChannelException.html
-http://developer.android.com/reference/java/nio/channels/NonWritableChannelException.html
-http://developer.android.com/reference/java/nio/channels/NotYetBoundException.html
-http://developer.android.com/reference/java/nio/channels/NotYetConnectedException.html
-http://developer.android.com/reference/java/nio/channels/OverlappingFileLockException.html
-http://developer.android.com/reference/java/nio/channels/Selector.html
-http://developer.android.com/reference/java/nio/channels/SocketChannel.html
-http://developer.android.com/reference/javax/crypto/spec/DHGenParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/IvParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/OAEPParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/PBEParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/RC2ParameterSpec.html
-http://developer.android.com/reference/javax/crypto/spec/RC5ParameterSpec.html
-http://developer.android.com/reference/org/apache/http/message/HeaderValueFormatter.html
-http://developer.android.com/reference/org/apache/http/message/HeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/message/LineFormatter.html
-http://developer.android.com/reference/org/apache/http/message/LineParser.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeader.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderElement.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderElementIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueFormatter.html
-http://developer.android.com/reference/org/apache/http/message/BasicHeaderValueParser.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpEntityEnclosingRequest.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpRequest.html
-http://developer.android.com/reference/org/apache/http/message/BasicHttpResponse.html
-http://developer.android.com/reference/org/apache/http/message/BasicLineFormatter.html
-http://developer.android.com/reference/org/apache/http/message/BasicLineParser.html
-http://developer.android.com/reference/org/apache/http/message/BasicListHeaderIterator.html
-http://developer.android.com/reference/org/apache/http/message/BasicNameValuePair.html
-http://developer.android.com/reference/org/apache/http/message/BasicRequestLine.html
-http://developer.android.com/reference/org/apache/http/message/BasicStatusLine.html
-http://developer.android.com/reference/org/apache/http/message/BasicTokenIterator.html
-http://developer.android.com/reference/org/apache/http/message/BufferedHeader.html
-http://developer.android.com/reference/org/apache/http/message/ParserCursor.html
-http://developer.android.com/reference/org/apache/http/impl/client/RequestWrapper.html
-http://developer.android.com/reference/org/apache/http/impl/client/EntityEnclosingRequestWrapper.html
-http://developer.android.com/reference/org/apache/http/HttpEntityEnclosingRequest.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/AbstractCookieSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicClientCookie2.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicCommentHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicDomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicExpiresHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicMaxAgeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicPathHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BasicSecureHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BestMatchSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/BrowserCompatSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/CookieSpecBase.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/DateUtils.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftHeaderParser.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/NetscapeDraftSpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109DomainHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109Spec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109SpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2109VersionHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965CommentUrlAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DiscardAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965DomainAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965PortAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965Spec.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965SpecFactory.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/RFC2965VersionAttributeHandler.html
-http://developer.android.com/reference/org/apache/http/impl/cookie/DateParseException.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieAttributeHandler.html
-http://developer.android.com/reference/java/math/BigDecimal.html
-http://developer.android.com/reference/java/math/MathContext.html
-http://developer.android.com/reference/java/math/RoundingMode.html
-http://developer.android.com/guide/topics/fundamentals/processes-and-threads.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/X509HostnameVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/AbstractVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/AllowAllHostnameVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/BrowserCompatHostnameVerifier.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/SSLSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/ssl/StrictHostnameVerifier.html
-http://developer.android.com/reference/javax/crypto/spec/SecretKeySpec.html
-http://developer.android.com/reference/java/nio/ByteBuffer.html
-http://developer.android.com/reference/java/security/SecureRandom.html
-http://developer.android.com/reference/java/security/InvalidAlgorithmParameterException.html
-http://developer.android.com/reference/java/nio/charset/Charset.html
-http://developer.android.com/reference/java/nio/charset/CharsetDecoder.html
-http://developer.android.com/reference/java/io/UnsupportedEncodingException.html
-http://developer.android.com/reference/java/nio/charset/CharsetEncoder.html
-http://developer.android.com/reference/java/util/regex/Pattern.html
-http://developer.android.com/reference/android/provider/CalendarContract.AttendeesColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarAlertsColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarCacheColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarSyncColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.ColorsColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.EventDaysColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.EventsColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.ExtendedPropertiesColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.RemindersColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.SyncColumns.html
-http://developer.android.com/reference/android/provider/Contacts.ContactMethodsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.ExtensionsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.GroupsColumns.html
-http://developer.android.com/reference/android/provider/Contacts.OrganizationColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PeopleColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PhonesColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PhotosColumns.html
-http://developer.android.com/reference/android/provider/Contacts.PresenceColumns.html
-http://developer.android.com/reference/android/provider/Contacts.SettingsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.BaseSyncColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.BaseTypes.html
-http://developer.android.com/reference/android/provider/ContactsContract.ContactNameColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.ContactOptionsColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.ContactStatusColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.DataColumnsWithJoins.html
-http://developer.android.com/reference/android/provider/ContactsContract.DisplayNameSources.html
-http://developer.android.com/reference/android/provider/ContactsContract.FullNameStyle.html
-http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookupColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.PhoneticNameStyle.html
-http://developer.android.com/reference/android/provider/ContactsContract.PresenceColumns.html
-http://developer.android.com/reference/android/provider/ContactsContract.StatusColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.AlbumColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.ArtistColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.AudioColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.GenresColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.PlaylistsColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Files.FileColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.ImageColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.MediaColumns.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.VideoColumns.html
-http://developer.android.com/reference/android/provider/OpenableColumns.html
-http://developer.android.com/reference/android/provider/SyncStateContract.Columns.html
-http://developer.android.com/reference/android/provider/AlarmClock.html
-http://developer.android.com/reference/android/provider/Browser.html
-http://developer.android.com/reference/android/provider/Browser.BookmarkColumns.html
-http://developer.android.com/reference/android/provider/Browser.SearchColumns.html
-http://developer.android.com/reference/android/provider/CalendarContract.html
-http://developer.android.com/reference/android/provider/CalendarContract.Attendees.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarAlerts.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarCache.html
-http://developer.android.com/reference/android/provider/CalendarContract.CalendarEntity.html
-http://developer.android.com/reference/android/provider/CalendarContract.Calendars.html
-http://developer.android.com/reference/android/provider/CalendarContract.Colors.html
-http://developer.android.com/reference/android/provider/CalendarContract.EventDays.html
-http://developer.android.com/reference/android/provider/CalendarContract.Events.html
-http://developer.android.com/reference/android/provider/CalendarContract.EventsEntity.html
-http://developer.android.com/reference/android/provider/CalendarContract.ExtendedProperties.html
-http://developer.android.com/reference/android/provider/CalendarContract.Instances.html
-http://developer.android.com/reference/android/provider/CalendarContract.Reminders.html
-http://developer.android.com/reference/android/provider/CalendarContract.SyncState.html
-http://developer.android.com/reference/android/provider/CallLog.html
-http://developer.android.com/reference/android/provider/CallLog.Calls.html
-http://developer.android.com/reference/android/provider/Contacts.html
-http://developer.android.com/reference/android/provider/Contacts.ContactMethods.html
-http://developer.android.com/reference/android/provider/Contacts.Extensions.html
-http://developer.android.com/reference/android/provider/Contacts.GroupMembership.html
-http://developer.android.com/reference/android/provider/Contacts.Groups.html
-http://developer.android.com/reference/android/provider/Contacts.Intents.html
-http://developer.android.com/reference/android/provider/Contacts.Intents.Insert.html
-http://developer.android.com/reference/android/provider/Contacts.Intents.UI.html
-http://developer.android.com/reference/android/provider/Contacts.Organizations.html
-http://developer.android.com/reference/android/provider/Contacts.People.html
-http://developer.android.com/reference/android/provider/Contacts.People.ContactMethods.html
-http://developer.android.com/reference/android/provider/Contacts.People.Extensions.html
-http://developer.android.com/reference/android/provider/Contacts.People.Phones.html
-http://developer.android.com/reference/android/provider/Contacts.Phones.html
-http://developer.android.com/reference/android/provider/Contacts.Photos.html
-http://developer.android.com/reference/android/provider/Contacts.Settings.html
-http://developer.android.com/reference/android/provider/ContactsContract.AggregationExceptions.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Event.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Identity.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Im.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Nickname.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Note.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Organization.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Relation.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.SipAddress.html
-http://developer.android.com/reference/android/provider/ContactsContract.CommonDataKinds.Website.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.AggregationSuggestions.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.Data.html
-http://developer.android.com/reference/android/provider/ContactsContract.Contacts.StreamItems.html
-http://developer.android.com/reference/android/provider/ContactsContract.DataUsageFeedback.html
-http://developer.android.com/reference/android/provider/ContactsContract.Directory.html
-http://developer.android.com/reference/android/provider/ContactsContract.Intents.html
-http://developer.android.com/reference/android/provider/ContactsContract.PhoneLookup.html
-http://developer.android.com/reference/android/provider/ContactsContract.Presence.html
-http://developer.android.com/reference/android/provider/ContactsContract.ProfileSyncState.html
-http://developer.android.com/reference/android/provider/ContactsContract.QuickContact.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Data.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.Entity.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.StreamItems.html
-http://developer.android.com/reference/android/provider/ContactsContract.RawContactsEntity.html
-http://developer.android.com/reference/android/provider/ContactsContract.StatusUpdates.html
-http://developer.android.com/reference/android/provider/LiveFolders.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Albums.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Artists.Albums.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Genres.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Genres.Members.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Media.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.html
-http://developer.android.com/reference/android/provider/MediaStore.Audio.Playlists.Members.html
-http://developer.android.com/reference/android/provider/MediaStore.Files.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.html
-http://developer.android.com/reference/android/provider/MediaStore.Images.Thumbnails.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.Media.html
-http://developer.android.com/reference/android/provider/MediaStore.Video.Thumbnails.html
-http://developer.android.com/reference/android/provider/SearchRecentSuggestions.html
-http://developer.android.com/reference/android/provider/Settings.html
-http://developer.android.com/reference/android/provider/Settings.Global.html
-http://developer.android.com/reference/android/provider/Settings.NameValueTable.html
-http://developer.android.com/reference/android/provider/Settings.Secure.html
-http://developer.android.com/reference/android/provider/Settings.System.html
-http://developer.android.com/reference/android/provider/SyncStateContract.html
-http://developer.android.com/reference/android/provider/SyncStateContract.Constants.html
-http://developer.android.com/reference/android/provider/SyncStateContract.Helpers.html
-http://developer.android.com/reference/android/provider/UserDictionary.html
-http://developer.android.com/reference/android/provider/UserDictionary.Words.html
-http://developer.android.com/reference/android/provider/VoicemailContract.html
-http://developer.android.com/reference/android/provider/VoicemailContract.Status.html
-http://developer.android.com/reference/android/provider/VoicemailContract.Voicemails.html
-http://developer.android.com/reference/android/provider/Settings.SettingNotFoundException.html
-http://developer.android.com/reference/android/support/v4/view/AccessibilityDelegateCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewCompat.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.Renderer.html
-http://developer.android.com/reference/android/opengl/Matrix.html
-http://developer.android.com/shareables/training/EffectiveNavigation.zip
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursorDriver.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteTransactionListener.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteClosable.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteCursor.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteProgram.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteQuery.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteQueryBuilder.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteStatement.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteAbortException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteAccessPermException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteBindOrColumnIndexOutOfRangeException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteBlobTooBigException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteCantOpenDatabaseException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteConstraintException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabaseCorruptException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatabaseLockedException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDatatypeMismatchException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDiskIOException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteDoneException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteFullException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteMisuseException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteOutOfMemoryException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteReadOnlyDatabaseException.html
-http://developer.android.com/reference/android/database/sqlite/SQLiteTableLockedException.html
-http://developer.android.com/reference/android/text/GetChars.html
-http://developer.android.com/reference/android/text/Html.ImageGetter.html
-http://developer.android.com/reference/android/text/Html.TagHandler.html
-http://developer.android.com/reference/android/text/NoCopySpan.html
-http://developer.android.com/reference/android/text/ParcelableSpan.html
-http://developer.android.com/reference/android/text/Spannable.html
-http://developer.android.com/reference/android/text/Spanned.html
-http://developer.android.com/reference/android/text/SpanWatcher.html
-http://developer.android.com/reference/android/text/TextUtils.EllipsizeCallback.html
-http://developer.android.com/reference/android/text/TextUtils.StringSplitter.html
-http://developer.android.com/reference/android/text/AlteredCharSequence.html
-http://developer.android.com/reference/android/text/AndroidCharacter.html
-http://developer.android.com/reference/android/text/Annotation.html
-http://developer.android.com/reference/android/text/AutoText.html
-http://developer.android.com/reference/android/text/BoringLayout.html
-http://developer.android.com/reference/android/text/BoringLayout.Metrics.html
-http://developer.android.com/reference/android/text/DynamicLayout.html
-http://developer.android.com/reference/android/text/InputFilter.AllCaps.html
-http://developer.android.com/reference/android/text/InputFilter.LengthFilter.html
-http://developer.android.com/reference/android/text/Layout.Directions.html
-http://developer.android.com/reference/android/text/LoginFilter.html
-http://developer.android.com/reference/android/text/LoginFilter.PasswordFilterGMail.html
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGeneric.html
-http://developer.android.com/reference/android/text/LoginFilter.UsernameFilterGMail.html
-http://developer.android.com/reference/android/text/NoCopySpan.Concrete.html
-http://developer.android.com/reference/android/text/SpannableString.html
-http://developer.android.com/reference/android/text/SpannableStringBuilder.html
-http://developer.android.com/reference/android/text/SpannedString.html
-http://developer.android.com/reference/android/text/StaticLayout.html
-http://developer.android.com/reference/android/text/TextUtils.SimpleStringSplitter.html
-http://developer.android.com/reference/android/text/Layout.Alignment.html
-http://developer.android.com/reference/java/io/DataInput.html
-http://developer.android.com/reference/java/io/DataOutput.html
-http://developer.android.com/reference/java/io/Externalizable.html
-http://developer.android.com/reference/java/io/FileFilter.html
-http://developer.android.com/reference/java/io/FilenameFilter.html
-http://developer.android.com/reference/java/io/ObjectInput.html
-http://developer.android.com/reference/java/io/ObjectInputValidation.html
-http://developer.android.com/reference/java/io/ObjectOutput.html
-http://developer.android.com/reference/java/io/ObjectStreamConstants.html
-http://developer.android.com/reference/java/io/BufferedInputStream.html
-http://developer.android.com/reference/java/io/BufferedOutputStream.html
-http://developer.android.com/reference/java/io/BufferedReader.html
-http://developer.android.com/reference/java/io/BufferedWriter.html
-http://developer.android.com/reference/java/io/ByteArrayInputStream.html
-http://developer.android.com/reference/java/io/ByteArrayOutputStream.html
-http://developer.android.com/reference/java/io/CharArrayReader.html
-http://developer.android.com/reference/java/io/CharArrayWriter.html
-http://developer.android.com/reference/java/io/Console.html
-http://developer.android.com/reference/java/io/DataInputStream.html
-http://developer.android.com/reference/java/io/DataOutputStream.html
-http://developer.android.com/reference/java/io/FilePermission.html
-http://developer.android.com/reference/java/io/FileReader.html
-http://developer.android.com/reference/java/io/FileWriter.html
-http://developer.android.com/reference/java/io/FilterInputStream.html
-http://developer.android.com/reference/java/io/FilterOutputStream.html
-http://developer.android.com/reference/java/io/FilterReader.html
-http://developer.android.com/reference/java/io/FilterWriter.html
-http://developer.android.com/reference/java/io/InputStreamReader.html
-http://developer.android.com/reference/java/io/LineNumberInputStream.html
-http://developer.android.com/reference/java/io/LineNumberReader.html
-http://developer.android.com/reference/java/io/ObjectInputStream.html
-http://developer.android.com/reference/java/io/ObjectInputStream.GetField.html
-http://developer.android.com/reference/java/io/ObjectOutputStream.html
-http://developer.android.com/reference/java/io/ObjectOutputStream.PutField.html
-http://developer.android.com/reference/java/io/ObjectStreamClass.html
-http://developer.android.com/reference/java/io/ObjectStreamField.html
-http://developer.android.com/reference/java/io/OutputStreamWriter.html
-http://developer.android.com/reference/java/io/PipedInputStream.html
-http://developer.android.com/reference/java/io/PipedOutputStream.html
-http://developer.android.com/reference/java/io/PipedReader.html
-http://developer.android.com/reference/java/io/PipedWriter.html
-http://developer.android.com/reference/java/io/PushbackInputStream.html
-http://developer.android.com/reference/java/io/PushbackReader.html
-http://developer.android.com/reference/java/io/RandomAccessFile.html
-http://developer.android.com/reference/java/io/Reader.html
-http://developer.android.com/reference/java/io/SequenceInputStream.html
-http://developer.android.com/reference/java/io/SerializablePermission.html
-http://developer.android.com/reference/java/io/StreamTokenizer.html
-http://developer.android.com/reference/java/io/StringBufferInputStream.html
-http://developer.android.com/reference/java/io/StringReader.html
-http://developer.android.com/reference/java/io/StringWriter.html
-http://developer.android.com/reference/java/io/Writer.html
-http://developer.android.com/reference/java/io/CharConversionException.html
-http://developer.android.com/reference/java/io/EOFException.html
-http://developer.android.com/reference/java/io/InterruptedIOException.html
-http://developer.android.com/reference/java/io/InvalidClassException.html
-http://developer.android.com/reference/java/io/InvalidObjectException.html
-http://developer.android.com/reference/java/io/NotActiveException.html
-http://developer.android.com/reference/java/io/NotSerializableException.html
-http://developer.android.com/reference/java/io/ObjectStreamException.html
-http://developer.android.com/reference/java/io/OptionalDataException.html
-http://developer.android.com/reference/java/io/StreamCorruptedException.html
-http://developer.android.com/reference/java/io/SyncFailedException.html
-http://developer.android.com/reference/java/io/UTFDataFormatException.html
-http://developer.android.com/reference/java/io/WriteAbortedException.html
-http://developer.android.com/reference/java/io/IOError.html
-http://developer.android.com/reference/java/nio/CharBuffer.html
-http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.html
-http://developer.android.com/reference/android/database/DataSetObserver.html
-http://developer.android.com/reference/android/preference/Preference.html
-http://developer.android.com/reference/android/graphics/drawable/Animatable.html
-http://developer.android.com/reference/android/graphics/drawable/AnimationDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/BitmapDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ClipDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ColorDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/Drawable.ConstantState.html
-http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.html
-http://developer.android.com/reference/android/graphics/drawable/DrawableContainer.DrawableContainerState.html
-http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/InsetDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/LayerDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/NinePatchDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/PaintDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/PictureDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/RotateDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ScaleDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/ShapeDrawable.ShaderFactory.html
-http://developer.android.com/reference/android/graphics/drawable/StateListDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/TransitionDrawable.html
-http://developer.android.com/reference/android/graphics/drawable/GradientDrawable.Orientation.html
-http://developer.android.com/reference/android/appwidget/AppWidgetHostView.html
-http://developer.android.com/reference/android/inputmethodservice/ExtractEditText.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.html
-http://developer.android.com/reference/android/inputmethodservice/Keyboard.html
-http://developer.android.com/reference/android/support/v4/view/PagerTabStrip.html
-http://developer.android.com/reference/android/support/v4/view/PagerTitleStrip.html
-http://developer.android.com/reference/android/renderscript/RSSurfaceView.html
-http://developer.android.com/guide/topics/renderscript/index.html
-http://developer.android.com/reference/android/renderscript/RSTextureView.html
-http://developer.android.com/reference/android/appwidget/AppWidgetHost.html
-http://developer.android.com/reference/javax/xml/XMLConstants.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.PageTransformer.html
-http://developer.android.com/reference/android/support/v4/view/PagerAdapter.html
-http://developer.android.com/reference/android/support/v4/view/GestureDetectorCompat.html
-http://developer.android.com/reference/android/support/v4/util/AtomicFile.html
-http://developer.android.com/reference/android/support/v4/content/IntentCompat.html
-http://developer.android.com/reference/android/support/v4/util/LruCache.html
-http://developer.android.com/reference/android/support/v4/net/ConnectivityManagerCompat.html
-http://developer.android.com/reference/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewGroupCompat.html
-http://developer.android.com/reference/android/support/v4/view/MenuCompat.html
-http://developer.android.com/resources/samples/Support4Demos/index.html
-http://developer.android.com/resources/samples/Support13Demos/index.html
-http://developer.android.com/reference/org/apache/http/ConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/HttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/HttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/HttpResponse.html
-http://developer.android.com/reference/android/test/suitebuilder/TestMethod.html
-http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.html
-http://developer.android.com/reference/android/test/suitebuilder/TestSuiteBuilder.FailedToCreateTests.html
-http://developer.android.com/reference/android/graphics/SurfaceTexture.OnFrameAvailableListener.html
-http://developer.android.com/reference/android/graphics/AvoidXfermode.html
-http://developer.android.com/reference/android/graphics/BitmapRegionDecoder.html
-http://developer.android.com/reference/android/graphics/BitmapShader.html
-http://developer.android.com/reference/android/graphics/BlurMaskFilter.html
-http://developer.android.com/reference/android/graphics/Camera.html
-http://developer.android.com/reference/android/graphics/Color.html
-http://developer.android.com/reference/android/graphics/ColorMatrix.html
-http://developer.android.com/reference/android/graphics/ColorMatrixColorFilter.html
-http://developer.android.com/reference/android/graphics/ComposePathEffect.html
-http://developer.android.com/reference/android/graphics/ComposeShader.html
-http://developer.android.com/reference/android/graphics/CornerPathEffect.html
-http://developer.android.com/reference/android/graphics/DashPathEffect.html
-http://developer.android.com/reference/android/graphics/DiscretePathEffect.html
-http://developer.android.com/reference/android/graphics/DrawFilter.html
-http://developer.android.com/reference/android/graphics/EmbossMaskFilter.html
-http://developer.android.com/reference/android/graphics/ImageFormat.html
-http://developer.android.com/reference/android/graphics/Interpolator.html
-http://developer.android.com/reference/android/graphics/LayerRasterizer.html
-http://developer.android.com/reference/android/graphics/LightingColorFilter.html
-http://developer.android.com/reference/android/graphics/LinearGradient.html
-http://developer.android.com/reference/android/graphics/MaskFilter.html
-http://developer.android.com/reference/android/graphics/Movie.html
-http://developer.android.com/reference/android/graphics/Paint.FontMetrics.html
-http://developer.android.com/reference/android/graphics/Paint.FontMetricsInt.html
-http://developer.android.com/reference/android/graphics/PaintFlagsDrawFilter.html
-http://developer.android.com/reference/android/graphics/Path.html
-http://developer.android.com/reference/android/graphics/PathDashPathEffect.html
-http://developer.android.com/reference/android/graphics/PathEffect.html
-http://developer.android.com/reference/android/graphics/PathMeasure.html
-http://developer.android.com/reference/android/graphics/Picture.html
-http://developer.android.com/reference/android/graphics/PixelFormat.html
-http://developer.android.com/reference/android/graphics/PixelXorXfermode.html
-http://developer.android.com/reference/android/graphics/PointF.html
-http://developer.android.com/reference/android/graphics/PorterDuff.html
-http://developer.android.com/reference/android/graphics/PorterDuffColorFilter.html
-http://developer.android.com/reference/android/graphics/PorterDuffXfermode.html
-http://developer.android.com/reference/android/graphics/RadialGradient.html
-http://developer.android.com/reference/android/graphics/Rasterizer.html
-http://developer.android.com/reference/android/graphics/RectF.html
-http://developer.android.com/reference/android/graphics/RegionIterator.html
-http://developer.android.com/reference/android/graphics/Shader.html
-http://developer.android.com/reference/android/graphics/SumPathEffect.html
-http://developer.android.com/reference/android/graphics/SurfaceTexture.html
-http://developer.android.com/reference/android/graphics/SweepGradient.html
-http://developer.android.com/reference/android/graphics/Xfermode.html
-http://developer.android.com/reference/android/graphics/YuvImage.html
-http://developer.android.com/reference/android/graphics/AvoidXfermode.Mode.html
-http://developer.android.com/reference/android/graphics/Bitmap.CompressFormat.html
-http://developer.android.com/reference/android/graphics/Bitmap.Config.html
-http://developer.android.com/reference/android/graphics/BlurMaskFilter.Blur.html
-http://developer.android.com/reference/android/graphics/Canvas.EdgeType.html
-http://developer.android.com/reference/android/graphics/Canvas.VertexMode.html
-http://developer.android.com/reference/android/graphics/Interpolator.Result.html
-http://developer.android.com/reference/android/graphics/Matrix.ScaleToFit.html
-http://developer.android.com/reference/android/graphics/Paint.Align.html
-http://developer.android.com/reference/android/graphics/Paint.Cap.html
-http://developer.android.com/reference/android/graphics/Paint.Join.html
-http://developer.android.com/reference/android/graphics/Paint.Style.html
-http://developer.android.com/reference/android/graphics/Path.Direction.html
-http://developer.android.com/reference/android/graphics/Path.FillType.html
-http://developer.android.com/reference/android/graphics/PathDashPathEffect.Style.html
-http://developer.android.com/reference/android/graphics/Region.Op.html
-http://developer.android.com/reference/android/graphics/Shader.TileMode.html
-http://developer.android.com/reference/android/graphics/SurfaceTexture.OutOfResourcesException.html
-http://developer.android.com/reference/java/nio/channels/ReadableByteChannel.html
-http://developer.android.com/reference/java/util/regex/MatchResult.html
-http://developer.android.com/reference/java/util/regex/Matcher.html
-http://developer.android.com/reference/java/security/Permission.html
-http://developer.android.com/reference/java/security/PermissionCollection.html
-http://developer.android.com/reference/java/security/Guard.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpec.html
-http://developer.android.com/reference/org/apache/http/cookie/Cookie.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieOrigin.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLConfigChooser.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLContextFactory.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.EGLWindowSurfaceFactory.html
-http://developer.android.com/reference/android/opengl/GLSurfaceView.GLWrapper.html
-http://developer.android.com/reference/android/opengl/EGL14.html
-http://developer.android.com/reference/android/opengl/EGLConfig.html
-http://developer.android.com/reference/android/opengl/EGLContext.html
-http://developer.android.com/reference/android/opengl/EGLDisplay.html
-http://developer.android.com/reference/android/opengl/EGLObjectHandle.html
-http://developer.android.com/reference/android/opengl/EGLSurface.html
-http://developer.android.com/reference/android/opengl/ETC1.html
-http://developer.android.com/reference/android/opengl/ETC1Util.html
-http://developer.android.com/reference/android/opengl/ETC1Util.ETC1Texture.html
-http://developer.android.com/reference/android/opengl/GLDebugHelper.html
-http://developer.android.com/reference/android/opengl/GLES10.html
-http://developer.android.com/reference/android/opengl/GLES10Ext.html
-http://developer.android.com/reference/android/opengl/GLES11.html
-http://developer.android.com/reference/android/opengl/GLES11Ext.html
-http://developer.android.com/reference/android/opengl/GLES20.html
-http://developer.android.com/reference/android/opengl/GLU.html
-http://developer.android.com/reference/android/opengl/GLUtils.html
-http://developer.android.com/reference/android/opengl/Visibility.html
-http://developer.android.com/reference/android/opengl/GLException.html
-http://developer.android.com/reference/java/security/cert/Certificate.html
-http://developer.android.com/reference/org/apache/http/impl/entity/EntityDeserializer.html
-http://developer.android.com/reference/org/apache/http/impl/entity/EntitySerializer.html
-http://developer.android.com/reference/org/apache/http/impl/entity/LaxContentLengthStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/entity/StrictContentLengthStrategy.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractInterruptibleChannel.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelectionKey.html
-http://developer.android.com/reference/java/nio/channels/spi/AbstractSelector.html
-http://developer.android.com/reference/java/nio/channels/spi/SelectorProvider.html
-http://developer.android.com/reference/java/nio/channels/DatagramChannel.html
-http://developer.android.com/reference/java/nio/channels/Pipe.html
-http://developer.android.com/reference/java/nio/channels/ServerSocketChannel.html
-http://developer.android.com/reference/android/database/CrossProcessCursor.html
-http://developer.android.com/reference/android/database/AbstractCursor.html
-http://developer.android.com/reference/android/database/AbstractCursor.SelfContentObserver.html
-http://developer.android.com/reference/android/database/AbstractWindowedCursor.html
-http://developer.android.com/reference/android/database/CharArrayBuffer.html
-http://developer.android.com/reference/android/database/ContentObservable.html
-http://developer.android.com/reference/android/database/ContentObserver.html
-http://developer.android.com/reference/android/database/CrossProcessCursorWrapper.html
-http://developer.android.com/reference/android/database/CursorJoiner.html
-http://developer.android.com/reference/android/database/CursorWindow.html
-http://developer.android.com/reference/android/database/CursorWrapper.html
-http://developer.android.com/reference/android/database/DatabaseUtils.html
-http://developer.android.com/reference/android/database/DatabaseUtils.InsertHelper.html
-http://developer.android.com/reference/android/database/DataSetObservable.html
-http://developer.android.com/reference/android/database/DefaultDatabaseErrorHandler.html
-http://developer.android.com/reference/android/database/MatrixCursor.RowBuilder.html
-http://developer.android.com/reference/android/database/MergeCursor.html
-http://developer.android.com/reference/android/database/Observable.html
-http://developer.android.com/reference/android/database/CursorJoiner.Result.html
-http://developer.android.com/reference/android/database/CursorIndexOutOfBoundsException.html
-http://developer.android.com/reference/android/database/SQLException.html
-http://developer.android.com/reference/android/database/StaleDataException.html
-http://developer.android.com/reference/android/renderscript/ScriptC.html
-http://developer.android.com/reference/android/renderscript/Script.FieldBase.html
-http://developer.android.com/reference/renderscript/rs__core_8rsh.html
-http://developer.android.com/reference/android/renderscript/Allocation.html
-http://developer.android.com/reference/android/renderscript/Element.html
-http://developer.android.com/reference/android/renderscript/Type.html
-http://developer.android.com/reference/android/net/wifi/ScanResult.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.AuthAlgorithm.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.GroupCipher.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.KeyMgmt.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.PairwiseCipher.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Protocol.html
-http://developer.android.com/reference/android/net/wifi/WifiConfiguration.Status.html
-http://developer.android.com/reference/android/net/wifi/WifiInfo.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.MulticastLock.html
-http://developer.android.com/reference/android/net/wifi/WifiManager.WifiLock.html
-http://developer.android.com/reference/android/net/wifi/WpsInfo.html
-http://developer.android.com/reference/android/net/wifi/SupplicantState.html
-http://developer.android.com/reference/android/net/NetworkInfo.html
-http://developer.android.com/reference/android/net/DhcpInfo.html
-http://developer.android.com/reference/org/xml/sax/AttributeList.html
-http://developer.android.com/reference/org/xml/sax/Attributes.html
-http://developer.android.com/reference/org/xml/sax/ContentHandler.html
-http://developer.android.com/reference/org/xml/sax/DocumentHandler.html
-http://developer.android.com/reference/org/xml/sax/DTDHandler.html
-http://developer.android.com/reference/org/xml/sax/EntityResolver.html
-http://developer.android.com/reference/org/xml/sax/ErrorHandler.html
-http://developer.android.com/reference/org/xml/sax/Locator.html
-http://developer.android.com/reference/org/xml/sax/Parser.html
-http://developer.android.com/reference/org/xml/sax/XMLFilter.html
-http://developer.android.com/reference/org/xml/sax/XMLReader.html
-http://developer.android.com/reference/org/xml/sax/HandlerBase.html
-http://developer.android.com/reference/org/xml/sax/InputSource.html
-http://developer.android.com/reference/org/xml/sax/SAXException.html
-http://developer.android.com/reference/org/xml/sax/SAXNotRecognizedException.html
-http://developer.android.com/reference/org/xml/sax/SAXNotSupportedException.html
-http://developer.android.com/reference/org/xml/sax/SAXParseException.html
-http://developer.android.com/reference/org/xml/sax/ext/Attributes2.html
-http://developer.android.com/reference/org/xml/sax/ext/Locator2.html
-http://developer.android.com/reference/org/xml/sax/ext/EntityResolver2.html
-http://developer.android.com/reference/org/xml/sax/ext/DeclHandler.html
-http://developer.android.com/reference/org/xml/sax/ext/LexicalHandler.html
-http://developer.android.com/reference/org/xml/sax/helpers/DefaultHandler.html
-http://developer.android.com/reference/org/apache/http/ProtocolException.html
-http://developer.android.com/reference/java/security/acl/AclEntry.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/ArcShape.html
-http://developer.android.com/reference/java/text/AttributedCharacterIterator.html
-http://developer.android.com/reference/java/util/jar/Attributes.html
-http://developer.android.com/reference/java/security/AuthProvider.html
-http://developer.android.com/reference/java/text/CharacterIterator.html
-http://developer.android.com/reference/org/apache/http/params/BasicHttpParams.html
-http://developer.android.com/reference/java/text/BreakIterator.html
-http://developer.android.com/reference/org/apache/http/entity/ByteArrayEntity.html
-http://developer.android.com/reference/java/security/cert/CRLSelector.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderResult.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilder.html
-http://developer.android.com/reference/java/security/cert/CertPathParameters.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorResult.html
-http://developer.android.com/reference/java/security/cert/CertSelector.html
-http://developer.android.com/reference/java/security/cert/CertStoreParameters.html
-http://developer.android.com/reference/java/text/ChoiceFormat.html
-http://developer.android.com/reference/java/text/Collator.html
-http://developer.android.com/reference/java/security/cert/CollectionCertStoreParameters.html
-http://developer.android.com/reference/java/text/DateFormat.html
-http://developer.android.com/reference/java/text/DateFormatSymbols.html
-http://developer.android.com/reference/java/text/DecimalFormat.html
-http://developer.android.com/reference/java/text/DecimalFormatSymbols.html
-http://developer.android.com/reference/org/apache/http/entity/FileEntity.html
-http://developer.android.com/reference/java/text/Format.html
-http://developer.android.com/reference/java/net/HttpCookie.html
-http://developer.android.com/reference/org/apache/http/HttpHost.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoute.html
-http://developer.android.com/reference/org/apache/http/HttpVersion.html
-http://developer.android.com/reference/java/util/jar/JarEntry.html
-http://developer.android.com/reference/java/security/cert/LDAPCertStoreParameters.html
-http://developer.android.com/reference/android/support/v4/util/LongSparseArray.html
-http://developer.android.com/reference/java/util/jar/Manifest.html
-http://developer.android.com/reference/java/text/MessageFormat.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/OvalShape.html
-http://developer.android.com/reference/java/security/cert/PKIXBuilderParameters.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathBuilderResult.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathChecker.html
-http://developer.android.com/reference/java/security/cert/PKIXCertPathValidatorResult.html
-http://developer.android.com/reference/java/security/cert/PKIXParameters.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/PathShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/RectShape.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/RoundRectShape.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteTracker.html
-http://developer.android.com/reference/java/text/RuleBasedCollator.html
-http://developer.android.com/reference/android/graphics/drawable/shapes/Shape.html
-http://developer.android.com/reference/java/text/SimpleDateFormat.html
-http://developer.android.com/reference/android/net/sip/SipProfile.html
-http://developer.android.com/reference/java/text/StringCharacterIterator.html
-http://developer.android.com/reference/org/apache/http/entity/StringEntity.html
-http://developer.android.com/reference/java/sql/Time.html
-http://developer.android.com/reference/java/sql/Timestamp.html
-http://developer.android.com/reference/org/apache/http/client/entity/UrlEncodedFormEntity.html
-http://developer.android.com/reference/android/webkit/WebBackForwardList.html
-http://developer.android.com/reference/android/webkit/WebHistoryItem.html
-http://developer.android.com/reference/java/security/cert/X509CRLSelector.html
-http://developer.android.com/reference/java/security/cert/X509CertSelector.html
-http://developer.android.com/reference/java/util/zip/ZipEntry.html
-http://developer.android.com/reference/junit/framework/TestResult.html
-http://developer.android.com/reference/junit/framework/Test.html
-http://developer.android.com/reference/java/nio/channels/ByteChannel.html
-http://developer.android.com/reference/java/nio/channels/Channel.html
-http://developer.android.com/reference/java/nio/channels/GatheringByteChannel.html
-http://developer.android.com/reference/java/nio/channels/InterruptibleChannel.html
-http://developer.android.com/reference/java/nio/channels/ScatteringByteChannel.html
-http://developer.android.com/reference/java/nio/channels/WritableByteChannel.html
-http://developer.android.com/reference/java/nio/channels/Channels.html
-http://developer.android.com/reference/java/nio/channels/FileChannel.MapMode.html
-http://developer.android.com/reference/java/nio/channels/FileLock.html
-http://developer.android.com/reference/java/nio/channels/Pipe.SinkChannel.html
-http://developer.android.com/reference/java/nio/channels/Pipe.SourceChannel.html
-http://developer.android.com/reference/java/nio/channels/SelectableChannel.html
-http://developer.android.com/reference/java/nio/channels/SelectionKey.html
-http://developer.android.com/reference/java/nio/channels/AsynchronousCloseException.html
-http://developer.android.com/reference/java/nio/channels/ClosedByInterruptException.html
-http://developer.android.com/reference/java/nio/channels/ClosedChannelException.html
-http://developer.android.com/reference/java/nio/channels/FileLockInterruptionException.html
-http://developer.android.com/reference/java/nio/channels/IllegalSelectorException.html
-http://developer.android.com/reference/java/nio/channels/UnresolvedAddressException.html
-http://developer.android.com/reference/java/nio/channels/UnsupportedAddressTypeException.html
-http://developer.android.com/reference/org/apache/http/cookie/ClientCookie.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpecFactory.html
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie.html
-http://developer.android.com/reference/org/apache/http/cookie/SetCookie2.html
-http://developer.android.com/reference/org/apache/http/cookie/SM.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieIdentityComparator.html
-http://developer.android.com/reference/org/apache/http/cookie/CookiePathComparator.html
-http://developer.android.com/reference/org/apache/http/cookie/CookieSpecRegistry.html
-http://developer.android.com/reference/org/apache/http/cookie/MalformedCookieException.html
-http://developer.android.com/reference/java/util/zip/CheckedInputStream.html
-http://developer.android.com/reference/java/util/zip/DeflaterInputStream.html
-http://developer.android.com/reference/java/security/DigestInputStream.html
-http://developer.android.com/reference/java/util/zip/InflaterInputStream.html
-http://developer.android.com/reference/java/util/zip/GZIPInputStream.html
-http://developer.android.com/reference/java/util/jar/JarInputStream.html
-http://developer.android.com/reference/java/util/zip/ZipInputStream.html
-http://developer.android.com/reference/android/support/v4/util/SparseArrayCompat.html
-http://developer.android.com/reference/java/util/regex/PatternSyntaxException.html
-http://developer.android.com/reference/org/xmlpull/v1/sax2/Driver.html
-http://developer.android.com/reference/org/xml/sax/ext/Locator2Impl.html
-http://developer.android.com/reference/org/xml/sax/helpers/LocatorImpl.html
-http://developer.android.com/sdk/tools-notes.html
-http://developer.android.com/resources/samples/TicTacToeLib/AndroidManifest.html
-http://developer.android.com/resources/samples/TicTacToeMain/AndroidManifest.html
-http://developer.android.com/reference/android/text/method/CharacterPickerDialog.html
-http://developer.android.com/guide/topics/fundamentals/services.html
-http://developer.android.com/reference/org/apache/http/params/CoreConnectionPNames.html
-http://developer.android.com/reference/org/apache/http/params/CoreProtocolPNames.html
-http://developer.android.com/reference/org/apache/http/params/AbstractHttpParams.html
-http://developer.android.com/reference/org/apache/http/params/DefaultedHttpParams.html
-http://developer.android.com/reference/org/apache/http/params/HttpAbstractParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpConnectionParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpConnectionParams.html
-http://developer.android.com/reference/org/apache/http/params/HttpProtocolParamBean.html
-http://developer.android.com/reference/org/apache/http/params/HttpProtocolParams.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.Channel.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ActionListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.PeerListListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pConfig.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDevice.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ConnectionInfoListener.html
-http://developer.android.com/reference/java/lang/ref/WeakReference.html
-http://developer.android.com/reference/android/support/v13/app/FragmentStatePagerAdapter.html
-http://developer.android.com/reference/org/apache/http/entity/AbstractHttpEntity.html
-http://developer.android.com/reference/org/apache/http/NameValuePair.html
-http://developer.android.com/reference/org/apache/http/HttpEntity.html
-http://developer.android.com/reference/java/security/Principal.html
-http://developer.android.com/guide/practices/performance.html
-http://developer.android.com/guide/practices/seamlessness.html
-http://developer.android.com/tools/help/ddms.html
-http://developer.android.com/reference/org/xml/sax/helpers/ParserAdapter.html
-http://developer.android.com/reference/org/apache/http/StatusLine.html
-http://developer.android.com/reference/org/apache/http/ReasonPhraseCatalog.html
-http://developer.android.com/reference/android/hardware/Camera.AutoFocusCallback.html
-http://developer.android.com/reference/android/hardware/Camera.AutoFocusMoveCallback.html
-http://developer.android.com/reference/android/hardware/Camera.ErrorCallback.html
-http://developer.android.com/reference/android/hardware/Camera.FaceDetectionListener.html
-http://developer.android.com/reference/android/hardware/Camera.OnZoomChangeListener.html
-http://developer.android.com/reference/android/hardware/Camera.PictureCallback.html
-http://developer.android.com/reference/android/hardware/Camera.PreviewCallback.html
-http://developer.android.com/reference/android/hardware/Camera.ShutterCallback.html
-http://developer.android.com/reference/android/hardware/Camera.html
-http://developer.android.com/reference/android/hardware/Camera.Area.html
-http://developer.android.com/reference/android/hardware/Camera.CameraInfo.html
-http://developer.android.com/reference/android/hardware/Camera.Face.html
-http://developer.android.com/reference/android/hardware/Camera.Parameters.html
-http://developer.android.com/reference/android/hardware/Camera.Size.html
-http://developer.android.com/reference/android/hardware/GeomagneticField.html
-http://developer.android.com/reference/org/apache/http/client/AuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/client/CredentialsProvider.html
-http://developer.android.com/reference/org/apache/http/client/HttpClient.html
-http://developer.android.com/reference/org/apache/http/client/HttpRequestRetryHandler.html
-http://developer.android.com/reference/org/apache/http/client/RedirectHandler.html
-http://developer.android.com/reference/org/apache/http/client/RequestDirector.html
-http://developer.android.com/reference/org/apache/http/client/ResponseHandler.html
-http://developer.android.com/reference/org/apache/http/client/UserTokenHandler.html
-http://developer.android.com/reference/org/apache/http/client/CircularRedirectException.html
-http://developer.android.com/reference/org/apache/http/client/ClientProtocolException.html
-http://developer.android.com/reference/org/apache/http/client/HttpResponseException.html
-http://developer.android.com/reference/org/apache/http/client/NonRepeatableRequestException.html
-http://developer.android.com/reference/org/apache/http/client/RedirectException.html
-http://developer.android.com/reference/java/sql/Date.html
-http://developer.android.com/reference/java/util/zip/Checksum.html
-http://developer.android.com/reference/java/util/zip/Adler32.html
-http://developer.android.com/reference/java/util/zip/CheckedOutputStream.html
-http://developer.android.com/reference/java/util/zip/CRC32.html
-http://developer.android.com/reference/java/util/zip/Deflater.html
-http://developer.android.com/reference/java/util/zip/DeflaterOutputStream.html
-http://developer.android.com/reference/java/util/zip/GZIPOutputStream.html
-http://developer.android.com/reference/java/util/zip/Inflater.html
-http://developer.android.com/reference/java/util/zip/InflaterOutputStream.html
-http://developer.android.com/reference/java/util/zip/ZipFile.html
-http://developer.android.com/reference/java/util/zip/ZipOutputStream.html
-http://developer.android.com/reference/java/util/zip/DataFormatException.html
-http://developer.android.com/reference/java/util/zip/ZipException.html
-http://developer.android.com/reference/java/util/zip/ZipError.html
-http://developer.android.com/reference/org/xml/sax/ext/Attributes2Impl.html
-http://developer.android.com/reference/org/xml/sax/ext/DefaultHandler2.html
-http://developer.android.com/reference/android/text/util/Linkify.MatchFilter.html
-http://developer.android.com/reference/android/text/util/Linkify.TransformFilter.html
-http://developer.android.com/reference/android/text/util/Rfc822Token.html
-http://developer.android.com/reference/android/text/util/Rfc822Tokenizer.html
-http://developer.android.com/reference/java/nio/Buffer.html
-http://developer.android.com/reference/java/nio/FloatBuffer.html
-http://developer.android.com/reference/java/nio/IntBuffer.html
-http://developer.android.com/reference/org/apache/http/util/CharArrayBuffer.html
-http://developer.android.com/reference/android/bluetooth/BluetoothProfile.html
-http://developer.android.com/reference/android/bluetooth/BluetoothProfile.ServiceListener.html
-http://developer.android.com/reference/android/bluetooth/BluetoothA2dp.html
-http://developer.android.com/reference/android/bluetooth/BluetoothAdapter.html
-http://developer.android.com/reference/android/bluetooth/BluetoothAssignedNumbers.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.Device.Major.html
-http://developer.android.com/reference/android/bluetooth/BluetoothClass.Service.html
-http://developer.android.com/reference/android/bluetooth/BluetoothDevice.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHeadset.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHealth.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHealthAppConfiguration.html
-http://developer.android.com/reference/android/bluetooth/BluetoothHealthCallback.html
-http://developer.android.com/reference/android/bluetooth/BluetoothServerSocket.html
-http://developer.android.com/reference/android/bluetooth/BluetoothSocket.html
-http://developer.android.com/reference/java/security/cert/PolicyNode.html
-http://developer.android.com/reference/java/security/cert/X509Extension.html
-http://developer.android.com/reference/java/security/cert/Certificate.CertificateRep.html
-http://developer.android.com/reference/java/security/cert/CertificateFactory.html
-http://developer.android.com/reference/java/security/cert/CertificateFactorySpi.html
-http://developer.android.com/reference/java/security/cert/CertPath.html
-http://developer.android.com/reference/java/security/cert/CertPath.CertPathRep.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderSpi.html
-http://developer.android.com/reference/java/security/cert/CertPathValidator.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorSpi.html
-http://developer.android.com/reference/java/security/cert/CertStore.html
-http://developer.android.com/reference/java/security/cert/CertStoreSpi.html
-http://developer.android.com/reference/java/security/cert/CRL.html
-http://developer.android.com/reference/java/security/cert/PolicyQualifierInfo.html
-http://developer.android.com/reference/java/security/cert/TrustAnchor.html
-http://developer.android.com/reference/java/security/cert/X509Certificate.html
-http://developer.android.com/reference/java/security/cert/X509CRL.html
-http://developer.android.com/reference/java/security/cert/X509CRLEntry.html
-http://developer.android.com/reference/java/security/cert/CertificateEncodingException.html
-http://developer.android.com/reference/java/security/cert/CertificateException.html
-http://developer.android.com/reference/java/security/cert/CertificateExpiredException.html
-http://developer.android.com/reference/java/security/cert/CertificateNotYetValidException.html
-http://developer.android.com/reference/java/security/cert/CertificateParsingException.html
-http://developer.android.com/reference/java/security/cert/CertPathBuilderException.html
-http://developer.android.com/reference/java/security/cert/CertPathValidatorException.html
-http://developer.android.com/reference/java/security/cert/CertStoreException.html
-http://developer.android.com/reference/java/security/cert/CRLException.html
-http://developer.android.com/reference/java/security/KeyStore.html
-http://developer.android.com/reference/java/security/KeyStoreException.html
-http://developer.android.com/reference/java/security/InvalidParameterException.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectTimeoutException.html
-http://developer.android.com/reference/java/net/SocketTimeoutException.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionPoolTimeoutException.html
-http://developer.android.com/sdk/api_diff/15/changes.html
-http://developer.android.com/reference/android/text/style/SuggestionSpan.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.html
-http://developer.android.com/reference/android/speech/tts/UtteranceProgressListener.html
-http://developer.android.com/reference/java/text/Annotation.html
-http://developer.android.com/reference/java/text/AttributedCharacterIterator.Attribute.html
-http://developer.android.com/reference/java/text/AttributedString.html
-http://developer.android.com/reference/java/text/Bidi.html
-http://developer.android.com/reference/java/text/CollationElementIterator.html
-http://developer.android.com/reference/java/text/CollationKey.html
-http://developer.android.com/reference/java/text/DateFormat.Field.html
-http://developer.android.com/reference/java/text/FieldPosition.html
-http://developer.android.com/reference/java/text/Format.Field.html
-http://developer.android.com/reference/java/text/MessageFormat.Field.html
-http://developer.android.com/reference/java/text/Normalizer.html
-http://developer.android.com/reference/java/text/NumberFormat.Field.html
-http://developer.android.com/reference/java/text/ParsePosition.html
-http://developer.android.com/reference/java/text/Normalizer.Form.html
-http://developer.android.com/reference/java/text/ParseException.html
-http://developer.android.com/reference/org/apache/http/FormattedHeader.html
-http://developer.android.com/reference/org/apache/http/HeaderElement.html
-http://developer.android.com/reference/org/apache/http/HeaderElementIterator.html
-http://developer.android.com/reference/org/apache/http/HttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/HttpConnection.html
-http://developer.android.com/reference/org/apache/http/HttpConnectionMetrics.html
-http://developer.android.com/reference/org/apache/http/HttpInetConnection.html
-http://developer.android.com/reference/org/apache/http/HttpRequestFactory.html
-http://developer.android.com/reference/org/apache/http/HttpResponseInterceptor.html
-http://developer.android.com/reference/org/apache/http/HttpStatus.html
-http://developer.android.com/reference/org/apache/http/TokenIterator.html
-http://developer.android.com/reference/org/apache/http/ConnectionClosedException.html
-http://developer.android.com/reference/org/apache/http/MalformedChunkCodingException.html
-http://developer.android.com/reference/org/apache/http/MethodNotSupportedException.html
-http://developer.android.com/reference/org/apache/http/NoHttpResponseException.html
-http://developer.android.com/reference/org/apache/http/ParseException.html
-http://developer.android.com/reference/org/apache/http/UnsupportedHttpVersionException.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodImpl.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodImpl.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.html
-http://developer.android.com/reference/android/service/dreams/DreamService.html
-http://developer.android.com/reference/android/speech/RecognitionService.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeechService.html
-http://developer.android.com/reference/android/net/VpnService.html
-http://developer.android.com/reference/android/service/wallpaper/WallpaperService.html
-http://developer.android.com/reference/java/security/Certificate.html
-http://developer.android.com/reference/java/security/DomainCombiner.html
-http://developer.android.com/reference/java/security/KeyStore.Entry.html
-http://developer.android.com/reference/java/security/KeyStore.LoadStoreParameter.html
-http://developer.android.com/reference/java/security/KeyStore.ProtectionParameter.html
-http://developer.android.com/reference/java/security/Policy.Parameters.html
-http://developer.android.com/reference/java/security/PrivateKey.html
-http://developer.android.com/reference/java/security/PrivilegedExceptionAction.html
-http://developer.android.com/reference/java/security/PublicKey.html
-http://developer.android.com/reference/java/security/AccessControlContext.html
-http://developer.android.com/reference/java/security/AccessController.html
-http://developer.android.com/reference/java/security/AlgorithmParameterGenerator.html
-http://developer.android.com/reference/java/security/AlgorithmParameterGeneratorSpi.html
-http://developer.android.com/reference/java/security/AlgorithmParametersSpi.html
-http://developer.android.com/reference/java/security/AllPermission.html
-http://developer.android.com/reference/java/security/BasicPermission.html
-http://developer.android.com/reference/java/security/CodeSigner.html
-http://developer.android.com/reference/java/security/CodeSource.html
-http://developer.android.com/reference/java/security/DigestOutputStream.html
-http://developer.android.com/reference/java/security/GuardedObject.html
-http://developer.android.com/reference/java/security/Identity.html
-http://developer.android.com/reference/java/security/IdentityScope.html
-http://developer.android.com/reference/java/security/KeyFactory.html
-http://developer.android.com/reference/java/security/KeyFactorySpi.html
-http://developer.android.com/reference/java/security/KeyPair.html
-http://developer.android.com/reference/java/security/KeyPairGenerator.html
-http://developer.android.com/reference/java/security/KeyPairGeneratorSpi.html
-http://developer.android.com/reference/java/security/KeyRep.html
-http://developer.android.com/reference/java/security/KeyStore.Builder.html
-http://developer.android.com/reference/java/security/KeyStore.CallbackHandlerProtection.html
-http://developer.android.com/reference/java/security/KeyStore.PasswordProtection.html
-http://developer.android.com/reference/java/security/KeyStore.PrivateKeyEntry.html
-http://developer.android.com/reference/java/security/KeyStore.SecretKeyEntry.html
-http://developer.android.com/reference/java/security/KeyStore.TrustedCertificateEntry.html
-http://developer.android.com/reference/java/security/KeyStoreSpi.html
-http://developer.android.com/reference/java/security/MessageDigest.html
-http://developer.android.com/reference/java/security/MessageDigestSpi.html
-http://developer.android.com/reference/java/security/Permissions.html
-http://developer.android.com/reference/java/security/Policy.html
-http://developer.android.com/reference/java/security/PolicySpi.html
-http://developer.android.com/reference/java/security/ProtectionDomain.html
-http://developer.android.com/reference/java/security/Provider.Service.html
-http://developer.android.com/reference/java/security/SecureClassLoader.html
-http://developer.android.com/reference/java/security/SecureRandomSpi.html
-http://developer.android.com/reference/java/security/Security.html
-http://developer.android.com/reference/java/security/SecurityPermission.html
-http://developer.android.com/reference/java/security/Signature.html
-http://developer.android.com/reference/java/security/SignatureSpi.html
-http://developer.android.com/reference/java/security/SignedObject.html
-http://developer.android.com/reference/java/security/Signer.html
-http://developer.android.com/reference/java/security/Timestamp.html
-http://developer.android.com/reference/java/security/UnresolvedPermission.html
-http://developer.android.com/reference/java/security/KeyRep.Type.html
-http://developer.android.com/reference/java/security/AccessControlException.html
-http://developer.android.com/reference/java/security/DigestException.html
-http://developer.android.com/reference/java/security/KeyException.html
-http://developer.android.com/reference/java/security/KeyManagementException.html
-http://developer.android.com/reference/java/security/PrivilegedActionException.html
-http://developer.android.com/reference/java/security/ProviderException.html
-http://developer.android.com/reference/java/security/SignatureException.html
-http://developer.android.com/reference/java/security/UnrecoverableEntryException.html
-http://developer.android.com/reference/java/security/UnrecoverableKeyException.html
-http://developer.android.com/reference/java/util/concurrent/locks/Lock.html
-http://developer.android.com/guide/faq/troubleshooting.html
-http://developer.android.com/reference/java/nio/BufferOverflowException.html
-http://developer.android.com/reference/java/nio/BufferUnderflowException.html
-http://developer.android.com/reference/org/w3c/dom/DOMException.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSException.html
-http://developer.android.com/reference/java/lang/reflect/MalformedParameterizedTypeException.html
-http://developer.android.com/reference/android/renderscript/RSRuntimeException.html
-http://developer.android.com/reference/java/lang/reflect/UndeclaredThrowableException.html
-http://developer.android.com/reference/org/apache/http/impl/auth/UnsupportedDigestAlgorithmException.html
-http://developer.android.com/reference/java/nio/charset/IllegalCharsetNameException.html
-http://developer.android.com/reference/android/renderscript/RSDriverException.html
-http://developer.android.com/reference/android/renderscript/RSIllegalArgumentException.html
-http://developer.android.com/reference/android/renderscript/RSInvalidStateException.html
-http://developer.android.com/reference/java/nio/ReadOnlyBufferException.html
-http://developer.android.com/reference/java/nio/charset/UnsupportedCharsetException.html
-http://developer.android.com/reference/java/nio/charset/spi/CharsetProvider.html
-http://developer.android.com/reference/android/preference/PreferenceFragment.html
-http://developer.android.com/reference/android/webkit/WebViewFragment.html
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceChangeListener.html
-http://developer.android.com/reference/android/preference/Preference.OnPreferenceClickListener.html
-http://developer.android.com/reference/android/preference/PreferenceFragment.OnPreferenceStartFragmentCallback.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityDestroyListener.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityResultListener.html
-http://developer.android.com/reference/android/preference/PreferenceManager.OnActivityStopListener.html
-http://developer.android.com/reference/android/preference/CheckBoxPreference.html
-http://developer.android.com/reference/android/preference/DialogPreference.html
-http://developer.android.com/reference/android/preference/EditTextPreference.html
-http://developer.android.com/reference/android/preference/ListPreference.html
-http://developer.android.com/reference/android/preference/MultiSelectListPreference.html
-http://developer.android.com/reference/android/preference/Preference.BaseSavedState.html
-http://developer.android.com/reference/android/preference/PreferenceActivity.Header.html
-http://developer.android.com/reference/android/preference/PreferenceCategory.html
-http://developer.android.com/reference/android/preference/PreferenceGroup.html
-http://developer.android.com/reference/android/preference/PreferenceManager.html
-http://developer.android.com/reference/android/preference/PreferenceScreen.html
-http://developer.android.com/reference/android/preference/RingtonePreference.html
-http://developer.android.com/reference/android/preference/SwitchPreference.html
-http://developer.android.com/reference/android/preference/TwoStatePreference.html
-http://developer.android.com/reference/android/hardware/input/InputManager.InputDeviceListener.html
-http://developer.android.com/guide/samples/index.html
-http://developer.android.com/reference/com/google/android/gms/common/AccountPicker.html
-http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthUtil.html
-http://developer.android.com/reference/com/google/android/gms/auth/UserRecoverableAuthException.html
-http://developer.android.com/reference/com/google/android/gms/auth/GooglePlayServicesAvailabilityException.html
-http://developer.android.com/reference/com/google/android/gms/auth/GoogleAuthException.html
-http://developer.android.com/reference/com/google/android/gms/auth/UserRecoverableNotifiedException.html
-http://developer.android.com/reference/org/apache/http/entity/ContentLengthStrategy.html
-http://developer.android.com/reference/org/apache/http/entity/ContentProducer.html
-http://developer.android.com/reference/org/apache/http/entity/BasicHttpEntity.html
-http://developer.android.com/reference/org/apache/http/entity/BufferedHttpEntity.html
-http://developer.android.com/reference/org/apache/http/entity/EntityTemplate.html
-http://developer.android.com/reference/org/apache/http/entity/HttpEntityWrapper.html
-http://developer.android.com/reference/org/apache/http/entity/InputStreamEntity.html
-http://developer.android.com/reference/org/apache/http/entity/SerializableEntity.html
-http://developer.android.com/resources/samples/USB/AdbTest/index.html
-http://developer.android.com/resources/samples/USB/MissileLauncher/index.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractClientConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPooledConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/AbstractPoolEntry.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultClientConnectionOperator.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultHttpRoutePlanner.html
-http://developer.android.com/reference/org/apache/http/impl/conn/DefaultResponseParser.html
-http://developer.android.com/reference/org/apache/http/impl/conn/IdleConnectionHandler.html
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/conn/LoggingSessionOutputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/conn/ProxySelectorRoutePlanner.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.ConnAdapter.html
-http://developer.android.com/reference/org/apache/http/impl/conn/SingleClientConnManager.PoolEntry.html
-http://developer.android.com/reference/org/apache/http/impl/conn/Wire.html
-http://developer.android.com/reference/org/apache/http/conn/OperatedClientConnection.html
-http://developer.android.com/reference/org/apache/http/conn/ManagedClientConnection.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionOperator.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRoutePlanner.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html
-http://developer.android.com/resources/samples/TicTacToeMain/index.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.OnPageChangeListener.html
-http://developer.android.com/reference/android/support/v4/view/KeyEventCompat.html
-http://developer.android.com/reference/android/support/v4/view/MenuItemCompat.html
-http://developer.android.com/reference/android/support/v4/view/MotionEventCompat.html
-http://developer.android.com/reference/android/support/v4/view/VelocityTrackerCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewCompatJB.html
-http://developer.android.com/reference/android/support/v4/view/ViewCompatJellybeanMr1.html
-http://developer.android.com/reference/android/support/v4/view/ViewConfigurationCompat.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.SavedState.html
-http://developer.android.com/reference/android/support/v4/view/ViewPager.SimpleOnPageChangeListener.html
-http://developer.android.com/reference/javax/xml/namespace/NamespaceContext.html
-http://developer.android.com/reference/javax/xml/transform/Source.html
-http://developer.android.com/reference/javax/xml/transform/Transformer.html
-http://developer.android.com/reference/javax/xml/transform/sax/TemplatesHandler.html
-http://developer.android.com/reference/javax/xml/transform/sax/TransformerHandler.html
-http://developer.android.com/reference/javax/xml/transform/sax/SAXResult.html
-http://developer.android.com/reference/javax/xml/transform/sax/SAXSource.html
-http://developer.android.com/reference/javax/xml/transform/sax/SAXTransformerFactory.html
-http://developer.android.com/reference/javax/xml/transform/TransformerFactory.html
-http://developer.android.com/reference/javax/xml/transform/Result.html
-http://developer.android.com/reference/javax/xml/transform/Templates.html
-http://developer.android.com/reference/android/text/method/ArrowKeyMovementMethod.html
-http://developer.android.com/reference/android/text/method/BaseKeyListener.html
-http://developer.android.com/reference/android/text/method/BaseMovementMethod.html
-http://developer.android.com/reference/android/text/method/DateKeyListener.html
-http://developer.android.com/reference/android/text/method/DateTimeKeyListener.html
-http://developer.android.com/reference/android/text/method/DialerKeyListener.html
-http://developer.android.com/reference/android/text/method/DigitsKeyListener.html
-http://developer.android.com/reference/android/text/method/HideReturnsTransformationMethod.html
-http://developer.android.com/reference/android/text/method/MultiTapKeyListener.html
-http://developer.android.com/reference/android/text/method/NumberKeyListener.html
-http://developer.android.com/reference/android/text/method/PasswordTransformationMethod.html
-http://developer.android.com/reference/android/text/method/QwertyKeyListener.html
-http://developer.android.com/reference/android/text/method/ReplacementTransformationMethod.html
-http://developer.android.com/reference/android/text/method/ScrollingMovementMethod.html
-http://developer.android.com/reference/android/text/method/SingleLineTransformationMethod.html
-http://developer.android.com/reference/android/text/method/TextKeyListener.html
-http://developer.android.com/reference/android/text/method/TimeKeyListener.html
-http://developer.android.com/reference/android/text/method/Touch.html
-http://developer.android.com/reference/android/text/method/TextKeyListener.Capitalize.html
-http://developer.android.com/reference/android/security/KeyChainAliasCallback.html
-http://developer.android.com/reference/android/security/KeyChain.html
-http://developer.android.com/reference/android/security/KeyChainException.html
-http://developer.android.com/reference/javax/net/ServerSocketFactory.html
-http://developer.android.com/reference/javax/net/SocketFactory.html
-http://developer.android.com/guide/topics/clipboard/copy-paste.html
-http://developer.android.com/reference/javax/sql/CommonDataSource.html
-http://developer.android.com/reference/javax/sql/ConnectionEventListener.html
-http://developer.android.com/reference/javax/sql/ConnectionPoolDataSource.html
-http://developer.android.com/reference/javax/sql/DataSource.html
-http://developer.android.com/reference/javax/sql/RowSetInternal.html
-http://developer.android.com/reference/javax/sql/RowSetListener.html
-http://developer.android.com/reference/javax/sql/RowSetMetaData.html
-http://developer.android.com/reference/javax/sql/RowSetReader.html
-http://developer.android.com/reference/javax/sql/RowSetWriter.html
-http://developer.android.com/reference/javax/sql/StatementEventListener.html
-http://developer.android.com/reference/java/sql/ResultSet.html
-http://developer.android.com/reference/java/sql/Array.html
-http://developer.android.com/reference/java/sql/Blob.html
-http://developer.android.com/reference/java/sql/Clob.html
-http://developer.android.com/reference/java/sql/NClob.html
-http://developer.android.com/reference/java/sql/Ref.html
-http://developer.android.com/reference/java/sql/RowId.html
-http://developer.android.com/reference/java/sql/SQLXML.html
-http://developer.android.com/reference/java/net/URL.html
-http://developer.android.com/reference/java/sql/ResultSetMetaData.html
-http://developer.android.com/reference/java/sql/Statement.html
-http://developer.android.com/reference/java/sql/SQLWarning.html
-http://developer.android.com/reference/java/sql/Wrapper.html
-http://developer.android.com/reference/java/sql/SQLException.html
-http://developer.android.com/reference/java/sql/Connection.html
-http://developer.android.com/reference/java/sql/SQLData.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentRetainInstance.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/FragmentLayout.html
-http://developer.android.com/resources/samples/get.html
-http://developer.android.com/reference/java/util/jar/Pack200.Packer.html
-http://developer.android.com/reference/java/util/jar/Pack200.Unpacker.html
-http://developer.android.com/reference/java/util/jar/Attributes.Name.html
-http://developer.android.com/reference/java/util/jar/JarFile.html
-http://developer.android.com/reference/java/util/jar/JarOutputStream.html
-http://developer.android.com/reference/java/util/jar/Pack200.html
-http://developer.android.com/reference/java/util/jar/JarException.html
-http://developer.android.com/reference/java/nio/charset/CoderResult.html
-http://developer.android.com/reference/java/nio/charset/CodingErrorAction.html
-http://developer.android.com/reference/java/nio/charset/CharacterCodingException.html
-http://developer.android.com/reference/java/nio/charset/MalformedInputException.html
-http://developer.android.com/reference/java/nio/charset/UnmappableCharacterException.html
-http://developer.android.com/reference/java/nio/charset/CoderMalfunctionError.html
-http://developer.android.com/reference/android/webkit/DownloadListener.html
-http://developer.android.com/reference/android/webkit/GeolocationPermissions.Callback.html
-http://developer.android.com/reference/android/webkit/PluginStub.html
-http://developer.android.com/reference/android/webkit/ValueCallback.html
-http://developer.android.com/reference/android/webkit/WebChromeClient.CustomViewCallback.html
-http://developer.android.com/reference/android/webkit/WebIconDatabase.IconListener.html
-http://developer.android.com/reference/android/webkit/WebStorage.QuotaUpdater.html
-http://developer.android.com/reference/android/webkit/WebView.FindListener.html
-http://developer.android.com/reference/android/webkit/WebView.PictureListener.html
-http://developer.android.com/reference/android/webkit/CookieManager.html
-http://developer.android.com/reference/android/webkit/CookieSyncManager.html
-http://developer.android.com/reference/android/webkit/DateSorter.html
-http://developer.android.com/reference/android/webkit/GeolocationPermissions.html
-http://developer.android.com/reference/android/webkit/HttpAuthHandler.html
-http://developer.android.com/reference/android/webkit/JsPromptResult.html
-http://developer.android.com/reference/android/webkit/JsResult.html
-http://developer.android.com/reference/android/webkit/MimeTypeMap.html
-http://developer.android.com/reference/android/webkit/SslErrorHandler.html
-http://developer.android.com/reference/android/webkit/URLUtil.html
-http://developer.android.com/reference/android/webkit/WebIconDatabase.html
-http://developer.android.com/reference/android/webkit/WebResourceResponse.html
-http://developer.android.com/reference/android/webkit/WebStorage.html
-http://developer.android.com/reference/android/webkit/WebStorage.Origin.html
-http://developer.android.com/reference/android/webkit/WebView.HitTestResult.html
-http://developer.android.com/reference/android/webkit/WebView.WebViewTransport.html
-http://developer.android.com/reference/android/webkit/WebViewDatabase.html
-http://developer.android.com/reference/android/webkit/WebSettings.LayoutAlgorithm.html
-http://developer.android.com/reference/android/webkit/WebSettings.PluginState.html
-http://developer.android.com/reference/android/webkit/WebSettings.RenderPriority.html
-http://developer.android.com/reference/android/webkit/WebSettings.TextSize.html
-http://developer.android.com/reference/android/webkit/WebSettings.ZoomDensity.html
-http://developer.android.com/reference/android/net/http/SslError.html
-http://developer.android.com/reference/javax/xml/transform/ErrorListener.html
-http://developer.android.com/reference/javax/xml/transform/SourceLocator.html
-http://developer.android.com/reference/javax/xml/transform/URIResolver.html
-http://developer.android.com/reference/javax/xml/transform/OutputKeys.html
-http://developer.android.com/reference/javax/xml/transform/TransformerConfigurationException.html
-http://developer.android.com/reference/javax/xml/transform/TransformerException.html
-http://developer.android.com/reference/javax/xml/transform/TransformerFactoryConfigurationError.html
-http://developer.android.com/reference/javax/xml/parsers/DocumentBuilder.html
-http://developer.android.com/reference/android/inputmethodservice/KeyboardView.OnKeyboardActionListener.html
-http://developer.android.com/reference/android/inputmethodservice/AbstractInputMethodService.AbstractInputMethodSessionImpl.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.InputMethodSessionImpl.html
-http://developer.android.com/reference/android/inputmethodservice/InputMethodService.Insets.html
-http://developer.android.com/reference/android/inputmethodservice/Keyboard.Key.html
-http://developer.android.com/reference/android/inputmethodservice/Keyboard.Row.html
-http://developer.android.com/sdk/api_diff/14/changes.html
-http://developer.android.com/resources/samples/SampleSyncAdapter/res/xml-v14/contacts.html
-http://developer.android.com/resources/samples/VoicemailProviderDemo/index.html
-http://developer.android.com/reference/android/media/effect/Effect.html
-http://developer.android.com/reference/android/media/effect/EffectContext.html
-http://developer.android.com/reference/android/media/effect/EffectFactory.html
-http://developer.android.com/resources/samples/RandomMusicPlayer/index.html
-http://developer.android.com/reference/android/nfc/NdefMessage.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.CreateNdefMessageCallback.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.OnNdefPushCompleteCallback.html
-http://developer.android.com/reference/android/nfc/NdefRecord.html
-http://developer.android.com/resources/samples/AndroidBeamDemo/src/com/example/android/beam/Beam.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pDeviceList.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.GroupInfoListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pGroup.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pInfo.html
-http://developer.android.com/resources/samples/WiFiDirectDemo/index.html
-http://developer.android.com/reference/android/view/accessibility/AccessibilityManager.AccessibilityStateChangeListener.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.EngineInfo.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.Engine.html
-http://developer.android.com/reference/android/speech/tts/SynthesisRequest.html
-http://developer.android.com/reference/android/speech/tts/SynthesisCallback.html
-http://developer.android.com/resources/samples/TtsEngine/index.html
-http://developer.android.com/reference/android/renderscript/Script.html
-http://developer.android.com/reference/android/renderscript/FieldPacker.html
-http://developer.android.com/reference/android/net/VpnService.Builder.html
-http://developer.android.com/reference/android/app/admin/DeviceAdminInfo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/index.html
-http://developer.android.com/resources/samples/ApiDemos/res/layout/switches.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Switches.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/OverscanActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/Hover.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchPaint.html
-http://developer.android.com/guide/practices/jni.html
-http://developer.android.com/reference/org/xml/sax/helpers/AttributesImpl.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserException.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.ValueSanitizer.html
-http://developer.android.com/reference/android/net/Credentials.html
-http://developer.android.com/reference/android/net/LocalServerSocket.html
-http://developer.android.com/reference/android/net/LocalSocket.html
-http://developer.android.com/reference/android/net/LocalSocketAddress.html
-http://developer.android.com/reference/android/net/MailTo.html
-http://developer.android.com/reference/android/net/Proxy.html
-http://developer.android.com/reference/android/net/SSLCertificateSocketFactory.html
-http://developer.android.com/reference/android/net/SSLSessionCache.html
-http://developer.android.com/reference/android/net/TrafficStats.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.IllegalCharacterValueSanitizer.html
-http://developer.android.com/reference/android/net/UrlQuerySanitizer.ParameterValuePair.html
-http://developer.android.com/reference/android/net/LocalSocketAddress.Namespace.html
-http://developer.android.com/reference/android/net/NetworkInfo.DetailedState.html
-http://developer.android.com/reference/android/net/NetworkInfo.State.html
-http://developer.android.com/reference/android/net/ParseException.html
-http://developer.android.com/reference/com/google/android/gms/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/auth/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/common/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/panorama/package-summary.html
-http://developer.android.com/reference/com/google/android/gms/plus/package-summary.html
-http://developer.android.com/guide/topics/wireless/bluetooth.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.OnControlStatusChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.OnEnableStatusChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/BassBoost.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/Equalizer.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/PresetReverb.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/Virtualizer.OnParameterChangeListener.html
-http://developer.android.com/reference/android/media/audiofx/Visualizer.OnDataCaptureListener.html
-http://developer.android.com/reference/android/media/audiofx/AcousticEchoCanceler.html
-http://developer.android.com/reference/android/media/audiofx/AudioEffect.Descriptor.html
-http://developer.android.com/reference/android/media/audiofx/AutomaticGainControl.html
-http://developer.android.com/reference/android/media/audiofx/BassBoost.html
-http://developer.android.com/reference/android/media/audiofx/BassBoost.Settings.html
-http://developer.android.com/reference/android/media/audiofx/EnvironmentalReverb.Settings.html
-http://developer.android.com/reference/android/media/audiofx/Equalizer.html
-http://developer.android.com/reference/android/media/audiofx/Equalizer.Settings.html
-http://developer.android.com/reference/android/media/audiofx/NoiseSuppressor.html
-http://developer.android.com/reference/android/media/audiofx/PresetReverb.html
-http://developer.android.com/reference/android/media/audiofx/PresetReverb.Settings.html
-http://developer.android.com/reference/android/media/audiofx/Virtualizer.html
-http://developer.android.com/reference/android/media/audiofx/Virtualizer.Settings.html
-http://developer.android.com/reference/android/media/audiofx/Visualizer.html
-http://developer.android.com/reference/java/net/InetAddress.html
-http://developer.android.com/reference/org/apache/http/io/SessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/io/HttpTransportMetrics.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManager.html
-http://developer.android.com/reference/org/apache/http/conn/ClientConnectionManagerFactory.html
-http://developer.android.com/reference/org/apache/http/conn/ConnectionKeepAliveStrategy.html
-http://developer.android.com/reference/org/apache/http/conn/EofSensorWatcher.html
-http://developer.android.com/reference/org/apache/http/conn/BasicEofSensorWatcher.html
-http://developer.android.com/reference/org/apache/http/conn/BasicManagedEntity.html
-http://developer.android.com/reference/org/apache/http/conn/EofSensorInputStream.html
-http://developer.android.com/reference/org/apache/http/conn/MultihomePlainSocketFactory.html
-http://developer.android.com/reference/org/apache/http/conn/HttpHostConnectException.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPooledConnAdapter.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderCursor.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LoaderThrottle.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLSurfaceViewActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/GLES20Activity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/TouchRotateActivity.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CompressedTextureActivity.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL10Ext.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11Ext.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL11ExtensionPack.html
-http://developer.android.com/resources/dashboard/opengl.html
-http://developer.android.com/reference/java/util/logging/Filter.html
-http://developer.android.com/reference/java/util/logging/LoggingMXBean.html
-http://developer.android.com/reference/java/util/logging/ConsoleHandler.html
-http://developer.android.com/reference/java/util/logging/ErrorManager.html
-http://developer.android.com/reference/java/util/logging/FileHandler.html
-http://developer.android.com/reference/java/util/logging/Formatter.html
-http://developer.android.com/reference/java/util/logging/Handler.html
-http://developer.android.com/reference/java/util/logging/Level.html
-http://developer.android.com/reference/java/util/logging/Logger.html
-http://developer.android.com/reference/java/util/logging/LoggingPermission.html
-http://developer.android.com/reference/java/util/logging/LogManager.html
-http://developer.android.com/reference/java/util/logging/LogRecord.html
-http://developer.android.com/reference/java/util/logging/MemoryHandler.html
-http://developer.android.com/reference/java/util/logging/SimpleFormatter.html
-http://developer.android.com/reference/java/util/logging/SocketHandler.html
-http://developer.android.com/reference/java/util/logging/StreamHandler.html
-http://developer.android.com/reference/java/util/logging/XMLFormatter.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicBoolean.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicInteger.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicIntegerFieldUpdater.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLong.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicLongFieldUpdater.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicMarkableReference.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReference.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceArray.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicReferenceFieldUpdater.html
-http://developer.android.com/reference/java/util/concurrent/atomic/AtomicStampedReference.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceInfo.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pDnsSdServiceRequest.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pServiceInfo.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pServiceRequest.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceInfo.html
-http://developer.android.com/reference/android/net/wifi/p2p/nsd/WifiP2pUpnpServiceRequest.html
-http://developer.android.com/reference/android/renderscript/AllocationAdapter.html
-http://developer.android.com/reference/android/renderscript/BaseObj.html
-http://developer.android.com/reference/android/renderscript/Byte2.html
-http://developer.android.com/reference/android/renderscript/Byte3.html
-http://developer.android.com/reference/android/renderscript/Byte4.html
-http://developer.android.com/reference/android/renderscript/Double2.html
-http://developer.android.com/reference/android/renderscript/Double3.html
-http://developer.android.com/reference/android/renderscript/Double4.html
-http://developer.android.com/reference/android/renderscript/Element.Builder.html
-http://developer.android.com/reference/android/renderscript/FileA3D.html
-http://developer.android.com/reference/android/renderscript/FileA3D.IndexEntry.html
-http://developer.android.com/reference/android/renderscript/Float2.html
-http://developer.android.com/reference/android/renderscript/Float3.html
-http://developer.android.com/reference/android/renderscript/Float4.html
-http://developer.android.com/reference/android/renderscript/Font.html
-http://developer.android.com/reference/android/renderscript/Int2.html
-http://developer.android.com/reference/android/renderscript/Int3.html
-http://developer.android.com/reference/android/renderscript/Int4.html
-http://developer.android.com/reference/android/renderscript/Long2.html
-http://developer.android.com/reference/android/renderscript/Long3.html
-http://developer.android.com/reference/android/renderscript/Long4.html
-http://developer.android.com/reference/android/renderscript/Matrix2f.html
-http://developer.android.com/reference/android/renderscript/Matrix3f.html
-http://developer.android.com/reference/android/renderscript/Matrix4f.html
-http://developer.android.com/reference/android/renderscript/Mesh.html
-http://developer.android.com/reference/android/renderscript/Mesh.AllocationBuilder.html
-http://developer.android.com/reference/android/renderscript/Mesh.Builder.html
-http://developer.android.com/reference/android/renderscript/Mesh.TriangleMeshBuilder.html
-http://developer.android.com/reference/android/renderscript/Program.html
-http://developer.android.com/reference/android/renderscript/Program.BaseProgramBuilder.html
-http://developer.android.com/reference/android/renderscript/ProgramFragment.html
-http://developer.android.com/reference/android/renderscript/ProgramFragment.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramRaster.html
-http://developer.android.com/reference/android/renderscript/ProgramRaster.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramVertex.html
-http://developer.android.com/reference/android/renderscript/ProgramVertex.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramVertexFixedFunction.html
-http://developer.android.com/reference/android/renderscript/ProgramVertexFixedFunction.Builder.html
-http://developer.android.com/reference/android/renderscript/ProgramVertexFixedFunction.Constants.html
-http://developer.android.com/reference/android/renderscript/RenderScript.html
-http://developer.android.com/reference/android/renderscript/RenderScript.RSErrorHandler.html
-http://developer.android.com/reference/android/renderscript/RenderScript.RSMessageHandler.html
-http://developer.android.com/reference/android/renderscript/RenderScriptGL.html
-http://developer.android.com/reference/android/renderscript/RenderScriptGL.SurfaceConfig.html
-http://developer.android.com/reference/android/renderscript/Sampler.html
-http://developer.android.com/reference/android/renderscript/Sampler.Builder.html
-http://developer.android.com/reference/android/renderscript/Script.Builder.html
-http://developer.android.com/reference/android/renderscript/Script.FieldID.html
-http://developer.android.com/reference/android/renderscript/Script.KernelID.html
-http://developer.android.com/reference/android/renderscript/ScriptGroup.html
-http://developer.android.com/reference/android/renderscript/ScriptGroup.Builder.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsic.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicBlend.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicBlur.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicColorMatrix.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicConvolve3x3.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicConvolve5x5.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicLUT.html
-http://developer.android.com/reference/android/renderscript/ScriptIntrinsicYuvToRGB.html
-http://developer.android.com/reference/android/renderscript/Short2.html
-http://developer.android.com/reference/android/renderscript/Short3.html
-http://developer.android.com/reference/android/renderscript/Short4.html
-http://developer.android.com/reference/android/renderscript/Type.Builder.html
-http://developer.android.com/reference/android/renderscript/Allocation.MipmapControl.html
-http://developer.android.com/reference/android/renderscript/Element.DataKind.html
-http://developer.android.com/reference/android/renderscript/Element.DataType.html
-http://developer.android.com/reference/android/renderscript/FileA3D.EntryType.html
-http://developer.android.com/reference/android/renderscript/Font.Style.html
-http://developer.android.com/reference/android/renderscript/Mesh.Primitive.html
-http://developer.android.com/reference/android/renderscript/Program.TextureType.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.EnvMode.html
-http://developer.android.com/reference/android/renderscript/ProgramFragmentFixedFunction.Builder.Format.html
-http://developer.android.com/reference/android/renderscript/ProgramRaster.CullMode.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.BlendDstFunc.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.BlendSrcFunc.html
-http://developer.android.com/reference/android/renderscript/ProgramStore.DepthFunc.html
-http://developer.android.com/reference/android/renderscript/RenderScript.Priority.html
-http://developer.android.com/reference/android/renderscript/Sampler.Value.html
-http://developer.android.com/reference/android/renderscript/Type.CubemapFace.html
-http://developer.android.com/reference/java/net/ContentHandlerFactory.html
-http://developer.android.com/reference/java/net/CookiePolicy.html
-http://developer.android.com/reference/java/net/CookieStore.html
-http://developer.android.com/reference/java/net/DatagramSocketImplFactory.html
-http://developer.android.com/reference/java/net/FileNameMap.html
-http://developer.android.com/reference/java/net/SocketImplFactory.html
-http://developer.android.com/reference/java/net/SocketOptions.html
-http://developer.android.com/reference/java/net/URLStreamHandlerFactory.html
-http://developer.android.com/reference/java/net/Authenticator.html
-http://developer.android.com/reference/java/net/CacheRequest.html
-http://developer.android.com/reference/java/net/CacheResponse.html
-http://developer.android.com/reference/java/net/ContentHandler.html
-http://developer.android.com/reference/java/net/CookieHandler.html
-http://developer.android.com/reference/java/net/CookieManager.html
-http://developer.android.com/reference/java/net/DatagramPacket.html
-http://developer.android.com/reference/java/net/DatagramSocketImpl.html
-http://developer.android.com/reference/java/net/HttpURLConnection.html
-http://developer.android.com/reference/java/net/IDN.html
-http://developer.android.com/reference/java/net/Inet4Address.html
-http://developer.android.com/reference/java/net/Inet6Address.html
-http://developer.android.com/reference/java/net/InetSocketAddress.html
-http://developer.android.com/reference/java/net/InterfaceAddress.html
-http://developer.android.com/reference/java/net/JarURLConnection.html
-http://developer.android.com/reference/java/net/MulticastSocket.html
-http://developer.android.com/reference/java/net/NetPermission.html
-http://developer.android.com/reference/java/net/NetworkInterface.html
-http://developer.android.com/reference/java/net/PasswordAuthentication.html
-http://developer.android.com/reference/java/net/Proxy.html
-http://developer.android.com/reference/java/net/ProxySelector.html
-http://developer.android.com/reference/java/net/ResponseCache.html
-http://developer.android.com/reference/java/net/SecureCacheResponse.html
-http://developer.android.com/reference/java/net/ServerSocket.html
-http://developer.android.com/reference/java/net/SocketAddress.html
-http://developer.android.com/reference/java/net/SocketImpl.html
-http://developer.android.com/reference/java/net/SocketPermission.html
-http://developer.android.com/reference/java/net/URLClassLoader.html
-http://developer.android.com/reference/java/net/URLConnection.html
-http://developer.android.com/reference/java/net/URLDecoder.html
-http://developer.android.com/reference/java/net/URLEncoder.html
-http://developer.android.com/reference/java/net/URLStreamHandler.html
-http://developer.android.com/reference/java/net/Authenticator.RequestorType.html
-http://developer.android.com/reference/java/net/Proxy.Type.html
-http://developer.android.com/reference/java/net/BindException.html
-http://developer.android.com/reference/java/net/ConnectException.html
-http://developer.android.com/reference/java/net/HttpRetryException.html
-http://developer.android.com/reference/java/net/MalformedURLException.html
-http://developer.android.com/reference/java/net/NoRouteToHostException.html
-http://developer.android.com/reference/java/net/PortUnreachableException.html
-http://developer.android.com/reference/java/net/ProtocolException.html
-http://developer.android.com/reference/java/net/SocketException.html
-http://developer.android.com/reference/java/net/UnknownHostException.html
-http://developer.android.com/reference/java/net/UnknownServiceException.html
-http://developer.android.com/reference/java/net/URISyntaxException.html
-http://developer.android.com/reference/android/text/style/CharacterStyle.html
-http://developer.android.com/reference/android/text/style/ParagraphStyle.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/RemoteService.html
-http://developer.android.com/reference/org/w3c/dom/ls/DOMImplementationLS.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSInput.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSOutput.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSParser.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSParserFilter.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSResourceResolver.html
-http://developer.android.com/reference/org/w3c/dom/ls/LSSerializer.html
-http://developer.android.com/reference/org/apache/http/impl/client/BasicResponseHandler.html
-http://developer.android.com/google/play/billing/QueryPurchases
-http://developer.android.com/google/play/billing/Consume
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/accessibility/ClockBackService.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/accessibility/TaskBackService.html
-http://developer.android.com/guide/topics/testing/index.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/LargeTest.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGestureListener.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturePerformedListener.html
-http://developer.android.com/reference/android/gesture/GestureOverlayView.OnGesturingListener.html
-http://developer.android.com/reference/android/gesture/Gesture.html
-http://developer.android.com/reference/android/gesture/GestureLibraries.html
-http://developer.android.com/reference/android/gesture/GestureLibrary.html
-http://developer.android.com/reference/android/gesture/GesturePoint.html
-http://developer.android.com/reference/android/gesture/GestureStore.html
-http://developer.android.com/reference/android/gesture/GestureStroke.html
-http://developer.android.com/reference/android/gesture/GestureUtils.html
-http://developer.android.com/reference/android/gesture/OrientedBoundingBox.html
-http://developer.android.com/reference/android/gesture/Prediction.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLFilterImpl.html
-http://developer.android.com/reference/android/text/style/AbsoluteSizeSpan.html
-http://developer.android.com/reference/android/text/style/AlignmentSpan.Standard.html
-http://developer.android.com/reference/android/text/style/BackgroundColorSpan.html
-http://developer.android.com/reference/android/text/style/BulletSpan.html
-http://developer.android.com/reference/android/text/style/EasyEditSpan.html
-http://developer.android.com/reference/android/text/style/ForegroundColorSpan.html
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.Standard.html
-http://developer.android.com/reference/android/text/style/LocaleSpan.html
-http://developer.android.com/reference/android/text/style/QuoteSpan.html
-http://developer.android.com/reference/android/text/style/RelativeSizeSpan.html
-http://developer.android.com/reference/android/text/style/ScaleXSpan.html
-http://developer.android.com/reference/android/text/style/StrikethroughSpan.html
-http://developer.android.com/reference/android/text/style/StyleSpan.html
-http://developer.android.com/reference/android/text/style/SubscriptSpan.html
-http://developer.android.com/reference/android/text/style/SuperscriptSpan.html
-http://developer.android.com/reference/android/text/style/TextAppearanceSpan.html
-http://developer.android.com/reference/android/text/style/TypefaceSpan.html
-http://developer.android.com/reference/android/text/style/UnderlineSpan.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngine.html
-http://developer.android.com/reference/org/apache/http/impl/auth/AuthSchemeBase.html
-http://developer.android.com/reference/org/apache/http/impl/auth/BasicScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/BasicSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/impl/auth/DigestScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/DigestSchemeFactory.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMScheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/RFC2617Scheme.html
-http://developer.android.com/reference/org/apache/http/impl/auth/NTLMEngineException.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ChannelListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.DnsSdServiceResponseListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.DnsSdTxtRecordListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.ServiceResponseListener.html
-http://developer.android.com/reference/android/net/wifi/p2p/WifiP2pManager.UpnpServiceResponseListener.html
-http://developer.android.com/reference/java/lang/reflect/AnnotatedElement.html
-http://developer.android.com/reference/java/lang/reflect/GenericArrayType.html
-http://developer.android.com/reference/java/lang/reflect/GenericDeclaration.html
-http://developer.android.com/reference/java/lang/reflect/InvocationHandler.html
-http://developer.android.com/reference/java/lang/reflect/Member.html
-http://developer.android.com/reference/java/lang/reflect/ParameterizedType.html
-http://developer.android.com/reference/java/lang/reflect/Type.html
-http://developer.android.com/reference/java/lang/reflect/TypeVariable.html
-http://developer.android.com/reference/java/lang/reflect/WildcardType.html
-http://developer.android.com/reference/java/lang/reflect/AccessibleObject.html
-http://developer.android.com/reference/java/lang/reflect/Array.html
-http://developer.android.com/reference/java/lang/reflect/Constructor.html
-http://developer.android.com/reference/java/lang/reflect/Field.html
-http://developer.android.com/reference/java/lang/reflect/Method.html
-http://developer.android.com/reference/java/lang/reflect/Modifier.html
-http://developer.android.com/reference/java/lang/reflect/Proxy.html
-http://developer.android.com/reference/java/lang/reflect/ReflectPermission.html
-http://developer.android.com/reference/java/lang/reflect/InvocationTargetException.html
-http://developer.android.com/reference/java/lang/reflect/GenericSignatureFormatError.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultRequestDirector.html
-http://developer.android.com/resources/samples/SoftKeyboard/index.html
-http://developer.android.com/guide/practices/security.html
-http://developer.android.com/reference/javax/crypto/spec/DESedeKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DESKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHPrivateKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/DHPublicKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/PBEKeySpec.html
-http://developer.android.com/reference/javax/crypto/spec/PSource.html
-http://developer.android.com/reference/javax/crypto/spec/PSource.PSpecified.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageParser.html
-http://developer.android.com/reference/org/apache/http/io/HttpMessageWriter.html
-http://developer.android.com/reference/org/apache/http/io/SessionOutputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionInputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/io/SocketInputBuffer.html
-http://developer.android.com/reference/java/sql/SQLPermission.html
-http://developer.android.com/reference/javax/net/ssl/SSLPermission.html
-http://developer.android.com/reference/java/lang/annotation/Retention.html
-http://developer.android.com/reference/android/text/style/AlignmentSpan.html
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.html
-http://developer.android.com/reference/android/text/style/LeadingMarginSpan.LeadingMarginSpan2.html
-http://developer.android.com/reference/android/text/style/LineBackgroundSpan.html
-http://developer.android.com/reference/android/text/style/LineHeightSpan.html
-http://developer.android.com/reference/android/text/style/LineHeightSpan.WithDensity.html
-http://developer.android.com/reference/android/text/style/TabStopSpan.html
-http://developer.android.com/reference/android/text/style/UpdateAppearance.html
-http://developer.android.com/reference/android/text/style/UpdateLayout.html
-http://developer.android.com/reference/android/text/style/WrapTogetherSpan.html
-http://developer.android.com/reference/android/text/style/ClickableSpan.html
-http://developer.android.com/reference/android/text/style/DrawableMarginSpan.html
-http://developer.android.com/reference/android/text/style/DynamicDrawableSpan.html
-http://developer.android.com/reference/android/text/style/IconMarginSpan.html
-http://developer.android.com/reference/android/text/style/ImageSpan.html
-http://developer.android.com/reference/android/text/style/MaskFilterSpan.html
-http://developer.android.com/reference/android/text/style/MetricAffectingSpan.html
-http://developer.android.com/reference/android/text/style/RasterizerSpan.html
-http://developer.android.com/reference/android/text/style/ReplacementSpan.html
-http://developer.android.com/reference/android/text/style/TabStopSpan.Standard.html
-http://developer.android.com/reference/android/speech/RecognitionListener.html
-http://developer.android.com/reference/android/speech/RecognitionService.Callback.html
-http://developer.android.com/reference/android/speech/RecognizerIntent.html
-http://developer.android.com/reference/android/speech/RecognizerResultsIntent.html
-http://developer.android.com/reference/android/speech/SpeechRecognizer.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesUtil.html
-http://developer.android.com/reference/com/google/android/gcm/package-summary.html
-http://developer.android.com/resources/tutorials/views/hello-tabwidget.html
-http://developer.android.com/reference/javax/net/ssl/SSLSocket.html
-http://developer.android.com/reference/javax/net/ssl/HostnameVerifier.html
-http://developer.android.com/reference/javax/net/ssl/SSLException.html
-http://developer.android.com/reference/dalvik/bytecode/Opcodes.html
-http://developer.android.com/reference/dalvik/bytecode/OpcodeInfo.html
-http://developer.android.com/videos/index.html
-http://developer.android.com/reference/java/nio/ByteOrder.html
-http://developer.android.com/reference/java/nio/DoubleBuffer.html
-http://developer.android.com/reference/java/nio/LongBuffer.html
-http://developer.android.com/reference/java/nio/MappedByteBuffer.html
-http://developer.android.com/reference/java/nio/ShortBuffer.html
-http://developer.android.com/reference/com/google/android/gms/R.html
-http://developer.android.com/reference/com/google/android/gms/R.attr.html
-http://developer.android.com/reference/com/google/android/gms/R.id.html
-http://developer.android.com/reference/com/google/android/gms/R.string.html
-http://developer.android.com/reference/com/google/android/gms/R.styleable.html
-http://developer.android.com/reference/javax/security/auth/callback/CallbackHandler.html
-http://developer.android.com/reference/javax/security/auth/x500/X500Principal.html
-http://developer.android.com/reference/javax/xml/transform/dom/DOMLocator.html
-http://developer.android.com/reference/java/beans/PropertyChangeListenerProxy.html
-http://developer.android.com/reference/android/service/wallpaper/WallpaperService.Engine.html
-http://developer.android.com/shareables/training/BitmapFun.zip
-http://developer.android.com/sdk/api_diff/13/changes.html
-http://developer.android.com/reference/org/apache/http/impl/client/ClientParamsStack.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/ActionBarMechanics.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/content/ClipboardSample.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/DragAndDropDemo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/List15.html
-http://developer.android.com/resources/samples/RenderScript/index.html
-http://developer.android.com/reference/org/apache/http/impl/client/AbstractAuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/AbstractHttpClient.html
-http://developer.android.com/reference/org/apache/http/impl/client/BasicCookieStore.html
-http://developer.android.com/reference/org/apache/http/impl/client/BasicCredentialsProvider.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultConnectionKeepAliveStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpClient.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultHttpRequestRetryHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultProxyAuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultRedirectHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultTargetAuthenticationHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/DefaultUserTokenHandler.html
-http://developer.android.com/reference/org/apache/http/impl/client/RedirectLocations.html
-http://developer.android.com/reference/org/apache/http/impl/client/RoutedRequest.html
-http://developer.android.com/reference/org/apache/http/impl/client/TunnelRefusedException.html
-http://developer.android.com/shareables/training/ActivityLifecycle.zip
-http://developer.android.com/reference/java/util/concurrent/locks/Condition.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReadWriteLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractOwnableSynchronizer.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedLongSynchronizer.ConditionObject.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.html
-http://developer.android.com/reference/java/util/concurrent/locks/AbstractQueuedSynchronizer.ConditionObject.html
-http://developer.android.com/reference/java/util/concurrent/locks/LockSupport.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.ReadLock.html
-http://developer.android.com/reference/java/util/concurrent/locks/ReentrantReadWriteLock.WriteLock.html
-http://developer.android.com/reference/junit/framework/Protectable.html
-http://developer.android.com/reference/junit/framework/TestListener.html
-http://developer.android.com/reference/junit/framework/TestFailure.html
-http://developer.android.com/reference/junit/framework/AssertionFailedError.html
-http://developer.android.com/reference/junit/framework/ComparisonFailure.html
-http://developer.android.com/reference/android/nfc/NfcAdapter.CreateBeamUrisCallback.html
-http://developer.android.com/reference/android/nfc/NfcEvent.html
-http://developer.android.com/reference/android/nfc/Tag.html
-http://developer.android.com/reference/android/nfc/FormatException.html
-http://developer.android.com/reference/android/nfc/TagLostException.html
-http://developer.android.com/guide/topics/nfc/index.html
-http://developer.android.com/reference/android/net/http/AndroidHttpClient.html
-http://developer.android.com/reference/android/net/http/HttpResponseCache.html
-http://developer.android.com/reference/android/net/http/SslCertificate.html
-http://developer.android.com/reference/android/net/http/SslCertificate.DName.html
-http://developer.android.com/reference/android/net/http/X509TrustManagerExtensions.html
-http://developer.android.com/reference/android/support/v13/app/FragmentPagerAdapter.html
-http://developer.android.com/reference/java/lang/ref/PhantomReference.html
-http://developer.android.com/reference/java/lang/ref/Reference.html
-http://developer.android.com/reference/java/lang/ref/SoftReference.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntryRef.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/BasicPoolEntry.html
-http://developer.android.com/reference/org/apache/http/conn/routing/HttpRouteDirector.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.html
-http://developer.android.com/reference/org/apache/http/conn/routing/BasicRouteDirector.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.LayerType.html
-http://developer.android.com/reference/org/apache/http/conn/routing/RouteInfo.TunnelType.html
-http://developer.android.com/reference/javax/xml/validation/ValidatorHandler.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderAdapter.html
-http://developer.android.com/reference/javax/net/ssl/HandshakeCompletedListener.html
-http://developer.android.com/reference/javax/net/ssl/KeyManager.html
-http://developer.android.com/reference/javax/net/ssl/ManagerFactoryParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionBindingListener.html
-http://developer.android.com/reference/javax/net/ssl/SSLSessionContext.html
-http://developer.android.com/reference/javax/net/ssl/TrustManager.html
-http://developer.android.com/reference/javax/net/ssl/X509KeyManager.html
-http://developer.android.com/reference/javax/net/ssl/X509TrustManager.html
-http://developer.android.com/reference/javax/net/ssl/CertPathTrustManagerParameters.html
-http://developer.android.com/reference/javax/net/ssl/HttpsURLConnection.html
-http://developer.android.com/reference/javax/net/ssl/KeyManagerFactory.html
-http://developer.android.com/reference/javax/net/ssl/KeyManagerFactorySpi.html
-http://developer.android.com/reference/javax/net/ssl/KeyStoreBuilderParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLContext.html
-http://developer.android.com/reference/javax/net/ssl/SSLContextSpi.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngine.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.html
-http://developer.android.com/reference/javax/net/ssl/SSLParameters.html
-http://developer.android.com/reference/javax/net/ssl/SSLServerSocket.html
-http://developer.android.com/reference/javax/net/ssl/SSLServerSocketFactory.html
-http://developer.android.com/reference/javax/net/ssl/SSLSocketFactory.html
-http://developer.android.com/reference/javax/net/ssl/TrustManagerFactory.html
-http://developer.android.com/reference/javax/net/ssl/TrustManagerFactorySpi.html
-http://developer.android.com/reference/javax/net/ssl/X509ExtendedKeyManager.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.HandshakeStatus.html
-http://developer.android.com/reference/javax/net/ssl/SSLEngineResult.Status.html
-http://developer.android.com/reference/javax/net/ssl/SSLHandshakeException.html
-http://developer.android.com/reference/javax/net/ssl/SSLKeyException.html
-http://developer.android.com/reference/javax/net/ssl/SSLPeerUnverifiedException.html
-http://developer.android.com/reference/javax/net/ssl/SSLProtocolException.html
-http://developer.android.com/reference/javax/security/cert/X509Certificate.html
-http://developer.android.com/reference/android/text/format/DateFormat.html
-http://developer.android.com/reference/android/text/format/DateUtils.html
-http://developer.android.com/reference/android/text/format/Formatter.html
-http://developer.android.com/reference/android/text/format/Time.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/DraggableDot.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueWorker.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL10.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGL11.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLConfig.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLContext.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLDisplay.html
-http://developer.android.com/reference/javax/microedition/khronos/egl/EGLSurface.html
-http://developer.android.com/guide/developing/tools/draw9patch.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/PoolEntryRequest.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RefQueueHandler.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/AbstractConnPool.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ConnPoolByRoute.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/RouteSpecificPool.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/ThreadSafeClientConnManager.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThread.html
-http://developer.android.com/reference/org/apache/http/impl/conn/tsccm/WaitingThreadAborter.html
-http://developer.android.com/reference/android/support/v4/net/TrafficStatsCompat.html
-http://developer.android.com/reference/android/support/v4/net/TrafficStatsCompatIcs.html
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/AbstractHttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpRequestFactory.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpResponseFactory.html
-http://developer.android.com/reference/org/apache/http/impl/DefaultHttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/impl/EnglishReasonPhraseCatalog.html
-http://developer.android.com/reference/org/apache/http/impl/HttpConnectionMetricsImpl.html
-http://developer.android.com/reference/org/apache/http/impl/NoConnectionReuseStrategy.html
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpClientConnection.html
-http://developer.android.com/reference/org/apache/http/impl/SocketHttpServerConnection.html
-http://developer.android.com/reference/org/apache/http/util/ByteArrayBuffer.html
-http://developer.android.com/reference/org/apache/http/util/EncodingUtils.html
-http://developer.android.com/reference/org/apache/http/util/EntityUtils.html
-http://developer.android.com/reference/org/apache/http/util/ExceptionUtils.html
-http://developer.android.com/reference/org/apache/http/util/LangUtils.html
-http://developer.android.com/reference/org/apache/http/util/VersionInfo.html
-http://developer.android.com/reference/javax/microedition/khronos/opengles/GL.html
-http://developer.android.com/reference/android/location/GpsStatus.Listener.html
-http://developer.android.com/reference/android/location/GpsStatus.NmeaListener.html
-http://developer.android.com/reference/android/location/LocationListener.html
-http://developer.android.com/reference/android/location/Address.html
-http://developer.android.com/reference/android/location/Criteria.html
-http://developer.android.com/reference/android/location/Geocoder.html
-http://developer.android.com/reference/android/location/GpsSatellite.html
-http://developer.android.com/reference/android/location/GpsStatus.html
-http://developer.android.com/reference/android/location/Location.html
-http://developer.android.com/reference/junit/runner/BaseTestRunner.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnInitListener.html
-http://developer.android.com/reference/android/speech/tts/TextToSpeech.OnUtteranceCompletedListener.html
-http://developer.android.com/reference/android/view/ViewDebug.CapturedViewProperty.html
-http://developer.android.com/reference/android/view/ViewDebug.ExportedProperty.html
-http://developer.android.com/reference/android/view/ViewDebug.FlagToString.html
-http://developer.android.com/reference/android/view/ViewDebug.IntToString.html
-http://developer.android.com/reference/android/support/v4/content/Loader.OnLoadCompleteListener.html
-http://developer.android.com/reference/android/support/v4/content/AsyncTaskLoader.html
-http://developer.android.com/reference/android/support/v4/content/ContextCompat.html
-http://developer.android.com/reference/android/support/v4/content/Loader.ForceLoadContentObserver.html
-http://developer.android.com/reference/java/lang/Deprecated.html
-http://developer.android.com/reference/java/lang/annotation/Documented.html
-http://developer.android.com/reference/android/test/FlakyTest.html
-http://developer.android.com/reference/java/lang/annotation/Inherited.html
-http://developer.android.com/reference/android/webkit/JavascriptInterface.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/MediumTest.html
-http://developer.android.com/reference/java/lang/Override.html
-http://developer.android.com/reference/android/widget/RemoteViews.RemoteView.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/SmallTest.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Smoke.html
-http://developer.android.com/reference/android/test/suitebuilder/annotation/Suppress.html
-http://developer.android.com/reference/android/annotation/SuppressLint.html
-http://developer.android.com/reference/java/lang/SuppressWarnings.html
-http://developer.android.com/reference/java/lang/annotation/Target.html
-http://developer.android.com/reference/android/annotation/TargetApi.html
-http://developer.android.com/reference/dalvik/annotation/TestTarget.html
-http://developer.android.com/reference/dalvik/annotation/TestTargetClass.html
-http://developer.android.com/reference/android/test/UiThreadTest.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpTransportMetricsImpl.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlSerializer.html
-http://developer.android.com/reference/org/xmlpull/v1/XmlPullParserFactory.html
-http://developer.android.com/guide/developing/tools/adt.html
-http://developer.android.com/reference/javax/xml/transform/dom/DOMResult.html
-http://developer.android.com/reference/javax/xml/transform/stream/StreamResult.html
-http://developer.android.com/reference/org/xml/sax/helpers/AttributeListImpl.html
-http://developer.android.com/reference/org/xml/sax/helpers/NamespaceSupport.html
-http://developer.android.com/reference/org/xml/sax/helpers/ParserFactory.html
-http://developer.android.com/reference/org/xml/sax/helpers/XMLReaderFactory.html
-http://developer.android.com/reference/javax/xml/parsers/SAXParserFactory.html
-http://developer.android.com/reference/javax/security/auth/login/LoginException.html
-http://developer.android.com/reference/junit/runner/TestSuiteLoader.html
-http://developer.android.com/reference/junit/runner/Version.html
-http://developer.android.com/reference/java/awt/font/NumericShaper.html
-http://developer.android.com/reference/java/awt/font/TextAttribute.html
-http://developer.android.com/about/versions/android-1.5.html
-http://developer.android.com/about/versions/android-1.6.html
-http://developer.android.com/about/versions/android-2.1.html
-http://developer.android.com/about/versions/android-2.2.html
-http://developer.android.com/about/versions/android-2.3.html
-http://developer.android.com/reference/org/apache/http/impl/io/ChunkedInputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthInputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/IdentityInputStream.html
-http://developer.android.com/reference/java/sql/CallableStatement.html
-http://developer.android.com/reference/java/sql/DatabaseMetaData.html
-http://developer.android.com/reference/java/sql/Driver.html
-http://developer.android.com/reference/java/sql/ParameterMetaData.html
-http://developer.android.com/reference/java/sql/PreparedStatement.html
-http://developer.android.com/reference/java/sql/Savepoint.html
-http://developer.android.com/reference/java/sql/SQLInput.html
-http://developer.android.com/reference/java/sql/SQLOutput.html
-http://developer.android.com/reference/java/sql/Struct.html
-http://developer.android.com/reference/java/sql/DriverManager.html
-http://developer.android.com/reference/java/sql/DriverPropertyInfo.html
-http://developer.android.com/reference/java/sql/Types.html
-http://developer.android.com/reference/java/sql/ClientInfoStatus.html
-http://developer.android.com/reference/java/sql/RowIdLifetime.html
-http://developer.android.com/reference/java/sql/BatchUpdateException.html
-http://developer.android.com/reference/java/sql/DataTruncation.html
-http://developer.android.com/reference/java/sql/SQLClientInfoException.html
-http://developer.android.com/reference/java/sql/SQLDataException.html
-http://developer.android.com/reference/java/sql/SQLFeatureNotSupportedException.html
-http://developer.android.com/reference/java/sql/SQLIntegrityConstraintViolationException.html
-http://developer.android.com/reference/java/sql/SQLInvalidAuthorizationSpecException.html
-http://developer.android.com/reference/java/sql/SQLNonTransientConnectionException.html
-http://developer.android.com/reference/java/sql/SQLNonTransientException.html
-http://developer.android.com/reference/java/sql/SQLRecoverableException.html
-http://developer.android.com/reference/java/sql/SQLSyntaxErrorException.html
-http://developer.android.com/reference/java/sql/SQLTimeoutException.html
-http://developer.android.com/reference/java/sql/SQLTransactionRollbackException.html
-http://developer.android.com/reference/java/sql/SQLTransientConnectionException.html
-http://developer.android.com/reference/java/sql/SQLTransientException.html
-http://developer.android.com/reference/com/google/android/gms/common/ConnectionResult.html
-http://developer.android.com/reference/org/apache/http/impl/io/ChunkedOutputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/ContentLengthOutputStream.html
-http://developer.android.com/reference/org/apache/http/impl/io/IdentityOutputStream.html
-http://developer.android.com/sdk/api_diff/12/changes.html
-http://developer.android.com/reference/android/mtp/MtpDevice.html
-http://developer.android.com/reference/android/mtp/MtpStorageInfo.html
-http://developer.android.com/reference/android/mtp/MtpDeviceInfo.html
-http://developer.android.com/reference/android/mtp/MtpObjectInfo.html
-http://developer.android.com/reference/android/mtp/MtpConstants.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/GameControllerInput.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/GameView.html
-http://developer.android.com/reference/android/net/rtp/RtpStream.html
-http://developer.android.com/reference/android/net/rtp/AudioStream.html
-http://developer.android.com/reference/android/net/rtp/AudioGroup.html
-http://developer.android.com/reference/android/net/rtp/AudioCodec.html
-http://developer.android.com/reference/android/net/sip/SipProfile.Builder.html
-http://developer.android.com/reference/javax/xml/parsers/FactoryConfigurationError.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRoutePNames.html
-http://developer.android.com/reference/android/support/v13/app/FragmentCompat.html
-http://developer.android.com/guide/topics/usb/index.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractMessageWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/AbstractSessionOutputBuffer.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpRequestWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseParser.html
-http://developer.android.com/reference/org/apache/http/impl/io/HttpResponseWriter.html
-http://developer.android.com/reference/org/apache/http/impl/io/SocketOutputBuffer.html
-http://developer.android.com/resources/tutorials/views/hello-spinner.html
-http://developer.android.com/resources/tutorials/views/hello-listview.html
-http://developer.android.com/resources/tutorials/views/hello-gridview.html
-http://developer.android.com/sdk/api_diff/17/changes.html
-http://developer.android.com/sdk/api_diff/16/changes.html
-http://developer.android.com/about/versions/android-3.1-highlights.html
-http://developer.android.com/sdk/api_diff/11/changes.html
-http://developer.android.com/sdk/api_diff/9/changes.html
-http://developer.android.com/sdk/api_diff/8/changes.html
-http://developer.android.com/about/versions/android-2.2-highlights.html
-http://developer.android.com/sdk/api_diff/7/changes.html
-http://developer.android.com/about/versions/android-2.0-highlights.html
-http://developer.android.com/about/versions/android-2.0.1.html
-http://developer.android.com/sdk/api_diff/6/changes.html
-http://developer.android.com/about/versions/android-2.0.html
-http://developer.android.com/sdk/api_diff/5/changes.html
-http://developer.android.com/sdk/api_diff/4/changes.html
-http://developer.android.com/about/versions/android-1.6-highlights.html
-http://developer.android.com/sdk/api_diff/3/changes.html
-http://developer.android.com/about/versions/android-1.5-highlights.html
-http://developer.android.com/about/versions/android-1.1.html
-http://developer.android.com/reference/javax/xml/transform/stream/StreamSource.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.html
-http://developer.android.com/reference/com/google/android/gms/maps/MapFragment.html
-http://developer.android.com/reference/com/google/android/gms/maps/SupportMapFragment.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMapOptions.html
-http://developer.android.com/reference/android/os/storage/OnObbStateChangeListener.html
-http://developer.android.com/guide/topics/location/obtaining-user-location.html
-http://developer.android.com/sdk/ndk/index.html
-http://developer.android.com/reference/java/beans/PropertyChangeListener.html
-http://developer.android.com/reference/java/beans/PropertyChangeSupport.html
-http://developer.android.com/reference/android/telephony/PhoneNumberFormattingTextWatcher.html
-http://developer.android.com/resources/samples/AndroidBeamDemo/index.html
-http://developer.android.com/reference/android/telephony/SmsManager.html
-http://developer.android.com/reference/javax/security/cert/Certificate.html
-http://developer.android.com/reference/javax/security/cert/CertificateEncodingException.html
-http://developer.android.com/reference/javax/security/cert/CertificateException.html
-http://developer.android.com/reference/javax/security/cert/CertificateExpiredException.html
-http://developer.android.com/reference/javax/security/cert/CertificateNotYetValidException.html
-http://developer.android.com/reference/javax/security/cert/CertificateParsingException.html
-http://developer.android.com/tools/help/uiautomator/null
-http://developer.android.com/reference/org/apache/http/auth/params/AuthPNames.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthParamBean.html
-http://developer.android.com/reference/org/apache/http/auth/params/AuthParams.html
-http://developer.android.com/shareables/training/nsdchat.zip
-http://developer.android.com/reference/org/apache/http/client/params/AllClientPNames.html
-http://developer.android.com/reference/org/json/JSONObject.html
-http://developer.android.com/reference/org/w3c/dom/DOMConfiguration.html
-http://developer.android.com/reference/org/w3c/dom/Document.html
-http://developer.android.com/reference/org/w3c/dom/Node.html
-http://developer.android.com/reference/java/security/acl/Acl.html
-http://developer.android.com/reference/java/security/acl/Group.html
-http://developer.android.com/reference/java/security/acl/Owner.html
-http://developer.android.com/reference/java/security/acl/Permission.html
-http://developer.android.com/reference/java/security/acl/AclNotFoundException.html
-http://developer.android.com/reference/java/security/acl/LastOwnerException.html
-http://developer.android.com/reference/java/security/acl/NotOwnerException.html
-http://developer.android.com/reference/java/security/interfaces/DSAPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/DSAPublicKey.html
-http://developer.android.com/reference/java/security/interfaces/ECPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/ECPublicKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAMultiPrimePrivateCrtKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPrivateCrtKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPrivateKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAPublicKey.html
-http://developer.android.com/reference/renderscript/index.html
-http://developer.android.com/reference/renderscript/globals.html
-http://developer.android.com/reference/renderscript/annotated.html
-http://developer.android.com/reference/renderscript/rs__types_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__allocation_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__atomic_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__cl_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__debug_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__element_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__math_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__matrix_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__object_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__quaternion_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__sampler_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__time_8rsh_source.html
-http://developer.android.com/reference/renderscript/structrs__script__call.html
-http://developer.android.com/reference/renderscript/rs__types_8rsh.html
-http://developer.android.com/reference/renderscript/structrs__script.html
-http://developer.android.com/reference/renderscript/structrs__allocation.html
-http://developer.android.com/reference/renderscript/rs__core_8rsh_source.html
-http://developer.android.com/reference/javax/xml/transform/dom/DOMSource.html
-http://developer.android.com/reference/javax/xml/parsers/DocumentBuilderFactory.html
-http://developer.android.com/reference/javax/xml/parsers/SAXParser.html
-http://developer.android.com/reference/javax/xml/parsers/ParserConfigurationException.html
-http://developer.android.com/reference/org/apache/http/client/params/ClientPNames.html
-http://developer.android.com/reference/org/apache/http/client/params/AuthPolicy.html
-http://developer.android.com/reference/org/apache/http/client/params/ClientParamBean.html
-http://developer.android.com/reference/org/apache/http/client/params/CookiePolicy.html
-http://developer.android.com/reference/org/apache/http/client/params/HttpClientParams.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionPNames.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerPNames.html
-http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecPNames.html
-http://developer.android.com/reference/org/json/JSONException.html
-http://developer.android.com/reference/android/net/sip/SipException.html
-http://developer.android.com/reference/javax/security/auth/callback/UnsupportedCallbackException.html
-http://developer.android.com/reference/javax/security/auth/callback/Callback.html
-http://developer.android.com/reference/javax/xml/xpath/XPathException.html
-http://developer.android.com/reference/javax/xml/xpath/XPathExpressionException.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFactoryConfigurationException.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFunctionException.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRoute.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnConnectionParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnManagerParams.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnPerRouteBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParamBean.html
-http://developer.android.com/reference/org/apache/http/conn/params/ConnRouteParams.html
-http://developer.android.com/sdk/api_diff/9/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/changes-summary.html
-http://developer.android.com/reference/org/apache/http/conn/util/InetAddressUtils.html
-http://developer.android.com/reference/java/security/interfaces/DSAKey.html
-http://developer.android.com/reference/java/security/interfaces/DSAKeyPairGenerator.html
-http://developer.android.com/reference/java/security/interfaces/DSAParams.html
-http://developer.android.com/reference/java/security/interfaces/ECKey.html
-http://developer.android.com/reference/java/security/interfaces/RSAKey.html
-http://developer.android.com/reference/javax/xml/xpath/XPath.html
-http://developer.android.com/reference/javax/xml/xpath/XPathExpression.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFunction.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFunctionResolver.html
-http://developer.android.com/reference/javax/xml/xpath/XPathVariableResolver.html
-http://developer.android.com/reference/javax/xml/xpath/XPathConstants.html
-http://developer.android.com/reference/javax/xml/xpath/XPathFactory.html
-http://developer.android.com/sdk/api_diff/5/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/changes-summary.html
-http://developer.android.com/reference/android/support/v4/database/DatabaseUtilsCompat.html
-http://developer.android.com/reference/org/json/JSONArray.html
-http://developer.android.com/reference/org/json/JSONStringer.html
-http://developer.android.com/reference/org/json/JSONTokener.html
-http://developer.android.com/studio/run/win-usb.html
-http://developer.android.com/reference/android/media/effect/EffectUpdateListener.html
-http://developer.android.com/reference/javax/xml/validation/Schema.html
-http://developer.android.com/reference/android/support/v4/os/ParcelableCompatCreatorCallbacks.html
-http://developer.android.com/reference/android/support/v4/os/ParcelableCompat.html
-http://developer.android.com/reference/org/w3c/dom/Attr.html
-http://developer.android.com/reference/org/w3c/dom/CDATASection.html
-http://developer.android.com/reference/org/w3c/dom/CharacterData.html
-http://developer.android.com/reference/org/w3c/dom/Comment.html
-http://developer.android.com/reference/org/w3c/dom/DocumentFragment.html
-http://developer.android.com/reference/org/w3c/dom/DocumentType.html
-http://developer.android.com/reference/org/w3c/dom/DOMError.html
-http://developer.android.com/reference/org/w3c/dom/DOMErrorHandler.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementation.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementationList.html
-http://developer.android.com/reference/org/w3c/dom/DOMImplementationSource.html
-http://developer.android.com/reference/org/w3c/dom/DOMLocator.html
-http://developer.android.com/reference/org/w3c/dom/DOMStringList.html
-http://developer.android.com/reference/org/w3c/dom/Element.html
-http://developer.android.com/reference/org/w3c/dom/Entity.html
-http://developer.android.com/reference/org/w3c/dom/EntityReference.html
-http://developer.android.com/reference/org/w3c/dom/NamedNodeMap.html
-http://developer.android.com/reference/org/w3c/dom/NameList.html
-http://developer.android.com/reference/org/w3c/dom/NodeList.html
-http://developer.android.com/reference/org/w3c/dom/Notation.html
-http://developer.android.com/reference/org/w3c/dom/ProcessingInstruction.html
-http://developer.android.com/reference/org/w3c/dom/Text.html
-http://developer.android.com/reference/org/w3c/dom/TypeInfo.html
-http://developer.android.com/reference/org/w3c/dom/UserDataHandler.html
-http://developer.android.com/reference/android/support/v4/content/pm/ActivityInfoCompat.html
-http://developer.android.com/reference/renderscript/rs__math_8rsh.html
-http://developer.android.com/reference/renderscript/structrs__matrix4x4.html
-http://developer.android.com/reference/renderscript/rs__cl_8rsh.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/LocalServiceActivities.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerService.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/MessengerServiceActivities.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/Marker.html
-http://developer.android.com/resources/community-groups.html
-http://developer.android.com/reference/org/apache/http/client/utils/CloneUtils.html
-http://developer.android.com/reference/org/apache/http/client/utils/URIUtils.html
-http://developer.android.com/reference/org/apache/http/client/utils/URLEncodedUtils.html
-http://developer.android.com/guide/topics/fundamentals/activities.html
-http://developer.android.com/guide/topics/fundamentals/fragments.html
-http://developer.android.com/guide/topics/ui/notifiers/index.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusClient.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesClient.OnConnectionFailedListener.html
-http://developer.android.com/sdk/api_diff/11/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/changes-summary.html
-http://developer.android.com/resources/samples/Support4Demos/src/com/example/android/supportv4/app/FragmentTabsPager.html
-http://developer.android.com/sdk/api_diff/9/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.app.admin.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.service.wallpaper.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.telephony.gsm.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_dalvik.bytecode.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.awt.font.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.io.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.lang.reflect.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.net.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.nio.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.security.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.sql.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.text.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.concurrent.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.concurrent.atomic.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.concurrent.locks.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.logging.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_java.util.zip.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.net.ssl.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.security.auth.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.security.auth.x500.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.sql.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.datatype.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.parsers.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.transform.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_javax.xml.validation.html
-http://developer.android.com/sdk/api_diff/9/changes/pkg_org.apache.http.protocol.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.AudioTrack.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.CamcorderProfile.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.CameraProfile.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.ExifInterface.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/9/changes/android.media.MediaRecorder.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/app/DeviceAdminSample.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.security.auth.Subject.html
-http://developer.android.com/reference/renderscript/structrs__element.html
-http://developer.android.com/reference/renderscript/structrs__type.html
-http://developer.android.com/reference/renderscript/structrs__sampler.html
-http://developer.android.com/reference/renderscript/structrs__mesh.html
-http://developer.android.com/reference/renderscript/structrs__path.html
-http://developer.android.com/reference/renderscript/structrs__program__fragment.html
-http://developer.android.com/reference/renderscript/structrs__program__vertex.html
-http://developer.android.com/reference/renderscript/structrs__program__raster.html
-http://developer.android.com/reference/renderscript/structrs__program__store.html
-http://developer.android.com/reference/renderscript/structrs__font.html
-http://developer.android.com/reference/renderscript/structrs__matrix3x3.html
-http://developer.android.com/reference/renderscript/structrs__matrix2x2.html
-http://developer.android.com/sdk/api_diff/3/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/changes-summary.html
-http://developer.android.com/reference/renderscript/rs__object_8rsh.html
-http://developer.android.com/sdk/api_diff/9/changes/java.net.NetworkInterface.html
-http://developer.android.com/sdk/api_diff/9/changes/java.net.SocketImpl.html
-http://developer.android.com/reference/renderscript/rs__allocation_8rsh.html
-http://developer.android.com/reference/org/apache/http/cookie/params/CookieSpecParamBean.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageItemInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/17/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/changes-summary.html
-http://developer.android.com/guide/topics/fundamentals/loaders.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.logging.Logger.html
-http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/17/changes/android.text.format.DateUtils.html
-http://developer.android.com/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.html
-http://developer.android.com/sdk/api_diff/17/changes/android.inputmethodservice.AbstractInputMethodService.AbstractInputMethodSessionImpl.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityEvent.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.accessibility.AccessibilityNodeInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityService.html
-http://developer.android.com/sdk/api_diff/17/changes/android.accessibilityservice.AccessibilityServiceInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/17/changes/android.Manifest.permission_group.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.AlertDialog.Builder.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.RelativeLayout.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.accessibilityservice.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.app.admin.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.net.http.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.nfc.tech.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.renderscript.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.telephony.cdma.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/17/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.ContextThemeWrapper.html
-http://developer.android.com/sdk/api_diff/17/changes/android.appwidget.AppWidgetHost.html
-http://developer.android.com/sdk/api_diff/17/changes/android.appwidget.AppWidgetManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.BatteryManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.Binder.html
-http://developer.android.com/sdk/api_diff/17/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/17/changes/android.bluetooth.BluetoothA2dp.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.CalendarContract.CalendarColumns.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.CalendarContract.EventsColumns.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.ContentProviderClient.html
-http://developer.android.com/sdk/api_diff/17/changes/android.provider.CallLog.Calls.html
-http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Camera.CameraInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.telephony.cdma.CdmaCellLocation.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.CheckedTextView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/17/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/17/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/17/changes/android.renderscript.Script.html
-http://developer.android.com/sdk/api_diff/17/changes/android.database.DatabaseUtils.InsertHelper.html
-http://developer.android.com/sdk/api_diff/17/changes/android.text.format.DateFormat.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.admin.DeviceAdminInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.DigitalClock.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSession.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/17/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.SystemClock.html
-http://developer.android.com/sdk/api_diff/17/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/17/changes/android.util.FloatMath.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.PermissionInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.PermissionGroupInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ProviderInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.FragmentManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/17/changes/android.location.LocationProvider.html
-http://developer.android.com/sdk/api_diff/17/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.ViewAnimator.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.IntentSender.html
-http://developer.android.com/sdk/api_diff/17/changes/android.location.Location.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebHistoryItem.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.ViewGroup.MarginLayoutParams.html
-http://developer.android.com/sdk/api_diff/17/changes/android.text.TextUtils.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRouter.RouteInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.RemoteCallbackList.html
-http://developer.android.com/sdk/api_diff/17/changes/android.graphics.Paint.html
-http://developer.android.com/sdk/api_diff/17/changes/android.opengl.GLES20.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.inputmethod.InputMethodSubtype.html
-http://developer.android.com/sdk/api_diff/17/changes/android.telephony.PhoneStateListener.html
-http://developer.android.com/sdk/api_diff/17/changes/android.net.LocalSocket.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebViewDatabase.html
-http://developer.android.com/sdk/api_diff/17/changes/android.util.LruCache.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaMetadataRetriever.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRouter.html
-http://developer.android.com/sdk/api_diff/17/changes/android.media.MediaRouter.Callback.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.Process.html
-http://developer.android.com/sdk/api_diff/17/changes/android.app.Notification.Builder.html
-http://developer.android.com/sdk/api_diff/17/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/17/changes/android.os.PowerManager.WakeLock.html
-http://developer.android.com/sdk/api_diff/17/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.RelativeLayout.LayoutParams.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/17/changes/android.content.pm.ResolveInfo.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.ViewGroup.LayoutParams.html
-http://developer.android.com/sdk/api_diff/17/changes/android.net.wifi.ScanResult.html
-http://developer.android.com/sdk/api_diff/17/changes/android.hardware.Sensor.html
-http://developer.android.com/sdk/api_diff/17/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.VideoView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.SurfaceView.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.SlidingDrawer.html
-http://developer.android.com/sdk/api_diff/17/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/17/changes/android.widget.TwoLineListItem.html
-http://developer.android.com/reference/javax/security/auth/callback/PasswordCallback.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesClient.html
-http://developer.android.com/reference/renderscript/rs__atomic_8rsh.html
-http://developer.android.com/sdk/api_diff/17/changes/jdiff_statistics.html
-http://developer.android.com/shareables/app_widget_templates-v4.0.zip
-http://developer.android.com/sdk/api_diff/11/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/11/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/17/changes/fields_index_all.html
-http://developer.android.com/reference/android/telephony/gsm/GsmCellLocation.html
-http://developer.android.com/reference/android/telephony/gsm/SmsManager.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.SubmitPdu.html
-http://developer.android.com/reference/android/telephony/gsm/SmsMessage.MessageClass.html
-http://developer.android.com/sdk/api_diff/15/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/changes-summary.html
-http://developer.android.com/reference/android/telephony/CellIdentityCdma.html
-http://developer.android.com/reference/android/telephony/CellIdentityGsm.html
-http://developer.android.com/reference/android/telephony/CellIdentityLte.html
-http://developer.android.com/reference/android/telephony/CellInfo.html
-http://developer.android.com/reference/android/telephony/CellInfoCdma.html
-http://developer.android.com/reference/android/telephony/CellInfoGsm.html
-http://developer.android.com/reference/android/telephony/CellInfoLte.html
-http://developer.android.com/reference/android/telephony/CellSignalStrength.html
-http://developer.android.com/reference/android/telephony/CellSignalStrengthCdma.html
-http://developer.android.com/reference/android/telephony/CellSignalStrengthGsm.html
-http://developer.android.com/reference/android/telephony/CellSignalStrengthLte.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.Window.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.OnErrorListener.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.OnEventListener.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.OnInfoListener.html
-http://developer.android.com/reference/android/drm/DrmStore.ConstraintsColumns.html
-http://developer.android.com/reference/android/drm/DrmConvertedStatus.html
-http://developer.android.com/reference/android/drm/DrmErrorEvent.html
-http://developer.android.com/reference/android/drm/DrmEvent.html
-http://developer.android.com/reference/android/drm/DrmInfo.html
-http://developer.android.com/reference/android/drm/DrmInfoEvent.html
-http://developer.android.com/reference/android/drm/DrmInfoRequest.html
-http://developer.android.com/reference/android/drm/DrmInfoStatus.html
-http://developer.android.com/reference/android/drm/DrmManagerClient.html
-http://developer.android.com/reference/android/drm/DrmRights.html
-http://developer.android.com/reference/android/drm/DrmStore.html
-http://developer.android.com/reference/android/drm/DrmStore.Action.html
-http://developer.android.com/reference/android/drm/DrmStore.DrmObjectType.html
-http://developer.android.com/reference/android/drm/DrmStore.Playback.html
-http://developer.android.com/reference/android/drm/DrmStore.RightsStatus.html
-http://developer.android.com/reference/android/drm/DrmSupportInfo.html
-http://developer.android.com/reference/android/drm/DrmUtils.html
-http://developer.android.com/reference/android/drm/DrmUtils.ExtendedMetadataParser.html
-http://developer.android.com/reference/android/drm/ProcessedData.html
-http://developer.android.com/sdk/api_diff/15/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.service.textservice.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.service.wallpaper.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.view.textservice.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/15/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.ConnectionPoolDataSource.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.DataSource.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.PooledConnection.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.sql.RowSet.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.AbstractThreadedSyncAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.AlertDialog.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.AndroidException.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.AndroidRuntimeException.html
-http://developer.android.com/sdk/api_diff/11/changes/android.accounts.AuthenticatorDescription.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.ClipboardManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.CursorAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.Keyboard.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.LinearLayout.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.OverScroller.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ResourceCursorAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.Scroller.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.SimpleCursorAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.Spinner.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteOpenHelper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.VmPolicy.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebView.html
-http://developer.android.com/reference/android/telephony/CellLocation.html
-http://developer.android.com/reference/android/telephony/NeighboringCellInfo.html
-http://developer.android.com/reference/android/telephony/PhoneNumberUtils.html
-http://developer.android.com/reference/android/telephony/PhoneStateListener.html
-http://developer.android.com/reference/android/telephony/ServiceState.html
-http://developer.android.com/reference/android/telephony/SignalStrength.html
-http://developer.android.com/reference/android/telephony/SmsMessage.html
-http://developer.android.com/reference/android/telephony/SmsMessage.SubmitPdu.html
-http://developer.android.com/reference/android/telephony/SmsMessage.MessageClass.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsoluteLayout.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AbsoluteSizeSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AbsSeekBar.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.ActivityInstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/3/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewTreeObserver.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Packer.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.jar.Pack200.Unpacker.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.LogManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MetaKeyKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.AlarmManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.AlertDialog.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.DynamicDrawableSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.AlignmentSpan.Standard.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.graphics.drawable.shapes.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.preference.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.telephony.gsm.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.test.suitebuilder.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.Annotation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ArrayAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ArrowKeyMovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.AssetFileDescriptor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.AutoText.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BackgroundColorSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.BaseKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Binder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.VideoColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.BulletSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.DialogInterface.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.gsm.SmsMessage.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.Instrumentation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.TextUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.SimpleCursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.Character.UnicodeBlock.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.Chronometer.html
-http://developer.android.com/sdk/api_diff/3/changes/java.lang.Class.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.KeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ClickableSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.shapes.Shape.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Menu.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.Contacts.PeopleColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.RectF.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.CursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.CursorWrapper.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DateTimeKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Images.Media.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Video.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ForegroundColorSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.LeadingMarginSpan.Standard.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.QuoteSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RelativeSizeSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ScaleXSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StrikethroughSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.StyleSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SubscriptSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.SuperscriptSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TextAppearanceSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.TypefaceSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.URLSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UnderlineSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.DexFile.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DialerKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.string.html
-http://developer.android.com/sdk/api_diff/3/changes/android.preference.DialogPreference.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.DigitsKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.TouchUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.location.Location.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewDebug.html
-http://developer.android.com/sdk/api_diff/3/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.Media.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.telephony.PhoneNumberUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.GestureDetector.SimpleOnGestureListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.Resources.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.RotateDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.ScaleDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.Touch.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MultiTapKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.QwertyKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TextKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.TimeKeyListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.content.res.TypedArray.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.WebHistoryItem.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptHandler.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.UrlInterceptRegistry.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.Scroller.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/3/changes/android.net.NetworkInfo.html
-http://developer.android.com/sdk/api_diff/3/changes/android.app.LauncherActivity.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Looper.html
-http://developer.android.com/sdk/api_diff/3/changes/android.util.TimeUtils.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Handler.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.ImageSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.RingtoneManager.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.InstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.webkit.URLUtil.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.jar.html
-http://developer.android.com/sdk/api_diff/3/changes/pkg_java.util.logging.html
-http://developer.android.com/sdk/api_diff/3/changes/java.util.logging.Level.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.SoundPool.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.MaskFilterSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/3/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/3/changes/android.provider.MediaStore.Audio.AlbumColumns.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.MovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.method.ScrollingMovementMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ProgressBar.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.OrientationListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.os.Parcel.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.PopupWindow.OnDismissListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.ProviderTestCase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.RasterizerSpan.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.Rect.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.RemoteViews.ActionException.html
-http://developer.android.com/sdk/api_diff/3/changes/android.util.SparseIntArray.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/3/changes/android.widget.ResourceCursorAdapter.html
-http://developer.android.com/sdk/api_diff/3/changes/android.hardware.SensorListener.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.Spanned.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.SpanWatcher.html
-http://developer.android.com/sdk/api_diff/3/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/3/changes/android.test.suitebuilder.TestMethod.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.TextWatcher.html
-http://developer.android.com/sdk/api_diff/3/changes/android.view.animation.Transformation.html
-http://developer.android.com/sdk/api_diff/3/changes/android.graphics.drawable.TransitionDrawable.html
-http://developer.android.com/sdk/api_diff/3/changes/android.text.style.UpdateLayout.html
-http://developer.android.com/sdk/api_diff/11/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.AbstractExecutorService.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.AbstractOwnableSynchronizer.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.AbstractThreadedSyncAdapter.html
-http://developer.android.com/sdk/api_diff/9/changes/java.security.AccessController.html
-http://developer.android.com/sdk/api_diff/9/changes/android.location.Criteria.html
-http://developer.android.com/sdk/api_diff/9/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Calendar.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ThreadPoolExecutor.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.SharedPreferences.Editor.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.reflect.Array.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Array.html
-http://developer.android.com/sdk/api_diff/9/changes/java.nio.Buffer.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Arrays.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Collections.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicBoolean.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicInteger.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerArray.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicIntegerFieldUpdater.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLong.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongArray.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicLongFieldUpdater.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReference.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceArray.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.atomic.AtomicReferenceFieldUpdater.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.DatabaseMetaData.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.BaseInputConnection.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.BatchUpdateException.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Blob.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.BreakIterator.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.Executors.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.CallableStatement.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.File.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.TreeSet.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.TreeMap.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Class.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.ResourceBundle.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PrintStream.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PrintWriter.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Clob.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/9/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.CollationKey.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ConcurrentHashMap.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Connection.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.System.html
-http://developer.android.com/sdk/api_diff/9/changes/android.provider.ContactsContract.CommonDataKinds.Nickname.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Math.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.StrictMath.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.DataTruncation.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.datatype.DatatypeFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.DateFormatSymbols.html
-http://developer.android.com/sdk/api_diff/9/changes/android.text.format.DateUtils.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.DecimalFormatSymbols.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ScheduledThreadPoolExecutor.html
-http://developer.android.com/sdk/api_diff/9/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.LinkedList.html
-http://developer.android.com/sdk/api_diff/9/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.parsers.DocumentBuilderFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Double.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.DropBoxManager.Entry.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLContextSpi.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Enum.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.ExecutorService.html
-http://developer.android.com/sdk/api_diff/9/changes/org.apache.http.protocol.HTTP.html
-http://developer.android.com/sdk/api_diff/9/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/9/changes/dalvik.system.PathClassLoader.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Float.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.Format.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.FutureTask.html
-http://developer.android.com/sdk/api_diff/9/changes/android.location.Geocoder.html
-http://developer.android.com/sdk/api_diff/9/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.Package.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.LockSupport.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.String.html
-http://developer.android.com/sdk/api_diff/9/changes/java.lang.reflect.Member.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLContext.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.ResultSet.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionContext.html
-http://developer.android.com/sdk/api_diff/9/changes/java.security.Policy.html
-http://developer.android.com/sdk/api_diff/9/changes/android.hardware.Sensor.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.security.auth.x500.X500Principal.html
-http://developer.android.com/sdk/api_diff/9/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.KeyStoreBuilderParameters.html
-http://developer.android.com/sdk/api_diff/9/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/9/changes/android.telephony.gsm.GsmCellLocation.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.locks.ReentrantReadWriteLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.text.NumberFormat.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.InputConnection.html
-http://developer.android.com/sdk/api_diff/9/changes/android.view.inputmethod.InputConnectionWrapper.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLEngine.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSocket.html
-http://developer.android.com/sdk/api_diff/9/changes/android.content.IntentSender.html
-http://developer.android.com/sdk/api_diff/9/changes/android.opengl.GLES20.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.HandshakeCompletedEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/android.graphics.ImageFormat.html
-http://developer.android.com/sdk/api_diff/9/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.IOException.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Statement.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLException.html
-http://developer.android.com/sdk/api_diff/9/changes/java.awt.font.TextAttribute.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Properties.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Locale.html
-http://developer.android.com/sdk/api_diff/9/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.Types.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.ObjectStreamClass.html
-http://developer.android.com/sdk/api_diff/9/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/9/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.parsers.SAXParserFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.transform.TransformerFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.xml.validation.SchemaFactory.html
-http://developer.android.com/sdk/api_diff/9/changes/android.service.wallpaper.WallpaperService.Engine.html
-http://developer.android.com/sdk/api_diff/9/changes/dalvik.bytecode.Opcodes.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.ParameterMetaData.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PipedInputStream.html
-http://developer.android.com/sdk/api_diff/9/changes/java.io.PipedReader.html
-http://developer.android.com/sdk/api_diff/9/changes/android.os.PowerManager.WakeLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.PreparedStatement.html
-http://developer.android.com/sdk/api_diff/9/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.PropertyResourceBundle.html
-http://developer.android.com/sdk/api_diff/9/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLInput.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.Scanner.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.ResultSetMetaData.html
-http://developer.android.com/sdk/api_diff/9/changes/android.net.wifi.WifiManager.WifiLock.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLOutput.html
-http://developer.android.com/sdk/api_diff/9/changes/java.sql.SQLWarning.html
-http://developer.android.com/sdk/api_diff/9/changes/javax.net.ssl.SSLSessionBindingEvent.html
-http://developer.android.com/sdk/api_diff/9/changes/java.util.concurrent.TimeUnit.html
-http://developer.android.com/sdk/api_diff/9/changes/java.security.UnrecoverableKeyException.html
-http://developer.android.com/sdk/api_diff/3/changes/jdiff_statistics.html
-http://developer.android.com/reference/android/telephony/cdma/CdmaCellLocation.html
-http://developer.android.com/studio/index.html
-http://developer.android.com/tools/sdk/ndk/overview.html
-http://developer.android.com/reference/dalvik/system/DexClassLoader.html
-http://developer.android.com/sdk/api_diff/13/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/changes-summary.html
-http://developer.android.com/tools/help/sqlite3.html
-http://developer.android.com/guide/developing/device.html
-http://developer.android.com/sdk/adding-components.html
-http://developer.android.com/sdk/api_diff/11/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.DropBoxManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DeviceAdminReceiver.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContacts.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.GroupsColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.BatteryManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.StatusColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.DownloadManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactStatusColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.ActivityManager.RecentTaskInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.dimen.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.PackageStats.html
-http://developer.android.com/sdk/api_diff/11/changes/android.preference.PreferenceActivity.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.AlarmClock.html
-http://developer.android.com/sdk/api_diff/11/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.EditorInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.BitmapFactory.Options.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.accounts.AccountManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/11/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.layout.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.format.Time.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.AbstractCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.StateSet.html
-http://developer.android.com/sdk/api_diff/11/changes/dalvik.bytecode.Opcodes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.Photo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.ContactsColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.CamcorderProfile.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.RawContactsColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.R.string.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.AsyncTask.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.MenuItem.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.SurfaceHolder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.ExifInterface.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.AlertDialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.Patterns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.Insets.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.InputType.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.Browser.SearchColumns.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.admin.DeviceAdminInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.DownloadManager.Request.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.MediaRecorder.AudioSource.html
-http://developer.android.com/sdk/api_diff/15/changes/android.opengl.GLES11Ext.html
-http://developer.android.com/reference/android/nfc/tech/IsoDep.html
-http://developer.android.com/reference/android/nfc/tech/MifareClassic.html
-http://developer.android.com/reference/android/nfc/tech/MifareUltralight.html
-http://developer.android.com/reference/android/nfc/tech/Ndef.html
-http://developer.android.com/reference/android/nfc/tech/NdefFormatable.html
-http://developer.android.com/reference/android/nfc/tech/NfcA.html
-http://developer.android.com/reference/android/nfc/tech/NfcB.html
-http://developer.android.com/reference/android/nfc/tech/NfcBarcode.html
-http://developer.android.com/reference/android/nfc/tech/NfcF.html
-http://developer.android.com/reference/android/nfc/tech/NfcV.html
-http://developer.android.com/reference/android/nfc/tech/TagTechnology.html
-http://developer.android.com/reference/android/net/sip/SipManager.html
-http://developer.android.com/reference/android/net/sip/SipAudioCall.html
-http://developer.android.com/resources/samples/SipDemo/index.html
-http://developer.android.com/reference/android/net/sip/SipAudioCall.Listener.html
-http://developer.android.com/reference/android/net/sip/SipErrorCode.html
-http://developer.android.com/reference/android/net/sip/SipSession.html
-http://developer.android.com/reference/android/net/sip/SipSession.Listener.html
-http://developer.android.com/reference/android/net/sip/SipSession.State.html
-http://developer.android.com/reference/android/net/sip/SipRegistrationListener.html
-http://developer.android.com/sdk/api_diff/7/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/4/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/changes-summary.html
-http://developer.android.com/guide/developing/debugging/index.html
-http://developer.android.com/guide/developing/tools/adb.html
-http://developer.android.com/guide/publishing/app-signing.html
-http://developer.android.com/guide/developing/devices/managing-avds.html
-http://developer.android.com/sdk/api_diff/15/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/15/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/5/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_all.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusOneButton.OnPlusOneClickListener.html
-http://developer.android.com/reference/com/google/android/gms/plus/GooglePlusUtil.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusOneButton.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusShare.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusShare.Builder.html
-http://developer.android.com/reference/com/google/android/gms/plus/PlusSignInButton.html
-http://developer.android.com/sdk/api_diff/16/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/changes-summary.html
-http://developer.android.com/guide/appendix/api-levels.html
-http://developer.android.com/sdk/api_diff/17/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.SettingsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.style.AbsoluteSizeSpan.html
-http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.AbstractInputMethodService.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.locks.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.AbstractWindowedCursor.html
-http://developer.android.com/sdk/api_diff/5/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/5/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.Insert.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.ActivityManager.RunningServiceInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginList.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethods.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.AllocationLimitError.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.AndroidTestRunner.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/5/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioFormat.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ContactMethodsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.BatteryManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.BitmapDrawable.html
-http://developer.android.com/sdk/api_diff/5/changes/java.util.concurrent.BlockingQueue.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.CallbackProxy.html
-http://developer.android.com/sdk/api_diff/5/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.NotificationManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.MediaStore.Images.Thumbnails.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.MediaController.MediaPlayerControl.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.VideoView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.OrganizationColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneNumberUtils.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Extensions.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.ExtensionsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupMembership.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Groups.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.GroupsColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Intents.UI.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Organizations.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.ContactMethods.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Extensions.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.People.Phones.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PeopleColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Phones.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhonesColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Photos.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PhotosColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.PresenceColumns.html
-http://developer.android.com/sdk/api_diff/5/changes/android.provider.Contacts.Settings.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.Debug.MemoryInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/5/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.format.DateUtils.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.TextPaint.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.Plugin.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.drawable.Drawable.ConstantState.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.format.Formatter.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.PluginData.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.NeighboringCellInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptHandler.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.UrlInterceptRegistry.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/5/changes/android.widget.SimpleCursorTreeAdapter.html
-http://developer.android.com/sdk/api_diff/5/changes/android.opengl.GLSurfaceView.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/5/changes/android.os.HandlerThread.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.HapticFeedbackConstants.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.InstrumentationTestCase.html
-http://developer.android.com/sdk/api_diff/5/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/5/changes/android.text.InputType.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.IntentService.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ProviderInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/pkg_java.util.concurrent.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.KeyEvent.Callback.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.LauncherActivity.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/5/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/5/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/5/changes/android.telephony.PhoneStateListener.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.Service.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.graphics.PixelFormat.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.PotentialDeadlockError.html
-http://developer.android.com/sdk/api_diff/5/changes/android.R.drawable.html
-http://developer.android.com/sdk/api_diff/5/changes/android.content.pm.ResolveInfo.html
-http://developer.android.com/sdk/api_diff/5/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceView.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.StaleDexCacheError.html
-http://developer.android.com/sdk/api_diff/5/changes/android.media.ToneGenerator.html
-http://developer.android.com/sdk/api_diff/5/changes/android.view.SurfaceHolder.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TemporaryDirectory.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.TouchDex.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMRuntime.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.VMStack.html
-http://developer.android.com/sdk/api_diff/5/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/5/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/15/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/7/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/7/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/7/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.GeolocationPermissions.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/7/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/7/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/7/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.CacheManager.CacheResult.html
-http://developer.android.com/sdk/api_diff/7/changes/android.media.MediaRecorder.AudioSource.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebStorage.html
-http://developer.android.com/sdk/api_diff/7/changes/android.graphics.Rect.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/7/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/7/changes/android.widget.ViewFlipper.html
-http://developer.android.com/sdk/api_diff/7/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/7/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/7/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/7/changes/android.telephony.PhoneStateListener.html
-http://developer.android.com/sdk/api_diff/7/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/7/changes/android.telephony.NeighboringCellInfo.html
-http://developer.android.com/reference/classes.html
-http://developer.android.com/resources/samples/SpinnerTest/index.html
-http://developer.android.com/resources/samples/Spinner/index.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.CancelableCallback.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.InfoWindowAdapter.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnCameraChangeListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnInfoWindowClickListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMapClickListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMapLongClickListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMarkerClickListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/GoogleMap.OnMarkerDragListener.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/GroundOverlay.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/GroundOverlayOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/MarkerOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/Polygon.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/PolygonOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/Polyline.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/PolylineOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/TileOverlay.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/TileOverlayOptions.html
-http://developer.android.com/reference/com/google/android/gms/maps/CameraUpdate.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.html
-http://developer.android.com/reference/com/google/android/gms/maps/Projection.html
-http://developer.android.com/reference/com/google/android/gms/maps/UiSettings.html
-http://developer.android.com/reference/com/google/android/gms/maps/LocationSource.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/TileProvider.html
-http://developer.android.com/reference/com/google/android/gms/maps/CameraUpdateFactory.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.AudioEncoder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AbsSeekBar.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.AbstractCursor.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityEvent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityNodeInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.accessibility.AccessibilityRecord.html
-http://developer.android.com/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityService.html
-http://developer.android.com/sdk/api_diff/16/changes/android.accessibilityservice.AccessibilityServiceInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.media.audiofx.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/16/changes/android.security.KeyChain.html
-http://developer.android.com/sdk/api_diff/16/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ActionMode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ActionProvider.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.MemoryInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.ActivityManager.RunningAppProcessInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AdapterViewAnimator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AdapterViewFlipper.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Notification.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.AllocationBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.wifi.p2p.WifiP2pManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewTreeObserver.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.InstrumentationTestSuite.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.TestSuite.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Program.BaseProgramBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.TriangleMeshBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.UserDictionary.Words.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Allocation.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.accessibilityservice.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.animation.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.drm.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.net.wifi.p2p.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.nfc.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.nfc.tech.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.renderscript.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.security.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.service.textservice.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.view.textservice.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/16/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetHostView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.appwidget.AppWidgetProvider.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.Assert.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.AssertionFailedError.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.AssertionFailedError.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.AsyncTaskLoader.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.SurfaceTexture.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.AttendeesColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.AudioRecord.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.AvoidXfermode.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.runner.BaseTestRunner.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Notification.html
-http://developer.android.com/sdk/api_diff/16/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.html
-http://developer.android.com/sdk/api_diff/16/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.EventsColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.CalendarContract.RemindersColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.CalendarView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Camera.html
-http://developer.android.com/sdk/api_diff/16/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.Vibrator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.Loader.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/16/changes/android.animation.LayoutTransition.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.CheckedTextView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipData.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipData.Item.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ClipDescription.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteClosable.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteProgram.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.ComparisonFailure.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.ComparisonFailure.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ComponentCallbacks2.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.CommonDataKinds.Phone.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.Contacts.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.DataUsageFeedback.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.ContactsContract.PhoneLookupColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSubtype.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.ContentObservable.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.ContentObserver.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContentProviderClient.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.CookieManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Font.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NdefRecord.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RSSurfaceView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RSTextureView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.KeyCharacterMap.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.Cursor.html
-http://developer.android.com/sdk/api_diff/16/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertexFixedFunction.Constants.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.StrictMode.VmPolicy.Builder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.DownloadManager.Request.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmManagerClient.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.Action.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.DrmObjectType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.Playback.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmStore.RightsStatus.html
-http://developer.android.com/sdk/api_diff/16/changes/android.drm.DrmSupportInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.TokenWatcher.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.inputmethod.EditorInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Element.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.GridLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/junit.framework.TestResult.html
-http://developer.android.com/sdk/api_diff/16/changes/android.text.Html.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.EntryType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.FileA3D.IndexEntry.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Font.Style.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.FormatException.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.FrameLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.Gallery.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.GeolocationPermissions.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.View.AccessibilityDelegate.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.ImageView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Sampler.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.ToneGenerator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramStore.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NdefMessage.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Program.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.NfcAdapter.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.InputDevice.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.LinearLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.res.Resources.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.Spinner.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.InputEvent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.RelativeLayout.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.SearchView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramVertex.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewStub.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.drawable.GradientDrawable.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.audiofx.Visualizer.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.Switch.html
-http://developer.android.com/sdk/api_diff/16/changes/android.provider.MediaStore.MediaColumns.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.inputmethod.InputMethodManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.nfc.tech.IsoDep.html
-http://developer.android.com/sdk/api_diff/16/changes/android.app.KeyguardManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.Paint.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.JsResult.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_junit.framework.html
-http://developer.android.com/sdk/api_diff/16/changes/pkg_junit.runner.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.PixelFormat.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.Process.html
-http://developer.android.com/sdk/api_diff/16/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Mesh.Primitive.html
-http://developer.android.com/sdk/api_diff/16/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/16/changes/android.net.Uri.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteOpenHelper.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.textservice.SpellCheckerSession.SpellCheckerSessionListener.html
-http://developer.android.com/sdk/api_diff/16/changes/android.service.textservice.SpellCheckerService.Session.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PackageInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/16/changes/android.content.pm.PermissionInfo.html
-http://developer.android.com/sdk/api_diff/16/changes/android.graphics.PixelXorXfermode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragment.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.EnvMode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramFragmentFixedFunction.Builder.Format.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.ProgramRaster.CullMode.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQueryBuilder.html
-http://developer.android.com/sdk/api_diff/16/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/16/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.RenderScriptGL.SurfaceConfig.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/16/changes/android.renderscript.Script.html
-http://developer.android.com/sdk/api_diff/16/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.TextureView.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.SQLException.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteException.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteQuery.html
-http://developer.android.com/sdk/api_diff/16/changes/android.database.sqlite.SQLiteStatement.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.HierarchyTraceType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewDebug.RecyclerTraceType.html
-http://developer.android.com/sdk/api_diff/16/changes/android.view.ViewPropertyAnimator.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebIconDatabase.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebStorage.html
-http://developer.android.com/sdk/api_diff/16/changes/android.webkit.WebView.HitTestResult.html
-http://developer.android.com/sdk/api_diff/13/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/13/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.AttendeesColumns.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.CalendarColumns.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.CalendarContract.EventsColumns.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/15/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/16/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/7/changes/jdiff_statistics.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/LatLng.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.accounts.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.app.admin.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.preference.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_dalvik.bytecode.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/11/changes/pkg_java.util.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.View.html
-http://developer.android.com/reference/com/google/android/gms/maps/LocationSource.OnLocationChangedListener.html
-http://developer.android.com/reference/renderscript/rs__sampler_8rsh.html
-http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.accessibility.AccessibilityRecord.html
-http://developer.android.com/sdk/api_diff/15/changes/android.bluetooth.BluetoothDevice.html
-http://developer.android.com/sdk/api_diff/15/changes/android.appwidget.AppWidgetHostView.html
-http://developer.android.com/sdk/api_diff/15/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/15/changes/android.media.CamcorderProfile.html
-http://developer.android.com/sdk/api_diff/15/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.textservice.SpellCheckerSession.html
-http://developer.android.com/sdk/api_diff/15/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/15/changes/android.text.style.SuggestionSpan.html
-http://developer.android.com/sdk/api_diff/15/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.html
-http://developer.android.com/sdk/api_diff/15/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/15/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/15/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/15/changes/android.media.MediaMetadataRetriever.html
-http://developer.android.com/sdk/api_diff/15/changes/android.service.textservice.SpellCheckerService.Session.html
-http://developer.android.com/sdk/api_diff/15/changes/android.speech.tts.TextToSpeechService.html
-http://developer.android.com/sdk/api_diff/15/changes/android.os.RemoteException.html
-http://developer.android.com/sdk/api_diff/15/changes/android.view.textservice.SuggestionsInfo.html
-http://developer.android.com/sdk/api_diff/15/changes/android.graphics.SurfaceTexture.html
-http://developer.android.com/sdk/api_diff/15/changes/android.service.wallpaper.WallpaperService.Engine.html
-http://developer.android.com/sdk/api_diff/15/changes/android.webkit.WebSettings.LayoutAlgorithm.html
-http://developer.android.com/reference/javax/xml/validation/SchemaFactory.html
-http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.ActivityGroup.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.hardware.usb.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/13/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.FragmentTransaction.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.Binder.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/13/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/13/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.graphics.Point.html
-http://developer.android.com/sdk/api_diff/13/changes/android.graphics.PointF.html
-http://developer.android.com/sdk/api_diff/13/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/13/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.IBinder.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.KeyguardManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.FragmentManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/13/changes/android.hardware.usb.UsbDeviceConnection.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.KeyguardManager.KeyguardLock.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.LocalActivityManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/13/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/13/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/13/changes/android.app.TabActivity.html
-http://developer.android.com/reference/com/google/android/gms/panorama/PanoramaClient.OnPanoramaInfoLoadedListener.html
-http://developer.android.com/reference/com/google/android/gms/panorama/PanoramaClient.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/nfc/ForegroundDispatch.html
-http://developer.android.com/sdk/api_diff/13/changes/jdiff_statistics.html
-http://developer.android.com/reference/renderscript/structrs__tm.html
-http://developer.android.com/reference/javax/xml/validation/SchemaFactoryLoader.html
-http://developer.android.com/reference/javax/xml/validation/TypeInfoProvider.html
-http://developer.android.com/reference/javax/xml/validation/Validator.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/BitmapDescriptorFactory.html
-http://developer.android.com/reference/com/google/android/gms/maps/MapsInitializer.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesNotAvailableException.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/BitmapDescriptor.html
-http://developer.android.com/resources/samples/BluetoothChat/index.html
-http://developer.android.com/resources/samples/BluetoothHDP/index.html
-http://developer.android.com/sdk/api_diff/12/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/11/changes/java.lang.Character.UnicodeBlock.html
-http://developer.android.com/sdk/api_diff/11/changes/java.lang.Object.html
-http://developer.android.com/reference/dalvik/system/BaseDexClassLoader.html
-http://developer.android.com/reference/dalvik/system/DexFile.html
-http://developer.android.com/reference/android/sax/Element.html
-http://developer.android.com/reference/android/sax/ElementListener.html
-http://developer.android.com/reference/android/sax/EndElementListener.html
-http://developer.android.com/reference/android/sax/EndTextElementListener.html
-http://developer.android.com/reference/dalvik/system/PathClassLoader.html
-http://developer.android.com/reference/android/sax/RootElement.html
-http://developer.android.com/reference/android/sax/StartElementListener.html
-http://developer.android.com/reference/android/sax/TextElementListener.html
-http://developer.android.com/sdk/api_diff/17/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.graphics.drawable.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.telephony.gsm.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_java.util.concurrent.html
-http://developer.android.com/sdk/api_diff/4/changes/pkg_java.util.concurrent.locks.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/CameraPosition.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.Deque.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.Queue.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ArrayAdapter.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SyncAdapterType.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteProgram.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteQueryBuilder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.CacheManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.ArrowKeyMovementMethod.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.ScrollingMovementMethod.html
-http://developer.android.com/sdk/api_diff/11/changes/android.inputmethodservice.InputMethodService.InputMethodImpl.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethod.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.ResourceBundle.html
-http://developer.android.com/sdk/api_diff/11/changes/android.net.Uri.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetHost.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.BaseInputConnection.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputConnection.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputConnectionWrapper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.DrawableContainerState.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SyncInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.ThreadPolicy.Builder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.sqlite.SQLiteStatement.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.BaseKeyListener.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.ImageView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.net.Uri.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.DatePicker.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Bundle.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.ColorDrawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.MediaStore.Audio.Genres.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.ResourceBundle.Control.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.ScaleGestureDetector.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.DatePickerDialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.net.Proxy.html
-http://developer.android.com/sdk/api_diff/11/changes/android.preference.Preference.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.LayoutInflater.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.method.QwertyKeyListener.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.animation.Interpolator.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.Locale.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.GridView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/11/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/11/changes/android.opengl.GLSurfaceView.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentProviderClient.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SharedPreferences.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.inputmethod.InputMethodInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.text.SpannableStringBuilder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.CursorWindow.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.CursorWrapper.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.CommonDataKinds.Relation.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.BroadcastReceiver.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Vibrator.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.NavigableMap.html
-http://developer.android.com/sdk/api_diff/11/changes/java.util.NavigableSet.html
-http://developer.android.com/sdk/api_diff/11/changes/android.database.AbstractWindowedCursor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.pm.ComponentInfo.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.ContentValues.html
-http://developer.android.com/sdk/api_diff/11/changes/android.os.StrictMode.html
-http://developer.android.com/sdk/api_diff/11/changes/android.appwidget.AppWidgetManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.content.SharedPreferences.Editor.html
-http://developer.android.com/sdk/api_diff/11/changes/android.util.SparseArray.html
-http://developer.android.com/sdk/api_diff/11/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.TabWidget.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.DrawableContainer.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.Service.html
-http://developer.android.com/sdk/api_diff/11/changes/android.widget.QuickContactBadge.html
-http://developer.android.com/sdk/api_diff/11/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/11/changes/android.graphics.drawable.LayerDrawable.html
-http://developer.android.com/sdk/api_diff/11/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/11/changes/android.app.ProgressDialog.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.MotionEvent.html
-http://developer.android.com/guide/topics/network/sip.html
-http://developer.android.com/sdk/api_diff/17/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/17/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/methods_index_changes.html
-http://developer.android.com/reference/renderscript/rs__matrix_8rsh.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.Contacts.AggregationSuggestions.html
-http://developer.android.com/sdk/api_diff/11/changes/android.provider.ContactsContract.DataColumnsWithJoins.html
-http://developer.android.com/sdk/api_diff/13/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/17/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/17/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/11/changes/android.webkit.CacheManager.CacheResult.html
-http://developer.android.com/sdk/api_diff/11/changes/android.view.KeyCharacterMap.KeyData.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.LauncherActivity.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.LauncherActivity.ListItem.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/4/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/5/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/4/changes/android.text.style.ImageSpan.html
-http://developer.android.com/sdk/api_diff/9/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_all.html
-http://developer.android.com/reference/renderscript/rs__debug_8rsh.html
-http://developer.android.com/reference/renderscript/rs__element_8rsh.html
-http://developer.android.com/reference/renderscript/rs__quaternion_8rsh.html
-http://developer.android.com/reference/renderscript/rs__time_8rsh.html
-http://developer.android.com/reference/renderscript/globals_func.html
-http://developer.android.com/reference/renderscript/globals_type.html
-http://developer.android.com/reference/renderscript/globals_enum.html
-http://developer.android.com/reference/renderscript/rs__graphics_8rsh.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.BitmapFactory.Options.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.NinePatch.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.Typeface.html
-http://developer.android.com/resources/faq/index.html
-http://developer.android.com/sdk/api_diff/4/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/11/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/packages_index_changes.html
-http://developer.android.com/shareables/sample_images.zip
-http://developer.android.com/reference/com/google/android/gms/maps/model/LatLngBounds.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/LatLngBounds.Builder.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/Tile.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/UrlTileProvider.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/VisibleRegion.html
-http://developer.android.com/reference/com/google/android/gms/maps/model/RuntimeRemoteException.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.AutoCompleteTextView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.CheckedTextView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.PopupWindow.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabHost.TabSpec.html
-http://developer.android.com/sdk/api_diff/4/changes/android.widget.TabWidget.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_menu.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_status_bar.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_tab.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_dialog.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_list.html
-http://developer.android.com/shareables/icon_templates-v4.0.zip
-http://developer.android.com/shareables/icon_templates-v2.3.zip
-http://developer.android.com/shareables/icon_templates-v2.0.zip
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Genres.Members.html
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.MediaStore.Audio.Media.html
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/4/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/13/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.ToneGenerator.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.SubmitPdu.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.NinePatchDrawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.AudioSource.html
-http://developer.android.com/sdk/api_diff/4/changes/android.util.Config.html
-http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.VERSION.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.gsm.SmsMessage.MessageClass.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.anim.html
-http://developer.android.com/sdk/api_diff/4/changes/android.util.DisplayMetrics.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.BitmapDrawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.test.AndroidTestCase.html
-http://developer.android.com/sdk/api_diff/4/changes/android.os.RemoteCallbackList.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ConfigurationInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.location.Address.html
-http://developer.android.com/sdk/api_diff/4/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.VelocityTracker.html
-http://developer.android.com/sdk/api_diff/4/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.TimeUnit.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.AnimationDrawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission_group.html
-http://developer.android.com/sdk/api_diff/4/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ProviderInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/4/changes/android.inputmethodservice.KeyboardView.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.ComponentName.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/4/changes/android.util.TypedValue.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/4/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/4/changes/java.util.concurrent.locks.AbstractQueuedSynchronizer.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/4/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/4/changes/android.graphics.drawable.Drawable.html
-http://developer.android.com/sdk/api_diff/4/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/4/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/4/changes/android.hardware.SensorManager.html
-http://developer.android.com/sdk/api_diff/4/changes/android.R.drawable.html
-http://developer.android.com/guide/practices/ui_guidelines/icon_design_launcher_archive.html
-http://developer.android.com/sdk/api_diff/11/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/11/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/fields_index_changes.html
-http://developer.android.com/reference/renderscript/rs__mesh_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__program_8rsh_source.html
-http://developer.android.com/reference/renderscript/rs__graphics_8rsh_source.html
-http://developer.android.com/sdk/api_diff/10/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/7/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/fields_index_all.html
-http://developer.android.com/resources/samples/NFCDemo/index.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/graphics/CameraPreview.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/media/AudioFxDemo.html
-http://developer.android.com/resources/samples/ApiDemos/src/com/example/android/apis/view/SecureView.html
-http://developer.android.com/sdk/api_diff/3/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/10/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.nfc.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/10/changes/pkg_android.test.mock.html
-http://developer.android.com/reference/com/google/android/gms/common/GooglePlayServicesClient.ConnectionCallbacks.html
-http://developer.android.com/sdk/api_diff/14/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/constructors_index_changes.html
-http://developer.android.com/reference/renderscript/rs__mesh_8rsh.html
-http://developer.android.com/sdk/api_diff/10/changes/android.nfc.NfcAdapter.html
-http://developer.android.com/sdk/api_diff/10/changes/android.media.MediaRecorder.AudioEncoder.html
-http://developer.android.com/sdk/api_diff/10/changes/android.media.MediaRecorder.OutputFormat.html
-http://developer.android.com/sdk/api_diff/10/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/10/changes/android.graphics.BitmapFactory.Options.html
-http://developer.android.com/sdk/api_diff/10/changes/android.bluetooth.BluetoothDevice.html
-http://developer.android.com/sdk/api_diff/10/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/10/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/10/changes/android.content.Context.html
-http://developer.android.com/reference/com/google/android/gcm/GCMBaseIntentService.html
-http://developer.android.com/reference/com/google/android/gcm/GCMBroadcastReceiver.html
-http://developer.android.com/reference/com/google/android/gcm/GCMConstants.html
-http://developer.android.com/reference/com/google/android/gcm/GCMRegistrar.html
-http://developer.android.com/sdk/api_diff/12/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.animation.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.drm.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.http.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.sip.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.format.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.text.method.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/12/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityEvent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.accessibility.AccessibilityManager.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.view.accessibility.html
-http://developer.android.com/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityService.html
-http://developer.android.com/sdk/api_diff/14/changes/android.accessibilityservice.AccessibilityServiceInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.reflect.AccessibleObject.html
-http://developer.android.com/sdk/api_diff/14/changes/android.accounts.AccountManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/14/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.ActionBar.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.ActionBar.Tab.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ActionMode.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.AdapterViewAnimator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.FieldPacker.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.MediaStore.Audio.AudioColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.AlertDialog.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Allocation.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.AllocationAdapter.html
-http://developer.android.com/sdk/api_diff/14/changes/java.security.AllPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/14/changes/android.webkit.WebView.HitTestResult.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.accessibilityservice.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.accounts.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.animation.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.app.admin.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.app.backup.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.appwidget.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.bluetooth.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.inputmethodservice.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.net.http.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.net.wifi.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.nfc.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.nfc.tech.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.preference.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.renderscript.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.service.wallpaper.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.view.inputmethod.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.Animator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Application.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.backup.BackupAgent.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.BaseObj.html
-http://developer.android.com/sdk/api_diff/14/changes/java.security.BasicPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/14/changes/android.bluetooth.BluetoothAdapter.html
-http://developer.android.com/sdk/api_diff/14/changes/android.bluetooth.BluetoothProfile.html
-http://developer.android.com/sdk/api_diff/14/changes/android.bluetooth.BluetoothSocket.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Byte2.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Byte3.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Byte4.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.CallLog.Calls.html
-http://developer.android.com/sdk/api_diff/14/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ViewPropertyAnimator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.graphics.Canvas.html
-http://developer.android.com/sdk/api_diff/14/changes/android.preference.CheckBoxPreference.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.Class.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.TrafficStats.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.SparseArray.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.SparseBooleanArray.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.SparseIntArray.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.MenuItem.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.speech.SpeechRecognizer.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.Config.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.reflect.Constructor.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.CommonDataKinds.Photo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.Contacts.Photo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.ContactsColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.GroupsColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.Intents.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.RawContactsEntity.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.SettingsColumns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.ContactsContract.StatusUpdates.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.ContentProvider.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.NdefRecord.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_dalvik.annotation.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Debug.MemoryInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.admin.DeviceAdminInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.style.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.admin.DevicePolicyManager.html
-http://developer.android.com/sdk/api_diff/14/changes/dalvik.system.DexClassLoader.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.NfcAdapter.html
-http://developer.android.com/sdk/api_diff/14/changes/android.service.wallpaper.WallpaperService.Engine.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Element.html
-http://developer.android.com/sdk/api_diff/14/changes/java.io.ObjectOutputStream.html
-http://developer.android.com/sdk/api_diff/14/changes/java.io.ObjectInputStream.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.Gravity.html
-http://developer.android.com/sdk/api_diff/14/changes/java.io.FilePermission.html
-http://developer.android.com/sdk/api_diff/14/changes/java.net.SocketPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/java.security.Permission.html
-http://developer.android.com/sdk/api_diff/14/changes/java.security.UnresolvedPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/javax.security.auth.PrivateCredentialPermission.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.FloatEvaluator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.IntEvaluator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.TypeEvaluator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.ExpandableListView.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.PackageStats.html
-http://developer.android.com/sdk/api_diff/14/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.preference.PreferenceActivity.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.reflect.Field.html
-http://developer.android.com/sdk/api_diff/14/changes/dalvik.system.PathClassLoader.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.pm.ServiceInfo.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Script.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.WallpaperManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.FragmentManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.FragmentManager.BackStackEntry.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.FrameLayout.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.Surface.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.reflect.Method.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.OverScroller.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.Scroller.html
-http://developer.android.com/sdk/api_diff/14/changes/android.database.sqlite.SQLiteOpenHelper.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSubtype.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.LinearLayout.html
-http://developer.android.com/sdk/api_diff/14/changes/android.opengl.GLUtils.html
-http://developer.android.com/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.html
-http://developer.android.com/sdk/api_diff/14/changes/android.graphics.Paint.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Looper.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.IsoDep.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.MifareClassic.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.MifareUltralight.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.NfcA.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.NfcB.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.NfcF.html
-http://developer.android.com/sdk/api_diff/14/changes/android.nfc.tech.NfcV.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Handler.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.TextView.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.SyncAdapterType.html
-http://developer.android.com/sdk/api_diff/14/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/14/changes/android.graphics.SurfaceTexture.html
-http://developer.android.com/sdk/api_diff/14/changes/android.preference.Preference.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.http.SslError.html
-http://developer.android.com/sdk/api_diff/14/changes/java.util.logging.Handler.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.color.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.PopupMenu.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.InputDevice.html
-http://developer.android.com/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.html
-http://developer.android.com/sdk/api_diff/14/changes/android.inputmethodservice.InputMethodService.InputMethodSessionImpl.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.inputmethod.InputMethodSession.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Int2.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Int3.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Int4.html
-http://developer.android.com/sdk/api_diff/14/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/14/changes/android.content.IntentSender.html
-http://developer.android.com/sdk/api_diff/14/changes/android.text.Layout.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.io.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.lang.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.lang.ref.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.lang.reflect.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.net.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.security.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_java.util.logging.html
-http://developer.android.com/sdk/api_diff/14/changes/pkg_javax.security.auth.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.LayoutTransition.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.LiveFolders.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Long2.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Long3.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Long4.html
-http://developer.android.com/sdk/api_diff/14/changes/android.opengl.Matrix.html
-http://developer.android.com/sdk/api_diff/14/changes/android.media.MediaMetadataRetriever.html
-http://developer.android.com/sdk/api_diff/14/changes/android.media.MediaPlayer.html
-http://developer.android.com/sdk/api_diff/14/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/14/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Notification.Builder.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.ObjectAnimator.html
-http://developer.android.com/sdk/api_diff/14/changes/android.animation.PropertyValuesHolder.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.SearchView.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ViewGroup.html
-http://developer.android.com/sdk/api_diff/14/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.Service.html
-http://developer.android.com/sdk/api_diff/14/changes/android.util.Patterns.html
-http://developer.android.com/sdk/api_diff/14/changes/android.app.PendingIntent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.Process.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.integer.html
-http://developer.android.com/sdk/api_diff/14/changes/android.R.string.html
-http://developer.android.com/sdk/api_diff/14/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/14/changes/android.os.RecoverySystem.html
-http://developer.android.com/sdk/api_diff/14/changes/android.graphics.RectF.html
-http://developer.android.com/sdk/api_diff/14/changes/java.lang.ref.ReferenceQueue.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.RenderScriptGL.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.ViewParent.html
-http://developer.android.com/sdk/api_diff/14/changes/android.hardware.Sensor.html
-http://developer.android.com/sdk/api_diff/14/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/14/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/14/changes/android.database.sqlite.SQLiteQueryBuilder.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Short2.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Short3.html
-http://developer.android.com/sdk/api_diff/14/changes/android.renderscript.Short4.html
-http://developer.android.com/sdk/api_diff/14/changes/android.widget.StackView.html
-http://developer.android.com/sdk/api_diff/14/changes/dalvik.annotation.TestTarget.html
-http://developer.android.com/sdk/api_diff/14/changes/dalvik.annotation.TestTargetClass.html
-http://developer.android.com/sdk/api_diff/14/changes/android.webkit.WebSettings.TextSize.html
-http://developer.android.com/sdk/api_diff/14/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/5/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/changes-summary.html
-http://developer.android.com/resources/samples/RenderScript/HelloCompute/index.html
-http://developer.android.com/resources/samples/RenderScript/HelloCompute/src/com/example/android/rs/hellocompute/mono.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.http.SslCertificate.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.InputDevice.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.InputDevice.MotionRange.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.InputEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.KeyEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.MotionEvent.PointerCoords.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.Window.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.Window.Callback.html
-http://developer.android.com/sdk/api_diff/16/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_all.html
-http://developer.android.com/reference/com/google/android/gcm/server/package-summary.html
-http://developer.android.com/reference/renderscript/rs__program_8rsh.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.format.Formatter.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmManagerClient.OnEventListener.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.PictureListener.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.DebugUtils.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.TrafficStats.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebSettings.LayoutAlgorithm.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.TimeUtils.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.appwidget.AppWidgetProviderInfo.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmInfoEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.drm.DrmErrorEvent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.inputmethod.InputMethodSubtype.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.CookieManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebHistoryItem.html
-http://developer.android.com/sdk/api_diff/12/changes/android.graphics.Camera.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.Config.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.EventLog.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.StateSet.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.method.MovementMethod.html
-http://developer.android.com/sdk/api_diff/12/changes/android.util.Xml.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.ActivityManager.RecentTaskInfo.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.FragmentBreadCrumbs.html
-http://developer.android.com/sdk/api_diff/12/changes/android.os.ParcelFileDescriptor.html
-http://developer.android.com/sdk/api_diff/12/changes/android.graphics.Bitmap.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.sip.SipProfile.Builder.html
-http://developer.android.com/sdk/api_diff/12/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.sip.SipProfile.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/12/changes/android.widget.DatePicker.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.DialogFragment.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.DownloadManager.Request.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.Fragment.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.DownloadManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.method.BaseMovementMethod.html
-http://developer.android.com/sdk/api_diff/12/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/12/changes/android.text.SpannableStringBuilder.html
-http://developer.android.com/sdk/api_diff/12/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/12/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/12/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/12/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/12/changes/android.animation.ValueAnimator.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/12/changes/android.os.Bundle.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/12/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.net.wifi.WifiManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/12/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/12/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/12/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/10/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/10/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/6/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/android.accounts.AbstractAccountAuthenticator.html
-http://developer.android.com/sdk/api_diff/6/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/6/changes/pkg_android.accounts.html
-http://developer.android.com/sdk/api_diff/6/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/6/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/6/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/6/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/6/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/15/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/15/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/9/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/9/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/14/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/7/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/classes_index_changes.html
-http://developer.android.com/reference/com/google/android/gms/common/Scopes.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/10/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/classes_index_changes.html
-http://developer.android.com/reference/com/google/android/gcm/server/Constants.html
-http://developer.android.com/reference/com/google/android/gcm/server/Message.html
-http://developer.android.com/reference/com/google/android/gcm/server/Message.Builder.html
-http://developer.android.com/reference/com/google/android/gcm/server/MulticastResult.html
-http://developer.android.com/reference/com/google/android/gcm/server/Result.html
-http://developer.android.com/reference/com/google/android/gcm/server/Sender.html
-http://developer.android.com/reference/com/google/android/gcm/server/InvalidRequestException.html
-http://developer.android.com/sdk/api_diff/15/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/13/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/7/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/constructors_index_changes.html
-http://developer.android.com/resources/articles/creating-input-method.html
-http://developer.android.com/sdk/api_diff/17/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/17/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/17/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/14/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/14/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/10/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/10/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/5/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/3/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/3/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/3/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/4/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/15/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/10/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/10/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/jdiff_topleftframe.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/changes-summary.html
-http://developer.android.com/sdk/api_diff/14/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/14/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/6/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/5/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/5/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/10/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/10/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/6/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/13/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/13/changes/methods_index_changes.html
-http://developer.android.com/guide/faq/index.html
-http://developer.android.com/sdk/api_diff/8/changes/jdiff_statistics.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.accounts.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.app.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.content.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.content.pm.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.content.res.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.database.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.database.sqlite.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.gesture.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.graphics.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.hardware.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.location.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.media.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.net.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.net.http.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.opengl.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.os.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.provider.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.speech.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.speech.tts.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.telephony.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.test.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.test.mock.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.text.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.text.style.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.text.util.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.util.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.view.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.view.animation.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.webkit.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_android.widget.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_dalvik.bytecode.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_dalvik.system.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_java.net.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_java.nio.charset.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_java.util.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_java.util.regex.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_javax.xml.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_javax.xml.parsers.html
-http://developer.android.com/sdk/api_diff/8/changes/pkg_org.w3c.dom.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.regex.Matcher.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.regex.Pattern.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.CacheManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.JsResult.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebChromeClient.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebSettings.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.webkit.WebViewClient.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/4/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/16/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.Activity.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.ActivityManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.ActivityManager.ProcessErrorStateInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.AlarmManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.Dialog.html
-http://developer.android.com/sdk/api_diff/8/changes/android.app.SearchManager.html
-http://developer.android.com/sdk/api_diff/15/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/15/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.net.ConnectivityManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.net.SSLCertificateSocketFactory.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.AbstractThreadedSyncAdapter.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.ComponentName.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.ContentResolver.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.Context.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.ContextWrapper.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.Intent.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.SyncResult.html
-http://developer.android.com/sdk/api_diff/8/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.speech.RecognizerIntent.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.net.http.SslCertificate.html
-http://developer.android.com/sdk/api_diff/6/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/6/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.MotionEvent.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.AudioManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.Secure.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Contacts.PresenceColumns.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.StatusColumns.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ApplicationInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.Manifest.permission.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.AudioColumns.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Build.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.WindowManager.LayoutParams.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ActivityInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.database.sqlite.SQLiteDatabase.html
-http://developer.android.com/sdk/api_diff/8/changes/android.R.id.html
-http://developer.android.com/sdk/api_diff/8/changes/android.R.anim.html
-http://developer.android.com/sdk/api_diff/8/changes/dalvik.system.Zygote.html
-http://developer.android.com/sdk/api_diff/8/changes/dalvik.system.VMDebug.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.ComponentInfo.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Environment.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Node.html
-http://developer.android.com/sdk/api_diff/8/changes/android.text.AndroidCharacter.html
-http://developer.android.com/sdk/api_diff/8/changes/android.R.attr.html
-http://developer.android.com/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.Engine.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Browser.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.pm.PackageManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.ViewGroup.LayoutParams.html
-http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Camera.Parameters.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Build.VERSION_CODES.html
-http://developer.android.com/sdk/api_diff/8/changes/android.graphics.PixelFormat.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.HapticFeedbackConstants.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.Settings.System.html
-http://developer.android.com/sdk/api_diff/8/changes/android.database.sqlite.SQLiteProgram.html
-http://developer.android.com/sdk/api_diff/8/changes/android.telephony.TelephonyManager.html
-http://developer.android.com/sdk/api_diff/8/changes/dalvik.bytecode.Opcodes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.location.LocationManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.ExifInterface.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.DOMException.html
-http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Sensor.html
-http://developer.android.com/sdk/api_diff/8/changes/android.content.res.Configuration.html
-http://developer.android.com/sdk/api_diff/8/changes/android.util.EventLogTags.html
-http://developer.android.com/sdk/api_diff/8/changes/android.util.Log.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Bundle.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.Debug.html
-http://developer.android.com/sdk/api_diff/8/changes/android.os.PowerManager.html
-http://developer.android.com/sdk/api_diff/10/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/9/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/6/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.opengl.GLSurfaceView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.opengl.Matrix.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.AbsListView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.accounts.AccountManager.html
-http://developer.android.com/sdk/api_diff/8/changes/android.test.ActivityInstrumentationTestCase2.html
-http://developer.android.com/sdk/api_diff/8/changes/android.hardware.Camera.html
-http://developer.android.com/sdk/api_diff/8/changes/android.test.mock.MockPackageManager.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Document.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.animation.Animation.html
-http://developer.android.com/sdk/api_diff/8/changes/android.speech.tts.TextToSpeech.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.ArrayList.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Attr.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.SoundPool.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.BaseExpandableListAdapter.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.CallLog.Calls.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Images.Thumbnails.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Video.Thumbnails.html
-http://developer.android.com/sdk/api_diff/8/changes/java.nio.charset.Charset.html
-http://developer.android.com/sdk/api_diff/8/changes/android.gesture.Gesture.html
-http://developer.android.com/sdk/api_diff/8/changes/android.gesture.GesturePoint.html
-http://developer.android.com/sdk/api_diff/8/changes/android.gesture.GestureStroke.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.Groups.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.ContactsContract.RawContacts.html
-http://developer.android.com/sdk/api_diff/8/changes/android.database.DatabaseUtils.html
-http://developer.android.com/sdk/api_diff/8/changes/java.net.DatagramSocketImpl.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.View.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.Display.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilder.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.DocumentBuilderFactory.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.DOMImplementation.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Element.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Entity.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.GestureDetector.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.ListView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.test.mock.MockContext.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.NamedNodeMap.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.ViewConfiguration.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.SAXParser.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.parsers.SAXParserFactory.html
-http://developer.android.com/sdk/api_diff/8/changes/org.w3c.dom.Text.html
-http://developer.android.com/sdk/api_diff/8/changes/android.view.VelocityTracker.html
-http://developer.android.com/sdk/api_diff/8/changes/java.util.HashMap.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.ImageView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.TabWidget.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.MediaRecorder.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.MediaScannerConnection.html
-http://developer.android.com/sdk/api_diff/8/changes/android.media.MediaScannerConnection.MediaScannerConnectionClient.html
-http://developer.android.com/sdk/api_diff/8/changes/android.provider.MediaStore.Audio.Playlists.Members.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.RemoteViews.html
-http://developer.android.com/sdk/api_diff/8/changes/android.widget.VideoView.html
-http://developer.android.com/sdk/api_diff/8/changes/android.text.util.Rfc822Tokenizer.html
-http://developer.android.com/sdk/api_diff/8/changes/javax.xml.XMLConstants.html
-http://developer.android.com/sdk/api_diff/8/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/constructors_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/packages_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/fields_index_all.html
-http://developer.android.com/sdk/api_diff/12/changes/packages_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/packages_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/fields_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/fields_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/classes_index_changes.html
-http://developer.android.com/sdk/api_diff/7/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/methods_index_changes.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_removals.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_additions.html
-http://developer.android.com/sdk/api_diff/12/changes/constructors_index_changes.html
-http://developer.android.com/guide/faq/framework.html
-http://developer.android.com/guide/faq/licensingandoss.html
-http://developer.android.com/guide/faq/security.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_removals.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_additions.html
-http://developer.android.com/sdk/api_diff/4/changes/alldiffs_index_changes.html
-http://developer.android.com/sdk/api_diff/8/changes/methods_index_removals.html
-http://developer.android.com/sdk/api_diff/8/changes/methods_index_additions.html
-http://developer.android.com/sdk/api_diff/8/changes/methods_index_changes.html
diff --git a/docs/html/topic/instant-apps/faqs.jd b/docs/html/topic/instant-apps/faqs.jd
new file mode 100644
index 0000000..0a1f571
--- /dev/null
+++ b/docs/html/topic/instant-apps/faqs.jd
@@ -0,0 +1,69 @@
+page.title=Android Instant Apps: Frequently Asked Questions
+page.tags=Material,design
+footer.hide=true
+forcelocalnav=true
+@jd:body
+
+<p>
+ <strong>What devices are compatible with Android Instant Apps?</strong>
+ <br/>
+ Android Instant Apps is compatible with devices that are running Android 4.1
+ (API level 16) or higher and have Google Play services installed.
+</p>
+
+<p>
+ <strong>Do developers need to build two different Android apps now?</strong>
+ <br/>
+ Developers only need to maintain one project with one source tree.
+ Developers simply configure the project to create two build artifacts: the
+ installable APK and the instant version.
+ Some developers can take less than a day to get up and running,
+ though the effort involved varies depending on how the
+ app is structured.
+</p>
+
+<p>
+ <strong>What Android APIs and functionality can Instant Apps use?</strong>
+ <br/>
+ Android Instant Apps functionality complements an existing Android app,
+ but does not replace it. Android Instant Apps uses the same Android APIs, the
+ same project, the same source code. Android Instant Apps restricts some
+ features that might not match users' expectations of an app
+ that is not installed.
+ For example, an Instant App can't use background services, do background
+ notifications, or access unique device identifiers.
+</p>
+
+<p>
+ <strong>Can users choose to install the app permanently?</strong>
+ <br/>
+ Developers can allow users to download the app from the Google Play
+ Store. After download, the app remains on the phone after the user has left
+ the experience.
+</p>
+
+<p>
+ <strong>How do permissions work in Android Instant Apps?</strong>
+ <br/>
+ Android Instant Apps uses the runtime permissions model introduced in
+ Android 6.0.
+ If an app supports the permission model introduced in Android 6.0
+ (API level 23), it does not require any additional work to become an Instant
+ App that runs on older devices.
+</p>
+
+<p>
+ <strong>How do developers publish these apps?</strong>
+ <br/>
+ Developers publish their Instant Apps through the Google Play Developer
+ Console, similar to their existing Android apps.
+</p>
+
+<p>
+ <strong>How can developers get involved?</strong>
+ <br/>
+ Developers interested in upgrading their Android apps can visit
+ <a class="external-link" href="g.co/InstantApps">g.co/InstantApps</a> to
+ sign up. We will be reaching out to interested
+ developers in the coming months.
+</p>
\ No newline at end of file
diff --git a/docs/html/topic/instant-apps/index.jd b/docs/html/topic/instant-apps/index.jd
new file mode 100644
index 0000000..28540ae
--- /dev/null
+++ b/docs/html/topic/instant-apps/index.jd
@@ -0,0 +1,281 @@
+fullpage=true
+page.title=Android Instant Apps
+page.viewport_width=970
+meta.tags="instant apps, getstarted, sdk, appquality, landing"
+section.landing=true
+header.hide=1
+carousel=1
+tabbedList=1
+excludeFromSuggestions=true
+@jd:body
+
+<!-- Hero section -->
+<section class="dac-expand dac-hero dac-section-light">
+<div class="wrap">
+<h1>Android Instant Apps</h1>
+<p class="sub-head">
+ Native Android apps, without the installation
+</p>
+
+<p class="dac-hero-description">
+ An evolution in app sharing and discovery, Android Instant Apps enables
+ Android apps to run instantly, without requiring installation.
+ Instant Apps lets you experience what you love about apps — fast and
+ beautiful user interfaces, high performance, and great capabilities —
+ with just a tap.
+</p>
+
+<p class="dac-hero-description">
+ Request early access to the Instant Apps documentation today.
+</p>
+
+<p style="margin-top:24px">
+ <a class="landing-button green download-bundle-button"
+ href="https://docs.google.com/a/google.com/forms/d/1S3MzsMVIlchLCqyNLaFbv64llxWaf90QSeYLeswco90/viewform"
+ target="_blank">
+ I'M INTERESTED IN ANDROID INSTANT APPS<br>
+ </a>
+</p>
+</div>
+</section>
+
+<!-- Second section -->
+
+<div class="wrap" style="margin-top:60px">
+<div class="cols dac-hero-content">
+ <div class="col-1of2 dac-hero-figure">
+ <img src="/images/topic/instant-apps/instant-apps-section-2.png">
+ </div>
+<div class="col-1of2">
+<div class="dac-hero-tag"></div>
+
+ <h2 id="section-2">Run Android Apps Without Installation</h2>
+ <p class="dac-hero-description">
+ Android Instant Apps lets you experience beautiful and immersive
+ apps, with material design and smooth animations, without installing them
+ on your device.
+ </p>
+
+</div>
+</div>
+</div>
+
+<!-- Third section -->
+
+<div class="wrap" style="margin-top:60px">
+
+ <h2 id="section-3">Access Apps From Anywhere</h2>
+
+ <p>
+ Get people to your flagship Android experience from links that would
+ otherwise open your mobile web page — like
+ search, social media, messaging, and other deep links — without them
+ needing to stop and install your app first.
+ </p>
+
+ <div class="cols" style="margin-top:1em;">
+ <div class="col-4of12 gif-container">
+ <img class="partner-gifs"
+ src="/images/topic/instant-apps/s3-BandH-static.png">
+ <p class="figure-caption">
+ <em>B&H Photo<br/>
+ (via Google Search)</em>
+ </p>
+ </div>
+
+ <div class="col-4of12 gif-container">
+ <img class="partner-gifs"
+ src="/images/topic/instant-apps/s3-BuzzFeed-static.png">
+ <p class="figure-caption">
+ <em>BuzzfeedVideo<br/>
+ (via a shared link)</em>
+ </p>
+ </div>
+
+ <div class="col-4of12 gif-container">
+ <img class="partner-gifs"
+ src="/images/topic/instant-apps/s3-ParkandPay-static.png">
+ <p class="figure-caption">
+ <em>Park and Pay<br/>
+ (via NFC)</em>
+ </p>
+ </div>
+ </div>
+</div>
+
+<!-- Fourth section -->
+
+<div class="wrap" style="margin-top:60px">
+<div class="cols dac-hero-content">
+ <div class="col-1of2 dac-hero-figure">
+ <img src="/images/topic/instant-apps/instant-apps-section-4.png">
+ </div>
+<div class="col-1of2">
+<div class="dac-hero-tag"></div>
+
+ <h2 id="section-4">Built On Google Play Services</h2>
+ <p class="dac-hero-description">
+ Take advantage of Google Play services features — like location, identity,
+ payments, and Firebase — which are built right in for a seamless user
+ experience.
+ </p>
+
+</div>
+</div>
+</div>
+
+<!-- Fifth section -->
+
+<div class="wrap" style="margin-top:60px">
+<div class="cols dac-hero-content">
+ <div class="col-1of2 col-push-1of2 dac-hero-figure">
+ <img src="/images/topic/instant-apps/instant-apps-section-5.png">
+ </div>
+<div class="col-1of2 col-pull-1of2">
+<div class="dac-hero-tag"></div>
+ <h2 id="section-5">Works On Most Android Devices</h2>
+
+ <p class="dac-hero-description">
+
+ Android Instant Apps can work on Android devices running Android 4.1+
+ (API Level 16) or higher with Google Play services.
+ </p>
+
+</div>
+</div>
+</div>
+
+<!-- Sixth section -->
+
+<div class="wrap" style="margin-top:60px">
+<div class="cols dac-hero-content">
+ <div class="col-1of2 dac-hero-figure">
+ <img src="/images/topic/instant-apps/upgrade-your-app-2x.png">
+ </div>
+<div class="col-1of2">
+<div class="dac-hero-tag"></div>
+
+ <h2 id="section-6">Upgrade Your Existing App</h2>
+ <p class="dac-hero-description">
+ Android Instant Apps functionality is an upgrade to your existing Android
+ app, not a new, separate app. It's the same Android APIs, the same
+ project, the same source code. It can take less than a day to get
+ up and running for some developers, though the effort involved varies,
+ depending on how your app is structured. You modularize your app,
+ and Google Play downloads only the parts that are needed, on the fly.
+ </p>
+
+</div>
+</div>
+</div>
+
+<!-- Seventh section -->
+
+<div class="wrap" style="margin-top:60px" id="section-7">
+ <h2 id="sign-up-docs" style="margin-bottom: 0px;">
+ Sign up for access to Android Instant Apps documentation
+ </h2>
+
+ <p>
+ We’ll let you know if you’re selected for early access
+ to Android Instant
+ Apps.
+ </p>
+
+ <p>
+ <a class="landing-button green download-bundle-button"
+ href="https://docs.google.com/forms/d/1S3MzsMVIlchLCqyNLaFbv64llxWaf90QSeYLeswco90/viewform"
+ target="_blank">
+ I'M INTERESTED IN ANDROID INSTANT APPS<br>
+ </a>
+ </p>
+
+ <p style="margin-top:24px">
+ Check out our <a href="faqs.html">frequently asked questions</a> to find out
+ more about Android Instant Apps.
+ </p>
+</div>
+
+<style>
+
+ /* Sub-heading styling */
+ .sub-head {
+ font-size: 28px;
+ line-height: 125%;
+ }
+
+ /* Background color for hero module. */
+ .dac-section-light {
+ background: #B0BEC5;
+ }
+
+ /* Styling and layout for video. */
+ .dev-bytes-video {
+ margin-top: 30px;
+ position: relative;
+ padding-bottom: 56.25%; /* 16:9 */
+ padding-top: 30px;
+ height: 0;
+ }
+
+ .dev-bytes-video iframe,
+ .dev-bytes-video object,
+ .dev-bytes-video embed {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 100%;
+ }
+
+ /* Increase top margin for sections */
+ .wrap {
+ margin-top: 1.5em;
+ }
+
+ #section-3, #sign-up-docs {
+ margin-top: 0px;
+ border-top: 0px;
+ }
+
+ /* Align the seventh section in the center. */
+ #section-7 {
+ text-align: center;
+ }
+
+ /* GIF section styling */
+ .figure-caption {
+ text-align: center;
+ }
+
+ .partner-gifs {
+ width: 80%;
+ height: auto;
+ }
+
+ .gif-container {
+ text-align: center;
+ }
+
+</style>
+
+<script>
+
+(function () {
+
+ function swapOnMouseover(evt) {
+ var target = evt.target;
+ var imageSrc = $(target).attr("src");
+
+ // Assumes that images are named *-static and *-animated.
+ if (imageSrc.indexOf("static") > -1) {
+ var newImageSrc = imageSrc.replace("static.png", "animated.gif");
+ $(target).attr("src", newImageSrc).removeAttr("onmouseenter");
+ }
+ }
+
+ $(".partner-gifs").mouseenter(swapOnMouseover);
+
+})();
+
+</script>
\ No newline at end of file
diff --git a/docs/html/topic/libraries/_book.yaml b/docs/html/topic/libraries/_book.yaml
index ead95e7..34e5e47 100644
--- a/docs/html/topic/libraries/_book.yaml
+++ b/docs/html/topic/libraries/_book.yaml
@@ -6,6 +6,8 @@
path: /topic/libraries/support-library/features.html
- title: Setup
path: /topic/libraries/support-library/setup.html
+ - title: Revision History
+ path: /topic/libraries/support-library/revisions.html
- title: Data Binding Library
path: /topic/libraries/data-binding/index.html
diff --git a/docs/html/topic/libraries/support-library/index.jd b/docs/html/topic/libraries/support-library/index.jd
index 70c9cff..92002dd 100644
--- a/docs/html/topic/libraries/support-library/index.jd
+++ b/docs/html/topic/libraries/support-library/index.jd
@@ -13,15 +13,17 @@
<li><a href="#layout-patterns">Support for General Layout Patterns</a></li>
<li><a href="#form-factors">Support for Different Form Factors</a></li>
<li><a href="#utils">General Utilities</a></li>
- <li><a href="#revisions">Support Library Revision History</a></li>
</ol>
<h2>See also</h2>
<ol>
- <li><a href="{@docRoot}tools/support-library/features.html">
+ <li><a href="{@docRoot}topic/libraries/support-library/features.html">
Support Library Features</a></li>
- <li><a href="{@docRoot}tools/support-library/setup.html">
- Support Library Setup </a></li>
+ <li><a href="{@docRoot}topic/libraries/support-library/setup.html">
+ Support Library Setup</a></li>
+ <li><a href="{@docRoot}topic/libraries/support-library/revisions.html">
+ Support Library Revision History</a></li>
+
</ol>
</div>
@@ -180,2798 +182,3 @@
permissions model, the methods check whether the appropriate permission was
granted at install time.
</p>
-
-<h2 id="revisions">Support Library Revision History</h2>
-
-<p>This section provides details about the Support Library package releases.</p>
-
-<div class="toggle-content opened">
- <p id="rev23-4-0">
- <a href="#" onclick="return toggleContent(this)"><img src=
- "{@docRoot}assets/images/styles/disclosure_up.png" class=
- "toggle-content-img" alt="">Android Support Library, revision 23.4.0</a>
- <em>(May 2016)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v4">v4 Support
- Library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed issue where fragments were added in the wrong order.
- (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=206901">Issue
- 206901</a>)
- </li>
-
- <li>Fixed issue where app bar wasn't drawn after being scrolled
- offscreen. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=178037">Issue
- 178037</a>)
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v7-appcompat">v7
- appcompat library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Added <!-- TODO: Link to method -->
- <code><a href=
- "{@docRoot}reference/android/support/v7/app/AppCompatDelegate.html">
- AppCompatDelegate</a>.setCompatVectorFromResourcesEnabled()</code>
- method to re-enable usage of vector drawables in {@link
- android.graphics.drawable.DrawableContainer} objects on devices
- running Android 4.4 (API level 19) and lower. See <a href=
- "https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.44uulkfal"
- class="external-link">AppCompat v23.2 — Age of the vectors</a> for
- more information.
- </li>
-
- <li>Fixed an issue in API 23 with <a href=
- "{@docRoot}reference/android/support/v7/app/AppCompatDelegate.html#setDefaultNightMode(int)">
- <code>AppCompatDelegate.setDefaultNightMode()</code></a> not
- loading correct resources in API level 23. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=206573">Issue
- 206573</a>)
- </li>
-
- <li>Fixed issue that could cause {@link
- java.lang.NullPointerException}. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=207638">Issue
- 207638</a>)
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#design">Design Support
- Library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed an issue where {@link
- android.support.design.widget.TextInputLayout} doesn't clear error
- tint after {@link
- android.support.design.widget.TextInputLayout#setErrorEnabled
- setErrorEnabled(false)} on API level 21 - 22 (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202829">Issue
- 202829</a>)
- </li>
-
- <li>Fixed an issue where {@link
- android.support.design.widget.FloatingActionButton} does not return
- when animations are disabled. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=206416">Issue
- 206416</a>)
- </li>
-
- <li>Fixed issue in {@link android.support.design.widget.AppBarLayout}
- snap functionality when used with <code>{@link
- android.support.design.R.id#scroll}|{@link
- android.support.design.R.id#enterAlways}|{@link
- android.support.design.R.id#enterAlwaysCollapsed}|{@link
- android.support.design.R.id#snap}</code> scroll flags.
- (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=207398">Issue
- 207398</a>)
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <!-- TODO: Add link -->Vector Drawable library:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed a bug where <!-- TODO: Javadoc link -->
- <code>VectorDrawableCompat</code> does not render correctly in
- {@link android.widget.TextView} on API level 23. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=206227">Issue
- 206227</a>)
- </li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<!-- end of collapsible section: 23.4.0 -->
-
-
-<div class="toggle-content closed">
- <p id="rev23-3-0">
- <a href="#" onclick="return toggleContent(this)"><img src=
- "{@docRoot}assets/images/styles/disclosure_up.png" class="toggle-content-img"
- alt="">Android Support Library, revision 23.3.0</a> <em>(April
- 2016)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v4">v4 Support
- Library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Added <code>AppLaunchChecker</code> to help track how your app
- has been launched by the user in the past.
- <code>hasStartedFromLauncher()</code> lets you know if the user has
- launched your app from the home screen before, or if it has only
- been started by other means (for example, to view specific web
- URLs).
- </li>
-
- <li>Fixed a memory leak in
- <code>MediaBrowserServiceCompat.mConnections</code>. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=205220">Issue
- 205220</a>)
- </li>
-
- <li>Fixed issue where {@link android.support.v4.view.ViewPager}
- does not account for page margins when flipping page. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=203816">Issue
- 203816</a>)
- </li>
- <li>{@link android.support.v4.app.Fragment#onRequestPermissionsResult
- Fragment.onRequestPermissionsResult()} is now delivered to child
- fragments.
- </li>
- </ul>
- </dd>
-
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v7-appcompat">v7
- appcompat library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed an issue in {@link
- android.support.v7.widget.AppCompatSpinner} that could cause
- multiple popups to appear. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=205052">Issue
- 205052</a>)
- </li>
-
- <li>Fixed an issue with how borderless buttons were colored.
- (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202967">Issue
- 202967</a>)
- </li>
-
- <li>Fixed a compatibility issue between {@link
- android.support.v7.app.AppCompatDialogFragment } and {@link
- android.support.v7.app.AlertDialog}. (<a class="external-link"
- href="https://code.google.com/p/android/issues/detail?id=204805">Issue
- 204805</a>)
- </li>
-
- <li>Reverted changes to <code>TintResources</code> that were causing
- memory and configuration issues. (<a class="external-link"
- href="https://code.google.com/p/android/issues/detail?id=205236">Issue
- 205236</a>)</li>
- </ul>
- </dd>
-
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v7-mediarouter">v7
- mediarouter library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed {@link android.support.v7.app.MediaRouteControllerDialog}
- volume slider’s behavior. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202299">Issue
- 202299</a>)
- </li>
- </ul>
- </dd>
-
-
- <dt>
- Changes for <a href="features.html#v7-preference">v7 Preference</a>
- library:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed issue where {@link
- android.support.v7.preference.PreferenceFragmentCompat} would crash
- if <code>dividerHeight</code> is specified. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=204778">Issue
- 204778</a>)
- </li>
- </ul>
- </dd>
-
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v7-recyclerview">v7
- recyclerview library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed a bug where {@link
- android.support.v7.widget.RecyclerView} would not invoke scroll
- callbacks if the range of visible items shrank. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=200987">Issue
- 200987</a>)
- </li>
-
- <li>Fixed a bug where {@link
- android.support.v7.widget.RecyclerView} would freeze if it was in
- linear layout, was weighted, and contained images. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=203276">Issue
- 203276</a>)
- </li>
-
- <li>Fixed a crash in {@link
- android.support.v7.widget.OrientationHelper#getStartAfterPadding
- OrientationHelper.getStartAfterPadding()}. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=180521">Issue
- 180521</a>)
- </li>
-
- <li>Fixed a crash with usages of
- <code>android:nestedScrollingEnabled</code>. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=197932">Issue
- 197932</a>)
- </li>
- </ul>
- </dd>
-
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#design">Design Support
- Library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed a bug where a hidden bottom sheet would handle touch
- events. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=203654">Issue
- 203654</a>)
- </li>
-
- <li>Fixed a layout issue with <code>BottomSheetBehavior</code> when
- <code>fitsSystemWindows</code> is true. (<a class="external-link"
- href=
- "https://code.google.com/p/android/issues/detail?id=203057">Issue
- 203057</a>)
- </li>
-
- <li>Fixed an accessibility issue with {@link
- android.support.design.widget.Snackbar}. (<a class="external-link"
- href=
- "https://code.google.com/p/android/issues/detail?id=182145">Issue
- 182145</a>)
- </li>
-
- <li>Fixed a crash on {@link android.support.design.widget.Snackbar}
- swipe. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=203924">Issue
- 203924</a>)
- </li>
-
- <li>Fixed a bug in {@link
- android.support.design.widget.AppBarLayout} with
- <code>enterAlways</code>. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=203661">Issue
- 203661</a>)
- </li>
-
- <li>Fixed a bug where {@link
- android.support.design.widget.TextInputLayout} unnecessarily clears
- {@link android.widget.EditText} object's background color filter.
- (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=203357">Issue
- 203357</a>)
- </li>
- </ul>
- </dd>
-
- </dl>
- </div>
-</div>
-<!-- end of collapsible section: 23.3.0 -->
-
-<div class="toggle-content closed">
- <p id="rev23-2-1">
- <a href="#" onclick="return toggleContent(this)"><img src=
- "{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
- alt="">Android Support Library, revision 23.2.1</a> <em>(March
- 2016)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v4">v4 Support
- Library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed an exception in {@link
- android.support.v4.graphics.drawable.DrawableCompat#wrap
- DrawableCompat.wrap()} and {@link android.graphics.drawable.LayerDrawable} on
- API levels 17 to 19. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201817">Issue 201817</a>)
- </li>
-
- <li>Fixed an {@code ArrayIndexOutOfBoundsException} in {@link
- android.support.v4.widget.ViewDragHelper#shouldInterceptTouchEvent
- ViewDragHelper.shouldInterceptTouchEvent()}. (<a class="external-link"
- href="https://code.google.com/p/android/issues/detail?id=182262">Issue
- 182262</a>)
- </li>
-
- <li>Fixed a bug in {@link android.support.v4.view.ViewPager} related to
- scroll calculation for size changes.
- </li>
-
- <li>Fixed a {@code NullPointerException} when {@code
- DrawerLayout.removeDrawerListener()} is called without a set {@link
- android.support.v4.widget.DrawerLayout.DrawerListener
- DrawerLayout.DrawerListener}. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202478">Issue 202478</a>)
- </li>
-
- <li>Fixed a bug where {@link android.support.v4.view.ViewPager} does not set
- {@link android.view.accessibility.AccessibilityEvent} parameters properly
- when scrolling.
- </li>
-
- <li>Fixed an issue that caused lag during device rotation when using
- {@link android.support.v4.graphics.drawable.DrawableCompat#wrap
- Drawable.wrap()}. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201924">Issue 201924</a>)
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v7-appcompat">v7
- appcompat library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Reverted dependency on vector assets so that developers using the
- <a href="{@docRoot}tools/support-library/features.html#v7-appcompat">appcompat
- library</a> are not forced to use {@link
- android.graphics.drawable.VectorDrawable} and its associated build flags.
- </li>
-
- <li>Fixed a compatibility issue with Night Mode and API level 23.
- (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201910">Issue
- 201910</a>)
- </li>
-
- <li>Fixed a compatibility issue with {@link
- android.support.v7.widget.SwitchCompat} and API level 7. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201942">Issue 201942</a>)
- </li>
-
- <li>Fixed an issue with propagating configuration values in Resources objects
- <a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201928">Issue 201928</a>
- </li>
-
- <li>Fixed a compatibility issue where the {@link
- android.support.v7.app.NotificationCompat.MediaStyle
- NotificationCompat.MediaStyle} cancel button becomes invisible on API level
- 21 and below. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202156">Issue 202156</a>)
- </li>
-
- <li>Fixed a compatibility crash with {@link
- android.support.v7.widget.AppCompatSpinner} on API level 21 and below.
- (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202246">Issue 202246</a>)
- </li>
-
- <li>Fixed an issue where the {@code app:textAllCaps = "false"} style did not
- work. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202117">Issue 202117</a>)
- </li>
-
- <li>Fixed a crash when restoring {@link android.widget.SearchView}.
- (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201836">Issue
- 201836</a>)
- </li>
-
- <li>Fixed a memory leak that occurs when tinting drawable resources using
- AppCompat. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202379">Issue 202379</a>)
- </li>
-
- <li>Fixed an issue with {@link android.view.KeyEvent} on API level 11 and
- lower. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202939">Issue 202939</a>)
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v7-cardview">v7 cardview
- library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Added Night Mode support for {@link
- android.support.v7.widget.CardView}. (<a class="external-link"
- href="https://code.google.com/p/android/issues/detail?id=194497">Issue
- 194497</a>)
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v7-recyclerview">v7
- recyclerview library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed bugs related to various measure-spec methods. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201856">Issue
- 201856</a>)
- </li>
-
- <li>Reduced the lockdown period in which {@link
- android.support.v7.widget.RecyclerView} does not allow adapter
- changes while calculating a layout or scroll. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202046">Issue
- 202046</a>)
- </li>
-
- <li>Fixed a crash when calling {@link
- android.support.v7.widget.RecyclerView.Adapter#notifyItemChanged
- notifyItemChanged()} on an item that is out of view. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202136">Issue
- 202136</a>)
- </li>
-
- <li>Fixed a crash that occurs when {@link
- android.support.v7.widget.RecyclerView.LayoutManager
- RecyclerView.LayoutManager} adds and removes a view in the same
- measurement pass. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=193958">Issue
- 193958</a>)
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v7-mediarouter">v7
- mediarouter library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed a crash that occurs when calling {@link
- android.support.v7.media.MediaRouter#getInstance
- MediaRouter.getInstance()} on API level 17. (<a class="external-link"
- href=
- "https://code.google.com/p/android/issues/detail?id=180654">Issue
- 180654</a>)
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#v17-leanback">v17
- Leanback Library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed an issue with {@code GridLayout.onAddFocusables()} that
- caused the wrong item to be selected.
- </li>
-
- <li>Fixed issue with {@link
- android.support.v17.leanback.app.GuidedStepFragment} actions
- disappearing after an action was collapsed.
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href=
- "{@docRoot}tools/support-library/features.html#design">Design Support
- Library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed a {@link android.support.design.widget.TabLayout} crash
- caused by tab-pooling. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201827">Issue
- 201827</a>)
- </li>
-
- <li>Fixed a bug in {@link
- android.support.design.widget.NavigationView} that caused the wrong
- color to be selected. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201951">Issue
- 201951</a>)
- </li>
-
- <li>Fixed a bug where {@link
- android.support.design.widget.FloatingActionButton#setBackgroundTintList
- setBackgroundTintList()} was no longer able to change the background
- color. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201873">Issue
- 201873</a>)
- </li>
-
- <li>Fixed an issue where {@link
- android.support.design.widget.AppBarLayout} did not completely scroll
- out of view when used with {@code android:fitsSystemWindows = “true”}.
- (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201822">Issue
- 201822</a>)
- </li>
-
- <li>Fixed an issue where {@code BottomSheetDialog} did not display
- short content views correctly. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201793">Issue
- 201793</a>)
- </li>
-
- <li>Fixed an issue where {@code BottomSheetDialogFragment} moved
- sporadically when content inside was changed. (<a class=
- "external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202125">Issue
- 202125</a>)
- </li>
-
- <li>Fixed a crash in TextInputLayout counter <a class="external-link"
- href=
- "https://code.google.com/p/android/issues/detail?id=202051">link</a>
- </li>
-
- <li>Fixed a crash that occured when {@link
- android.support.design.widget.TextInputLayout#getCounterMaxLength
- TextInputLayout.getCounterMaxLength()} restored a saved state.
- (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=202375">Issue
- 202375</a>)
- </li>
-
- <li>Fixed a {@code ClassCastException} that occurred when restoring a
- {@link android.support.design.widget.CoordinatorLayout} using the
- saved state of a view that was not a {@link
- android.support.design.widget.CoordinatorLayout}.
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for VectorDrawableCompat:
- </dt>
-
- <dd>
- <ul>
- <li>Fixed a bug where the wrong variable was read for {@code
- android:tintMode}. (<a class="external-link" href=
- "https://code.google.com/p/android/issues/detail?id=201907">Issue
- 201907</a>)
- </li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-<!-- end of collapsible section: 23.2.1 -->
-
-<div class="toggle-content closed">
- <p id="rev23-2-0">
- <a href="#" onclick="return toggleContent(this)"><img src=
- "{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
- alt="">Android Support Library, revision 23.2.0</a> <em>(February
- 2016)</em>
- </p>
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>
- Changes for <a href="features.html#v4">v4 Support library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Added {@code MediaBrowserCompat} for {@link
- android.media.browse.MediaBrowser} support, and {@code
- MediaBrowserServiceCompat} for {@link
- android.service.media.MediaBrowserService} support. This is useful
- when connecting a media app’s background service with UI components,
- and integrating with Android Auto and Android Wear without requiring
- API level 21 or higher.
- </li>
-
- <li>The system now calls {@link
- android.support.v4.app.FragmentActivity#onActivityResult onActivityResult()} for a
- nested {@link android.support.v4.app.FragmentActivity}.
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href="features.html#v7-appcompat">v7 AppCompat
- library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Added Night Mode functionality to API level 14 and higher. Switch
- between <a href="{@docRoot}training/material/theme.html">Material
- Light and Material Dark Themes</a> based on the time of day or
- app-specific setting.
- </li>
-
- <li style="list-style: none; display: inline">
- <ul>
- <li>Day and night themes can be found here: {@code
- <sdk>/extras/android/support/v7/appcompat/res/values/themes_daynight.xml}
- </li>
-
- <li>{@code AppCompatDelegate.setDefaultNightMode()}: sets the
- app’s default mode by passing one of the following constants:
- </li>
-
- <li style="list-style: none; display: inline">
- <ul>
- <li>{@code MODE_NIGHT_AUTO}
- </li>
-
- <li>{@code MODE_NIGHT_NO}
- </li>
-
- <li>{@code MODE_NIGHT_YES}
- </li>
-
- <li>{@code MODE_NIGHT_FOLLOW_SYSTEM}
- </li>
- </ul>
- </li>
-
- <li>{@code AppCompatDelegate.setLocalNightMode()}: overrides
- the night mode setting for the local app component.
- </li>
-
- <li>{@code AppCompatDelegate.getDefaultNightMode()}: returns
- the default night mode.
- </li>
- </ul>
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href="features.html#v7-mediarouter">v7 mediarouter
- library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>{@link android.support.v7.app.MediaRouteControllerDialog} now
- correctly applies custom app theme colors.
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href="features.html#design">Design support library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Added support for <a href=
- "https://www.google.com/design/spec/components/bottom-sheets.html">bottom
- sheets</a>. An interaction plugin, {@code
- BottomSheetBehavior}, allows a child view of a {@link
- android.support.design.widget.CoordinatorLayout} to act as
- a bottom sheet. The base class, {@code BottomSheetCallback}, provides
- callbacks to monitor bottom sheet events.
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for the <a href="features.html#custom-tabs">CustomTabs support
- library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>
- <a href=
- "https://developer.chrome.com/multidevice/android/customtabs">Chrome
- Custom Tabs</a> now allows apps to include a bottom bar with action
- buttons in addition to the existing top action button.
- </li>
-
- <li>{@code CustomTabsIntent.Builder.addToolBarItem()}: adds an action
- button to a custom tab. You can use this to add multiple buttons.
- </li>
-
- <li>{@code CustomTabsSession.setToolBarItem()}: updates the visuals
- for toolbar items. This method will only succeed if it is given a
- valid id and the browser session is in the foreground.
- </li>
- </ul>
- </dd>
-
- <dt>
- Added VectorDrawable support library:
- </dt>
-
- <dd>
- <ul>
- <li>Added Classes:
- </li>
-
- <li style="list-style: none; display: inline">
- <ul>
- <li>{@code VectorDrawableCompat}
- </li>
-
- <li>{@code AnimatedVectorDrawableCompat}
- </li>
- </ul>
- </li>
-
- <li>Adds support for {@link
- android.graphics.drawable.VectorDrawable} assets to apps
- running on API level 7 or higher. {@link
- android.graphics.drawable.AnimatedVectorDrawable} assets
- are also supported on API level 11 or higher. Vector assets can be
- considerably smaller than image assets and should help reduce app
- size by reducing the amount of assets required to support multiple
- device screens.
- </li>
-
- <li>This library is now a dependency of the <a href=
- "features.html#v7-appcompat">v7 AppCompat library</a>, allowing
- developers and <a href="features.html#v7-appcompat">AppCompat </a>
- to easily use vector drawables. To use {@code
- VectorDrawableCompat} within an {@link android.widget.ImageButton} or
- {@link android.widget.ImageView}, use the {@code app:srcCompat} XML
- attribute or {@code setImageResource()}
- method.
- </li>
-
- <li>To keep referencing attribute IDs on API level 20 or
- lower, add the following {@code appt} flag to your {@code
- build,gradle} file:
- </li>
-
- <li style="list-style: none; display: inline">
- <ul>
- <li>If you are building with Android Plugin for Gradle 1.5.0 or
- lower, add the following to your {@code build.gradle} file:
- </li>
-
- <li style="list-style: none; display: inline">
- <pre>
-android {
- defaultConfig {
- // Stops the Gradle’s automatic rasterization of vectors
- generatedDensities = []
- }
- // Flag that tells aapt to keep the attribute ids
- aaptOptions {
- additionalParameters "--no-version-vectors"
- }
-}
-</pre>
- </li>
-
- <li>If you are building with Android Plugin for Gradle 2.0.0 or
- higher, add the following to your {@code build.gradle} file:
- </li>
-
- <li style="list-style: none; display: inline">
- <pre>
-android {
- defaultConfig {
- vectorDrawables.useSupportLibrary = true
- }
-}
-</pre>
- </li>
- </ul>
- </li>
- </ul>
- </dd>
-
- <dt>
- Changes for <a href="features.html#v17-leanback">v17 Leanback
- Library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>Added new capabilities to {@link android.support.v17.leanback.app.GuidedStepFragment},
- which is a component that guides users through a decision or series of decisions:
- </li>
-
- <li style="list-style: none; display: inline">
- <ul>
- <li>Added button actions to {@link
- android.support.v17.leanback.widget.GuidedAction}:
- </li>
-
- <ul>
- <li>{@code GuidedStepFragment.setButtonActions()}: sets a list of
- {@link android.support.v17.leanback.widget.GuidedAction} buttons that
- the user may select from the Actions view.
- </li>
- </ul>
- </li>
-
- <li>Description fields are now editable:
- </li>
-
- <li style="list-style: none; display: inline">
- <ul>
- <li>{@code GuidedAction.Builder.descriptionEditable()}: when passing
- {@code true}, sets the action’s description to be editable.
- </li>
-
- <li>{@code GuidedAction.getEditDescription()}: returns the editable
- description as a {@code CharSequence}.
- </li>
- </ul>
- </li>
-
- <li>Added drop-down lists of sub-actions:
- </li>
-
- <li style="list-style: none; display: inline">
- <ul>
- <li>{@code GuidedAction.setSubActions()}: sets a {@link
- android.support.v17.leanback.widget.GuidedAction} list as a drop-down
- menu of sub-actions.
- </li>
- </ul>
- </li>
- </ul>
-
- <li>Added the {@code GuidedDatePickerAction} widget for {@link
- android.widget.DatePicker} functionality:
- </li>
-
- <li style="list-style: none; display: inline">
- <ul>
- <li>The date is selected using year, month, and day columns and has a
- customizable range.
- </li>
-
- <li>{@code GuidedDatePickerAction.Builder}: builder class for the {@code
- GuidedDatePickerAction} object.
- </li>
-
- <li>{@code GuidedDatePickerAction.Builder.datePickerFormat(String
- datePickerFormat)}: set the desired date format by passing the
- appropriate three-character {@code String}, e.g. {@code “YMD”} or {@code
- “MDY”}. Alternatively, use the {@code datePickerFormat} XML attribute.
- </li>
- </ul>
- </li>
- </ul>
- </dd>
- </dl>
-
- <dl>
- <dt>
- Changes for <a href="features.html#v7-recyclerview">v7 RecyclerView
- library</a>:
- </dt>
-
- <dd>
- <ul>
- <li>{@link android.support.v7.widget.RecyclerView} now has an opt-in
- feature called <em>AutoMeasure</em> which allows {@link
- android.support.v7.widget.RecyclerView.LayoutManager} to easily wrap
- content or handle various measurement specifications provided by the
- parent of the {@link android.support.v7.widget.RecyclerView}. It
- supports all existing animation capabilities of the {@link
- android.support.v7.widget.RecyclerView}.
- </li>
-
- <li style="list-style: none; display: inline">
- <ul>
- <li>If you have a custom {@link
- android.support.v7.widget.RecyclerView.LayoutManager},
- call {@code setAutoMeasureEnabled(true)} to start using the new
- AutoMeasure API. All built-in {@link
- android.support.v7.widget.RecyclerView.LayoutManager} objects
- enable auto-measure by default.
- </li>
-
- <li>{@link android.support.v7.widget.RecyclerView.LayoutManager}
- no longer ignores some {@link
- android.support.v7.widget.RecyclerView.LayoutParams} settings,
- such as {@code MATCH_PARENT} in the scroll direction.
- <p class="note">
- <strong>Note:</strong> These lifted restrictions may cause
- unexpected behavior in your layouts. Make sure you specify
- the correct layout parameters.
- </p>
- </li>
- </ul>
- </li>
-
- <li>When updating a {@link
- android.support.v7.widget.RecyclerView.ViewHolder} with payload
- information, {@link android.support.v7.widget.DefaultItemAnimator}
- now disables change animations.
- </li>
-
- <li>You can now modify the {@link
- android.support.v7.widget.helper.ItemTouchHelper} escape velocity to
- control swipe sensitivity. To make it easier or harder to swipe,
- override {@code getSwipeEscapeVelocity(float defaultValue)} and modify {@code defaultValue}.
- </li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-<!-- end of collapsible section: 23.2.0 -->
-
-<div class="toggle-content closed">
- <p id="rev23-1-1"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 23.1.1</a> <em>(November 2015)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview library:</a></dt>
- <dd>
- <ul>
- <li>Fixed a crash that occurs when you perform a swipe-to-dismiss action that the
- {@code ItemTouchHelper} utility class provides, and then add an item.
- (<a href="http://b.android.com/190500">Issue 190500</a>)</li>
- </ul>
- </dd>
- <dt>Changes for <a href="features.html#v7-preference">v7 preference library:</a></dt>
- <dd>
- <ul>
- <li>Fixed an issue with ProGuard usage.
- (<a href="http://b.android.com/183261">Issue 183261</a>)</li>
- </ul>
- </dd>
-
- <dt>Changes for <a href="features.html#v17-leanback">v17 Leanback Support library:</a></dt>
- <dd>
- <ul>
- <li>Fixed a number of internal issues in this library.</li>
- </ul>
- </dd>
- <dt>Changes for <a href="features.html#design">Design Support library:</a></dt>
- <dd>
- <ul>
- <li>Added the <code>getHeaderView</code> method to the <code>NavigationView</code> class.</li>
- <li>Fixed a transparent background issue for a <code>FloatingActionButton</code> object on
- devices running Android 4.0 (API level 15) and lower.
- (<a href="http://b.android.com/183315">Issue 183315</a>)</li>
- </ul>
- </dd>
- </dl>
-
- </div>
-</div> <!-- end of collapsible section -->
-
-
-
-<div class="toggle-content closed">
- <p id="rev23-1-0"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 23.1.0</a> <em>(October 2015)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for <a href="features.html#v4">v4 Support library:</a></dt>
- <dd>
- <ul>
- <li>Added <code>OnScrollChangedListener</code> interface support to the
- <code>NestedScrollView</code> widget. It
- allows you to receive callbacks when the scroll X or Y positions change.</li>
- <li>Added a <code>MediaButtonReceiver</code> class to forward received playback controls
- to a service that’s managing the <code>MediaSessionCompat</code> class. The
- <code>MediaSessionCompat</code> class has a
- constructor that can automatically find a media button receiver in the manifest. A
- media button receiver is a key part to <a href=
- "http://developer.android.com/training/managing-audio/volume-playback.html#PlaybackControls">handling
- playback controls</a> from hardware or bluetooth controls.</li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library:</a></dt>
- <dd>
- <ul>
- <li>Added material design <code>Seekbar</code> and <code>ImageButton</code> widgets.</li>
- <li>Updated the <code>ImageView</code> widget to support the tint feature.</li>
- <li>Updated the look-and-feel of the <code>SwitchCompat</code> widget.</li>
- </ul>
- </dd>
-
- <dt>Changes for <a href="features.html#v7-mediarouter">v7 mediarouter library:</a></dt>
- <dd>
- <ul>
- <li>Added the following features to the <code>MediaRouteChooserDialog</code> class:</li>
- <ul>
- <li>Displays a loading page while discovering media route providers.</li>
- <li>Includes a device type icon for easier device identification.</li>
- <li>Sorts the routes according to frequency of use in the current app.</li>
- <li>Supports landscape mode.</li>
- </ul>
- </ul>
- <ul>
- <li>Added the following features to the <code>MediaRouteControllerDialog</code> class:</li>
- <ul>
- <li>Recognizes screen casting and provides a proper description.</li>
- <li>Supports various album art sizes and aspect ratios, and loads the art asynchronously.</li>
- <li>Automatically selects the content color based on the primary color of the app.</li>
- <li>Adjusts the dialog layout based on available screen space on the device.</li>
- <li>Supports landscape mode.</li>
- </ul>
- </ul>
- </dd>
-
- <dt>Changes for <a href="features.html#v7-palette">v7 palette library:</a></dt>
- <dd>
- <ul>
- <li>Added the <code>setRegion()</code> method to support extracting color from a specific
- region of a <code>Bitmap</code> object.</li>
- </ul>
- </dd>
-
- <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview library:</a></dt>
- <dd>
- <ul>
- <li>Added an improved animation API to the <code>ItemAnimator</code> class for better
- customizations:</li>
- <ul>
- <li>Change animations no longer enforce two copies of the <code>ViewHolder</code> object,
- which enables item content animations. Also, the <code>ItemAnimator</code> object
- decides whether it wants to reuse the same <code>ViewHolder</code> object or create a
- new one.</li>
- <li>The new information record API gives the <code>ItemAnimator</code> class the flexibility
- to collect data at the correct point in the layout lifecycle. This information is later
- passed into the animate callbacks.</li>
- </ul>
- </ul>
- <ul>
- <li>Provided an easy transition plan for this backward-incompatible API change:</li>
- <ul>
- <li>If you’ve previously extended the <code>ItemAnimator</code> class, you can change
- your base class to <code>SimpleItemAnimator</code> and your code should work as before.
- The <code>SimpleItemAnimator</code> class provides the old API by wrapping the new API.</li>
- <li>Some methods were removed from the <code>ItemAnimator</code> class. The following
- code will no longer compile:</li>
- <pre>recyclerView.getItemAnimator().setSupportsChangeAnimations(false)</pre>
- <p>You can replace it with:</p>
- <pre>
-ItemAnimator animator = recyclerView.getItemAnimator();
-if (animator instanceof SimpleItemAnimator) {
- ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
-}
- </pre>
- </ul>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v7-preference">v7</a>,
- <a href="features.html#v14-preference">v14</a>, and
- <a href="features.html#v17-preference">v17</a> Preference Support library:</dt>
- <dd>
- <ul>
- <li>Removed APIs for controlling <code>EditText</code> dialogs.</li>
- </ul>
- </dd>
-
- <dt>Changes for <a href="features.html#v17-leanback">v17 Leanback Support library:</a></dt>
- <dd>
- <ul>
- <li>Added a version of the <code>GuidedStepFragment</code> class for the Support library
- (extends <code>android.support.v4.app.Fragment</code>), and improved animations and
- transitions.</li>
- <li>Updated the <code>GuidedStepFragment</code> class so it can be placed on top of
- existing content.</li>
- <li>Added the ability to annotate different types of search completions to the
- <code>SearchFragment</code> class.</li>
- <li>Added staggered slide transition support to the <code>VerticalGridFragment</code>
- class.</li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#design">Design Support library:</a></dt>
- <dd>
- <ul>
- <li>Added <a href=
- "https://www.google.com/design/spec/components/text-fields.html#text-fields-character-counter">
- character counting</a> support to the <code>TextInputLayout</code> widget.</li>
- <li>Added edge snapping support to the <code>AppBarLayout</code> class by adding the
- <code>SCROLL_FLAG_SNAP</code> constant. When scrolling ends, if the view is only
- partially visible, the view is snapped and scrolled to its closest edge.</li>
- <li>Added support for custom views to the <code>NavigationView</code> class by using the
- <code>app:actionLayout</code> attribute or <code>MenuItemCompat.setActionView()</code>
- method.</li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#custom-tabs">Custom Tabs Support library:</a></dt>
- <dd>
- <ul>
- <li>Added the <code>enableUrlBarHiding()</code> method to the <code>CustomTabsIntent</code>
- class. It lets the client customize whether the URL bar should be hidden automatically
- on scroll down.</li>
- <li>Added the <code>setActionButton()</code> method to the <code>CustomTabsSession</code>
- class. It lets the client
- change the icon for a custom action button in an already launched custom tab.</li>
- <li>Added the <code>TAB_SHOWN</code> and <code>TAB_HIDDEN</code> constants as new events
- for the <code>onNavigationEvent</code> method of the <code>CustomTabsCallback</code>
- class.</li>
- </ul>
- </dd>
-
- </dl>
-
- </div>
-</div> <!-- end of collapsible section -->
-
-
-<div class="toggle-content closed">
- <p id="rev23-0-1"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 23.0.1</a> <em>(September 2015)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for <a href="features.html#v7-preference">v7</a> and
- <a href="features.html#v14-preference">v14</a> Preference Support library:</dt>
- <dd>
- <ul>
- <li>Added the material design layout and style files.
- (<a href="http://b.android.com/183376">Issue 183376</a>)</li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library:</a></dt>
- <dd>
- <ul>
- <li>Fixed crash issues for the {@link android.app.Fragment} class by limiting the use of
- hardware layers to Android 4.1 (API level 16) and higher.
- (<a href="http://b.android.com/183896">Issue 183896</a>)</li>
- <li>Fixed an issue where hardware buttons did not work when an activity had set the
- {@link android.widget.Toolbar} class to act as the
- {@link android.app.ActionBar} by using the <code>setSupportActionBar()</code> method.
- (<a href="http://b.android.com/183334">Issue 183334</a>)</li>
- <li>Updated the {@link android.support.v7.app.AppCompatDialogFragment} class so it
- no longer throws the {@code Windows feature must be requested before adding content}
- error.
- (<a href="http://b.android.com/183186">Issue 183186</a>)</li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#design">Design Support library:</a></dt>
- <dd>
- <ul>
- <li>Fixed the
- {@link android.support.design.widget.AppBarLayout} class so it now draws correctly after
- rotation.
- (<a href="http://b.android.com/183109">Issue 183109</a>)</li>
- <li>Fixed the
- {@link android.support.design.widget.TabLayout} class so it now behaves correctly when a
- user clicks after a swipe.
- (<a href="http://b.android.com/183123">Issue 183123</a>)</li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#custom-tabs">Custom Tabs Support library:</a></dt>
- <dd>
- <ul>
- <li>Lowered the
- <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>minSdkVersion</code></a>
- value from 16 to 15 for version support.</li>
- <li>Added a way to generate a
- {@link android.support.customtabs.CustomTabsSessionToken} from an intent.</li>
- </ul>
- </dd>
-
- </dl>
-
- </div>
-</div> <!-- end of collapsible section -->
-
-
-<div class="toggle-content closed">
- <p id="rev23"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 23</a> <em>(August 2015)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Added new support libraries:</a></dt>
- <dd>
- <ul>
- <li><a href="features.html#custom-tabs">Custom Tabs Support library</a></li>
- <li><a href="features.html#percent">Percent Support library</a></li>
- <li><a href="features.html#recommendation">App Recommendation Support library for TV</a></li>
- <li><a href="features.html#v7-preference">v7 Preference Support library</a></li>
- <li><a href="features.html#v14-preference">v14 Preference Support library</a></li>
- <li><a href="features.html#v17-preference">v17 Preference Support library for TV</a></li>
- </ul>
- </dd>
-
- </dl>
-
- <p>For a complete list of the Support Library changes, see the
- <a href="{@docRoot}sdk/support_api_diff/23/changes.html">Support
- Library API Differences Report</a>. </p>
-
- </div>
-</div> <!-- end of collapsible section -->
-
-
-
-<div class="toggle-content closed">
- <p id="rev22-2-1"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 22.2.1</a> <em>(July 2015)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for <a href="features.html#design">Design Support library:</a></dt>
- <dd>
- <ul>
- <li>Added the {@code hide()} and {@code show()} methods to the
- {@link android.support.design.widget.FloatingActionButton} class for programmatic
- triggering of animations. </li>
- <li>Added the {@code LENGTH_INDEFINITE} constant to the
- {@link android.support.design.widget.Snackbar} class for showing a snackbar
- until it is dismissed or another snackbar is shown. Also, added the
- {@link android.support.design.widget.Snackbar#setActionTextColor(int)} and
- {@link android.support.design.widget.Snackbar#setActionTextColor(ColorStateList)}
- methods. </li>
- <li>Added the {@code getSelectedTabPosition()} method to the
- {@link android.support.design.widget.TabLayout} class for retrieving the currently
- selected tab. </li>
- <li>Provided a fully fluent API for the
- {@link android.support.v7.app.NotificationCompat.MediaStyle} class for method
- chaining. </li>
- <li>Added convenience methods to the
- {@link android.support.v7.widget.RecyclerView} for batch insertion of items. </li>
- </ul>
- </dd>
- </dl>
-
- <p>For a complete list of the Support Library changes, see the
- <a href="{@docRoot}sdk/support_api_diff/22.2.0/changes.html">Support
- Library API Differences Report</a>. </p>
-
- </div>
-</div> <!-- end of collapsible section -->
-
-
-
-<div class="toggle-content closed">
- <p id="rev21"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 22.2.0</a> <em>(May 2015)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Added <a href="features.html#design">Design Support library:</a></dt>
- <dd>
- <ul>
- <li>Added {@link android.support.design.widget.TextInputLayout} for showing
- {@link android.widget.EditText} hint and error text as floating labels.
- </li>
- <li>Added {@link android.support.design.widget.FloatingActionButton} for implementing a
- primary action on your interface as a
- floating action button, supporting either default or mini sizes.
- </li>
- <li>Added {@link android.support.design.widget.Snackbar} for providing lightweight
- feedback with an optional action in an animated snackbar.
- </li>
- <li>Added {@link android.support.design.widget.TabLayout} for implementing fixed and
- scrollable
- <a href="{@docRoot}design/building-blocks/tabs.html">tabs</a> as well as easy
- integration with
- {@link android.support.v4.view.ViewPager}.
- </li>
- <li>Added {@link android.support.design.widget.NavigationView} for implementing
- <a href="{@docRoot}design/patterns/navigation-drawer.html">navigation drawer</a>
- contents, including the ability to inflate menu items via a
- <a href="{@docRoot}guide/topics/resources/menu-resource.html">Menu Resource</a>.
- </li>
- <li>Added {@link android.support.design.widget.CoordinatorLayout}, a general purpose
- layout, used for building dependencies between
- sibling views and allowing easy scrolling reactions between components via
- {@link android.support.design.widget.CoordinatorLayout.Behavior}. Many of the Design
- Library components rely on being a child of a
- {@link android.support.design.widget.CoordinatorLayout}.
- </li>
- <li>Added {@link android.support.design.widget.AppBarLayout}, a container for a
- {@link android.widget.Toolbar}
- and other views (such as {@link android.support.design.widget.TabLayout}) for
- reacting to scrolling events by scrolling off the screen, becoming visible in reaction
- to a downward scroll, or collapsing/uncollapsing before scrolling off/onto the screen.
- </li>
- <li>Added {@link android.support.design.widget.CollapsingToolbarLayout} for controlling
- how a {@link android.widget.Toolbar} collapses. A toolbar may collapse by:
- pinning components to the top of the screen while it collapses, introducing
- parallax scrolling of components such as an {@link android.widget.ImageView},
- or adding a content scrim color when the view is partially collapsed.
- </li>
- </ul>
- </dt>
-
-
-
- <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
- <dd>
- <ul>
-
- <li>Added the
-{@link android.support.v4.view.accessibility.AccessibilityEventCompat#getContentChangeTypes getContentChangeTypes()}
- and
-{@link android.support.v4.view.accessibility.AccessibilityEventCompat#setContentChangeTypes setContentChangeTypes()}
- methods and related change type
- fields to the
- {@link android.support.v4.view.accessibility.AccessibilityEventCompat}
- class for accessibility event handling.
- </li>
- <li>Added the
-{@link android.support.v4.media.session.PlaybackStateCompat#getActiveQueueItemId getActiveQueueItemId()},
-{@link android.support.v4.media.session.PlaybackStateCompat#getCustomActions getCustomActions()},
- and
- {@link android.support.v4.media.session.PlaybackStateCompat#getExtras getExtras()}
- methods with related state fields to the
- {@link android.support.v4.media.session.PlaybackStateCompat} class for
- getting custom actions from the queue.
- </li>
- <li>Added the
-{@link android.support.v4.media.session.PlaybackStateCompat.Builder#addCustomAction addCustomAction()},
-{@link android.support.v4.media.session.PlaybackStateCompat.Builder#setActiveQueueItemId setActiveQueueItemId()},
- and
- {@link android.support.v4.media.session.PlaybackStateCompat.Builder#setExtras setExtras()}
- methods to the
- {@link android.support.v4.media.session.PlaybackStateCompat.Builder} class for adding
- custom actions to a playback state.
- </li>
- <li>Added the
-{@link android.support.v4.media.session.PlaybackStateCompat.CustomAction#fromCustomAction fromCustomAction()} and
-{@link android.support.v4.media.session.PlaybackStateCompat.CustomAction#getCustomAction getCustomAction()} methods
- to the
- {@link android.support.v4.media.session.PlaybackStateCompat.CustomAction} class
- for getting custom actions from the queue.
- </li>
- <li>Added the {@link android.support.v4.view.ViewCompat#isAttachedToWindow isAttachedToWindow()},
- {@link android.support.v4.view.ViewCompat#offsetLeftAndRight offsetLeftAndRight()}, and
- {@link android.support.v4.view.ViewCompat#offsetTopAndBottom offsetTopAndBottom()}
- methods to the {@link android.support.v4.view.ViewCompat} class for working with views.
- </li>
- <li>Added the {@link android.support.v4.view.ViewPager#addOnPageChangeListener addOnPageChangeListener()},
- {@link android.support.v4.view.ViewPager#clearOnPageChangeListeners clearOnPageChangeListeners()}, and
- {@link android.support.v4.view.ViewPager#removeOnPageChangeListener removeOnPageChangeListener()}
- methods to the {@link android.support.v4.view.ViewPager} class for responding to page
- changes.
- <p>Deprecated the
- {@link android.support.v4.view.ViewPager#setOnPageChangeListener setOnPageChangeListener()} method.</p>
- </li>
- <li>Added the
-{@link android.support.v4.view.ViewParentCompat#notifySubtreeAccessibilityStateChanged notifySubtreeAccessibilityStateChanged()} method to
- the {@link android.support.v4.view.ViewParentCompat} class for notifying a view parent
- that the accessibility state of one of its descendants has changed.
- </li>
- <li>Added the {@link android.support.v4.view.ViewPropertyAnimatorCompat#translationZ translationZ()},
- {@link android.support.v4.view.ViewPropertyAnimatorCompat#translationZBy translationZBy()},
- {@link android.support.v4.view.ViewPropertyAnimatorCompat#z z()}, and
- {@link android.support.v4.view.ViewPropertyAnimatorCompat#zBy zBy()}
- methods to the {@link android.support.v4.view.ViewPropertyAnimatorCompat} class for
- adding animation.
- </li>
- </ul>
- </dd>
-
-
-
-<dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library</a>:</dt>
- <dd>
-<ul>
- <li>Added the
- {@link android.support.v7.app.AppCompatActivity#onWindowStartingSupportActionMode onWindowStartingSupportActionMode()}
- method to the
- {@link android.support.v7.app.AppCompatActivity},
- {@link android.support.v7.app.AppCompatCallback}, and
- {@link android.support.v7.app.AppCompatDialog} classes for handling action modes
- started from the current window.
- </li>
-
- <li>Added the
-{@link android.support.v7.app.AppCompatDelegate#isHandleNativeActionModesEnabled isHandleNativeActionModesEnabled()} and
-{@link android.support.v7.app.AppCompatDelegate#setHandleNativeActionModesEnabled setHandleNativeActionModesEnabled()}
- methods to the
- {@link android.support.v7.app.AppCompatDelegate} class for handling native action modes.
- </li>
- </ul>
- </dd>
-
- <p>For a complete list of the Support Library changes, see the
- <a href="{@docRoot}sdk/support_api_diff/22.2.0/changes.html">Support
- Library API Differences Report</a>. </p>
-
- </dl>
-
- </div>
-</div> <!-- end of collapsible section -->
-
-
-
-
-<div class="toggle-content closed">
- <p id="rev21"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 22.1.0</a> <em>(April 2015)</em>
- </p>
-
-
-
- <div class="toggle-content-toggleme">
- <dl>
-
-
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for <a href="features.html#annotations">annotations library:</a></dt>
- <dd>
- <ul>
- <li>Added the Annotations library to provide support for enhanced code inspections.
- Annotations are added as metadata tags that you attach to variables, parameters,
- and return values to inspect method return values, passed parameters, and local
- variables and fields.
- </li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
- <dd>
- <ul>
-
- <li>Added the {@link android.support.v4.graphics.ColorUtils ColorUtils} class
- to provide a set of color-related utility methods.
- </li>
- <li>Added the {@link android.support.v4.graphics.drawable.DrawableCompat#unwrap unwrap()} and
- {@link android.support.v4.graphics.drawable.DrawableCompat#wrap wrap()} methods to the
- {@link android.support.v4.graphics.drawable.DrawableCompat} class , allowing you to use
- {@link android.support.v4.graphics.drawable.DrawableCompat#setTint setTint()},
- {@link android.support.v4.graphics.drawable.DrawableCompat#setTintList setTintList()},
- and {@link android.support.v4.graphics.drawable.DrawableCompat#setTintMode setTintMode()}
- on all API level 4 or higher devices.
- </li>
- <li>Added the {@link android.support.v4.os.TraceCompat} class to
- write trace events to the system trace buffer, which can then be collected and
- visualized using the <a href="{@docRoot}tools/help/systrace.html">Systrace</a> tool.
- </li>
- <li>Added the {@link android.support.v4.util.CircularIntArray} class
- to create circular integer array data structures.
- </li>
- <li>Added the {@link android.support.v4.util.CircularArray#clear clear()},
- {@link android.support.v4.util.CircularArray#removeFromStart removeFromStart()},
- and {@link android.support.v4.util.CircularArray#removeFromEnd removeFromEnd()}
- methods to the {@link android.support.v4.util.CircularArray} class. Also, changed the
- existing methods in this class to be non-final.
- </li>
- <li>Added the {@link android.support.v4.view.InputDeviceCompat}
- as a helper class to access data in the
- {@link android.support.v4.view.InputDeviceCompat} class.
- </li>
- <li>Added the {@link android.support.v4.view.LayoutInflaterCompat}
- class as a helper class to access data in the
- {@link android.support.v4.view.LayoutInflaterCompat} class
- and added the {@link android.support.v4.view.LayoutInflaterFactory} interface.
- </li>
- <li>Added classes, methods, and interfaces to support nested scrolling.
- <ul>
- <li>Added the {@link android.support.v4.view.NestedScrollingChildHelper}
- and {@link android.support.v4.view.NestedScrollingParentHelper}
- helper classes for implementing nested scrolling parent and child views.</li>
- <li>Added the {@link android.support.v4.view.NestedScrollingChild}
- interface to be implemented by {@link android.view.View} subclasses.</li>
- <li>Added the {@link android.support.v4.view.NestedScrollingParent}
- and {@link android.support.v4.view.ScrollingView} interfaces to support
- scrolling operations and provide scroll related APIs.</li>
- <li>Added the
- {@link android.support.v4.view.ViewGroupCompat#getNestedScrollAxes
- getNestedScrollAxes()} method to the {@link android.support.v4.view.ViewGroupCompat}
- class.</li>
- <li>Added methods to the {@link android.support.v4.view.ViewParentCompat} class to
- support nested scrolling.
- </li>
- <li>Added the {@link android.support.v4.widget.NestedScrollView}
- class to support nested scrolling parent and child on both new and old versions of
- Android.
- </li>
- </ul>
- </li>
- <li>Added methods and constants to the {@link android.support.v4.view.MotionEventCompat}
- class for getting axis values and event source.
- </li>
- <li>Updated the {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}
- class to add methods for errors, content invalidation and labels.
- </li>
- <li>Added the following interpolation classes for animation:
- {@link android.support.v4.view.animation.FastOutLinearInInterpolator},
- {@link android.support.v4.view.animation.FastOutSlowInInterpolator},
- {@link android.support.v4.view.animation.LinearOutSlowInInterpolator},
- {@link android.support.v4.view.animation.LinearOutSlowInInterpolator}, and
- {@link android.support.v4.view.animation.PathInterpolatorCompat}.
- </li>
- <li>Added the {@link android.support.v4.widget.Space} class to create gaps between
- components in general purpose layouts. This class is deprecated in the gridlayout library.
- </li>
- <li>Added the {@link android.support.v4.widget.TextViewCompat} class for accessing
- features in a {@link android.widget.TextView}.
- </li>
- <li>Added a displacement parameter to the
- {@link android.support.v4.widget.EdgeEffectCompat#onPull onPull()} method in the
- {@link android.support.v4.widget.EdgeEffectCompat} class.
- </li>
-
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library</a>:</dt>
- <dd>
- <ul>
- <li>Added tint support to appcompat widgets, including
- {@link android.support.v7.widget.AppCompatAutoCompleteTextView},
- {@link android.support.v7.widget.AppCompatButton},
- {@link android.support.v7.widget.AppCompatCheckBox},
- {@link android.support.v7.widget.AppCompatCheckedTextView},
- {@link android.support.v7.widget.AppCompatEditText},
- {@link android.support.v7.widget.AppCompatMultiAutoCompleteTextView},
- {@link android.support.v7.widget.AppCompatRadioButton},
- {@link android.support.v7.widget.AppCompatRatingBar},
- {@link android.support.v7.widget.AppCompatSpinner}, and
- {@link android.support.v7.widget.AppCompatTextView}.
- </li>
- <li>Updated the {@link android.support.v7.app.AppCompatActivity} as the base
- class for activities that use the support library action bar features. This class
- replaces the deprecated {@link android.support.v7.app.ActionBarActivity}.
- </li>
- <li>Added the
- {@link android.support.v7.app.AppCompatCallback} interface
- to be implemented for AppCompat to be able to perform callbacks.
- </li>
- <li>Added the
- {@link android.support.v7.app.AppCompatDelegate} abstract class
- as a delegate you can use to extend AppCompat's support to any activity.
- </li>
- <li>Added the
- {@link android.support.v7.app.AppCompatDialog} class
- as the base class for AppCompat themed dialogs.
- </li>
- <li>Added the spinner style
- {@link android.support.v7.app.AlertDialog} and
- {@link android.support.v7.app.AlertDialog.Builder} classes to provide an AppCompat
- themed {@link android.app.AlertDialog}.
- </li>
- <li>Added the {@link android.support.v7.graphics.Palette.Builder} class
- for generating {@link android.support.v7.graphics.Palette} instances.
- <ul>
- <li>Added the
- {@link android.support.v7.graphics.Palette#from}
- method to the {@link android.support.v7.graphics.Palette} class to
- start generating a Palette with the returned
- {@link android.support.v7.graphics.Palette.Builder} instance.
- </li>
- <li>Deprecated the {@link android.support.v7.graphics.Palette#generate generate()} and
- {@link android.support.v7.graphics.Palette#generateAsync generateAsync()} methods.
- </li>
- </ul>
- </li>
-
- <li>Added the
- {@link android.support.v7.widget.GridLayout.Spec#getAbsoluteAlignment
- getAbsoluteAlignment()} method to the {@link android.support.v7.widget.GridLayout.Spec}
- class.
- </li>
- <li>Deprecated use of <code>app:theme</code> for styling
- {@link android.support.v7.widget.Toolbar}. You can now use
- <code>android:theme</code> for toolbars on all API level 7 and higher devices and
- <code>android:theme</code> support for all widgets on API level 11 and higher devices.
- </li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v17-leanback">v17 leanback library</a>:</dt>
- <dd>
- <ul>
- <li> Added {@link android.support.v17.leanback.app.GuidedStepFragment},
- {@link android.support.v17.leanback.widget.GuidanceStylist} and
- {@link android.support.v17.leanback.widget.GuidedActionsStylist} to support
- creating multi-step decision flows.
- </li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview library</a>:</dt>
- <dd>
- <ul>
- <li>Added {@link android.support.v7.util.SortedList} classes to display items in
- a list order and provide notification of changes to the list.
- </li>
- <li>Added the {@link android.support.v7.widget.util.SortedListAdapterCallback} class
- that can bind a sorted list to a
- {@link android.support.v7.widget.RecyclerView.Adapter} class.
- </li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v8-renderscript">v8 renderscript library</a>:</dt>
- <dd>
- <ul>
- <li>Added the {@link android.support.v8.renderscript.ScriptIntrinsicHistogram} class for
- use as a histogram filter.</li>
- <li>Added the {@link android.support.v8.renderscript.ScriptIntrinsicResize} class for
- performing a resize of a 2D allocation.
- </li>
- </ul>
- </dd>
-
- </dl>
-
-
- </div>
-</div> <!-- end of collapsible section -->
-
-
-
-<div class="toggle-content closed">
- <p id="rev21"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 22</a> <em>(March 2015)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
- <dd>
- <ul>
- <li>Updated the {@link android.support.v4.content.res.ResourcesCompat#getDrawable
- getDrawable()} method to return a drawable object for a specified specific resource ID,
- screen density, and theme.
- </li>
- <li>Added the {@link android.support.v4.view.ViewCompat#setImportantForAccessibility
- setImportantForAccessibility()} method so you can indicate if a view should trigger
- accessibility events.
- </li>
- <li>Added the {@link android.support.v4.widget.DrawerLayout#getStatusBarBackgroundDrawable
- getStatusBarBackgroundDrawable()} method so you can get the status bar background
- drawable.
- </li>
- <li>Added methods to the
- {@link android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation}
- class so Android Auto messaging apps can retrieve additional notification data.
- </li>
- <li>Added the {@link android.support.v4.widget.SwipeRefreshLayout#getProgressCircleDiameter
- getProgressCircleDiameter()} method to return the diameter of a circle layout.
- </li>
- <li>Changed the default {@link android.support.v4.widget.DrawerLayout DrawerLayout}
- status bar color to {@link android.R.attr#colorPrimaryDark}.
- </li>
- </ul>
- </dd>
-
- <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library</a>:</dt>
- <dd>
- <ul>
- <li>Added the spinner style
- {@link android.support.v7.appcompat.R.style#Base_Widget_AppCompat_Spinner_Underlined}.</li>
- <li>Added tinted widgets styles with
- {@link android.support.v7.appcompat.R.style#Widget_AppCompat_AutoCompleteTextView},
- {@link android.widget.MultiAutoCompleteTextView},
- {@link android.support.v7.appcompat.R.style#TextAppearance_AppCompat_Button}, and
- {@link android.support.v7.appcompat.R.style#Base_Widget_AppCompat_RatingBar}.</li>
- </ul>
- </dd>
-
- <dt>Changes for <a href="features.html#v17-leanback">v17 leanback library</a>:</dt>
- <dd>
- <ul>
- <li>Added the {@link android.support.v17.leanback.widget.ListRowPresenter#getRecycledPoolSize
- getRecycledPoolSize()} and
- {@link android.support.v17.leanback.widget.ListRowPresenter#setRecycledPoolSize
- setRecycledPoolSize()} methods to allow customized recycled pool sizes.</li>
- <li>Added the {@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT} attribute to the
- layout width setting to support wrapped content for title icons.</li>
- <li>Defined {@link android.support.v17.leanback.R.transition} in XML to
- improve transition updates. </li>
- <li>Enabled support for right to left layouts.</li>
- <li>Added the play and pause media key events support to the
- {@link android.support.v17.leanback.app.PlaybackOverlayFragment} class.</li>
- <li>Added enter and return transitions to the
- {@link android.support.v17.leanback.app.BrowseFragment} class and the
- {@link android.support.v17.leanback.app.DetailsFragment} class.</li>
- <li>Added the {@link android.support.v17.leanback.widget.ArrayObjectAdapter#replace
- replace()} method to replace items in an object’s adapter array. </li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v7-mediarouter">v7 mediarouter library</a>:</dt>
- <dd>
- <ul>
- <li>Updated Google Cast icons to use the
- <a href="{@docRoot}training/material/index.html">material design</a> style.</li>
- <li>Updated all the icons used in the {@link android.media.MediaRouter} dialogs to use the
- <a href="{@docRoot}training/material/index.html">material design</a> style.</li>
- </ul>
- </dd>
-
-
- <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview library</a>:</dt>
- <dd>
- <ul>
- <li>Added the {@link android.support.v7.widget.RecyclerView.ViewHolder#getLayoutPosition
- getlayoutPosition()}
- and {@link android.support.v7.widget.RecyclerView.ViewHolder#getAdapterPosition
- getadapterPosition()} methods to the {@link android.support.v7.widget.RecyclerView}
- class.</li>
- <li>Deprecated the <code>classgetChildPosition()</code> and
- <code>findViewHolderForPosition()</code> methods in the
- {@link android.support.v7.widget.RecyclerView} class. </li>
- <li>Deprecated the <code>getPosition()</code> method in the
- {@link android.support.v7.widget.RecyclerView.ViewHolder} class. </li>
- <li>Deprecated the <code>getViewPosition()</code> method in the
- {@link android.support.v7.widget.RecyclerView.LayoutParams} class. </li>
- </ul>
- </dd>
-
- </div>
-</div>
-
-
-
-
-<div class="toggle-content closed">
- <p id="rev21"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 21.0.3</a> <em>(December 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
- <dd>
- <ul>
- <li>Added several {@link android.support.v4.app.NotificationCompat.WearableExtender}
- methods to improve the display of barcodes in notifications on wearable devices.
- <ul>
- <li>{@link android.support.v4.app.NotificationCompat.WearableExtender#getHintScreenTimeout getHintScreenTimeout()}</li>
- <li>{@link android.support.v4.app.NotificationCompat.WearableExtender#setHintScreenTimeout setHintScreenTimeout()}</li>
- <li>{@link android.support.v4.app.NotificationCompat.WearableExtender#getHintAvoidBackgroundClipping getHintAvoidBackgroundClipping()}</li>
- <li>{@link android.support.v4.app.NotificationCompat.WearableExtender#setHintAvoidBackgroundClipping setHintAvoidBackgroundClipping()}</li>
- </ul>
- </li>
- </ul>
- </dd>
-
- </div>
-</div>
-
-
-
-<div class="toggle-content closed">
- <p id="rev21"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 21.0.2</a> <em>(November 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
- <dd>
- <ul>
- <li>Added {@link android.support.v4.app.NotificationCompat.CarExtender}
- class to support Android Auto extensions to notifications.</li>
- </ul>
- </dd>
- <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library</a>:</dt>
- <dd>
- <ul>
- <li>Added the {@link android.support.v7.widget.PopupMenu} constructor to support new popup
- menus.</li>
- <li>Added support for a Collapse icon description in the {@link android.support.v7.widget.Toolbar}
- class.</li>
- <li>Updated the {@link android.support.v7.widget.SearchView} widget to support displaying
- the {@link android.support.v7.appcompat.R.attr#commitIcon}. </li>
- <li>Removed the <code>buttonGravity</code> attribute from the
- {@link android.support.v7.widget.Toolbar} class. </li>
- </ul>
- </dd>
- <dt>Changes for <a href="features.html#v7-cardview">v7 cardview library</a>:</dt>
- <dd>
- <ul>
- <li>Added {@link android.support.v7.widget.CardView#setCardBackgroundColor} API to
- support changing the background color of the {@link android.support.v7.widget.CardView}.</li>
- <li>Changed the {@link android.support.v7.widget.CardView} to more accurately report its
- opacity value as {@link android.graphics.PixelFormat#TRANSLUCENT}.</li>
- </ul>
- </dd>
- <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview
- library</a>:</dt>
- <dd>
- <ul>
- <li>Added {@link android.support.v7.widget.RecyclerView#TOUCH_SLOP_DEFAULT} and
- {@link android.support.v7.widget.RecyclerView#TOUCH_SLOP_PAGING} constants
- to the {@link android.support.v7.widget.RecyclerView} class
- to support touch slop configurations for paging.</li>
- </ul>
- </dd>
- <dt>Changes for <a href="features.html#v17-leanback">v17 leanback library</a>:</dt>
- <dd>
- <ul>
- <li>Added support to generate v4 code fragments. </li>
- <li>Changed the secondary text color on {@link android.support.v7.widget.CardView}. </li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-
-<div class="toggle-content closed">
- <p id="rev21"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 21.0.1</a> <em>(November 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Added <a href="{@docRoot}tools/support-library/features.html#multidex">
- multidex support library</a> to support multiple
- <a href="https://source.android.com/devices/tech/dalvik/">Dalvik</a> Executable (DEX) files
- for multi-dex file support prior to Android 5.0.
- </dt>
- </dl>
- </div>
-</div>
-
-
-
-
-<div class="toggle-content closed">
- <p id="rev21"><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 21</a> <em>(October 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
- <dd>
- <ul>
- <li>Added support for {@link android.support.v4.app.Fragment}
- transitions for devices running Android 5.0 (API level 21).
- Be aware that transitions have no effect on devices running
- Android 4.4 and lower.
- </li>
- <li>Added {@link android.support.v4.provider.DocumentFile} to ease
- the transition from {@link java.io.File}
- while working with document trees. However, this class demands
- more processing overhead compared to the platform's
- {@link android.provider.DocumentsContract} API added in
- Android 4.4 (API level 19). So you should switch to using {@link
- android.provider.DocumentsContract} when running on Android 4.4
- and higher.</li>
- </ul>
- </dd>
- <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat
- library</a>:</dt>
- <dd>
- <ul>
- <li>Added support for <a href="{@docRoot}design/material/">material
- design</a> user interfaces.</li>
- <li>Added {@link android.support.v7.widget.Toolbar}, which generalizes
- the functionality of {@link android.support.v7.app.ActionBar} for
- use within app layouts.</li>
- <li>Updated {@link android.support.v7.app.ActionBarDrawerToggle},
- which contains the menu-to-arrow animation</li>
- <li>Updated common user interface widgets to allow tinting via theme
- attributes when running on pre-Android 5.0 devices</li>
- <li>Added {@link android.support.v7.widget.SwitchCompat}, a backport
- of the {@link android.widget.Switch} widget that was added in
- Android 4.0 (API level 14).</li>
- </ul>
- </dd>
- <dt>New <a href="features.html#v7-cardview">v7 cardview library</a>:</dt>
- <dd>
- <ul>
- <li>Added the {@link android.support.v7.widget.CardView} widget, which
- provides a material design-compatible implementation for displaying
- data items.</li>
- </ul>
- </dd>
- <dt>New <a href="features.html#v7-recyclerview">v7 recyclerview
- library</a>:</dt>
- <dd>
- <ul>
- <li>Added the {@link android.support.v7.widget.RecyclerView} widget,
- which provides a flexible list view for providing a limited window
- into a large data set.</li>
- </ul>
- </dd>
- <dt>New <a href="features.html#v7-palette">v7 palette library</a>:</dt>
- <dd>
- <ul>
- <li>Added {@link android.support.v7.graphics.Palette} class,
- which lets you extract prominent colors from an image.</li>
- </ul>
- </dd>
- <dt>New <a href="features.html#v17-leanback">v17 leanback library</a>:</dt>
- <dd>
- <ul>
- <li>Added support for building TV user interfaces, including
- {@link android.support.v17.leanback.app.BrowseFragment},
- {@link android.support.v17.leanback.app.DetailsFragment}, and
- {@link android.support.v17.leanback.app.PlaybackOverlayFragment}.
- For more information about using these user interface widgets,
- see <a href="{@docRoot}training/tv/playback/index.html">Building TV
- Playback Apps</a>.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 20</a> <em>(July 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Added extended notification support for Android Wear in
- {@link android.support.v4.app.NotificationCompat.WearableExtender}, which allows you
- to specify wearable-specific features in your notifications.</li>
- <li>Added {@link android.support.v4.app.NotificationCompat.Action.WearableExtender},
- which allows actions to be added on wearable notifications.</li>
- <li>Added {@link android.support.v4.app.NotificationManagerCompat}, which allows you
- to issue notifications that properly support wearable features.</li>
- <li>Added {@link android.support.v4.app.RemoteInput}, which allows a handheld device
- to receive voice input from a notification that appears on a wearable device.</li>
- <li>Improved the handling of touch feedback in
- {@link android.support.v4.widget.SwipeRefreshLayout}.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 19.1.0</a> <em>(March 2014)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Added the {@link android.support.v4.widget.SwipeRefreshLayout} class,
- which enables users to refresh the contents of a view with a vertical
- swipe gesture.</li>
- <li>Fixed accessibility issues with navigation drawers.</li>
- </ul>
- </dd>
-
- <dt>Changes for v7 appcompat library:</dt>
- <dd>
- <ul>
- <li>Fixed background issues with the action bar.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 19.0.1</a> <em>(December 2013)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Improved {@link android.support.v4.print.PrintHelper} by adding asynchronous
- handling of printing.</li>
- <li>Fixed the {@link android.support.v4.widget.DrawerLayout} class approximation of
- the {@link android.view.View#addChildrenForAccessibility addChildrenForAccessibility()}
- method.</li>
- <li>Fixed slide drawable mirroring in {@link
- android.support.v4.app.ActionBarDrawerToggle}.</li>
- <li>Fixed off-by-one issue when removing an item from a collection iterator.</li>
- </ul>
- </dd>
-
- <dt>Changes for v7 mediarouter library:</dt>
- <dd>
- <ul>
- <li>Improved route identification by using full component name in the {@link
- android.support.v7.media.MediaRouteProvider.ProviderMetadata}.</li>
- <li>Updated {@link android.support.v7.app.MediaRouteChooserDialog} to hide disabled
- routes.</li>
- </ul>
- </dd>
-
- <dt>Changes for <a href="features.html#v8-renderscript">v8 renderscript library</a></dt>
- <dd>
- <ul>
- <li>Added error propagation for the RenderScript thunking layer.</li>
- </ul>
- </dd>
-
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 19</a> <em>(October 2013)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Added support for external Storage APIs with the
- {@link android.support.v4.content.ContextCompat#getObbDirs getObbDirs()},
- {@link android.support.v4.content.ContextCompat#getExternalFilesDirs getExternalFilesDirs()},
- {@link android.support.v4.content.ContextCompat#getExternalCacheDirs getExternalCacheDirs()},
- and {@link android.support.v4.os.EnvironmentCompat#getStorageState getStorageState()}.
- These helper methods always return a single file object on devices running Android
- 4.3 (API level 18) and earlier. When running on Android 4.4 (API level 19) and higher,
- these methods may return more than one file object.</li>
- <li>Added {@link android.support.v4.print.PrintHelper} class that works with the
- Print APIs to print images with a minimum of code.</li>
- <li>Added drag-to-open user interface support for pop-up menus. For more information, see
- {@link android.support.v4.widget.PopupMenuCompat} and
- {@link android.support.v4.widget.ListPopupWindowCompat}.</li>
- <li>Improved accessibility support with the addition of a
- {@link android.support.v4.view.accessibility.AccessibilityNodeProviderCompat#findFocus
- findFocus()} method in
- {@link android.support.v4.view.accessibility.AccessibilityNodeProviderCompat} and the
- {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat#getLiveRegion
- getLiveRegion()} method in
- {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}.</li>
- <li>Added helper class {@link android.support.v4.view.ScaleGestureDetectorCompat} for
- accessing new scaling gesture methods.</li>
- <li>Fixed problem with {@link android.support.v4.app.ActionBarDrawerToggle} in
- right-to-left language displays.</li>
- <li>Modified {@link android.support.v4.widget.AutoScrollHelper} option to consume
- touch events or allow them to be passed through to other views.</li>
- </ul>
- </dd>
-
- <dt>Changes for v7 mediarouter library:</dt>
- <dd>
- <ul>
- <li>Added support for media playback queuing, setting HTTP header values and media
- playback duration.</li>
- <li>Added explicit start, get, and end session actions for explicitly managing media
- playback sessions with media router.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 18</a> <em>(July 2013)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>User interface
- <ul>
- <li>Added {@link android.support.v4.text.BidiFormatter} for handling
- text strings that combine right to left and left to right-formatted text.</li>
- <li>Modified {@link android.support.v4.view.ViewPager} to better handle cases where the
- pager has a measured width of zero in the initial layout processing.</li>
- <li>Modified {@link android.support.v4.widget.DrawerLayout} and
- {@link android.support.v4.widget.SlidingPaneLayout} to not throw exceptions for
- measurement while the project code is being edited.</li>
- </ul>
- </li>
-
- <li>Accessibility
- <ul>
- <li>Added {@link android.support.v4.widget.ExploreByTouchHelper} to simplify the
- implementation of accessibility for custom views.</li>
- <li>Fixed a problem with {@link android.support.v4.view.ViewPager} incorrectly
- populating {@link
- android.support.v4.view.accessibility.AccessibilityEventCompat#TYPE_VIEW_SCROLLED
- TYPE_VIEW_SCROLLED} accessibility events.</li>
- <li>Fixed a null pointer exception in {@link android.support.v4.view.ViewPager} when
- populating an accessibility event.</li>
- <li>Simplified {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}
- by changing {@link java.lang.CharSequence} inputs to {@link java.lang.String} objects.
- </li>
- <li>Deprecated an {@link android.support.v4.view.accessibility.AccessibilityRecordCompat}
- constructor that used an {@link java.lang.Object} as input.</li>
- </ul>
- </li>
-
- <li>Media
- <ul>
- <li>Added {@link android.support.v4.media.TransportMediator} helper class to manage
- media transport control, such as play, pause, skip and other media actions.</li>
- <li>Added {@link android.support.v4.hardware.display.DisplayManagerCompat} for managing
- display output to one or more device displays.</li>
- </ul>
- </li>
-
- <li>Other changes
- <ul>
- <li>Added {@link android.support.v4.content.WakefulBroadcastReceiver} helper class for
- implementing a common pattern of detecting a device wakeup event and passing work off
- to a {@link android.app.Service} while ensuring that the device does not go back to
- sleep before the handoff is complete.</li>
- <li>Added two new APIs,
- {@link android.support.v4.content.AsyncTaskLoader#commitContentChanged
- commitContentChanged()} and
- {@link android.support.v4.content.AsyncTaskLoader#rollbackContentChanged
- rollbackContentChanged()}, to {@link android.support.v4.content.AsyncTaskLoader} to
- help deal with background updates for data changes that are subsequently canceled.
- </li>
- </ul>
- </li>
- </ul>
- </dd>
-
- <dt>New v7 appcompat library:</dt>
- <dd>
- <ul>
- <li>Added {@link android.support.v7.app.ActionBar} to allow implementation of the
- action bar user interface <a href="{@docRoot}design/patterns/actionbar.html">design
- pattern</a> back to Android 2.1 (API level 7) and higher. Use of this class requires
- that you implement your activity by extending the new
- {@link android.support.v7.app.ActionBarActivity} class.</li>
- </ul>
- </dd>
-
- <dt>New v7 mediarouter library:</dt>
- <dd>
- <p>Added a new mediarouter library that provides support for the <a
- href="https://developers.google.com/cast/">Google Cast developer preview</a>.
- The v7 mediarouter library APIs provide a means of controlling the routing of
- media channels and streams from the current device to external screens,
- speakers, and other destination devices, with compatibility back to Android 2.1
- (API level 7). See <a
- href="{@docRoot}tools/support-library/features.html#v7-mediarouter">V7
- mediarouter library</a> for more information. </p>
-
- <p class="caution">The v7 mediarouter library APIs introduced in Support
- Library r18 are subject to change in later revisions of the Support
- Library. At this time, we recommend using the library only in connection
- with the <a href="https://developers.google.com/cast/">Google Cast
- developer preview</a>.</p>
- </dd>
-
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 13</a> <em>(May 2013)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Added {@link android.support.v4.widget.DrawerLayout} for creating a
- <a href="{@docRoot}training/implementing-navigation/nav-drawer.html">Navigation
- Drawer</a> that can be pulled in from the edge of a window.</li>
- <li>Added {@link android.support.v4.widget.SlidingPaneLayout} widget for creating linked
- summary and detail views that appropriately adapt to various screen sizes.</li>
- <li>Added {@link android.support.v4.app.ActionBarDrawerToggle} as a way to tie
- together the functions of {@link android.support.v4.widget.DrawerLayout} and {@link
- android.app.ActionBar}.</li>
- <li>Added {@link android.support.v4.widget.ViewDragHelper} as a new common component
- for dragging views within a parent view.</li>
- <li>Added {@link android.support.v4.widget.ScrollerCompat} to provide {@link
- android.widget.Scroller} and {@link android.widget.OverScroller} compatibility support.
- </li>
- <li>Added {@link android.support.v4.content.FileProvider} to allow sharing of private
- files between applications.</li>
- <li>Updated {@link android.support.v4.view.ViewPager} to throw an exception if the
- associated {@link android.support.v4.view.PagerAdapter} class is modified without a
- call to {@link android.support.v4.view.PagerAdapter#notifyDataSetChanged
- notifyDataSetChanged()}.
- </li>
- <li>Fixed an issue with {@link android.support.v4.view.ViewPager} children drawing sort
- order.</li>
- <li>Fixed {@link android.support.v4.view.GestureDetectorCompat} to dispatch missing
- {@link android.view.GestureDetector.SimpleOnGestureListener#onSingleTapConfirmed} calls
- between tap timeout and long press events.</li>
- </ul>
- </dd>
-
- <dt>New v7 gridlayout library:</dt>
- <dd>
- <ul>
- <li>Added {@link android.support.v7.widget.GridLayout} to provide support for the
- {@link android.widget.GridLayout} layout object.</li>
- <li>Added {@link android.support.v7.widget.Space} which can be used to create blank areas
- within a {@link android.support.v7.widget.GridLayout} layout object.</li>
- </ul>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 12</a> <em>(February 2013)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Improved interaction behavior for {@link android.support.v4.view.ViewPager}.</li>
- <li>Fixed a bug that could cause {@link android.support.v4.view.ViewPager} to select the
- wrong page.</li>
- <li>Fixed use of {@link android.support.v4.view.ViewPager#removeView removeView()} method
- during layout for {@link android.support.v4.view.ViewPager}.</li>
- <li>Fixed issue with {@link android.support.v4.widget.SearchViewCompat} where using the
- back button to dismiss does not clear the search text. This fix only applies to
- host API levels 14 and higher.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 11</a> <em>(November 2012)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>User Interface
- <ul>
- <li>Added support for nested {@link android.support.v4.app.Fragment} classes.</li>
- <li>Added improvements to {@link android.support.v4.app.FragmentManager} debugging.
- </li>
- <li>Fixed problem in {@link android.support.v4.app.FragmentTabHost} where fragment
- and tab interaction could result in a {@link android.widget.ListView} state loss.
- </li>
- <li>Fixed issue with user-visible hint in
- {@link android.support.v4.app.FragmentStatePagerAdapter}.</li>
- <li>Added {@link android.support.v4.view.ViewPager.PageTransformer PageTransformer}
- interface to {@link android.support.v4.view.ViewPager} to allow applications to
- supply a custom transition behavior for scrolling.</li>
- <li>Added new features and fixes to {@link android.support.v4.app.TaskStackBuilder}
- from current release.</li>
- <li>Fixed {@link android.support.v4.view.PagerTitleStrip} to correctly track the
- {@link android.support.v4.view.PagerAdapter} currently in use.</li>
- <li>Fixed display flickering, positioning, and text clipping problems with
- {@link android.support.v4.view.PagerTitleStrip}.</li>
- <li>Fixed {@link android.support.v4.view.PagerTabStrip} to properly respect padding
- when drawing an underline.</li>
- </ul>
- </li>
- <li>Accessibility
- <ul>
- <li>Added support for new accessibility gesture and touch event types in
- {@link android.support.v4.view.accessibility.AccessibilityEventCompat}.</li>
- <li>Added support for new accessibility APIs in
- {@link android.support.v4.view.ViewCompat}.</li>
- <li>Added support for {@link android.support.v4.view.ViewCompat#performAccessibilityAction
- performAccessibilityAction()} method to {@link android.support.v4.view.ViewCompat}.
- </li>
- </ul>
- </li>
- <li>Added support for gestures with {@link android.support.v4.view.GestureDetectorCompat}.
- </li>
- <li>Added support for performing atomic operations on files using a new
- {@link android.support.v4.util.AtomicFile} class.</li>
- <li>Added support for the full set of {@code make} methods in
- {@link android.support.v4.content.IntentCompat}.</li>
- <li>Added {@link android.support.v4.util.LruCache#trimToSize trimToSize()} method in
- {@link android.support.v4.util.LruCache} utility class.</li>
- <li>Updated {@link android.support.v4.net.ConnectivityManagerCompat} to get NetworkInfo
- from a {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}
- broadcast.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 10</a> <em>(August 2012)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Added support for notification features introduced in Android 4.1 (API level 16) with
- additions to {@link android.support.v4.app.NotificationCompat}.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 9</a> <em>(June 2012)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
-
- <li>User Interface Support
- <ul>
- <li>Added {@link android.support.v4.view.PagerTabStrip} support, providing enhanced
-functionality beyond {@link android.support.v4.view.PagerTitleStrip}.</li>
- <li>Fixed various bugs for {@link android.support.v4.view.PagerTitleStrip} and
-{@link android.support.v4.view.PagerTabStrip}, including {@link
-android.widget.TextView#setAllCaps setAllCaps} option, title alignment,
-appearance improvements, minimum width constraints and touch navigation issues.</li>
- <li>Added support for {@link android.support.v4.view.ViewPager} page gutters, which
-helps the {@link android.support.v4.view.ViewPager} class provide paging support for content with
-a large horizontal scroll range, such as a map.</li>
- <li>Fixed numerous bugs for {@link android.support.v4.view.ViewPager}, including size
-and data set change problems, page positioning, user interaction, scroll tracking and keyboard
-navigation problems.</li>
- <li>Fixed many bugs for {@link android.support.v4.app.Fragment}, including proper
-handling of {@link android.support.v4.app.Fragment#onActivityResult onActivityResult()} when
-the target fragment no longer exists, dispatching selection events to invisible fragments, improved
-{@link android.support.v4.app.FragmentTransaction#replace FragmentTransaction.replace()} behavior
-and added better state handling for fragments being moved out of view.</li>
- <li>Added support for the {@link
-android.support.v4.view.ViewCompat postOnAnimation()} method in {@link
-android.support.v4.view.ViewCompat}.</li>
- <li>Updated {@link android.support.v4.app.NavUtils} to use Android 4.1 (API level 16)
-<em>Up</em> navigation functionality when available.</li>
- </ul>
- </li>
-
- <li>Accessibility
- <ul>
- <li>Updated accessibility support classes, including {@link
-android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}, to follow fixes made in Android
-4.1 (API level 16).</li>
- <li>Added support for accessibility scroll actions in {@link
-android.support.v4.view.ViewPager}.</li>
- </ul>
- </li>
-
- <li>General improvements
- <ul>
- <li>Updated {@link android.support.v4.app.TaskStackBuilder} to reflect API changes in
-Android 4.1 (API level 16).</li>
- <li>Enhanced {@link android.support.v4.app.TaskStackBuilder} to allow it to be used
-from a Service.</li>
- <li>Added support for {@link android.support.v4.content.IntentCompat EXTRA_HTML_TEXT}
-to {@link android.support.v4.app.ShareCompat}.</li>
- <li>Updated {@link android.support.v4.app.NotificationCompat.Builder} to support the
-{@link android.support.v4.app.NotificationCompat.Builder#setNumber setNumber()} method.</li>
- <li>Added support in {@link android.support.v4.net.ConnectivityManagerCompat} for the
-{@link android.support.v4.net.ConnectivityManagerCompat#isActiveNetworkMetered
-isActiveNetworkMetered()} method.</li>
- </ul>
- </li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 8</a> <em>(April 2012)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Fixed intent flags for {@link android.app.PendingIntent} objects generated
- by {@link android.support.v4.app.TaskStackBuilder}.</li>
- <li>Removed unused attributes from the gridlayout library projects to make sure
- the library can be built with API level 7 and higher.</li>
- <li>Added {@code .classpath} and {@code .project} files for the gridlayout
- library project.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 7</a> <em>(March 2012)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Added {@link android.support.v4.app.ShareCompat}, which provides helper classes
-for sending and receiving content for social sharing applications, including new metadata for
-attributing shared data to the source app. This class also provides compatible integration with the
-new {@link android.widget.ShareActionProvider} in Android 4.0.</li>
- <li>Added {@link android.support.v4.app.NavUtils} and {@link
-android.support.v4.app.TaskStackBuilder} to provide support for implementing the
-<a href="{@docRoot}design/index.html">Android Design</a> guidelines for navigation. These
-additions include a way to implement the action bar's <em>Up</em> button across versions.
-For an example implementation of this pattern, see the AppNavigation sample in
-(<code><em><sdk></em>/samples/<em><platform></em>/AppNavigation</code>).</li>
- <li>Added {@link android.support.v4.app.NotificationCompat.Builder} to provide a
-compatibility implementation of Android 3.0's {@link android.app.Notification.Builder} helper class
-for creating standardized system notifications.</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 6</a> <em>(December 2011)</em>
- </p>
- <div class="toggle-content-toggleme">
-
- <p class="note"><strong>Note:</strong> Reference for support library APIs are now available with
- the framework references, for example: {@link android.support.v4.app}.</p>
-<dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Changes to ViewPager:
- <ul>
- <li>Added extra decorative view support for {@link android.support.v4.view.ViewPager}.
- Decorative views may be supplied as child views of a pager in XML layout.</li>
- <li>Added {@link android.support.v4.view.PagerAdapter#getPageTitle
- PagerAdapter.getPageTitle()} to supply title strings for pages, which defaults to no
- title for each page.</li>
- <li>Added {@link android.support.v4.view.PagerTitleStrip}, a non-interactive title
- strip, that can be added as a child of ViewPager. Developers can supply text
- appearance and color, as well as layout sizing and gravity information.</li>
- <li>Updated {@link android.support.v4.view.PagerAdapter} methods to take ViewGroup
- objects, rather than View to avoid class casting in adapter implementations.</li>
- <li>Updated {@link android.support.v4.view.ViewPager} to use Launcher-style
- fling behavior.</li>
- <li>Bug fixes for user interface interaction and test automation.</li>
- </ul>
- </li>
-
- <li>Support for Fragments:
- <ul>
- <li>Changed {@code setStartDeferred()} method to {@link
- android.support.v4.app.Fragment#setUserVisibleHint}.</li>
- <li>Added deferred start for off-screen pages to improve performance.</li>
- </ul>
- </li>
-
- <li>Support for Accessiblity APIs:
- <ul>
- <li>Updated {@link android.support.v4.view.AccessibilityDelegateCompat} methods
- to return empty lists instead of null.</li>
- <li>Added new APIs needed by the v4 samples.</li>
- </ul>
- </li>
-
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 5</a> <em>(December 2011)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Support for Accessiblity APIs:
- <ul>
- <li>Added {@link android.support.v4.view.AccessibilityDelegateCompat}
- to support {@link android.view.View.AccessibilityDelegate}.</li>
-
- <li>Added {@link android.support.v4.view.accessibility.AccessibilityEventCompat}
- to support {@link android.view.accessibility.AccessibilityEvent}.</li>
-
- <li>Added {@link android.support.v4.view.accessibility.AccessibilityManagerCompat}
- to support {@link android.view.accessibility.AccessibilityManager}.</li>
-
- <li>Added {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}
- to support {@link android.view.accessibility.AccessibilityNodeInfo}.</li>
-
- <li>Added {@link android.support.v4.view.accessibility.AccessibilityRecordCompat}
- to support {@link android.view.accessibility.AccessibilityRecord}.</li>
-
- <li>Added {@link
- android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat}
- to support {@link android.accessibilityservice.AccessibilityServiceInfo}.</li>
-
- <li>Added {@link android.support.v4.view.ViewGroupCompat}
- to support accessibility features in {@link android.view.ViewGroup}.
- </li>
-
- <li>Modified {@link android.support.v4.view.ViewCompat}
- to support accessibility features in {@link android.view.View}.</li>
- </ul>
- </li>
-
- <li>Changes to ViewPager:
- <ul>
- <li>Added support for margins between pages.
- An optional {@link android.graphics.drawable.Drawable} can be provided
- to fill the margins.</li>
- <li>Added support for {@link android.widget.EdgeEffect}.</li>
- <li>Added support for keyboard navigation</li>
- <li>Added support to control how many pages are kept to either side
- of the current page.</li>
- <li>Improved touch physics.</li>
- <li>Bug fixes for user interface behavior.</li>
- </ul>
- </li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 4</a> <em>(October 2011)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Added <code>EdgeEffectCompat</code> to
- support {@link android.widget.EdgeEffect}.</li>
-
- <li>Added <code>LocalBroadcastManager</code> to allow applications to easily
- register for and receive intents within a single application without
- broadcasting them globally.</li>
-
- <li>Added support in <code>ViewCompat</code> to check for and set overscroll
- modes for {@link android.view.View}s on Android 2.3 and later.</li>
- <li>Changes to Fragment APIs:
- <ul>
- <li>Added new APIs to control the visibility of new menus.</li>
- <li>Added custom animation APIs.</li>
- <li>Added APIs in <code>FragmentActivity</code> to retain custom,
- non-configuration instance data.</li>
- <li>Various bug fixes.</li>
- </ul>
- </li>
-
- <li>Fixed a {@link android.content.Loader} bug that caused issues in
- canceling {@link android.os.AsyncTask}s when running on Froyo and older
- versions of the platform. The support
- code now uses its own version of {@link android.os.AsyncTask} to keep the same
- behavior on all platform versions.</li>
-
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 3</a> <em>(July 2011)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 support library:</dt>
- <dd>
- <ul>
- <li>Adds support for {@link android.app.Fragment.SavedState}</li>
- <li>Adds {@code MotionEventCompat} to support newer {@link
-android.view.MotionEvent} APIs</li>
- <li>Adds {@code VelocityTrackerCompat} to support a newer {@link
-android.view.VelocityTracker} APIs</li>
- <li>Adds {@code ViewConfigurationCompat} to support a newer {@link
-android.view.ViewConfiguration} APIs</li>
- <li>All new APIs (available only in the support library) that allow you to create UIs
-with horizontal paging, allowing users to swipe left and right between content views. Classes to
-support this include:
- <ul>
- <li>{@code ViewPager}: A {@link android.view.ViewGroup} that manages the
-layout for the child views, which the user can swipe between.</li>
- <li>{@code PagerAdapter}: An adapter that populates the {@code ViewPager} with the
-views that represent each page.</li>
- <li>{@code FragmentPagerAdapter}: An extension of {@code PagerAdapter} for flipping
-between fragments.</li>
- <li>{@code FragmentStatePagerAdapter}: An extension of {@code PagerAdapter} for
-flipping between fragments that uses the library's support for {@link
-android.app.Fragment.SavedState}.</li>
- </ul>
- </li>
- </ul>
- </dd>
- <dt>New v13 support library:</dt>
- <dd>
- <ul>
- <li>Includes the {@code FragmentPagerAdapter} and {@code FragmentStatePagerAdapter}
-to support the horizontal paging.
- <p>These are exactly the same as the APIs added to the v4 support library, but rely on
-other platform components in Android 3.2. Use this library instead of v4 if you're developing for
-Android 3.2 and higher (all other APIs in the v4 library are already available with API level
-13).</p>
- </li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 2</a> <em>(May 2011)</em>
- </p>
- <div class="toggle-content-toggleme">
- <dl>
- <dt>Changes for v4 library:</dt>
- <dd>
- <ul>
- <li>Support for fragment animations</li>
- <li>Fix {@link android.support.v4.app.Fragment#onActivityResult Fragment.onActivityResult()}
- bug</li>
- </ul>
- </dd>
- </dl>
- </div>
-</div>
-
-
-<div class="toggle-content closed">
- <p><a href="#" onclick="return toggleContent(this)">
- <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
-/>Android Support Library, revision 1</a> <em>(March 2011)</em>
- </p>
- <div class="toggle-content-toggleme">
- <p>Initial release with the v4 library.</p>
- </div>
-</div>
-
diff --git a/docs/html/topic/libraries/support-library/revisions.jd b/docs/html/topic/libraries/support-library/revisions.jd
new file mode 100644
index 0000000..7525760
--- /dev/null
+++ b/docs/html/topic/libraries/support-library/revisions.jd
@@ -0,0 +1,2797 @@
+page.title=Support Library Revision History
+page.metaDescription=This page provides details about the Support Library package releases.
+
+@jd:body
+
+<p>This page provides details about the Support Library package releases.</p>
+
+<div class="toggle-content opened">
+ <p id="rev23-4-0">
+ <a href="#" onclick="return toggleContent(this)"><img src=
+ "{@docRoot}assets/images/styles/disclosure_up.png" class=
+ "toggle-content-img" alt="">Android Support Library, revision 23.4.0</a>
+ <em>(May 2016)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v4">v4 Support
+ Library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed issue where fragments were added in the wrong order.
+ (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=206901">Issue
+ 206901</a>)
+ </li>
+
+ <li>Fixed issue where app bar wasn't drawn after being scrolled
+ offscreen. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=178037">Issue
+ 178037</a>)
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v7-appcompat">v7
+ appcompat library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Added <!-- TODO: Link to method -->
+ <code><a href=
+ "{@docRoot}reference/android/support/v7/app/AppCompatDelegate.html">
+ AppCompatDelegate</a>.setCompatVectorFromResourcesEnabled()</code>
+ method to re-enable usage of vector drawables in {@link
+ android.graphics.drawable.DrawableContainer} objects on devices
+ running Android 4.4 (API level 19) and lower. See <a href=
+ "https://medium.com/@chrisbanes/appcompat-v23-2-age-of-the-vectors-91cbafa87c88#.44uulkfal"
+ class="external-link">AppCompat v23.2 — Age of the vectors</a> for
+ more information.
+ </li>
+
+ <li>Fixed an issue in API 23 with <a href=
+ "{@docRoot}reference/android/support/v7/app/AppCompatDelegate.html#setDefaultNightMode(int)">
+ <code>AppCompatDelegate.setDefaultNightMode()</code></a> not
+ loading correct resources in API level 23. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=206573">Issue
+ 206573</a>)
+ </li>
+
+ <li>Fixed issue that could cause {@link
+ java.lang.NullPointerException}. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=207638">Issue
+ 207638</a>)
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#design">Design Support
+ Library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed an issue where {@link
+ android.support.design.widget.TextInputLayout} doesn't clear error
+ tint after {@link
+ android.support.design.widget.TextInputLayout#setErrorEnabled
+ setErrorEnabled(false)} on API level 21 - 22 (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202829">Issue
+ 202829</a>)
+ </li>
+
+ <li>Fixed an issue where {@link
+ android.support.design.widget.FloatingActionButton} does not return
+ when animations are disabled. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=206416">Issue
+ 206416</a>)
+ </li>
+
+ <li>Fixed issue in {@link android.support.design.widget.AppBarLayout}
+ snap functionality when used with <code>{@link
+ android.support.design.R.id#scroll}|{@link
+ android.support.design.R.id#enterAlways}|{@link
+ android.support.design.R.id#enterAlwaysCollapsed}|{@link
+ android.support.design.R.id#snap}</code> scroll flags.
+ (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=207398">Issue
+ 207398</a>)
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <!-- TODO: Add link -->Vector Drawable library:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed a bug where <!-- TODO: Javadoc link -->
+ <code>VectorDrawableCompat</code> does not render correctly in
+ {@link android.widget.TextView} on API level 23. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=206227">Issue
+ 206227</a>)
+ </li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+<!-- end of collapsible section: 23.4.0 -->
+
+
+<div class="toggle-content closed">
+ <p id="rev23-3-0">
+ <a href="#" onclick="return toggleContent(this)"><img src=
+ "{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
+ alt="">Android Support Library, revision 23.3.0</a> <em>(April
+ 2016)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v4">v4 Support
+ Library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Added <code>AppLaunchChecker</code> to help track how your app
+ has been launched by the user in the past.
+ <code>hasStartedFromLauncher()</code> lets you know if the user has
+ launched your app from the home screen before, or if it has only
+ been started by other means (for example, to view specific web
+ URLs).
+ </li>
+
+ <li>Fixed a memory leak in
+ <code>MediaBrowserServiceCompat.mConnections</code>. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=205220">Issue
+ 205220</a>)
+ </li>
+
+ <li>Fixed issue where {@link android.support.v4.view.ViewPager}
+ does not account for page margins when flipping page. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=203816">Issue
+ 203816</a>)
+ </li>
+ <li>{@link android.support.v4.app.Fragment#onRequestPermissionsResult
+ Fragment.onRequestPermissionsResult()} is now delivered to child
+ fragments.
+ </li>
+ </ul>
+ </dd>
+
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v7-appcompat">v7
+ appcompat library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed an issue in {@link
+ android.support.v7.widget.AppCompatSpinner} that could cause
+ multiple popups to appear. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=205052">Issue
+ 205052</a>)
+ </li>
+
+ <li>Fixed an issue with how borderless buttons were colored.
+ (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202967">Issue
+ 202967</a>)
+ </li>
+
+ <li>Fixed a compatibility issue between {@link
+ android.support.v7.app.AppCompatDialogFragment } and {@link
+ android.support.v7.app.AlertDialog}. (<a class="external-link"
+ href="https://code.google.com/p/android/issues/detail?id=204805">Issue
+ 204805</a>)
+ </li>
+
+ <li>Reverted changes to <code>TintResources</code> that were causing
+ memory and configuration issues. (<a class="external-link"
+ href="https://code.google.com/p/android/issues/detail?id=205236">Issue
+ 205236</a>)</li>
+ </ul>
+ </dd>
+
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v7-mediarouter">v7
+ mediarouter library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed {@link android.support.v7.app.MediaRouteControllerDialog}
+ volume slider’s behavior. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202299">Issue
+ 202299</a>)
+ </li>
+ </ul>
+ </dd>
+
+
+ <dt>
+ Changes for <a href="features.html#v7-preference">v7 Preference</a>
+ library:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed issue where {@link
+ android.support.v7.preference.PreferenceFragmentCompat} would crash
+ if <code>dividerHeight</code> is specified. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=204778">Issue
+ 204778</a>)
+ </li>
+ </ul>
+ </dd>
+
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v7-recyclerview">v7
+ recyclerview library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed a bug where {@link
+ android.support.v7.widget.RecyclerView} would not invoke scroll
+ callbacks if the range of visible items shrank. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=200987">Issue
+ 200987</a>)
+ </li>
+
+ <li>Fixed a bug where {@link
+ android.support.v7.widget.RecyclerView} would freeze if it was in
+ linear layout, was weighted, and contained images. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=203276">Issue
+ 203276</a>)
+ </li>
+
+ <li>Fixed a crash in {@link
+ android.support.v7.widget.OrientationHelper#getStartAfterPadding
+ OrientationHelper.getStartAfterPadding()}. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=180521">Issue
+ 180521</a>)
+ </li>
+
+ <li>Fixed a crash with usages of
+ <code>android:nestedScrollingEnabled</code>. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=197932">Issue
+ 197932</a>)
+ </li>
+ </ul>
+ </dd>
+
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#design">Design Support
+ Library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed a bug where a hidden bottom sheet would handle touch
+ events. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=203654">Issue
+ 203654</a>)
+ </li>
+
+ <li>Fixed a layout issue with <code>BottomSheetBehavior</code> when
+ <code>fitsSystemWindows</code> is true. (<a class="external-link"
+ href=
+ "https://code.google.com/p/android/issues/detail?id=203057">Issue
+ 203057</a>)
+ </li>
+
+ <li>Fixed an accessibility issue with {@link
+ android.support.design.widget.Snackbar}. (<a class="external-link"
+ href=
+ "https://code.google.com/p/android/issues/detail?id=182145">Issue
+ 182145</a>)
+ </li>
+
+ <li>Fixed a crash on {@link android.support.design.widget.Snackbar}
+ swipe. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=203924">Issue
+ 203924</a>)
+ </li>
+
+ <li>Fixed a bug in {@link
+ android.support.design.widget.AppBarLayout} with
+ <code>enterAlways</code>. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=203661">Issue
+ 203661</a>)
+ </li>
+
+ <li>Fixed a bug where {@link
+ android.support.design.widget.TextInputLayout} unnecessarily clears
+ {@link android.widget.EditText} object's background color filter.
+ (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=203357">Issue
+ 203357</a>)
+ </li>
+ </ul>
+ </dd>
+
+ </dl>
+ </div>
+</div>
+<!-- end of collapsible section: 23.3.0 -->
+
+<div class="toggle-content closed">
+ <p id="rev23-2-1">
+ <a href="#" onclick="return toggleContent(this)"><img src=
+ "{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
+ alt="">Android Support Library, revision 23.2.1</a> <em>(March
+ 2016)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v4">v4 Support
+ Library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed an exception in {@link
+ android.support.v4.graphics.drawable.DrawableCompat#wrap
+ DrawableCompat.wrap()} and {@link android.graphics.drawable.LayerDrawable} on
+ API levels 17 to 19. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201817">Issue 201817</a>)
+ </li>
+
+ <li>Fixed an {@code ArrayIndexOutOfBoundsException} in {@link
+ android.support.v4.widget.ViewDragHelper#shouldInterceptTouchEvent
+ ViewDragHelper.shouldInterceptTouchEvent()}. (<a class="external-link"
+ href="https://code.google.com/p/android/issues/detail?id=182262">Issue
+ 182262</a>)
+ </li>
+
+ <li>Fixed a bug in {@link android.support.v4.view.ViewPager} related to
+ scroll calculation for size changes.
+ </li>
+
+ <li>Fixed a {@code NullPointerException} when {@code
+ DrawerLayout.removeDrawerListener()} is called without a set {@link
+ android.support.v4.widget.DrawerLayout.DrawerListener
+ DrawerLayout.DrawerListener}. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202478">Issue 202478</a>)
+ </li>
+
+ <li>Fixed a bug where {@link android.support.v4.view.ViewPager} does not set
+ {@link android.view.accessibility.AccessibilityEvent} parameters properly
+ when scrolling.
+ </li>
+
+ <li>Fixed an issue that caused lag during device rotation when using
+ {@link android.support.v4.graphics.drawable.DrawableCompat#wrap
+ Drawable.wrap()}. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201924">Issue 201924</a>)
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v7-appcompat">v7
+ appcompat library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Reverted dependency on vector assets so that developers using the
+ <a href="{@docRoot}tools/support-library/features.html#v7-appcompat">appcompat
+ library</a> are not forced to use {@link
+ android.graphics.drawable.VectorDrawable} and its associated build flags.
+ </li>
+
+ <li>Fixed a compatibility issue with Night Mode and API level 23.
+ (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201910">Issue
+ 201910</a>)
+ </li>
+
+ <li>Fixed a compatibility issue with {@link
+ android.support.v7.widget.SwitchCompat} and API level 7. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201942">Issue 201942</a>)
+ </li>
+
+ <li>Fixed an issue with propagating configuration values in Resources objects
+ <a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201928">Issue 201928</a>
+ </li>
+
+ <li>Fixed a compatibility issue where the {@link
+ android.support.v7.app.NotificationCompat.MediaStyle
+ NotificationCompat.MediaStyle} cancel button becomes invisible on API level
+ 21 and below. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202156">Issue 202156</a>)
+ </li>
+
+ <li>Fixed a compatibility crash with {@link
+ android.support.v7.widget.AppCompatSpinner} on API level 21 and below.
+ (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202246">Issue 202246</a>)
+ </li>
+
+ <li>Fixed an issue where the {@code app:textAllCaps = "false"} style did not
+ work. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202117">Issue 202117</a>)
+ </li>
+
+ <li>Fixed a crash when restoring {@link android.widget.SearchView}.
+ (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201836">Issue
+ 201836</a>)
+ </li>
+
+ <li>Fixed a memory leak that occurs when tinting drawable resources using
+ AppCompat. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202379">Issue 202379</a>)
+ </li>
+
+ <li>Fixed an issue with {@link android.view.KeyEvent} on API level 11 and
+ lower. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202939">Issue 202939</a>)
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v7-cardview">v7 cardview
+ library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Added Night Mode support for {@link
+ android.support.v7.widget.CardView}. (<a class="external-link"
+ href="https://code.google.com/p/android/issues/detail?id=194497">Issue
+ 194497</a>)
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v7-recyclerview">v7
+ recyclerview library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed bugs related to various measure-spec methods. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201856">Issue
+ 201856</a>)
+ </li>
+
+ <li>Reduced the lockdown period in which {@link
+ android.support.v7.widget.RecyclerView} does not allow adapter
+ changes while calculating a layout or scroll. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202046">Issue
+ 202046</a>)
+ </li>
+
+ <li>Fixed a crash when calling {@link
+ android.support.v7.widget.RecyclerView.Adapter#notifyItemChanged
+ notifyItemChanged()} on an item that is out of view. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202136">Issue
+ 202136</a>)
+ </li>
+
+ <li>Fixed a crash that occurs when {@link
+ android.support.v7.widget.RecyclerView.LayoutManager
+ RecyclerView.LayoutManager} adds and removes a view in the same
+ measurement pass. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=193958">Issue
+ 193958</a>)
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v7-mediarouter">v7
+ mediarouter library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed a crash that occurs when calling {@link
+ android.support.v7.media.MediaRouter#getInstance
+ MediaRouter.getInstance()} on API level 17. (<a class="external-link"
+ href=
+ "https://code.google.com/p/android/issues/detail?id=180654">Issue
+ 180654</a>)
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#v17-leanback">v17
+ Leanback Library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed an issue with {@code GridLayout.onAddFocusables()} that
+ caused the wrong item to be selected.
+ </li>
+
+ <li>Fixed issue with {@link
+ android.support.v17.leanback.app.GuidedStepFragment} actions
+ disappearing after an action was collapsed.
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href=
+ "{@docRoot}tools/support-library/features.html#design">Design Support
+ Library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed a {@link android.support.design.widget.TabLayout} crash
+ caused by tab-pooling. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201827">Issue
+ 201827</a>)
+ </li>
+
+ <li>Fixed a bug in {@link
+ android.support.design.widget.NavigationView} that caused the wrong
+ color to be selected. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201951">Issue
+ 201951</a>)
+ </li>
+
+ <li>Fixed a bug where {@link
+ android.support.design.widget.FloatingActionButton#setBackgroundTintList
+ setBackgroundTintList()} was no longer able to change the background
+ color. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201873">Issue
+ 201873</a>)
+ </li>
+
+ <li>Fixed an issue where {@link
+ android.support.design.widget.AppBarLayout} did not completely scroll
+ out of view when used with {@code android:fitsSystemWindows = “true”}.
+ (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201822">Issue
+ 201822</a>)
+ </li>
+
+ <li>Fixed an issue where {@code BottomSheetDialog} did not display
+ short content views correctly. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201793">Issue
+ 201793</a>)
+ </li>
+
+ <li>Fixed an issue where {@code BottomSheetDialogFragment} moved
+ sporadically when content inside was changed. (<a class=
+ "external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202125">Issue
+ 202125</a>)
+ </li>
+
+ <li>Fixed a crash in TextInputLayout counter <a class="external-link"
+ href=
+ "https://code.google.com/p/android/issues/detail?id=202051">link</a>
+ </li>
+
+ <li>Fixed a crash that occured when {@link
+ android.support.design.widget.TextInputLayout#getCounterMaxLength
+ TextInputLayout.getCounterMaxLength()} restored a saved state.
+ (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=202375">Issue
+ 202375</a>)
+ </li>
+
+ <li>Fixed a {@code ClassCastException} that occurred when restoring a
+ {@link android.support.design.widget.CoordinatorLayout} using the
+ saved state of a view that was not a {@link
+ android.support.design.widget.CoordinatorLayout}.
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for VectorDrawableCompat:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Fixed a bug where the wrong variable was read for {@code
+ android:tintMode}. (<a class="external-link" href=
+ "https://code.google.com/p/android/issues/detail?id=201907">Issue
+ 201907</a>)
+ </li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+<!-- end of collapsible section: 23.2.1 -->
+
+<div class="toggle-content closed">
+ <p id="rev23-2-0">
+ <a href="#" onclick="return toggleContent(this)"><img src=
+ "{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img"
+ alt="">Android Support Library, revision 23.2.0</a> <em>(February
+ 2016)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>
+ Changes for <a href="features.html#v4">v4 Support library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Added {@code MediaBrowserCompat} for {@link
+ android.media.browse.MediaBrowser} support, and {@code
+ MediaBrowserServiceCompat} for {@link
+ android.service.media.MediaBrowserService} support. This is useful
+ when connecting a media app’s background service with UI components,
+ and integrating with Android Auto and Android Wear without requiring
+ API level 21 or higher.
+ </li>
+
+ <li>The system now calls {@link
+ android.support.v4.app.FragmentActivity#onActivityResult onActivityResult()} for a
+ nested {@link android.support.v4.app.FragmentActivity}.
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href="features.html#v7-appcompat">v7 AppCompat
+ library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Added Night Mode functionality to API level 14 and higher. Switch
+ between <a href="{@docRoot}training/material/theme.html">Material
+ Light and Material Dark Themes</a> based on the time of day or
+ app-specific setting.
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <ul>
+ <li>Day and night themes can be found here: {@code
+ <sdk>/extras/android/support/v7/appcompat/res/values/themes_daynight.xml}
+ </li>
+
+ <li>{@code AppCompatDelegate.setDefaultNightMode()}: sets the
+ app’s default mode by passing one of the following constants:
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <ul>
+ <li>{@code MODE_NIGHT_AUTO}
+ </li>
+
+ <li>{@code MODE_NIGHT_NO}
+ </li>
+
+ <li>{@code MODE_NIGHT_YES}
+ </li>
+
+ <li>{@code MODE_NIGHT_FOLLOW_SYSTEM}
+ </li>
+ </ul>
+ </li>
+
+ <li>{@code AppCompatDelegate.setLocalNightMode()}: overrides
+ the night mode setting for the local app component.
+ </li>
+
+ <li>{@code AppCompatDelegate.getDefaultNightMode()}: returns
+ the default night mode.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href="features.html#v7-mediarouter">v7 mediarouter
+ library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>{@link android.support.v7.app.MediaRouteControllerDialog} now
+ correctly applies custom app theme colors.
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href="features.html#design">Design support library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Added support for <a href=
+ "https://www.google.com/design/spec/components/bottom-sheets.html">bottom
+ sheets</a>. An interaction plugin, {@code
+ BottomSheetBehavior}, allows a child view of a {@link
+ android.support.design.widget.CoordinatorLayout} to act as
+ a bottom sheet. The base class, {@code BottomSheetCallback}, provides
+ callbacks to monitor bottom sheet events.
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for the <a href="features.html#custom-tabs">CustomTabs support
+ library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>
+ <a href=
+ "https://developer.chrome.com/multidevice/android/customtabs">Chrome
+ Custom Tabs</a> now allows apps to include a bottom bar with action
+ buttons in addition to the existing top action button.
+ </li>
+
+ <li>{@code CustomTabsIntent.Builder.addToolBarItem()}: adds an action
+ button to a custom tab. You can use this to add multiple buttons.
+ </li>
+
+ <li>{@code CustomTabsSession.setToolBarItem()}: updates the visuals
+ for toolbar items. This method will only succeed if it is given a
+ valid id and the browser session is in the foreground.
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Added VectorDrawable support library:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Added Classes:
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <ul>
+ <li>{@code VectorDrawableCompat}
+ </li>
+
+ <li>{@code AnimatedVectorDrawableCompat}
+ </li>
+ </ul>
+ </li>
+
+ <li>Adds support for {@link
+ android.graphics.drawable.VectorDrawable} assets to apps
+ running on API level 7 or higher. {@link
+ android.graphics.drawable.AnimatedVectorDrawable} assets
+ are also supported on API level 11 or higher. Vector assets can be
+ considerably smaller than image assets and should help reduce app
+ size by reducing the amount of assets required to support multiple
+ device screens.
+ </li>
+
+ <li>This library is now a dependency of the <a href=
+ "features.html#v7-appcompat">v7 AppCompat library</a>, allowing
+ developers and <a href="features.html#v7-appcompat">AppCompat </a>
+ to easily use vector drawables. To use {@code
+ VectorDrawableCompat} within an {@link android.widget.ImageButton} or
+ {@link android.widget.ImageView}, use the {@code app:srcCompat} XML
+ attribute or {@code setImageResource()}
+ method.
+ </li>
+
+ <li>To keep referencing attribute IDs on API level 20 or
+ lower, add the following {@code appt} flag to your {@code
+ build,gradle} file:
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <ul>
+ <li>If you are building with Android Plugin for Gradle 1.5.0 or
+ lower, add the following to your {@code build.gradle} file:
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <pre>
+android {
+ defaultConfig {
+ // Stops the Gradle’s automatic rasterization of vectors
+ generatedDensities = []
+ }
+ // Flag that tells aapt to keep the attribute ids
+ aaptOptions {
+ additionalParameters "--no-version-vectors"
+ }
+}
+</pre>
+ </li>
+
+ <li>If you are building with Android Plugin for Gradle 2.0.0 or
+ higher, add the following to your {@code build.gradle} file:
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <pre>
+android {
+ defaultConfig {
+ vectorDrawables.useSupportLibrary = true
+ }
+}
+</pre>
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </dd>
+
+ <dt>
+ Changes for <a href="features.html#v17-leanback">v17 Leanback
+ Library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>Added new capabilities to {@link android.support.v17.leanback.app.GuidedStepFragment},
+ which is a component that guides users through a decision or series of decisions:
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <ul>
+ <li>Added button actions to {@link
+ android.support.v17.leanback.widget.GuidedAction}:
+ </li>
+
+ <ul>
+ <li>{@code GuidedStepFragment.setButtonActions()}: sets a list of
+ {@link android.support.v17.leanback.widget.GuidedAction} buttons that
+ the user may select from the Actions view.
+ </li>
+ </ul>
+ </li>
+
+ <li>Description fields are now editable:
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <ul>
+ <li>{@code GuidedAction.Builder.descriptionEditable()}: when passing
+ {@code true}, sets the action’s description to be editable.
+ </li>
+
+ <li>{@code GuidedAction.getEditDescription()}: returns the editable
+ description as a {@code CharSequence}.
+ </li>
+ </ul>
+ </li>
+
+ <li>Added drop-down lists of sub-actions:
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <ul>
+ <li>{@code GuidedAction.setSubActions()}: sets a {@link
+ android.support.v17.leanback.widget.GuidedAction} list as a drop-down
+ menu of sub-actions.
+ </li>
+ </ul>
+ </li>
+ </ul>
+
+ <li>Added the {@code GuidedDatePickerAction} widget for {@link
+ android.widget.DatePicker} functionality:
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <ul>
+ <li>The date is selected using year, month, and day columns and has a
+ customizable range.
+ </li>
+
+ <li>{@code GuidedDatePickerAction.Builder}: builder class for the {@code
+ GuidedDatePickerAction} object.
+ </li>
+
+ <li>{@code GuidedDatePickerAction.Builder.datePickerFormat(String
+ datePickerFormat)}: set the desired date format by passing the
+ appropriate three-character {@code String}, e.g. {@code “YMD”} or {@code
+ “MDY”}. Alternatively, use the {@code datePickerFormat} XML attribute.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </dd>
+ </dl>
+
+ <dl>
+ <dt>
+ Changes for <a href="features.html#v7-recyclerview">v7 RecyclerView
+ library</a>:
+ </dt>
+
+ <dd>
+ <ul>
+ <li>{@link android.support.v7.widget.RecyclerView} now has an opt-in
+ feature called <em>AutoMeasure</em> which allows {@link
+ android.support.v7.widget.RecyclerView.LayoutManager} to easily wrap
+ content or handle various measurement specifications provided by the
+ parent of the {@link android.support.v7.widget.RecyclerView}. It
+ supports all existing animation capabilities of the {@link
+ android.support.v7.widget.RecyclerView}.
+ </li>
+
+ <li style="list-style: none; display: inline">
+ <ul>
+ <li>If you have a custom {@link
+ android.support.v7.widget.RecyclerView.LayoutManager},
+ call {@code setAutoMeasureEnabled(true)} to start using the new
+ AutoMeasure API. All built-in {@link
+ android.support.v7.widget.RecyclerView.LayoutManager} objects
+ enable auto-measure by default.
+ </li>
+
+ <li>{@link android.support.v7.widget.RecyclerView.LayoutManager}
+ no longer ignores some {@link
+ android.support.v7.widget.RecyclerView.LayoutParams} settings,
+ such as {@code MATCH_PARENT} in the scroll direction.
+ <p class="note">
+ <strong>Note:</strong> These lifted restrictions may cause
+ unexpected behavior in your layouts. Make sure you specify
+ the correct layout parameters.
+ </p>
+ </li>
+ </ul>
+ </li>
+
+ <li>When updating a {@link
+ android.support.v7.widget.RecyclerView.ViewHolder} with payload
+ information, {@link android.support.v7.widget.DefaultItemAnimator}
+ now disables change animations.
+ </li>
+
+ <li>You can now modify the {@link
+ android.support.v7.widget.helper.ItemTouchHelper} escape velocity to
+ control swipe sensitivity. To make it easier or harder to swipe,
+ override {@code getSwipeEscapeVelocity(float defaultValue)} and modify {@code defaultValue}.
+ </li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+<!-- end of collapsible section: 23.2.0 -->
+
+<div class="toggle-content closed">
+ <p id="rev23-1-1"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 23.1.1</a> <em>(November 2015)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview library:</a></dt>
+ <dd>
+ <ul>
+ <li>Fixed a crash that occurs when you perform a swipe-to-dismiss action that the
+ {@code ItemTouchHelper} utility class provides, and then add an item.
+ (<a href="http://b.android.com/190500">Issue 190500</a>)</li>
+ </ul>
+ </dd>
+ <dt>Changes for <a href="features.html#v7-preference">v7 preference library:</a></dt>
+ <dd>
+ <ul>
+ <li>Fixed an issue with ProGuard usage.
+ (<a href="http://b.android.com/183261">Issue 183261</a>)</li>
+ </ul>
+ </dd>
+
+ <dt>Changes for <a href="features.html#v17-leanback">v17 Leanback Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Fixed a number of internal issues in this library.</li>
+ </ul>
+ </dd>
+ <dt>Changes for <a href="features.html#design">Design Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added the <code>getHeaderView</code> method to the <code>NavigationView</code> class.</li>
+ <li>Fixed a transparent background issue for a <code>FloatingActionButton</code> object on
+ devices running Android 4.0 (API level 15) and lower.
+ (<a href="http://b.android.com/183315">Issue 183315</a>)</li>
+ </ul>
+ </dd>
+ </dl>
+
+ </div>
+</div> <!-- end of collapsible section -->
+
+
+
+<div class="toggle-content closed">
+ <p id="rev23-1-0"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 23.1.0</a> <em>(October 2015)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for <a href="features.html#v4">v4 Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added <code>OnScrollChangedListener</code> interface support to the
+ <code>NestedScrollView</code> widget. It
+ allows you to receive callbacks when the scroll X or Y positions change.</li>
+ <li>Added a <code>MediaButtonReceiver</code> class to forward received playback controls
+ to a service that’s managing the <code>MediaSessionCompat</code> class. The
+ <code>MediaSessionCompat</code> class has a
+ constructor that can automatically find a media button receiver in the manifest. A
+ media button receiver is a key part to <a href=
+ "http://developer.android.com/training/managing-audio/volume-playback.html#PlaybackControls">handling
+ playback controls</a> from hardware or bluetooth controls.</li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added material design <code>Seekbar</code> and <code>ImageButton</code> widgets.</li>
+ <li>Updated the <code>ImageView</code> widget to support the tint feature.</li>
+ <li>Updated the look-and-feel of the <code>SwitchCompat</code> widget.</li>
+ </ul>
+ </dd>
+
+ <dt>Changes for <a href="features.html#v7-mediarouter">v7 mediarouter library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added the following features to the <code>MediaRouteChooserDialog</code> class:</li>
+ <ul>
+ <li>Displays a loading page while discovering media route providers.</li>
+ <li>Includes a device type icon for easier device identification.</li>
+ <li>Sorts the routes according to frequency of use in the current app.</li>
+ <li>Supports landscape mode.</li>
+ </ul>
+ </ul>
+ <ul>
+ <li>Added the following features to the <code>MediaRouteControllerDialog</code> class:</li>
+ <ul>
+ <li>Recognizes screen casting and provides a proper description.</li>
+ <li>Supports various album art sizes and aspect ratios, and loads the art asynchronously.</li>
+ <li>Automatically selects the content color based on the primary color of the app.</li>
+ <li>Adjusts the dialog layout based on available screen space on the device.</li>
+ <li>Supports landscape mode.</li>
+ </ul>
+ </ul>
+ </dd>
+
+ <dt>Changes for <a href="features.html#v7-palette">v7 palette library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added the <code>setRegion()</code> method to support extracting color from a specific
+ region of a <code>Bitmap</code> object.</li>
+ </ul>
+ </dd>
+
+ <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added an improved animation API to the <code>ItemAnimator</code> class for better
+ customizations:</li>
+ <ul>
+ <li>Change animations no longer enforce two copies of the <code>ViewHolder</code> object,
+ which enables item content animations. Also, the <code>ItemAnimator</code> object
+ decides whether it wants to reuse the same <code>ViewHolder</code> object or create a
+ new one.</li>
+ <li>The new information record API gives the <code>ItemAnimator</code> class the flexibility
+ to collect data at the correct point in the layout lifecycle. This information is later
+ passed into the animate callbacks.</li>
+ </ul>
+ </ul>
+ <ul>
+ <li>Provided an easy transition plan for this backward-incompatible API change:</li>
+ <ul>
+ <li>If you’ve previously extended the <code>ItemAnimator</code> class, you can change
+ your base class to <code>SimpleItemAnimator</code> and your code should work as before.
+ The <code>SimpleItemAnimator</code> class provides the old API by wrapping the new API.</li>
+ <li>Some methods were removed from the <code>ItemAnimator</code> class. The following
+ code will no longer compile:</li>
+ <pre>recyclerView.getItemAnimator().setSupportsChangeAnimations(false)</pre>
+ <p>You can replace it with:</p>
+ <pre>
+ItemAnimator animator = recyclerView.getItemAnimator();
+if (animator instanceof SimpleItemAnimator) {
+ ((SimpleItemAnimator) animator).setSupportsChangeAnimations(false);
+}
+ </pre>
+ </ul>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v7-preference">v7</a>,
+ <a href="features.html#v14-preference">v14</a>, and
+ <a href="features.html#v17-preference">v17</a> Preference Support library:</dt>
+ <dd>
+ <ul>
+ <li>Removed APIs for controlling <code>EditText</code> dialogs.</li>
+ </ul>
+ </dd>
+
+ <dt>Changes for <a href="features.html#v17-leanback">v17 Leanback Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added a version of the <code>GuidedStepFragment</code> class for the Support library
+ (extends <code>android.support.v4.app.Fragment</code>), and improved animations and
+ transitions.</li>
+ <li>Updated the <code>GuidedStepFragment</code> class so it can be placed on top of
+ existing content.</li>
+ <li>Added the ability to annotate different types of search completions to the
+ <code>SearchFragment</code> class.</li>
+ <li>Added staggered slide transition support to the <code>VerticalGridFragment</code>
+ class.</li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#design">Design Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added <a href=
+ "https://www.google.com/design/spec/components/text-fields.html#text-fields-character-counter">
+ character counting</a> support to the <code>TextInputLayout</code> widget.</li>
+ <li>Added edge snapping support to the <code>AppBarLayout</code> class by adding the
+ <code>SCROLL_FLAG_SNAP</code> constant. When scrolling ends, if the view is only
+ partially visible, the view is snapped and scrolled to its closest edge.</li>
+ <li>Added support for custom views to the <code>NavigationView</code> class by using the
+ <code>app:actionLayout</code> attribute or <code>MenuItemCompat.setActionView()</code>
+ method.</li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#custom-tabs">Custom Tabs Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added the <code>enableUrlBarHiding()</code> method to the <code>CustomTabsIntent</code>
+ class. It lets the client customize whether the URL bar should be hidden automatically
+ on scroll down.</li>
+ <li>Added the <code>setActionButton()</code> method to the <code>CustomTabsSession</code>
+ class. It lets the client
+ change the icon for a custom action button in an already launched custom tab.</li>
+ <li>Added the <code>TAB_SHOWN</code> and <code>TAB_HIDDEN</code> constants as new events
+ for the <code>onNavigationEvent</code> method of the <code>CustomTabsCallback</code>
+ class.</li>
+ </ul>
+ </dd>
+
+ </dl>
+
+ </div>
+</div> <!-- end of collapsible section -->
+
+
+<div class="toggle-content closed">
+ <p id="rev23-0-1"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 23.0.1</a> <em>(September 2015)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for <a href="features.html#v7-preference">v7</a> and
+ <a href="features.html#v14-preference">v14</a> Preference Support library:</dt>
+ <dd>
+ <ul>
+ <li>Added the material design layout and style files.
+ (<a href="http://b.android.com/183376">Issue 183376</a>)</li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library:</a></dt>
+ <dd>
+ <ul>
+ <li>Fixed crash issues for the {@link android.app.Fragment} class by limiting the use of
+ hardware layers to Android 4.1 (API level 16) and higher.
+ (<a href="http://b.android.com/183896">Issue 183896</a>)</li>
+ <li>Fixed an issue where hardware buttons did not work when an activity had set the
+ {@link android.widget.Toolbar} class to act as the
+ {@link android.app.ActionBar} by using the <code>setSupportActionBar()</code> method.
+ (<a href="http://b.android.com/183334">Issue 183334</a>)</li>
+ <li>Updated the {@link android.support.v7.app.AppCompatDialogFragment} class so it
+ no longer throws the {@code Windows feature must be requested before adding content}
+ error.
+ (<a href="http://b.android.com/183186">Issue 183186</a>)</li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#design">Design Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Fixed the
+ {@link android.support.design.widget.AppBarLayout} class so it now draws correctly after
+ rotation.
+ (<a href="http://b.android.com/183109">Issue 183109</a>)</li>
+ <li>Fixed the
+ {@link android.support.design.widget.TabLayout} class so it now behaves correctly when a
+ user clicks after a swipe.
+ (<a href="http://b.android.com/183123">Issue 183123</a>)</li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#custom-tabs">Custom Tabs Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Lowered the
+ <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><code>minSdkVersion</code></a>
+ value from 16 to 15 for version support.</li>
+ <li>Added a way to generate a
+ {@link android.support.customtabs.CustomTabsSessionToken} from an intent.</li>
+ </ul>
+ </dd>
+
+ </dl>
+
+ </div>
+</div> <!-- end of collapsible section -->
+
+
+<div class="toggle-content closed">
+ <p id="rev23"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 23</a> <em>(August 2015)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Added new support libraries:</a></dt>
+ <dd>
+ <ul>
+ <li><a href="features.html#custom-tabs">Custom Tabs Support library</a></li>
+ <li><a href="features.html#percent">Percent Support library</a></li>
+ <li><a href="features.html#recommendation">App Recommendation Support library for TV</a></li>
+ <li><a href="features.html#v7-preference">v7 Preference Support library</a></li>
+ <li><a href="features.html#v14-preference">v14 Preference Support library</a></li>
+ <li><a href="features.html#v17-preference">v17 Preference Support library for TV</a></li>
+ </ul>
+ </dd>
+
+ </dl>
+
+ <p>For a complete list of the Support Library changes, see the
+ <a href="{@docRoot}sdk/support_api_diff/23/changes.html">Support
+ Library API Differences Report</a>. </p>
+
+ </div>
+</div> <!-- end of collapsible section -->
+
+
+
+<div class="toggle-content closed">
+ <p id="rev22-2-1"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 22.2.1</a> <em>(July 2015)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for <a href="features.html#design">Design Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added the {@code hide()} and {@code show()} methods to the
+ {@link android.support.design.widget.FloatingActionButton} class for programmatic
+ triggering of animations. </li>
+ <li>Added the {@code LENGTH_INDEFINITE} constant to the
+ {@link android.support.design.widget.Snackbar} class for showing a snackbar
+ until it is dismissed or another snackbar is shown. Also, added the
+ {@link android.support.design.widget.Snackbar#setActionTextColor(int)} and
+ {@link android.support.design.widget.Snackbar#setActionTextColor(ColorStateList)}
+ methods. </li>
+ <li>Added the {@code getSelectedTabPosition()} method to the
+ {@link android.support.design.widget.TabLayout} class for retrieving the currently
+ selected tab. </li>
+ <li>Provided a fully fluent API for the
+ {@link android.support.v7.app.NotificationCompat.MediaStyle} class for method
+ chaining. </li>
+ <li>Added convenience methods to the
+ {@link android.support.v7.widget.RecyclerView} for batch insertion of items. </li>
+ </ul>
+ </dd>
+ </dl>
+
+ <p>For a complete list of the Support Library changes, see the
+ <a href="{@docRoot}sdk/support_api_diff/22.2.0/changes.html">Support
+ Library API Differences Report</a>. </p>
+
+ </div>
+</div> <!-- end of collapsible section -->
+
+
+
+<div class="toggle-content closed">
+ <p id="rev21"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 22.2.0</a> <em>(May 2015)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Added <a href="features.html#design">Design Support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.design.widget.TextInputLayout} for showing
+ {@link android.widget.EditText} hint and error text as floating labels.
+ </li>
+ <li>Added {@link android.support.design.widget.FloatingActionButton} for implementing a
+ primary action on your interface as a
+ floating action button, supporting either default or mini sizes.
+ </li>
+ <li>Added {@link android.support.design.widget.Snackbar} for providing lightweight
+ feedback with an optional action in an animated snackbar.
+ </li>
+ <li>Added {@link android.support.design.widget.TabLayout} for implementing fixed and
+ scrollable
+ <a href="{@docRoot}design/building-blocks/tabs.html">tabs</a> as well as easy
+ integration with
+ {@link android.support.v4.view.ViewPager}.
+ </li>
+ <li>Added {@link android.support.design.widget.NavigationView} for implementing
+ <a href="{@docRoot}design/patterns/navigation-drawer.html">navigation drawer</a>
+ contents, including the ability to inflate menu items via a
+ <a href="{@docRoot}guide/topics/resources/menu-resource.html">Menu Resource</a>.
+ </li>
+ <li>Added {@link android.support.design.widget.CoordinatorLayout}, a general purpose
+ layout, used for building dependencies between
+ sibling views and allowing easy scrolling reactions between components via
+ {@link android.support.design.widget.CoordinatorLayout.Behavior}. Many of the Design
+ Library components rely on being a child of a
+ {@link android.support.design.widget.CoordinatorLayout}.
+ </li>
+ <li>Added {@link android.support.design.widget.AppBarLayout}, a container for a
+ {@link android.widget.Toolbar}
+ and other views (such as {@link android.support.design.widget.TabLayout}) for
+ reacting to scrolling events by scrolling off the screen, becoming visible in reaction
+ to a downward scroll, or collapsing/uncollapsing before scrolling off/onto the screen.
+ </li>
+ <li>Added {@link android.support.design.widget.CollapsingToolbarLayout} for controlling
+ how a {@link android.widget.Toolbar} collapses. A toolbar may collapse by:
+ pinning components to the top of the screen while it collapses, introducing
+ parallax scrolling of components such as an {@link android.widget.ImageView},
+ or adding a content scrim color when the view is partially collapsed.
+ </li>
+ </ul>
+ </dt>
+
+
+
+ <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
+ <dd>
+ <ul>
+
+ <li>Added the
+{@link android.support.v4.view.accessibility.AccessibilityEventCompat#getContentChangeTypes getContentChangeTypes()}
+ and
+{@link android.support.v4.view.accessibility.AccessibilityEventCompat#setContentChangeTypes setContentChangeTypes()}
+ methods and related change type
+ fields to the
+ {@link android.support.v4.view.accessibility.AccessibilityEventCompat}
+ class for accessibility event handling.
+ </li>
+ <li>Added the
+{@link android.support.v4.media.session.PlaybackStateCompat#getActiveQueueItemId getActiveQueueItemId()},
+{@link android.support.v4.media.session.PlaybackStateCompat#getCustomActions getCustomActions()},
+ and
+ {@link android.support.v4.media.session.PlaybackStateCompat#getExtras getExtras()}
+ methods with related state fields to the
+ {@link android.support.v4.media.session.PlaybackStateCompat} class for
+ getting custom actions from the queue.
+ </li>
+ <li>Added the
+{@link android.support.v4.media.session.PlaybackStateCompat.Builder#addCustomAction addCustomAction()},
+{@link android.support.v4.media.session.PlaybackStateCompat.Builder#setActiveQueueItemId setActiveQueueItemId()},
+ and
+ {@link android.support.v4.media.session.PlaybackStateCompat.Builder#setExtras setExtras()}
+ methods to the
+ {@link android.support.v4.media.session.PlaybackStateCompat.Builder} class for adding
+ custom actions to a playback state.
+ </li>
+ <li>Added the
+{@link android.support.v4.media.session.PlaybackStateCompat.CustomAction#fromCustomAction fromCustomAction()} and
+{@link android.support.v4.media.session.PlaybackStateCompat.CustomAction#getCustomAction getCustomAction()} methods
+ to the
+ {@link android.support.v4.media.session.PlaybackStateCompat.CustomAction} class
+ for getting custom actions from the queue.
+ </li>
+ <li>Added the {@link android.support.v4.view.ViewCompat#isAttachedToWindow isAttachedToWindow()},
+ {@link android.support.v4.view.ViewCompat#offsetLeftAndRight offsetLeftAndRight()}, and
+ {@link android.support.v4.view.ViewCompat#offsetTopAndBottom offsetTopAndBottom()}
+ methods to the {@link android.support.v4.view.ViewCompat} class for working with views.
+ </li>
+ <li>Added the {@link android.support.v4.view.ViewPager#addOnPageChangeListener addOnPageChangeListener()},
+ {@link android.support.v4.view.ViewPager#clearOnPageChangeListeners clearOnPageChangeListeners()}, and
+ {@link android.support.v4.view.ViewPager#removeOnPageChangeListener removeOnPageChangeListener()}
+ methods to the {@link android.support.v4.view.ViewPager} class for responding to page
+ changes.
+ <p>Deprecated the
+ {@link android.support.v4.view.ViewPager#setOnPageChangeListener setOnPageChangeListener()} method.</p>
+ </li>
+ <li>Added the
+{@link android.support.v4.view.ViewParentCompat#notifySubtreeAccessibilityStateChanged notifySubtreeAccessibilityStateChanged()} method to
+ the {@link android.support.v4.view.ViewParentCompat} class for notifying a view parent
+ that the accessibility state of one of its descendants has changed.
+ </li>
+ <li>Added the {@link android.support.v4.view.ViewPropertyAnimatorCompat#translationZ translationZ()},
+ {@link android.support.v4.view.ViewPropertyAnimatorCompat#translationZBy translationZBy()},
+ {@link android.support.v4.view.ViewPropertyAnimatorCompat#z z()}, and
+ {@link android.support.v4.view.ViewPropertyAnimatorCompat#zBy zBy()}
+ methods to the {@link android.support.v4.view.ViewPropertyAnimatorCompat} class for
+ adding animation.
+ </li>
+ </ul>
+ </dd>
+
+
+
+<dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library</a>:</dt>
+ <dd>
+<ul>
+ <li>Added the
+ {@link android.support.v7.app.AppCompatActivity#onWindowStartingSupportActionMode onWindowStartingSupportActionMode()}
+ method to the
+ {@link android.support.v7.app.AppCompatActivity},
+ {@link android.support.v7.app.AppCompatCallback}, and
+ {@link android.support.v7.app.AppCompatDialog} classes for handling action modes
+ started from the current window.
+ </li>
+
+ <li>Added the
+{@link android.support.v7.app.AppCompatDelegate#isHandleNativeActionModesEnabled isHandleNativeActionModesEnabled()} and
+{@link android.support.v7.app.AppCompatDelegate#setHandleNativeActionModesEnabled setHandleNativeActionModesEnabled()}
+ methods to the
+ {@link android.support.v7.app.AppCompatDelegate} class for handling native action modes.
+ </li>
+ </ul>
+ </dd>
+
+ <p>For a complete list of the Support Library changes, see the
+ <a href="{@docRoot}sdk/support_api_diff/22.2.0/changes.html">Support
+ Library API Differences Report</a>. </p>
+
+ </dl>
+
+ </div>
+</div> <!-- end of collapsible section -->
+
+
+
+
+<div class="toggle-content closed">
+ <p id="rev21"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 22.1.0</a> <em>(April 2015)</em>
+ </p>
+
+
+
+ <div class="toggle-content-toggleme">
+ <dl>
+
+
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for <a href="features.html#annotations">annotations library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added the Annotations library to provide support for enhanced code inspections.
+ Annotations are added as metadata tags that you attach to variables, parameters,
+ and return values to inspect method return values, passed parameters, and local
+ variables and fields.
+ </li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
+ <dd>
+ <ul>
+
+ <li>Added the {@link android.support.v4.graphics.ColorUtils ColorUtils} class
+ to provide a set of color-related utility methods.
+ </li>
+ <li>Added the {@link android.support.v4.graphics.drawable.DrawableCompat#unwrap unwrap()} and
+ {@link android.support.v4.graphics.drawable.DrawableCompat#wrap wrap()} methods to the
+ {@link android.support.v4.graphics.drawable.DrawableCompat} class , allowing you to use
+ {@link android.support.v4.graphics.drawable.DrawableCompat#setTint setTint()},
+ {@link android.support.v4.graphics.drawable.DrawableCompat#setTintList setTintList()},
+ and {@link android.support.v4.graphics.drawable.DrawableCompat#setTintMode setTintMode()}
+ on all API level 4 or higher devices.
+ </li>
+ <li>Added the {@link android.support.v4.os.TraceCompat} class to
+ write trace events to the system trace buffer, which can then be collected and
+ visualized using the <a href="{@docRoot}tools/help/systrace.html">Systrace</a> tool.
+ </li>
+ <li>Added the {@link android.support.v4.util.CircularIntArray} class
+ to create circular integer array data structures.
+ </li>
+ <li>Added the {@link android.support.v4.util.CircularArray#clear clear()},
+ {@link android.support.v4.util.CircularArray#removeFromStart removeFromStart()},
+ and {@link android.support.v4.util.CircularArray#removeFromEnd removeFromEnd()}
+ methods to the {@link android.support.v4.util.CircularArray} class. Also, changed the
+ existing methods in this class to be non-final.
+ </li>
+ <li>Added the {@link android.support.v4.view.InputDeviceCompat}
+ as a helper class to access data in the
+ {@link android.support.v4.view.InputDeviceCompat} class.
+ </li>
+ <li>Added the {@link android.support.v4.view.LayoutInflaterCompat}
+ class as a helper class to access data in the
+ {@link android.support.v4.view.LayoutInflaterCompat} class
+ and added the {@link android.support.v4.view.LayoutInflaterFactory} interface.
+ </li>
+ <li>Added classes, methods, and interfaces to support nested scrolling.
+ <ul>
+ <li>Added the {@link android.support.v4.view.NestedScrollingChildHelper}
+ and {@link android.support.v4.view.NestedScrollingParentHelper}
+ helper classes for implementing nested scrolling parent and child views.</li>
+ <li>Added the {@link android.support.v4.view.NestedScrollingChild}
+ interface to be implemented by {@link android.view.View} subclasses.</li>
+ <li>Added the {@link android.support.v4.view.NestedScrollingParent}
+ and {@link android.support.v4.view.ScrollingView} interfaces to support
+ scrolling operations and provide scroll related APIs.</li>
+ <li>Added the
+ {@link android.support.v4.view.ViewGroupCompat#getNestedScrollAxes
+ getNestedScrollAxes()} method to the {@link android.support.v4.view.ViewGroupCompat}
+ class.</li>
+ <li>Added methods to the {@link android.support.v4.view.ViewParentCompat} class to
+ support nested scrolling.
+ </li>
+ <li>Added the {@link android.support.v4.widget.NestedScrollView}
+ class to support nested scrolling parent and child on both new and old versions of
+ Android.
+ </li>
+ </ul>
+ </li>
+ <li>Added methods and constants to the {@link android.support.v4.view.MotionEventCompat}
+ class for getting axis values and event source.
+ </li>
+ <li>Updated the {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}
+ class to add methods for errors, content invalidation and labels.
+ </li>
+ <li>Added the following interpolation classes for animation:
+ {@link android.support.v4.view.animation.FastOutLinearInInterpolator},
+ {@link android.support.v4.view.animation.FastOutSlowInInterpolator},
+ {@link android.support.v4.view.animation.LinearOutSlowInInterpolator},
+ {@link android.support.v4.view.animation.LinearOutSlowInInterpolator}, and
+ {@link android.support.v4.view.animation.PathInterpolatorCompat}.
+ </li>
+ <li>Added the {@link android.support.v4.widget.Space} class to create gaps between
+ components in general purpose layouts. This class is deprecated in the gridlayout library.
+ </li>
+ <li>Added the {@link android.support.v4.widget.TextViewCompat} class for accessing
+ features in a {@link android.widget.TextView}.
+ </li>
+ <li>Added a displacement parameter to the
+ {@link android.support.v4.widget.EdgeEffectCompat#onPull onPull()} method in the
+ {@link android.support.v4.widget.EdgeEffectCompat} class.
+ </li>
+
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added tint support to appcompat widgets, including
+ {@link android.support.v7.widget.AppCompatAutoCompleteTextView},
+ {@link android.support.v7.widget.AppCompatButton},
+ {@link android.support.v7.widget.AppCompatCheckBox},
+ {@link android.support.v7.widget.AppCompatCheckedTextView},
+ {@link android.support.v7.widget.AppCompatEditText},
+ {@link android.support.v7.widget.AppCompatMultiAutoCompleteTextView},
+ {@link android.support.v7.widget.AppCompatRadioButton},
+ {@link android.support.v7.widget.AppCompatRatingBar},
+ {@link android.support.v7.widget.AppCompatSpinner}, and
+ {@link android.support.v7.widget.AppCompatTextView}.
+ </li>
+ <li>Updated the {@link android.support.v7.app.AppCompatActivity} as the base
+ class for activities that use the support library action bar features. This class
+ replaces the deprecated {@link android.support.v7.app.ActionBarActivity}.
+ </li>
+ <li>Added the
+ {@link android.support.v7.app.AppCompatCallback} interface
+ to be implemented for AppCompat to be able to perform callbacks.
+ </li>
+ <li>Added the
+ {@link android.support.v7.app.AppCompatDelegate} abstract class
+ as a delegate you can use to extend AppCompat's support to any activity.
+ </li>
+ <li>Added the
+ {@link android.support.v7.app.AppCompatDialog} class
+ as the base class for AppCompat themed dialogs.
+ </li>
+ <li>Added the spinner style
+ {@link android.support.v7.app.AlertDialog} and
+ {@link android.support.v7.app.AlertDialog.Builder} classes to provide an AppCompat
+ themed {@link android.app.AlertDialog}.
+ </li>
+ <li>Added the {@link android.support.v7.graphics.Palette.Builder} class
+ for generating {@link android.support.v7.graphics.Palette} instances.
+ <ul>
+ <li>Added the
+ {@link android.support.v7.graphics.Palette#from}
+ method to the {@link android.support.v7.graphics.Palette} class to
+ start generating a Palette with the returned
+ {@link android.support.v7.graphics.Palette.Builder} instance.
+ </li>
+ <li>Deprecated the {@link android.support.v7.graphics.Palette#generate generate()} and
+ {@link android.support.v7.graphics.Palette#generateAsync generateAsync()} methods.
+ </li>
+ </ul>
+ </li>
+
+ <li>Added the
+ {@link android.support.v7.widget.GridLayout.Spec#getAbsoluteAlignment
+ getAbsoluteAlignment()} method to the {@link android.support.v7.widget.GridLayout.Spec}
+ class.
+ </li>
+ <li>Deprecated use of <code>app:theme</code> for styling
+ {@link android.support.v7.widget.Toolbar}. You can now use
+ <code>android:theme</code> for toolbars on all API level 7 and higher devices and
+ <code>android:theme</code> support for all widgets on API level 11 and higher devices.
+ </li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v17-leanback">v17 leanback library</a>:</dt>
+ <dd>
+ <ul>
+ <li> Added {@link android.support.v17.leanback.app.GuidedStepFragment},
+ {@link android.support.v17.leanback.widget.GuidanceStylist} and
+ {@link android.support.v17.leanback.widget.GuidedActionsStylist} to support
+ creating multi-step decision flows.
+ </li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.v7.util.SortedList} classes to display items in
+ a list order and provide notification of changes to the list.
+ </li>
+ <li>Added the {@link android.support.v7.widget.util.SortedListAdapterCallback} class
+ that can bind a sorted list to a
+ {@link android.support.v7.widget.RecyclerView.Adapter} class.
+ </li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v8-renderscript">v8 renderscript library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added the {@link android.support.v8.renderscript.ScriptIntrinsicHistogram} class for
+ use as a histogram filter.</li>
+ <li>Added the {@link android.support.v8.renderscript.ScriptIntrinsicResize} class for
+ performing a resize of a 2D allocation.
+ </li>
+ </ul>
+ </dd>
+
+ </dl>
+
+
+ </div>
+</div> <!-- end of collapsible section -->
+
+
+
+<div class="toggle-content closed">
+ <p id="rev21"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 22</a> <em>(March 2015)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Updated the {@link android.support.v4.content.res.ResourcesCompat#getDrawable
+ getDrawable()} method to return a drawable object for a specified specific resource ID,
+ screen density, and theme.
+ </li>
+ <li>Added the {@link android.support.v4.view.ViewCompat#setImportantForAccessibility
+ setImportantForAccessibility()} method so you can indicate if a view should trigger
+ accessibility events.
+ </li>
+ <li>Added the {@link android.support.v4.widget.DrawerLayout#getStatusBarBackgroundDrawable
+ getStatusBarBackgroundDrawable()} method so you can get the status bar background
+ drawable.
+ </li>
+ <li>Added methods to the
+ {@link android.support.v4.app.NotificationCompat.CarExtender.UnreadConversation}
+ class so Android Auto messaging apps can retrieve additional notification data.
+ </li>
+ <li>Added the {@link android.support.v4.widget.SwipeRefreshLayout#getProgressCircleDiameter
+ getProgressCircleDiameter()} method to return the diameter of a circle layout.
+ </li>
+ <li>Changed the default {@link android.support.v4.widget.DrawerLayout DrawerLayout}
+ status bar color to {@link android.R.attr#colorPrimaryDark}.
+ </li>
+ </ul>
+ </dd>
+
+ <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added the spinner style
+ {@link android.support.v7.appcompat.R.style#Base_Widget_AppCompat_Spinner_Underlined}.</li>
+ <li>Added tinted widgets styles with
+ {@link android.support.v7.appcompat.R.style#Widget_AppCompat_AutoCompleteTextView},
+ {@link android.widget.MultiAutoCompleteTextView},
+ {@link android.support.v7.appcompat.R.style#TextAppearance_AppCompat_Button}, and
+ {@link android.support.v7.appcompat.R.style#Base_Widget_AppCompat_RatingBar}.</li>
+ </ul>
+ </dd>
+
+ <dt>Changes for <a href="features.html#v17-leanback">v17 leanback library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added the {@link android.support.v17.leanback.widget.ListRowPresenter#getRecycledPoolSize
+ getRecycledPoolSize()} and
+ {@link android.support.v17.leanback.widget.ListRowPresenter#setRecycledPoolSize
+ setRecycledPoolSize()} methods to allow customized recycled pool sizes.</li>
+ <li>Added the {@link android.view.ViewGroup.LayoutParams#WRAP_CONTENT} attribute to the
+ layout width setting to support wrapped content for title icons.</li>
+ <li>Defined {@link android.support.v17.leanback.R.transition} in XML to
+ improve transition updates. </li>
+ <li>Enabled support for right to left layouts.</li>
+ <li>Added the play and pause media key events support to the
+ {@link android.support.v17.leanback.app.PlaybackOverlayFragment} class.</li>
+ <li>Added enter and return transitions to the
+ {@link android.support.v17.leanback.app.BrowseFragment} class and the
+ {@link android.support.v17.leanback.app.DetailsFragment} class.</li>
+ <li>Added the {@link android.support.v17.leanback.widget.ArrayObjectAdapter#replace
+ replace()} method to replace items in an object’s adapter array. </li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v7-mediarouter">v7 mediarouter library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Updated Google Cast icons to use the
+ <a href="{@docRoot}training/material/index.html">material design</a> style.</li>
+ <li>Updated all the icons used in the {@link android.media.MediaRouter} dialogs to use the
+ <a href="{@docRoot}training/material/index.html">material design</a> style.</li>
+ </ul>
+ </dd>
+
+
+ <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added the {@link android.support.v7.widget.RecyclerView.ViewHolder#getLayoutPosition
+ getlayoutPosition()}
+ and {@link android.support.v7.widget.RecyclerView.ViewHolder#getAdapterPosition
+ getadapterPosition()} methods to the {@link android.support.v7.widget.RecyclerView}
+ class.</li>
+ <li>Deprecated the <code>classgetChildPosition()</code> and
+ <code>findViewHolderForPosition()</code> methods in the
+ {@link android.support.v7.widget.RecyclerView} class. </li>
+ <li>Deprecated the <code>getPosition()</code> method in the
+ {@link android.support.v7.widget.RecyclerView.ViewHolder} class. </li>
+ <li>Deprecated the <code>getViewPosition()</code> method in the
+ {@link android.support.v7.widget.RecyclerView.LayoutParams} class. </li>
+ </ul>
+ </dd>
+
+ </div>
+</div>
+
+
+
+
+<div class="toggle-content closed">
+ <p id="rev21"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 21.0.3</a> <em>(December 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added several {@link android.support.v4.app.NotificationCompat.WearableExtender}
+ methods to improve the display of barcodes in notifications on wearable devices.
+ <ul>
+ <li>{@link android.support.v4.app.NotificationCompat.WearableExtender#getHintScreenTimeout getHintScreenTimeout()}</li>
+ <li>{@link android.support.v4.app.NotificationCompat.WearableExtender#setHintScreenTimeout setHintScreenTimeout()}</li>
+ <li>{@link android.support.v4.app.NotificationCompat.WearableExtender#getHintAvoidBackgroundClipping getHintAvoidBackgroundClipping()}</li>
+ <li>{@link android.support.v4.app.NotificationCompat.WearableExtender#setHintAvoidBackgroundClipping setHintAvoidBackgroundClipping()}</li>
+ </ul>
+ </li>
+ </ul>
+ </dd>
+
+ </div>
+</div>
+
+
+
+<div class="toggle-content closed">
+ <p id="rev21"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 21.0.2</a> <em>(November 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.v4.app.NotificationCompat.CarExtender}
+ class to support Android Auto extensions to notifications.</li>
+ </ul>
+ </dd>
+ <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added the {@link android.support.v7.widget.PopupMenu} constructor to support new popup
+ menus.</li>
+ <li>Added support for a Collapse icon description in the {@link android.support.v7.widget.Toolbar}
+ class.</li>
+ <li>Updated the {@link android.support.v7.widget.SearchView} widget to support displaying
+ the {@link android.support.v7.appcompat.R.attr#commitIcon}. </li>
+ <li>Removed the <code>buttonGravity</code> attribute from the
+ {@link android.support.v7.widget.Toolbar} class. </li>
+ </ul>
+ </dd>
+ <dt>Changes for <a href="features.html#v7-cardview">v7 cardview library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.v7.widget.CardView#setCardBackgroundColor} API to
+ support changing the background color of the {@link android.support.v7.widget.CardView}.</li>
+ <li>Changed the {@link android.support.v7.widget.CardView} to more accurately report its
+ opacity value as {@link android.graphics.PixelFormat#TRANSLUCENT}.</li>
+ </ul>
+ </dd>
+ <dt>Changes for <a href="features.html#v7-recyclerview">v7 recyclerview
+ library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.v7.widget.RecyclerView#TOUCH_SLOP_DEFAULT} and
+ {@link android.support.v7.widget.RecyclerView#TOUCH_SLOP_PAGING} constants
+ to the {@link android.support.v7.widget.RecyclerView} class
+ to support touch slop configurations for paging.</li>
+ </ul>
+ </dd>
+ <dt>Changes for <a href="features.html#v17-leanback">v17 leanback library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added support to generate v4 code fragments. </li>
+ <li>Changed the secondary text color on {@link android.support.v7.widget.CardView}. </li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+
+<div class="toggle-content closed">
+ <p id="rev21"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 21.0.1</a> <em>(November 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Added <a href="{@docRoot}tools/support-library/features.html#multidex">
+ multidex support library</a> to support multiple
+ <a href="https://source.android.com/devices/tech/dalvik/">Dalvik</a> Executable (DEX) files
+ for multi-dex file support prior to Android 5.0.
+ </dt>
+ </dl>
+ </div>
+</div>
+
+
+
+
+<div class="toggle-content closed">
+ <p id="rev21"><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 21</a> <em>(October 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for <a href="features.html#v4">v4 support library:</a></dt>
+ <dd>
+ <ul>
+ <li>Added support for {@link android.support.v4.app.Fragment}
+ transitions for devices running Android 5.0 (API level 21).
+ Be aware that transitions have no effect on devices running
+ Android 4.4 and lower.
+ </li>
+ <li>Added {@link android.support.v4.provider.DocumentFile} to ease
+ the transition from {@link java.io.File}
+ while working with document trees. However, this class demands
+ more processing overhead compared to the platform's
+ {@link android.provider.DocumentsContract} API added in
+ Android 4.4 (API level 19). So you should switch to using {@link
+ android.provider.DocumentsContract} when running on Android 4.4
+ and higher.</li>
+ </ul>
+ </dd>
+ <dt>Changes for <a href="features.html#v7-appcompat">v7 appcompat
+ library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added support for <a href="{@docRoot}design/material/">material
+ design</a> user interfaces.</li>
+ <li>Added {@link android.support.v7.widget.Toolbar}, which generalizes
+ the functionality of {@link android.support.v7.app.ActionBar} for
+ use within app layouts.</li>
+ <li>Updated {@link android.support.v7.app.ActionBarDrawerToggle},
+ which contains the menu-to-arrow animation</li>
+ <li>Updated common user interface widgets to allow tinting via theme
+ attributes when running on pre-Android 5.0 devices</li>
+ <li>Added {@link android.support.v7.widget.SwitchCompat}, a backport
+ of the {@link android.widget.Switch} widget that was added in
+ Android 4.0 (API level 14).</li>
+ </ul>
+ </dd>
+ <dt>New <a href="features.html#v7-cardview">v7 cardview library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added the {@link android.support.v7.widget.CardView} widget, which
+ provides a material design-compatible implementation for displaying
+ data items.</li>
+ </ul>
+ </dd>
+ <dt>New <a href="features.html#v7-recyclerview">v7 recyclerview
+ library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added the {@link android.support.v7.widget.RecyclerView} widget,
+ which provides a flexible list view for providing a limited window
+ into a large data set.</li>
+ </ul>
+ </dd>
+ <dt>New <a href="features.html#v7-palette">v7 palette library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.v7.graphics.Palette} class,
+ which lets you extract prominent colors from an image.</li>
+ </ul>
+ </dd>
+ <dt>New <a href="features.html#v17-leanback">v17 leanback library</a>:</dt>
+ <dd>
+ <ul>
+ <li>Added support for building TV user interfaces, including
+ {@link android.support.v17.leanback.app.BrowseFragment},
+ {@link android.support.v17.leanback.app.DetailsFragment}, and
+ {@link android.support.v17.leanback.app.PlaybackOverlayFragment}.
+ For more information about using these user interface widgets,
+ see <a href="{@docRoot}training/tv/playback/index.html">Building TV
+ Playback Apps</a>.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 20</a> <em>(July 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Added extended notification support for Android Wear in
+ {@link android.support.v4.app.NotificationCompat.WearableExtender}, which allows you
+ to specify wearable-specific features in your notifications.</li>
+ <li>Added {@link android.support.v4.app.NotificationCompat.Action.WearableExtender},
+ which allows actions to be added on wearable notifications.</li>
+ <li>Added {@link android.support.v4.app.NotificationManagerCompat}, which allows you
+ to issue notifications that properly support wearable features.</li>
+ <li>Added {@link android.support.v4.app.RemoteInput}, which allows a handheld device
+ to receive voice input from a notification that appears on a wearable device.</li>
+ <li>Improved the handling of touch feedback in
+ {@link android.support.v4.widget.SwipeRefreshLayout}.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 19.1.0</a> <em>(March 2014)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Added the {@link android.support.v4.widget.SwipeRefreshLayout} class,
+ which enables users to refresh the contents of a view with a vertical
+ swipe gesture.</li>
+ <li>Fixed accessibility issues with navigation drawers.</li>
+ </ul>
+ </dd>
+
+ <dt>Changes for v7 appcompat library:</dt>
+ <dd>
+ <ul>
+ <li>Fixed background issues with the action bar.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 19.0.1</a> <em>(December 2013)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Improved {@link android.support.v4.print.PrintHelper} by adding asynchronous
+ handling of printing.</li>
+ <li>Fixed the {@link android.support.v4.widget.DrawerLayout} class approximation of
+ the {@link android.view.View#addChildrenForAccessibility addChildrenForAccessibility()}
+ method.</li>
+ <li>Fixed slide drawable mirroring in {@link
+ android.support.v4.app.ActionBarDrawerToggle}.</li>
+ <li>Fixed off-by-one issue when removing an item from a collection iterator.</li>
+ </ul>
+ </dd>
+
+ <dt>Changes for v7 mediarouter library:</dt>
+ <dd>
+ <ul>
+ <li>Improved route identification by using full component name in the {@link
+ android.support.v7.media.MediaRouteProvider.ProviderMetadata}.</li>
+ <li>Updated {@link android.support.v7.app.MediaRouteChooserDialog} to hide disabled
+ routes.</li>
+ </ul>
+ </dd>
+
+ <dt>Changes for <a href="features.html#v8-renderscript">v8 renderscript library</a></dt>
+ <dd>
+ <ul>
+ <li>Added error propagation for the RenderScript thunking layer.</li>
+ </ul>
+ </dd>
+
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 19</a> <em>(October 2013)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Added support for external Storage APIs with the
+ {@link android.support.v4.content.ContextCompat#getObbDirs getObbDirs()},
+ {@link android.support.v4.content.ContextCompat#getExternalFilesDirs getExternalFilesDirs()},
+ {@link android.support.v4.content.ContextCompat#getExternalCacheDirs getExternalCacheDirs()},
+ and {@link android.support.v4.os.EnvironmentCompat#getStorageState getStorageState()}.
+ These helper methods always return a single file object on devices running Android
+ 4.3 (API level 18) and earlier. When running on Android 4.4 (API level 19) and higher,
+ these methods may return more than one file object.</li>
+ <li>Added {@link android.support.v4.print.PrintHelper} class that works with the
+ Print APIs to print images with a minimum of code.</li>
+ <li>Added drag-to-open user interface support for pop-up menus. For more information, see
+ {@link android.support.v4.widget.PopupMenuCompat} and
+ {@link android.support.v4.widget.ListPopupWindowCompat}.</li>
+ <li>Improved accessibility support with the addition of a
+ {@link android.support.v4.view.accessibility.AccessibilityNodeProviderCompat#findFocus
+ findFocus()} method in
+ {@link android.support.v4.view.accessibility.AccessibilityNodeProviderCompat} and the
+ {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat#getLiveRegion
+ getLiveRegion()} method in
+ {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}.</li>
+ <li>Added helper class {@link android.support.v4.view.ScaleGestureDetectorCompat} for
+ accessing new scaling gesture methods.</li>
+ <li>Fixed problem with {@link android.support.v4.app.ActionBarDrawerToggle} in
+ right-to-left language displays.</li>
+ <li>Modified {@link android.support.v4.widget.AutoScrollHelper} option to consume
+ touch events or allow them to be passed through to other views.</li>
+ </ul>
+ </dd>
+
+ <dt>Changes for v7 mediarouter library:</dt>
+ <dd>
+ <ul>
+ <li>Added support for media playback queuing, setting HTTP header values and media
+ playback duration.</li>
+ <li>Added explicit start, get, and end session actions for explicitly managing media
+ playback sessions with media router.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 18</a> <em>(July 2013)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>User interface
+ <ul>
+ <li>Added {@link android.support.v4.text.BidiFormatter} for handling
+ text strings that combine right to left and left to right-formatted text.</li>
+ <li>Modified {@link android.support.v4.view.ViewPager} to better handle cases where the
+ pager has a measured width of zero in the initial layout processing.</li>
+ <li>Modified {@link android.support.v4.widget.DrawerLayout} and
+ {@link android.support.v4.widget.SlidingPaneLayout} to not throw exceptions for
+ measurement while the project code is being edited.</li>
+ </ul>
+ </li>
+
+ <li>Accessibility
+ <ul>
+ <li>Added {@link android.support.v4.widget.ExploreByTouchHelper} to simplify the
+ implementation of accessibility for custom views.</li>
+ <li>Fixed a problem with {@link android.support.v4.view.ViewPager} incorrectly
+ populating {@link
+ android.support.v4.view.accessibility.AccessibilityEventCompat#TYPE_VIEW_SCROLLED
+ TYPE_VIEW_SCROLLED} accessibility events.</li>
+ <li>Fixed a null pointer exception in {@link android.support.v4.view.ViewPager} when
+ populating an accessibility event.</li>
+ <li>Simplified {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}
+ by changing {@link java.lang.CharSequence} inputs to {@link java.lang.String} objects.
+ </li>
+ <li>Deprecated an {@link android.support.v4.view.accessibility.AccessibilityRecordCompat}
+ constructor that used an {@link java.lang.Object} as input.</li>
+ </ul>
+ </li>
+
+ <li>Media
+ <ul>
+ <li>Added {@link android.support.v4.media.TransportMediator} helper class to manage
+ media transport control, such as play, pause, skip and other media actions.</li>
+ <li>Added {@link android.support.v4.hardware.display.DisplayManagerCompat} for managing
+ display output to one or more device displays.</li>
+ </ul>
+ </li>
+
+ <li>Other changes
+ <ul>
+ <li>Added {@link android.support.v4.content.WakefulBroadcastReceiver} helper class for
+ implementing a common pattern of detecting a device wakeup event and passing work off
+ to a {@link android.app.Service} while ensuring that the device does not go back to
+ sleep before the handoff is complete.</li>
+ <li>Added two new APIs,
+ {@link android.support.v4.content.AsyncTaskLoader#commitContentChanged
+ commitContentChanged()} and
+ {@link android.support.v4.content.AsyncTaskLoader#rollbackContentChanged
+ rollbackContentChanged()}, to {@link android.support.v4.content.AsyncTaskLoader} to
+ help deal with background updates for data changes that are subsequently canceled.
+ </li>
+ </ul>
+ </li>
+ </ul>
+ </dd>
+
+ <dt>New v7 appcompat library:</dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.v7.app.ActionBar} to allow implementation of the
+ action bar user interface <a href="{@docRoot}design/patterns/actionbar.html">design
+ pattern</a> back to Android 2.1 (API level 7) and higher. Use of this class requires
+ that you implement your activity by extending the new
+ {@link android.support.v7.app.ActionBarActivity} class.</li>
+ </ul>
+ </dd>
+
+ <dt>New v7 mediarouter library:</dt>
+ <dd>
+ <p>Added a new mediarouter library that provides support for the <a
+ href="https://developers.google.com/cast/">Google Cast developer preview</a>.
+ The v7 mediarouter library APIs provide a means of controlling the routing of
+ media channels and streams from the current device to external screens,
+ speakers, and other destination devices, with compatibility back to Android 2.1
+ (API level 7). See <a
+ href="{@docRoot}tools/support-library/features.html#v7-mediarouter">V7
+ mediarouter library</a> for more information. </p>
+
+ <p class="caution">The v7 mediarouter library APIs introduced in Support
+ Library r18 are subject to change in later revisions of the Support
+ Library. At this time, we recommend using the library only in connection
+ with the <a href="https://developers.google.com/cast/">Google Cast
+ developer preview</a>.</p>
+ </dd>
+
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 13</a> <em>(May 2013)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.v4.widget.DrawerLayout} for creating a
+ <a href="{@docRoot}training/implementing-navigation/nav-drawer.html">Navigation
+ Drawer</a> that can be pulled in from the edge of a window.</li>
+ <li>Added {@link android.support.v4.widget.SlidingPaneLayout} widget for creating linked
+ summary and detail views that appropriately adapt to various screen sizes.</li>
+ <li>Added {@link android.support.v4.app.ActionBarDrawerToggle} as a way to tie
+ together the functions of {@link android.support.v4.widget.DrawerLayout} and {@link
+ android.app.ActionBar}.</li>
+ <li>Added {@link android.support.v4.widget.ViewDragHelper} as a new common component
+ for dragging views within a parent view.</li>
+ <li>Added {@link android.support.v4.widget.ScrollerCompat} to provide {@link
+ android.widget.Scroller} and {@link android.widget.OverScroller} compatibility support.
+ </li>
+ <li>Added {@link android.support.v4.content.FileProvider} to allow sharing of private
+ files between applications.</li>
+ <li>Updated {@link android.support.v4.view.ViewPager} to throw an exception if the
+ associated {@link android.support.v4.view.PagerAdapter} class is modified without a
+ call to {@link android.support.v4.view.PagerAdapter#notifyDataSetChanged
+ notifyDataSetChanged()}.
+ </li>
+ <li>Fixed an issue with {@link android.support.v4.view.ViewPager} children drawing sort
+ order.</li>
+ <li>Fixed {@link android.support.v4.view.GestureDetectorCompat} to dispatch missing
+ {@link android.view.GestureDetector.SimpleOnGestureListener#onSingleTapConfirmed} calls
+ between tap timeout and long press events.</li>
+ </ul>
+ </dd>
+
+ <dt>New v7 gridlayout library:</dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.v7.widget.GridLayout} to provide support for the
+ {@link android.widget.GridLayout} layout object.</li>
+ <li>Added {@link android.support.v7.widget.Space} which can be used to create blank areas
+ within a {@link android.support.v7.widget.GridLayout} layout object.</li>
+ </ul>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 12</a> <em>(February 2013)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Improved interaction behavior for {@link android.support.v4.view.ViewPager}.</li>
+ <li>Fixed a bug that could cause {@link android.support.v4.view.ViewPager} to select the
+ wrong page.</li>
+ <li>Fixed use of {@link android.support.v4.view.ViewPager#removeView removeView()} method
+ during layout for {@link android.support.v4.view.ViewPager}.</li>
+ <li>Fixed issue with {@link android.support.v4.widget.SearchViewCompat} where using the
+ back button to dismiss does not clear the search text. This fix only applies to
+ host API levels 14 and higher.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 11</a> <em>(November 2012)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>User Interface
+ <ul>
+ <li>Added support for nested {@link android.support.v4.app.Fragment} classes.</li>
+ <li>Added improvements to {@link android.support.v4.app.FragmentManager} debugging.
+ </li>
+ <li>Fixed problem in {@link android.support.v4.app.FragmentTabHost} where fragment
+ and tab interaction could result in a {@link android.widget.ListView} state loss.
+ </li>
+ <li>Fixed issue with user-visible hint in
+ {@link android.support.v4.app.FragmentStatePagerAdapter}.</li>
+ <li>Added {@link android.support.v4.view.ViewPager.PageTransformer PageTransformer}
+ interface to {@link android.support.v4.view.ViewPager} to allow applications to
+ supply a custom transition behavior for scrolling.</li>
+ <li>Added new features and fixes to {@link android.support.v4.app.TaskStackBuilder}
+ from current release.</li>
+ <li>Fixed {@link android.support.v4.view.PagerTitleStrip} to correctly track the
+ {@link android.support.v4.view.PagerAdapter} currently in use.</li>
+ <li>Fixed display flickering, positioning, and text clipping problems with
+ {@link android.support.v4.view.PagerTitleStrip}.</li>
+ <li>Fixed {@link android.support.v4.view.PagerTabStrip} to properly respect padding
+ when drawing an underline.</li>
+ </ul>
+ </li>
+ <li>Accessibility
+ <ul>
+ <li>Added support for new accessibility gesture and touch event types in
+ {@link android.support.v4.view.accessibility.AccessibilityEventCompat}.</li>
+ <li>Added support for new accessibility APIs in
+ {@link android.support.v4.view.ViewCompat}.</li>
+ <li>Added support for {@link android.support.v4.view.ViewCompat#performAccessibilityAction
+ performAccessibilityAction()} method to {@link android.support.v4.view.ViewCompat}.
+ </li>
+ </ul>
+ </li>
+ <li>Added support for gestures with {@link android.support.v4.view.GestureDetectorCompat}.
+ </li>
+ <li>Added support for performing atomic operations on files using a new
+ {@link android.support.v4.util.AtomicFile} class.</li>
+ <li>Added support for the full set of {@code make} methods in
+ {@link android.support.v4.content.IntentCompat}.</li>
+ <li>Added {@link android.support.v4.util.LruCache#trimToSize trimToSize()} method in
+ {@link android.support.v4.util.LruCache} utility class.</li>
+ <li>Updated {@link android.support.v4.net.ConnectivityManagerCompat} to get NetworkInfo
+ from a {@link android.net.ConnectivityManager#CONNECTIVITY_ACTION}
+ broadcast.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 10</a> <em>(August 2012)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Added support for notification features introduced in Android 4.1 (API level 16) with
+ additions to {@link android.support.v4.app.NotificationCompat}.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 9</a> <em>(June 2012)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+
+ <li>User Interface Support
+ <ul>
+ <li>Added {@link android.support.v4.view.PagerTabStrip} support, providing enhanced
+functionality beyond {@link android.support.v4.view.PagerTitleStrip}.</li>
+ <li>Fixed various bugs for {@link android.support.v4.view.PagerTitleStrip} and
+{@link android.support.v4.view.PagerTabStrip}, including {@link
+android.widget.TextView#setAllCaps setAllCaps} option, title alignment,
+appearance improvements, minimum width constraints and touch navigation issues.</li>
+ <li>Added support for {@link android.support.v4.view.ViewPager} page gutters, which
+helps the {@link android.support.v4.view.ViewPager} class provide paging support for content with
+a large horizontal scroll range, such as a map.</li>
+ <li>Fixed numerous bugs for {@link android.support.v4.view.ViewPager}, including size
+and data set change problems, page positioning, user interaction, scroll tracking and keyboard
+navigation problems.</li>
+ <li>Fixed many bugs for {@link android.support.v4.app.Fragment}, including proper
+handling of {@link android.support.v4.app.Fragment#onActivityResult onActivityResult()} when
+the target fragment no longer exists, dispatching selection events to invisible fragments, improved
+{@link android.support.v4.app.FragmentTransaction#replace FragmentTransaction.replace()} behavior
+and added better state handling for fragments being moved out of view.</li>
+ <li>Added support for the {@link
+android.support.v4.view.ViewCompat postOnAnimation()} method in {@link
+android.support.v4.view.ViewCompat}.</li>
+ <li>Updated {@link android.support.v4.app.NavUtils} to use Android 4.1 (API level 16)
+<em>Up</em> navigation functionality when available.</li>
+ </ul>
+ </li>
+
+ <li>Accessibility
+ <ul>
+ <li>Updated accessibility support classes, including {@link
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}, to follow fixes made in Android
+4.1 (API level 16).</li>
+ <li>Added support for accessibility scroll actions in {@link
+android.support.v4.view.ViewPager}.</li>
+ </ul>
+ </li>
+
+ <li>General improvements
+ <ul>
+ <li>Updated {@link android.support.v4.app.TaskStackBuilder} to reflect API changes in
+Android 4.1 (API level 16).</li>
+ <li>Enhanced {@link android.support.v4.app.TaskStackBuilder} to allow it to be used
+from a Service.</li>
+ <li>Added support for {@link android.support.v4.content.IntentCompat EXTRA_HTML_TEXT}
+to {@link android.support.v4.app.ShareCompat}.</li>
+ <li>Updated {@link android.support.v4.app.NotificationCompat.Builder} to support the
+{@link android.support.v4.app.NotificationCompat.Builder#setNumber setNumber()} method.</li>
+ <li>Added support in {@link android.support.v4.net.ConnectivityManagerCompat} for the
+{@link android.support.v4.net.ConnectivityManagerCompat#isActiveNetworkMetered
+isActiveNetworkMetered()} method.</li>
+ </ul>
+ </li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 8</a> <em>(April 2012)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Fixed intent flags for {@link android.app.PendingIntent} objects generated
+ by {@link android.support.v4.app.TaskStackBuilder}.</li>
+ <li>Removed unused attributes from the gridlayout library projects to make sure
+ the library can be built with API level 7 and higher.</li>
+ <li>Added {@code .classpath} and {@code .project} files for the gridlayout
+ library project.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 7</a> <em>(March 2012)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Added {@link android.support.v4.app.ShareCompat}, which provides helper classes
+for sending and receiving content for social sharing applications, including new metadata for
+attributing shared data to the source app. This class also provides compatible integration with the
+new {@link android.widget.ShareActionProvider} in Android 4.0.</li>
+ <li>Added {@link android.support.v4.app.NavUtils} and {@link
+android.support.v4.app.TaskStackBuilder} to provide support for implementing the
+<a href="{@docRoot}design/index.html">Android Design</a> guidelines for navigation. These
+additions include a way to implement the action bar's <em>Up</em> button across versions.
+For an example implementation of this pattern, see the AppNavigation sample in
+({@code <em><sdk></em>/samples/<em><platform></em>/AppNavigation}).</li>
+ <li>Added {@link android.support.v4.app.NotificationCompat.Builder} to provide a
+compatibility implementation of Android 3.0's {@link android.app.Notification.Builder} helper class
+for creating standardized system notifications.</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 6</a> <em>(December 2011)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+
+ <p class="note"><strong>Note:</strong> Reference for support library APIs are now available with
+ the framework references, for example: {@link android.support.v4.app}.</p>
+<dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Changes to ViewPager:
+ <ul>
+ <li>Added extra decorative view support for {@link android.support.v4.view.ViewPager}.
+ Decorative views may be supplied as child views of a pager in XML layout.</li>
+ <li>Added {@link android.support.v4.view.PagerAdapter#getPageTitle
+ PagerAdapter.getPageTitle()} to supply title strings for pages, which defaults to no
+ title for each page.</li>
+ <li>Added {@link android.support.v4.view.PagerTitleStrip}, a non-interactive title
+ strip, that can be added as a child of ViewPager. Developers can supply text
+ appearance and color, as well as layout sizing and gravity information.</li>
+ <li>Updated {@link android.support.v4.view.PagerAdapter} methods to take ViewGroup
+ objects, rather than View to avoid class casting in adapter implementations.</li>
+ <li>Updated {@link android.support.v4.view.ViewPager} to use Launcher-style
+ fling behavior.</li>
+ <li>Bug fixes for user interface interaction and test automation.</li>
+ </ul>
+ </li>
+
+ <li>Support for Fragments:
+ <ul>
+ <li>Changed {@code setStartDeferred()} method to {@link
+ android.support.v4.app.Fragment#setUserVisibleHint}.</li>
+ <li>Added deferred start for off-screen pages to improve performance.</li>
+ </ul>
+ </li>
+
+ <li>Support for Accessiblity APIs:
+ <ul>
+ <li>Updated {@link android.support.v4.view.AccessibilityDelegateCompat} methods
+ to return empty lists instead of null.</li>
+ <li>Added new APIs needed by the v4 samples.</li>
+ </ul>
+ </li>
+
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 5</a> <em>(December 2011)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Support for Accessiblity APIs:
+ <ul>
+ <li>Added {@link android.support.v4.view.AccessibilityDelegateCompat}
+ to support {@link android.view.View.AccessibilityDelegate}.</li>
+
+ <li>Added {@link android.support.v4.view.accessibility.AccessibilityEventCompat}
+ to support {@link android.view.accessibility.AccessibilityEvent}.</li>
+
+ <li>Added {@link android.support.v4.view.accessibility.AccessibilityManagerCompat}
+ to support {@link android.view.accessibility.AccessibilityManager}.</li>
+
+ <li>Added {@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat}
+ to support {@link android.view.accessibility.AccessibilityNodeInfo}.</li>
+
+ <li>Added {@link android.support.v4.view.accessibility.AccessibilityRecordCompat}
+ to support {@link android.view.accessibility.AccessibilityRecord}.</li>
+
+ <li>Added {@link
+ android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat}
+ to support {@link android.accessibilityservice.AccessibilityServiceInfo}.</li>
+
+ <li>Added {@link android.support.v4.view.ViewGroupCompat}
+ to support accessibility features in {@link android.view.ViewGroup}.
+ </li>
+
+ <li>Modified {@link android.support.v4.view.ViewCompat}
+ to support accessibility features in {@link android.view.View}.</li>
+ </ul>
+ </li>
+
+ <li>Changes to ViewPager:
+ <ul>
+ <li>Added support for margins between pages.
+ An optional {@link android.graphics.drawable.Drawable} can be provided
+ to fill the margins.</li>
+ <li>Added support for {@link android.widget.EdgeEffect}.</li>
+ <li>Added support for keyboard navigation</li>
+ <li>Added support to control how many pages are kept to either side
+ of the current page.</li>
+ <li>Improved touch physics.</li>
+ <li>Bug fixes for user interface behavior.</li>
+ </ul>
+ </li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 4</a> <em>(October 2011)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Added <code>EdgeEffectCompat</code> to
+ support {@link android.widget.EdgeEffect}.</li>
+
+ <li>Added <code>LocalBroadcastManager</code> to allow applications to easily
+ register for and receive intents within a single application without
+ broadcasting them globally.</li>
+
+ <li>Added support in <code>ViewCompat</code> to check for and set overscroll
+ modes for {@link android.view.View}s on Android 2.3 and later.</li>
+ <li>Changes to Fragment APIs:
+ <ul>
+ <li>Added new APIs to control the visibility of new menus.</li>
+ <li>Added custom animation APIs.</li>
+ <li>Added APIs in <code>FragmentActivity</code> to retain custom,
+ non-configuration instance data.</li>
+ <li>Various bug fixes.</li>
+ </ul>
+ </li>
+
+ <li>Fixed a {@link android.content.Loader} bug that caused issues in
+ canceling {@link android.os.AsyncTask}s when running on Froyo and older
+ versions of the platform. The support
+ code now uses its own version of {@link android.os.AsyncTask} to keep the same
+ behavior on all platform versions.</li>
+
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 3</a> <em>(July 2011)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 support library:</dt>
+ <dd>
+ <ul>
+ <li>Adds support for {@link android.app.Fragment.SavedState}</li>
+ <li>Adds {@code MotionEventCompat} to support newer {@link
+android.view.MotionEvent} APIs</li>
+ <li>Adds {@code VelocityTrackerCompat} to support a newer {@link
+android.view.VelocityTracker} APIs</li>
+ <li>Adds {@code ViewConfigurationCompat} to support a newer {@link
+android.view.ViewConfiguration} APIs</li>
+ <li>All new APIs (available only in the support library) that allow you to create UIs
+with horizontal paging, allowing users to swipe left and right between content views. Classes to
+support this include:
+ <ul>
+ <li>{@code ViewPager}: A {@link android.view.ViewGroup} that manages the
+layout for the child views, which the user can swipe between.</li>
+ <li>{@code PagerAdapter}: An adapter that populates the {@code ViewPager} with the
+views that represent each page.</li>
+ <li>{@code FragmentPagerAdapter}: An extension of {@code PagerAdapter} for flipping
+between fragments.</li>
+ <li>{@code FragmentStatePagerAdapter}: An extension of {@code PagerAdapter} for
+flipping between fragments that uses the library's support for {@link
+android.app.Fragment.SavedState}.</li>
+ </ul>
+ </li>
+ </ul>
+ </dd>
+ <dt>New v13 support library:</dt>
+ <dd>
+ <ul>
+ <li>Includes the {@code FragmentPagerAdapter} and {@code FragmentStatePagerAdapter}
+to support the horizontal paging.
+ <p>These are exactly the same as the APIs added to the v4 support library, but rely on
+other platform components in Android 3.2. Use this library instead of v4 if you're developing for
+Android 3.2 and higher (all other APIs in the v4 library are already available with API level
+13).</p>
+ </li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 2</a> <em>(May 2011)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <dl>
+ <dt>Changes for v4 library:</dt>
+ <dd>
+ <ul>
+ <li>Support for fragment animations</li>
+ <li>Fix {@link android.support.v4.app.Fragment#onActivityResult Fragment.onActivityResult()}
+ bug</li>
+ </ul>
+ </dd>
+ </dl>
+ </div>
+</div>
+
+
+<div class="toggle-content closed">
+ <p><a href="#" onclick="return toggleContent(this)">
+ <img src="{@docRoot}assets/images/styles/disclosure_down.png" class="toggle-content-img" alt=""
+/>Android Support Library, revision 1</a> <em>(March 2011)</em>
+ </p>
+ <div class="toggle-content-toggleme">
+ <p>Initial release with the v4 library.</p>
+ </div>
+</div>
+
diff --git a/docs/html/training/_book.yaml b/docs/html/training/_book.yaml
index 47c6904..00f9295 100644
--- a/docs/html/training/_book.yaml
+++ b/docs/html/training/_book.yaml
@@ -754,18 +754,6 @@
- name: description
value: How to use DHU to test Auto apps.
-- title: Building Apps for Work
- path: /training/enterprise/index.html
- section:
- - title: Ensuring Compatibility with Managed Profiles
- path: /training/enterprise/app-compatibility.html
- - title: Implementing App Restrictions
- path: /training/enterprise/app-restrictions.html
- - title: Building a Device Policy Controller
- path: /training/enterprise/work-policy-ctrl.html
- - title: Configuring Corporate-Owned, Single-Use Devices
- path: /training/enterprise/cosu.html
-
- title: Best Practices for Interaction & Engagement
path: /training/best-ux.html
section:
@@ -1386,7 +1374,7 @@
- name: description
value: How to use the SafetyNet service to analyze a device where your app is running and get information about its compatibility with your app.
- title: Enhancing Security with Device Management Policies
- path: /training/enterprise/device-management-policy.html
+ path: /work/device-management-policy.html
path_attributes:
- name: description
value: How to create an application that enforces security policies on devices.
diff --git a/docs/html/training/enterprise/index.jd b/docs/html/training/enterprise/index.jd
deleted file mode 100644
index d54607c..0000000
--- a/docs/html/training/enterprise/index.jd
+++ /dev/null
@@ -1,65 +0,0 @@
-page.title=Building Apps for Work
-meta.tags="work, enterprise, corporate"
-page.tags="work", "enterprise", "corporate"
-page.metaDescription=Learn how to build Android apps for the enterprise and take advantage of Google's Android for Work program.
-page.article=true
-
-@jd:body
-
-<iframe width="448" height="252"
- src="//www.youtube.com/embed/jQWB_-o1kz4?autohide=1&showinfo=0"
- frameborder="0" allowfullscreen=""
- style="float: right; margin: 0 0 20px 20px;"></iframe>
-
-<p>
- The Android framework provides features to support the security, data separation, and
- administration needs of a enterprise environment. As an app developer, you can make your app more
- appealing to corporate customers by gracefully handling enterprise security and feature
- restrictions. You can also modify your app so that technology administrators can remotely
- configure it for use with enterprise resources.
-</p>
-
-<p>
- To help businesses incorporate Android devices and apps into the workplace, Google provides the
- <a href="http://www.google.com/work/android">Android for Work</a> program, which offers a suite
- of APIs and services for device distribution and administration. Through this program companies
- can connect with Enterprise Mobility Management (EMM) providers to help integrate Android with
- their businesses.
-</p>
-
-<p>
- For more information, follow the links below to learn how to update your Android app to support
- the enterprise environment or build enterprise-specific solutions.
-</p>
-
-<h2 id="apps">App Development for Enterprises</h2>
-
-<p>
- Learn how to make your app function smoothly in corporate environments that restrict device
- features and data access. Go further to support enterprise use of your app by enabling
- restrictions that corporate technology administrators can use to remotely configure your app:
-</p>
-
-<div class="dynamic-grid">
- <div class="resource-widget resource-flow-layout landing col-12"
- data-query="collection:training/work/apps"
- data-cardSizes="6x6"
- data-maxResults="6">
- </div>
-</div>
-
-
-<h2 id="admin">Device and App Administration</h2>
-
-<p>
- Learn how to build policy controller apps that enable enterprise technology administrators
- to manage devices, manage corporate apps, and provide access to company resources:
-</p>
-
-<div class="dynamic-grid">
- <div class="resource-widget resource-flow-layout landing col-12"
- data-query="collection:training/work/admin"
- data-cardSizes="6x6"
- data-maxResults="4">
- </div>
-</div>
diff --git a/docs/html/training/enterprise/work-policy-ctrl.jd b/docs/html/training/enterprise/work-policy-ctrl.jd
deleted file mode 100644
index 8225ea3..0000000
--- a/docs/html/training/enterprise/work-policy-ctrl.jd
+++ /dev/null
@@ -1,339 +0,0 @@
-page.title=Building a Device Policy Controller
-page.metaDescription=Learn how to develop a device policy controller to create and administer a managed profile on an employee's device.
-page.tags="work policy controller,WPC,device policy controller,DPC"
-@jd:body
-
-<div id="tb-wrapper">
-<div id="tb">
-
-<h2>This lesson teaches you to</h2>
-<ol>
- <li><a href="#after_creating_profile">Create a Managed Profile</a></li>
- <li><a href="#set_up_policies">Set Up Device Policies</a></li>
- <li><a href="#apply_restrictions">Apply App Restrictions</a></li>
-</ol>
-
-<!-- related docs (NOT javadocs) -->
-
-<h2>
- You should also read
-</h2>
-
-<ul>
- <li>
- <a href="{@docRoot}guide/topics/admin/device-admin.html">Device
- Administration</a>
- </li>
-</ul>
-
-<h2>Resources</h2>
-<ul>
-
- <li>
- <a href=
- "{@docRoot}samples/BasicManagedProfile/index.html">BasicManagedProfile</a>
- </li>
-
- <li>
- <a href=
- "{@docRoot}samples/AppRestrictionEnforcer/index.html">AppRestrictionEnforcer</a>
- </li>
-</ul>
-
-</div>
-</div>
-
-
-<p>
- In an Android for Work deployment, an enterprise needs to maintain control
- over certain aspects of the employees' devices. The enterprise needs to
- ensure that work-related information is encrypted and is kept separate from
- employees' personal data. The enterprise may also need to limit device
- capabilities, such as whether the device is allowed to use its camera. And
- the enterprise may require that approved apps provide app restrictions, so
- the enterprise can turn app capability on or off as needed.
-</p>
-
-<p>
- To handle these tasks, an enterprise develops and deploys
- a <em>device policy controller</em> app (previously known as a
- <em>work policy controller</em>). This app is installed on each employee's device. The
- controller app installed on each employee's device and creates a work user
- profile, which accesses enterprise apps and data separately from the user's
- personal account. The controller app also acts as the
- bridge between the enterprise's management software and the device; the
- enterprise tells the controller app when it needs to make configuration
- changes, and the controller app makes the appropriate settings changes for the
- device and for other apps.
-</p>
-
-<p>
- This lesson describes how to develop a device policy controller app for devices
- in an Android for Work deployment. The lesson describes how to create a work
- user profile, how to set device policies, and how to apply
- restrictions to other apps running on the managed profile.
-</p>
-
-<p class="note">
- <strong>Note:</strong> This lesson does not cover the situation where the
- only profile on the device is the managed profile, under the enterprise's
- control.
-</p>
-
-<h2 id="overview">Device Administration Overview</h2>
-
-<p>
- In an Android for Work deployment, the enterprise administrator can set
- policies to control the behavior of employees' devices and apps. The
- enterprise administrator sets these policies with software provided by their
- Enterprise Mobility Management (EMM) provider. The EMM software communicates
- with a device policy controller on each device. The device policy controller, in
- turn, manages the settings and behavior of the work user profile on each
- individual’s device.
-</p>
-
-<p class="note">
- <strong>Note:</strong> A device policy controller is built on the existing
- model used for device administration applications, as described in <a href=
- "{@docRoot}guide/topics/admin/device-admin.html">Device Administration</a>.
- In particular, your app needs to create a subclass of {@link
- android.app.admin.DeviceAdminReceiver}, as described in that document.
-</p>
-
-<h3 id="managed_profiles">Managed profiles</h3>
-
-<p>
- Users often want to use their personal devices in an enterprise setting. This
- situation can present enterprises with a dilemma. If the user can use their
- own device, the enterprise has to worry that confidential information (like
- employee emails and contacts) are on a device the enterprise does not
- control.
-</p>
-
-<p>
- To address this situation, Android 5.0 (API level 21) allows enterprises to
- set up a special work user profile using the Managed Profile API. This
- user profile is called a <em>managed profile</em>, or a <em>work profile</em>
- in the Android for Work program. If a device has a
- managed profile for work, the profile's settings are under the control of the
- enterprise administrator. The administrator can choose which apps are allowed
- for that profile, and can control just what device features are available to
- the profile.
-</p>
-
-<h2 id="create_profile">Create a Managed Profile</h2>
-
-<p>To create a managed profile on a device that already has a personal profile,
-first check that the device can support a managed profile, by seeing if the
-device supports the {@link
-android.content.pm.PackageManager#FEATURE_MANAGED_USERS FEATURE_MANAGED_USERS}
-system feature:</p>
-
-<pre>PackageManager pm = getPackageManager();
-if (!pm.hasSystemFeature(PackageManager.FEATURE_MANAGED_USERS)) {
-
- // This device does not support native managed profiles!
-
-}</pre>
-
-<p>If the device supports managed profiles, create one by sending an intent with
-an {@link android.app.admin.DevicePolicyManager#ACTION_PROVISION_MANAGED_PROFILE
-ACTION_PROVISION_MANAGED_PROFILE} action. Include the device admin package
-name as an extra.</p>
-
-<pre>Activity provisioningActivity = getActivity();
-
-// You'll need the package name for the WPC app.
-String myWPCPackageName = "com.example.myWPCApp";
-
-// Set up the provisioning intent
-Intent provisioningIntent =
- new Intent("android.app.action.PROVISION_MANAGED_PROFILE");
-intent.putExtra(myWPCPackageName,
- provisioningActivity.getApplicationContext().getPackageName());
-
-if (provisioningIntent.resolveActivity(provisioningActivity.getPackageManager())
- == null) {
-
- // No handler for intent! Can't provision this device.
- // Show an error message and cancel.
-} else {
-
- // REQUEST_PROVISION_MANAGED_PROFILE is defined
- // to be a suitable request code
- startActivityForResult(provisioningIntent,
- REQUEST_PROVISION_MANAGED_PROFILE);
- provisioningActivity.finish();
-}</pre>
-
-<p>The system responds to this intent by doing the following:</p>
-
-<ul>
- <li>Verifies that the device is encrypted. If it is not, the system prompts
- the user to encrypt the device before proceeding.
- </li>
-
- <li>Creates a managed profile.
- </li>
-
- <li>Removes non-required applications from the managed profile.
- </li>
-
- <li>Copies the device policy controller app into the managed profile and
- sets it as the profile owner.
- </li>
-</ul>
-
-<p>Override {@link android.app.Activity#onActivityResult onActivityResult()} to
-see whether the provisioning was successful, as shown in the following
-example code:</p>
-
-<pre>@Override
-public void onActivityResult(int requestCode, int resultCode, Intent data) {
-
- // Check if this is the result of the provisioning activity
- if (requestCode == REQUEST_PROVISION_MANAGED_PROFILE) {
-
- // If provisioning was successful, the result code is
- // Activity.RESULT_OK
- if (resultCode == Activity.RESULT_OK) {
- // Hurray! Managed profile created and provisioned!
- } else {
- // Boo! Provisioning failed!
- }
- return;
-
- } else {
- // This is the result of some other activity, call the superclass
- super.onActivityResult(requestCode, resultCode, data);
- }
-}</pre>
-
-<h3 id="after_creating_profile">After Creating the Managed Profile</h3>
-
-<p>When the profile has been provisioned, the system calls the device policy
-controller app's {@link android.app.admin.DeviceAdminReceiver#onProfileProvisioningComplete
-DeviceAdminReceiver.onProfileProvisioningComplete()} method. Override this
-callback method to finish enabling the managed profile.</p>
-
-<p>Typically, your {@link
-android.app.admin.DeviceAdminReceiver#onProfileProvisioningComplete
-DeviceAdminReceiver.onProfileProvisioningComplete()} callback implementation
-would perform these tasks:</p>
-
-<ul>
- <li>Verify that the device is complying with the EMM's device policies, as
- described in <a href="#set_up_policies">Set Up Device Policies</a>
- </li>
-
- <li>Enable any system applications that the administrator chooses to make
- available within the managed profile, using {@link
- android.app.admin.DevicePolicyManager#enableSystemApp
- DevicePolicyManager.enableSystemApp()} </li>
-
- <li>If the device uses Google Play for Work, add the Google account
- to the managed profile with {@link android.accounts.AccountManager#addAccount
- AccountManager.addAccount()}, so administrators can install
- applications to the device
- </li>
-</ul>
-
-<p>Once you have completed these tasks, call the device policy manager's
-{@link android.app.admin.DevicePolicyManager#setProfileEnabled
-setProfileEnabled()} method to activate the managed profile:</p>
-
-
-<pre>// Get the device policy manager
-DevicePolicyManager myDevicePolicyMgr =
- (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
-
-ComponentName componentName = myDeviceAdminReceiver.getComponentName(this);
-
-// Set the name for the newly created managed profile.
-myDevicePolicyMgr.setProfileName(componentName, "My New Managed Profile");
-
-// ...and enable the profile
-manager.setProfileEnabled(componentName);</pre>
-
-<h2 id="set_up_policies">Set Up Device Policies</h2>
-
-<p>
- The device policy controller app is responsible for applying the enterprise's
- device policies. For example, a particular enterprise might require that all
- devices become locked after a certain number of failed attempts to enter the
- device password. The controller app queries the EMM to find out what
- the current policies are, then uses the <a href=
- "{@docRoot}guide/topics/admin/device-admin.html">Device Administration</a>
- API to apply those policies.
-</p>
-
-<p>For information on how to apply device policies, see the
-<a href="{@docRoot}guide/topics/admin/device-admin.html#policies">Device
-Administration</a> guide.</p>
-
-
-<h2 id="apply_restrictions">Apply App Restrictions</h2>
-
-<p>Enterprise environments may require that approved apps implement security
-or feature restrictions. App developers must implement these restrictions
-and declare them for use by enterprise administrators, as described in
-<a href="{@docRoot}training/enterprise/app-restrictions.html">Implementing
-App Restrictions</a>. The device policy controller receives restriction changes
-from the enterprise administrator, and forwards those restriction changes to the apps.</p>
-
-<p>For example, a particular news app might have a restriction setting that
-controls whether the app is allowed to download videos over a cellular
-network. When the EMM wants to disable cellular downloads, it sends a
-notification to the controller app. The controller app, in turn,
-notifies the news app that the restriction setting has changed.</p>
-
-<p class="note"><strong>Note:</strong> This document covers how the device policy
-controller app changes the restriction settings for the other apps on the
-managed profile. Details on how the device policy controller app communicates with
-the EMM are out of scope for this document.</p>
-
-<p>To change an app's restrictions, call the {@link
-android.app.admin.DevicePolicyManager#setApplicationRestrictions
-DevicePolicyManager.setApplicationRestrictions()} method. This method is passed
-three parameters: the controller app's {@link
-android.app.admin.DeviceAdminReceiver}, the package name of the app whose
-restrictions are being changed, and a {@link android.os.Bundle Bundle} that
-contains the restrictions you want to set.</p>
-
-<p>For example, suppose there's an app on the managed profile with the package
-name <code>"com.example.newsfetcher"</code>. This app has a single boolean
-restriction that can be configured, with the key
-<code>"downloadByCellular"</code>. If this restriction is set to
-<code>false</code>, the newsfetcher app is not allowed to download data through
-a cellular network; it must use a Wi-Fi network instead.</p>
-
-<p>
- If your device policy controller app needs to turn off cellular downloads, it
- would first fetch the device policy service object, as described above. It
- then assembles a restrictions bundle and passes this bundle to {@link
- android.app.admin.DevicePolicyManager#setApplicationRestrictions
- setApplicationRestrictions()}:
-</p>
-
-<pre>// Fetch the DevicePolicyManager
-DevicePolicyManager myDevicePolicyMgr =
- (DevicePolicyManager) thisActivity
- .getSystemService(Context.DEVICE_POLICY_SERVICE);
-
-// Set up the restrictions bundle
-bundle restrictionsBundle = new Bundle();
-restrictionsBundle.putBoolean("downloadByCellular", false);
-
-// Pass the restrictions to the policy manager. Assume the WPC app
-// already has a DeviceAdminReceiver defined (myDeviceAdminReceiver).
-myDevicePolicyMgr.setApplicationRestrictions(
- myDeviceAdminReceiver, "com.example.newsfetcher", restrictionsBundle);</pre>
-
-
-<p class="note"><strong>Note:</strong> The device policy service conveys the restrictions
-change to the app you name. However, it is up to that app to actually implement
-the restriction. For example, in this case, the app would be responsible for
-disabling its ability to use cellular networks for video downloads. Setting the
-restriction does not cause the system to enforce this restriction on the app.
-For more information, see <a href="{@docRoot}training/enterprise/app-
-restrictions.html">Implementing App Restrictions</a>.</p>
diff --git a/docs/html/training/training_toc.cs b/docs/html/training/training_toc.cs
index 2c0fb4e..e2aa5f4 100644
--- a/docs/html/training/training_toc.cs
+++ b/docs/html/training/training_toc.cs
@@ -1187,37 +1187,6 @@
</li>
<!-- End: Building for Auto -->
-
- <!-- Start: Building for Work -->
- <li class="nav-section">
- <div class="nav-section-header">
- <a href="<?cs var:toroot ?>training/enterprise/index.html">
- <span class="small">Building Apps for</span><br/>
- Work
- </a>
- </div>
- <ul>
- <li><a href="<?cs var:toroot ?>training/enterprise/app-compatibility.html">
- Ensuring Compatibility with Managed Profiles
- </a>
- </li>
- <li><a href="<?cs var:toroot ?>training/enterprise/app-restrictions.html">
- Implementing App Restrictions
- </a>
- </li>
- <li><a href="<?cs var:toroot ?>training/enterprise/work-policy-ctrl.html">
- Building a Device Policy Controller
- </a>
- </li>
- <li><a href="<?cs var:toroot ?>training/enterprise/cosu.html">
- Configuring Corporate-Owned, Single-Use Devices
- </a>
- </li>
- </ul>
- </li>
- <!-- End: Building for Work -->
-
-
<li class="nav-section">
<div class="nav-section-header">
<a href="<?cs var:toroot ?>training/best-ux.html">
@@ -2118,7 +2087,7 @@
</li>
<li>
- <a href="<?cs var:toroot ?>training/enterprise/device-management-policy.html"
+ <a href="<?cs var:toroot ?>work/device-management-policy.html"
description="How to create an application that enforces security policies on devices."
>Enhancing Security with Device Management Policies</a>
</li>
diff --git a/docs/html/wear/index.jd b/docs/html/wear/index.jd
index 62c0253..f5e9e87 100644
--- a/docs/html/wear/index.jd
+++ b/docs/html/wear/index.jd
@@ -68,14 +68,43 @@
</div>
</div> <!-- end .wrap -->
<div class="landing-scroll-down-affordance">
- <a class="landing-down-arrow" href="#extending-android-to-wearables">
+ <a class="landing-down-arrow" href="#next-section">
<img src="{@docRoot}wear/images/carrot.png" alt="Scroll down to read more">
</a>
</div>
</div> <!-- end .landing-section .landing-hero -->
- <div class="landing-rest-of-page">
+ <div class="landing-rest-of-page" id="next-section">
+
+
+ <section class="dac-expand dac-hero dac-light" style="background-color:#FFFFFF">
+ <div class="wrap" style="max-width:1100px;margin-top:0">
+ <div class="cols dac-hero-content" style="padding-bottom:1em;">
+
+ <div class="col-7of16 col-push-9of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android Wear 2.0 Developer Preview</h1>
+ <p class="dac-hero-description">
+ Get ready for the next version of Android Wear!
+ Support stand-alone Wear devices and apps.
+ Create enhanced user interaction and glanceable experiences.
+ Test your apps on Wear devices.
+ </p>
+
+ <a class="dac-hero-cta" href="{@docRoot}wear/preview/index.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Get started
+ </a>
+ </div>
+ <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <img class="dac-hero-image" src="{@docRoot}wear/preview/images/hero-1x.png"
+ srcset="{@docRoot}wear/preview/images/hero-1x.png 1x,
+ {@docRoot}wear/preview/images/hero-2x.png 2x">
+ </div>
+ </div>
+ </div>
+ </section>
+
<div class="landing-section" id="extending-android-to-wearables">
<div class="wrap">
<div class="landing-section-header">
diff --git a/docs/html/wear/preview/_book.yaml b/docs/html/wear/preview/_book.yaml
index a687294..a4acad0 100644
--- a/docs/html/wear/preview/_book.yaml
+++ b/docs/html/wear/preview/_book.yaml
@@ -10,21 +10,21 @@
section:
- title: Notification Improvements
path: /wear/preview/features/notifications.html
- - title: Input Method Framework
+ - title: Input Method Framework
path: /wear/preview/features/ime.html
- title: Complications
path: /wear/preview/features/complications.html
- - title: Wear Navigation and Actions
+ - title: Navigation and Actions
path: /wear/preview/features/ui-nav-actions.html
- title: Bridging for Notifications
path: /wear/preview/features/bridger.html
-- title: Downloads
- path: /wear/preview/downloads.html
-
- title: Get Started
path: /wear/preview/start.html
+- title: Download and Test
+ path: /wear/preview/downloads.html
+
- title: License Agreement
path: /wear/preview/license.html
diff --git a/docs/html/wear/preview/api-overview.jd b/docs/html/wear/preview/api-overview.jd
index bf18c16..05f1a06 100644
--- a/docs/html/wear/preview/api-overview.jd
+++ b/docs/html/wear/preview/api-overview.jd
@@ -12,28 +12,32 @@
<h2>Key developer features</h2>
<ol>
<ul style="list-style-type:none;">
- <li><a href="#stand-alone">Stand Alone Devices</a>
+ <li><a href="#ui">User Interface Improvements</a>
+ <ol>
+ <li><a href="#complications">Complications</a></li>
+ <li><a href="#drawers">Navigation and Action Drawers</a></li>
+ </ol>
+ </li>
+
+ <li><a href="#notify">Notifications and Input</a>
+ <ol>
+ <li><a href="#expanded">Expanded Notification</a></li>
+ <li><a href="#messaging">Messaging Style Notification</a></li>
+ <li><a href="#smart-replies">Smart Reply</a></li>
+ <li><a href="#content-action">Notification Content Action</a>
+ <li><a href="#remote-input">Remote Input</a></li>
+ <li><a href="#bridging">Bridging Mode</a></li>
+ <li><a href="#imf">Input Method Framework</a></li>
+ </ol>
+ </li>
+
+ <li><a href="#stand-alone">Standalone Devices</a>
<ol>
<li><a href="#wear-apk">Wear-Specific APKs</a></li>
<li><a href="#network">Network Access</a></li>
<li><a href="#auth">Authentication</a></li>
</ol>
</li>
- <li><a href="#notify">Notifications and Interactions</a>
- <ol>
- <li><a href="#appoid">Appoids with Chat Templates</a></li>
- <li><a href="#smart-replies">Smart Replies</a></li>
- <li><a href="#remote-input">Remote Input</a></li>
- <li><a href="#imf">Input Method Framework</a></li>
- </ol>
- </li>
- <li><a href="#ui">User Interface Improvements</a>
- <ol>
- <li><a href="#complicatiosn">Complications</a></li>
- <li><a href="#drawers">Navigation and Action Drawers</a></li>
- <li><a href="#button-loc">Button Locations</a></li>
- </ol>
- </li>
</ol>
</div>
</div>
@@ -47,78 +51,283 @@
</p>
-<h2 id="stand-alone">Stand Alone Devices</h2>
+<h2 id="ui">User Interface Improvements</h2>
-<p>Description of developer theme</p>
-
-<h3 id="wear-apk">Wear-Specific APKs</h3>
-
-<p>Description of feature</p>
-
-<p>Sample implementation of feature</p>
-
-<h3 id="network">Network Access</h3>
-
-<p>Description of feature</p>
-
-<p>Sample implementation of feature</p>
-
-<h3 id="auth">Authentication</h3>
-
-<p>Description of feature</p>
-
-<p>Sample implementation of feature</p>
+<p>The preview introduces powerful additions to the user interface, opening up
+exciting possibilities to developers.
+A complication is any feature in a watch face that displays more than hours and
+minutes. With the Complications API,
+ watch faces can display extra information and separate apps can expose complication
+ data.
+The navigation and action drawers provide users with new ways to interact with apps.
+</p>
+<h3 id="complications">Complications</h3>
+<img src="{@docRoot}wear/preview/images/complications-main-image.png"
+ height="320" style="float:right;margin:10px 0 0 40px" />
-<h2 id="notify">Notifications and Interactions</h2>
+<p>
+ A <a href=
+ "https://en.wikipedia.org/wiki/Complication_(horology)">complication</a> is a
+ feature of a watch face that displays more than hours and minutes, such as a
+ battery indicator or a step counter. The Complications API helps watch face
+ developers create these features visual features and data connections they
+ require.
+</p>
-<p>Description of developer theme</p>
+<p>
+ Watch faces that use this API can display extra information without needing
+ code for getting the underlying data. Data providers can supply data to any
+ watch face using the API.
+</p>
-<h3 id="appoid">Appoids with Chat Templates</h3>
+<p>For examples of how to use this feature,
+see <a href="{@docRoot}wear/preview/features/complications.html">
+ Watch Face Complications</a>.
+</p>
-<p>Description of feature</p>
-<p>Sample implementation of feature</p>
+<h3 id="drawers">Navigation and Action drawers</h3>
-<h3 id="smart-replies">Smart Replies</h3>
+<p>Wear 2.0 introduces two new widgets, navigation drawer and action drawer. These
+ widgets give your users new ways to interact with your app. The navigation drawer
+ appears at the top of the screen and allows users to navigate between app views.
+ The action drawer appears at the bottom of the screen and allows users to choose
+ from a list of actions associated with the current usage context. These drawers
+ are accessible to users when they edge swipe from the top or bottom of the
+ screen; they peek when users scroll in an opposite direction.
+</p>
-<p>Description of feature</p>
+<div class="cols">
+ <div class="col-2of6">
+ <img src="{@docRoot}wear/preview/images/nav_drawer.gif"
+ height="240" alt="" style="padding:.5em">
+ </div>
+ <div class="col-2of6">
+ <img src="{@docRoot}wear/preview/images/action_drawer.gif"
+ height="240" alt="" style="padding:.5em;">
+ </div>
+</div>
-<p>Sample implementation of feature</p>
+<p>
+ To learn how to add these widgets to your app, see
+ <a href="{@docRoot}wear/preview/features/ui-nav-actions.html">
+ Wear Navigation and Actions</a>.
+</p>
+
+
+<h2 id="notify">Notifications and Input</h2>
+
+<p>In Wear 2.0, we’ve redesigned the key experiences on the watch to be even more
+ intuitive and provide users new ways to respond to messages. Some of the highlights
+ are below; for a complete list of changes, see
+ <a href="{@docRoot}wear/preview/features/notifications.html">Notification Changes in Wear 2.0</a>.
+
+
+<img src="{@docRoot}wear/preview/images/expanded_diagram.png" height="340"
+ style="float:left;margin:10px 20px 0 0" />
+<h3 id="expanded">Expanded notifications</h3>
+
+<p>
+ When a user taps on a notification that is bridged from the phone to the
+ watch or that lacks a
+ <a href="{@docRoot}reference/android/support/v4/app/NotificationCompat.Builder.html#setContentIntent(android.app.PendingIntent)">
+ {@code contentIntent}</a>, the user will be taken to the expanded view of
+ that notification. When you <a href=
+ "{@docRoot}training/wearables/notifications/pages.html">specify additional
+ content pages</a> and actions for a notification, those are available to the
+ user within the expanded notification. Each expanded notification follows
+ <a href="https://google.com/design/wear">Material Design for Android
+ Wear</a>, so the user gets an app-like experience.
+</p>
+
+
+<h3 id="messaging">Messaging Style notification</h3>
+<p> If you have a chat messaging app, your notifications should use
+{@code Notification.MessagingStyle}, which is new in Android 6.0. Wear 2.0 uses
+the chat messages included in a
+<a href="{docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a>
+ notification
+(see {@code addMessage()}) to provide a rich chat app-like experience in the
+expanded notification.
+</p>
+
+
+<h3 id="smart-replies">Smart Reply</h3>
+
+<p>Android Wear 2.0 introduces support for Smart Reply in
+<a href="{@docRoot}wear/preview/features/notifications.html#messaging">{@code MessagingStyle}</a>
+ notifications. Smart Reply provides the user with contextually relevant,
+ touchable choices in the expanded notification and in
+ <a href="{@docRoot}reference/android/app/RemoteInput.html">{@code RemoteInput}</a>.
+</p>
+
+<p>By enabling Smart Reply for your {@code MessagingStyle} notifications, you provide
+users a fast (single tap), discreet (no speaking aloud), and reliable way to respond
+ to chat messages they receive.
+ </p>
+
+
+<img src="{@docRoot}wear/preview/images/remoteinput.png" height="350"
+ style="float:right;margin:10px 0 0 40px" />
<h3 id="remote-input">Remote Input</h3>
-<p>Description of feature</p>
+<p>Wear 2.0 users can choose between various input options from
+<a href="{@docRoot}reference/android/app/RemoteInput.html">Remote Input</a>.
+ These options include:
+</p>
+<ul>
+<li>Dictation</li>
+<li>Emoji</li>
+<li>Canned responses</li>
+<li>Smart Reply</i>
+<li>Default IME </i>
+</ul>
-<p>Sample implementation of feature</p>
+<p>
+For messaging notifications with Smart Reply, the system-generated Smart Reply
+ appears within <a href="{@docRoot}reference/android/app/RemoteInput.html">{@code RemoteInput}</a>
+ above the developer-provided list of canned responses.
+ You can also use the
+ <a href="{@docRoot}reference/android/app/RemoteInput.Builder.html#setChoices(java.lang.CharSequence[])">setChoices()</a>
+ method in the {@code RemoteInput} API to enable users to select from a list
+ of canned responses.
+</p>
+
+<h3 id="bridging"> Bridging Mode </h3>
+<p>By default, notifications are
+<a href="{@docRoot}training/wearables/notifications/index.html">
+bridged</a> (shared) from an app on a companion phone
+to the watch. Since a phone app and a standalone watch app may be sources of the
+ same notifications, the Android Wear 2.0 Preview includes a Bridging mode feature.
+ Developers can begin planning to change the behavior of notifications with the
+ following:
+</p>
+
+<ul>
+<li>Specifying in the standalone app's Android manifest file that notifications from
+ the corresponding phone app should not be bridged to the watch. </li>
+<li>Setting a dismissal ID so notification dismissals (by users) are synced across
+devices.</li>
+</ul>
+
+<p>For an example of how to use this feature, see <a href="{@docRoot}wear/preview/features/bridger.html">
+Bridging Mode for Notifications</a>.</p>
<h3 id="imf">Input Method Framework</h3>
-<p>Description of feature</p>
+<p>Wear 2.0 extends the Android input method framework (IMF) to Android Wear.
+This allows users to enter text on Wear using the system default IME or third party
+ IMEs. The Wear IME lets the user enter text via gesture typing as well as tapping
+ individual keys. The IMF APIs used for Wear devices are the same as other form
+ factors, though usage is slightly different due to limited screen real estate.
+</p>
-<p>Sample implementation of feature</p>
+<p>Wear provides user settings on the watch that let the user:</p>
+<ul>
+<li>Enable multiple IMEs from the list of installed IMEs.</li>
+<li>Set a single default IME from the list of enabled IMEs.</li>
+<li>Change languages for various IMEs.</li>
+</ul>
+
+<p>To learn how to create an IME for Wear, see <a href="{@docRoot}wear/preview/features/ime.html">
+Input Method Framework</a>.
+</p>
+
+
+<h2 id="stand-alone">Standalone Devices</h2>
+
+<p>Standalone watches will enable Android Wear apps to work independently of phone
+ apps. This means your app can continue to offer full functionality even if the
+ paired phone is far away or turned off. </p>
+
+<h3 id="wear-apk">Wear-Specific APKs</h3>
+
+<p>For delivery to a watch, an Android Wear app is currently embedded in its corresponding
+phone app. This delivery method can result in an increased download size for users,
+ regardless of whether they have an Android Wear device.
+</p>
+
+<p>With standalone devices, the
+<a href ="{@docRoot}google/play/publishing/multiple-apks.html">Multi-APK</a>
+ delivery method will be used. Developers will have the ability to release Android
+ Wear apps independently of the corresponding phone apps. Please stay tuned for
+ more information about this change.
+</p>
+
+<h3 id="network">Network Access</h3>
+
+<p>Since Android Wear apps will work independently of phone apps, Android Wear's
+ network access will no longer require the
+ <a href="{@docRoot}training/wearables/data-layer/index.html">
+ Wearable Data Layer API</a>. Android Wear apps will have the ability to make
+ their own network requests. Additionally, they will be able to directly use
+ Google Cloud Messaging.
+</p>
+
+<p>No APIs for network access or GCM are specific to Android Wear; refer to the
+existing documentation about
+<a href="{@docRoot}training/basics/network-ops/connecting.html">
+Connecting to the Network</a> and
+<a href="https://developers.google.com/cloud-messaging/">Cloud Messaging</a>.
+</p>
+
+<p>We recommend using the following libraries:</p>
+<ul>
+<li><a href="{@docRoot}reference/android/app/job/JobScheduler.html">
+JobScheduler</a> for asynchronous jobs, including polling at regular intervals
+</li>
+<li>Multi-networking APIs if you need to connect to specific network types; see
+the <a href="{@docRoot}about/versions/android-5.0.html#Wireless">
+Multiple Network Connections</a>
+</li>
+</ul>
+
+<p>You will still be able to use the
+<a href="{@docRoot}training/wearables/data-layer/index.html">
+ Wearable Data Layer API</a> to communicate with a phone app.
+ However, use of this API to connect to a network will be discouraged.
+ </p>
+
+
+<h3 id="auth">Authentication</h3>
+
+<p>Since Android Wear apps will work independently of phone apps, Android Wear's
+ authentication capabilities will be more powerful; apps will have new ways to
+ authenticate.</p>
+
+ <h4> Authentication tokens can be passed over the Wearable Data Layer </h4>
+
+<p>For Android-paired watches (only), the phone will securely transfer authentication
+ data to a watch app via the
+ <a href="{@docRoot}training/wearables/data-layer/index.html">
+ Wearable Data Layer API</a>. The data can be transferred as
+ Messages or Data Items. </p>
+
+<p>If your watch app needs to determine if your phone app is installed, you can
+advertise a capability on the phone app and retrieve the capability on the watch.
+ For more information, see following sections of
+ <a href="{@docRoot}training/wearables/data-layer/messages.html">
+ Sending and Receiving Messages</a>:
+ <ul>
+ <li>Advertise Capabilities</li>
+ <li>Retrieve the Nodes with the Required Capabilities</li>
+ </ul>
+<h4>Users can enter a username and password on a watch</h4>
+
+<p>Google Keyboard will be standard on Android Wear, allowing for direct text entry.
+ This feature will work as expected with standard
+ <a href="{@docRoot}reference/android/widget/EditText.html">
+ EditText widgets</a>. For passwords, the {@code textPassword} attribute will be
+ used.
+
+<h4>Utilizing Account Manager</h4>
+Android Wear will include the <a href="{@docRoot}reference/android/accounts/AccountManager.html">
+AccountManager</a>, which will be accessible for syncing and storing account
+ data, as it is on an Android phone.
+</p>
-<h2 id="ui">User Interface Improvements</h2>
-
-<p>Description of developer theme</p>
-
-<h3 id="complicatiosn">Complications</h3>
-
-<p>Description of feature</p>
-
-<p>Sample implementation of feature</p>
-
-<h3 id="drawers">Navigation and Action Drawers</h3>
-
-<p>Description of feature</p>
-
-<p>Sample implementation of feature</p>
-
-<h3 id="button-loc">Button Locations</h3>
-
-<p>Description of feature</p>
-
-<p>Sample implementation of feature</p>
diff --git a/docs/html/wear/preview/downloads.jd b/docs/html/wear/preview/downloads.jd
index eea4f11..b119d57 100644
--- a/docs/html/wear/preview/downloads.jd
+++ b/docs/html/wear/preview/downloads.jd
@@ -1,9 +1,10 @@
page.title=Download and Test with a Device
meta.keywords="wear-preview"
page.tags="wear-preview"
-page.image=images/cards/card-n-sdk_2x.png
+page.image=images/cards/card-n-downloads_2x.png
@jd:body
+
<div style="position:relative; min-height:600px">
<div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
@@ -192,17 +193,17 @@
</ul>
<p>
- If you want an environment for basic <strong>compatibility
- testing</strong> of your app, you can use your current APK and a
+ If you want an environment for basic compatibility
+ testing of your app, you can use your current APK and a
supported watch or an emulator. As described below, you don't necessarily
need to update your full development environment to do basic testing.
</p>
<p>
- However, if you want to <strong>modify</strong> your app to target
+ However, if you want to modify your app to target
Android Wear 2.0 or use new APIs, you need to update your development
environment. See <a href="{@docRoot}wear/preview/start.html">Get Started
- with the Android Wear 2.0 Preview</a>.
+ with the Preview</a>.
</p>
<h2 id="set_up_a_watch">
@@ -211,7 +212,7 @@
<p>
You can download a system image and manually flash it to a matching
- watch. See the table below to download the system image for your test
+ watch. See the table below to download the image for your test
watch.
</p>
@@ -221,9 +222,9 @@
testing.
</p>
- <p>
- Installing a system image on a watch <strong>removes all data from the
- watch</strong>, so you should back up your data first.
+ <p class="warning">
+ <strong>Warning:</strong> Installing a system image on a watch removes all data from the
+ watch, so you should back up your data first.
</p>
<h3 id="preview_system_images">
@@ -240,78 +241,79 @@
Preview image for LGE Watch Urbane 2nd Edition
</h4>
- <p>
- <strong>Please note the following:</strong>
- Flashing your device will
+ <p class="caution">
+ <strong>Caution:</strong> Flashing your device will
require unlocking the bootloader which may
void the device's warranty--proceed at your own risk.
</p>
<table>
<tr>
- <th scope="col">
+ <th style="width:300px">
Type of LGE Watch Urbane 2nd Edition image
</th>
- <th scope="col">
+ <th>
Download/Checksums
</th>
</tr>
- <tr id="download-3-placeholder">
+
+ <tr id="nemo-preview">
<td>
Preview image for testing
</td>
- <td><a href="#top" onclick="onDownload(this)">download-3-placeholder.tgz</a><br>
- MD5: [string]<br>
- SHA-1: [string]
+ <td><a href="#top" onclick="onDownload(this)">nemo-nvd36i-factory-9cdd2ac0.tgz</a><br>
+ MD5: b33ba8e59780fbe5c83d8936b108640f<br>
+ SHA-1: 9cdd2ac01f2976cafe5a21958298dac159b7a325
</td>
</tr>
- <tr id="download-4-placeholder">
+
+ <tr id="nemo-non-preview">
<td>
Non-preview image (for after testing)
</td>
- <td><a href="#top" onclick="onDownload(this)">download-4-placeholder.tgz</a><br>
- MD5: [string]<br>
- SHA-1: [string]
+ <td><a href="#top" onclick="onDownload(this)">nemo-mnc40x-factory-fa528bec.tgz</a><br>
+ MD5: 0b8ba3653d5a93cb854f4d7409d7b6c9<br>
+ SHA-1: fa528bec8aba3bf6c7d901ba63cd6ea0a08dbeb0
</td>
</tr>
+
</table>
<h4 id="preview_image_for_huawei_watch">
Preview image for Huawei Watch
</h4>
- <p>
- <strong>Please note the following:</strong>
- Flashing your device will require unlocking
+ <p class="caution">
+ <strong>Caution:</strong> Flashing your device will require unlocking
the bootloader which
shall void the device's warranty--proceed at your own risk.
</p>
<table>
<tr>
- <th scope="col">
+ <th style="width:300px">
Type of Huawei Watch image
</th>
- <th scope="col">
+ <th>
Download/Checksums
</th>
</tr>
- <tr id="download-1-placeholder">
+ <tr id="sturgeon-preview">
<td>
Preview image for testing
</td>
- <td><a href="#top" onclick="onDownload(this)">download-1-placeholder.tgz</a><br>
- MD5: [string]<br>
- SHA-1: [string]
+ <td><a href="#top" onclick="onDownload(this)">sturgeon-nvd36i-factory-2cbe5080.tgz</a><br>
+ MD5: ccc972cdc33cba778a2f624066ef5713<br>
+ SHA-1: 2cbe5080ded060ce43ba65ff27e2290b28981634
</td>
</tr>
- <tr id="download-2-placeholder">
+ <tr id="sturgeon-non-preview">
<td>
Non-preview image (for after testing)
</td>
- <td><a href="#top" onclick="onDownload(this)">download-2-placeholder.tgz</a><br>
- MD5: [string]<br>
- SHA-1: [string]
+ <td><a href="#top" onclick="onDownload(this)">sturgeon-mec23l-factory-48003078.tgz</a><br>
+ MD5: 417b5cbddb29a2262bce133e283d2732<br>
+ SHA-1: 4800307843580f818557dd7c43d8ba2161e289b2
</td>
</tr>
</table>
@@ -323,18 +325,24 @@
<p>
The steps for flashing an image to a watch are similar to the <a href=
"https://developers.google.com/android/nexus/images">steps provided for
- flashing to a phone</a>. After you <strong>back up your watch
- data</strong>, use steps in this section to flash the image to the
- <strong>specific watch</strong> that matches the image (e.g., you must
+ flashing to a phone</a>. After you back up your watch
+ data, use steps in this section to flash the image to the
+ specific watch that matches the image (e.g., you must
use an LGE Watch Urbane 2nd Edition for the corresponding image).
</p>
+ <p class="warning">
+ <strong>Warning:</strong> Installing a system image on a watch removes all data from the
+ watch, so you should back up your data first.
+ </p>
+
<h4 id="set_up_the_watch_to_be_flashed">
Set up the watch to be flashed
</h4>
<p>
- On the watch, enable the Developer Options menu and ADB debugging as
+ From the phone, unpair ("Forget") the watch.
+ Then on the watch, enable the Developer Options menu and ADB debugging as
follows:
</p>
@@ -386,8 +394,8 @@
</p>
<ol>
- <li>Download and unzip the appropriate system image from the "Preview
- system image" column in the <a href="#preview_system_images">table
+ <li>Download and unzip the appropriate system image from a "Preview
+ image for testing" row in a <a href="#preview_system_images">table
above</a>.
</li>
@@ -404,9 +412,9 @@
<code>adb reboot bootloader</code>
</li>
- <li>If necessary, use <strong>one</strong> of following two commands to
- unlock the device's bootloader. This step <strong>erases all data on the
- device</strong>: <code>fastboot flashing unlock</code> or, for some
+ <li>If necessary, use one of following two commands to
+ unlock the device's bootloader. This step erases all data on the
+ device: <code>fastboot flashing unlock</code> or, for some
devices, <code>fastboot oem unlock</code>
</li>
@@ -420,8 +428,43 @@
</li>
</ol>
+
+ <h4 id="set_up_watch">
+ Set up the watch and begin testing
+ </h4>
+
+ <p>
+ After the <code>flash-all</code> script finishes, your watch reboots
+ and soon will be ready for testing with the preview image.
+ </p>
+
+ <ol>
+ <li>Attach the watch charger to the watch and plug the USB cord
+ into your computer, if it is not already plugged in.
+ </li>
+
+ <li>Use the following <a href="{@docRoot}tools/help/adb.html">adb
+ command</a> to confirm that the watch is available:
+ <code>adb devices</code>
+ </li>
+
+ <li>Use the following adb command to start the device in fastboot mode:
+ <code>adb reboot bootloader</code>
+ </li>
+
+ <li>Use the following command to
+ lock the device's bootloader: <code>fastboot flashing lock</code> or, for some
+ devices, <code>fastboot oem lock</code>
+ </li>
+
+ <li>On the watch, continue the boot by touching <strong>'0'</strong>.
+ </li>
+
+ </ol>
+
+
<p>
- After the script finishes, your watch reboots. Pair the watch with a
+ Pair the watch with a
phone or tablet. The preview now is available for testing on the watch.
Before installing an app, enable the Developer Options menu, and ADB
debugging, on the watch as follows:
@@ -477,20 +520,21 @@
<p>
When testing is completed, follow the steps for <a href=
- "#uninstall_the_preview_from_a_watch">uninstalling the preview</a>.
+ "#remove_the_preview_from_a_watch">removing the preview</a>.
</p>
- <h3 id="uninstall_the_preview_from_a_watch">
- Uninstall the preview from a watch
+ <h3 id="remove_the_preview_from_a_watch">
+ Remove the preview from a watch
</h3>
<p>
- When testing with the preview is done, restore the watch as follows:
+ When testing with the preview is done, unpair ("Forget") the watch from the phone and
+ restore the watch as follows:
</p>
<ol>
- <li>Download and unzip the appropriate system image from the "Non-preview
- system image" column in the <a href="#preview_system_images">table
+ <li>Download and unzip the appropriate system image from a "Non-preview
+ image" row in a <a href="#preview_system_images">table
above</a>.
</li>
@@ -523,8 +567,10 @@
<li>Click <strong>Create Virtual Device</strong>.
</li>
- <li>In the <strong>Category</strong> pane, select Wear, choose a name
- (such as Android Wear Round), and click <strong>Next</strong>.
+ <li>In the <strong>Category</strong> pane, select Wear, choose a hardware profile,
+ and click <strong>Next</strong>. The Android Wear 2.0 Developer Preview
+ is only optimized for round devices currently, so we recommend not
+ using the square or chin profiles for now.
</li>
<li>Select an <strong>N</strong> image to download. The images may be on
@@ -554,7 +600,7 @@
<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/wear/preview/";
+ var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/wear-preview/";
function onDownload(link) {
$("#downloadForRealz").html("Download " + $(link).text());
diff --git a/docs/html/wear/preview/features/bridger.jd b/docs/html/wear/preview/features/bridger.jd
index 4f0d76b..b7be093 100644
--- a/docs/html/wear/preview/features/bridger.jd
+++ b/docs/html/wear/preview/features/bridger.jd
@@ -1,7 +1,7 @@
page.title=Bridging Mode for Notifications
meta.keywords="wear-preview"
page.tags="wear-preview"
-page.image=images/cards/card-n-sdk_2x.png
+
@jd:body
<div id="qv-wrapper">
@@ -25,22 +25,21 @@
<p>
By default, notifications <a href=
"{@docRoot}training/wearables/notifications/index.html">are bridged
- (shared)</a> from an app on a companion phone to the watch. Standalone
- Android Wear apps are planned for Android Wear 2.0. Therefore, a phone
- app and a standalone watch app may be sources of the same notifications.
- The Android Wear 2.0 Preview includes a Bridging mode feature to handle
- this problem of duplicate notifications.
+ (shared)</a> from an app on a companion phone to the watch. If you build
+ a standalone watch app and have a companion phone app, they may duplicate
+ notifications. The Android Wear 2.0 Preview includes a Bridging mode
+ feature to handle this problem of repeated notifications.
</p>
<p>
- With the Android Wear 2.0 Preview, developers can plan to change the
+ With the Android Wear 2.0 Preview, developers can change the
behavior of notifications with the following:
</p>
<ul>
<li>Specifying in the standalone app's Android manifest file that
- notifications from the corresponding phone app should <strong>not be
- bridged</strong> to the watch
+ notifications from the corresponding phone app should not be
+ bridged to the watch
</li>
<li>Setting a dismissal ID so notification dismissals are synced across
@@ -53,14 +52,15 @@
</h2>
<p>
- To prevent bridging of notifications from a phone app, you can use a
+ To prevent bridging of notifications from a phone app, you can use an
entry in the manifest file of the watch app (e.g. the standalone watch
app), as follows:
</p>
<pre>
com.google.android.wearable.notificationBridgeMode
-</pre>
+ </pre>
+
<p>
Setting that entry to <code>NO_BRIDGING</code> will prevent bridging:
</p>
@@ -96,7 +96,7 @@
</p>
<p>
- Thus, if bridging should be prevented <strong>when</strong> the watch app
+ Thus, if bridging should be prevented when the watch app
is installed, use the <a href=
"#preventing_bridging_with_the_bridging_mode_feature">Bridging mode
feature</a>.
@@ -118,7 +118,7 @@
<pre>
public WearableExtender setDismissalId(String dismissalId)
public String getDismissalId()
-</pre>
+ </pre>
<p>
To enable a dismissal to be synced, use the <code>setDismissalId()</code>
method. For each notification, pass a globally unique ID, as a string,
@@ -140,7 +140,7 @@
<set other fields>
.extend(wearableExtender)
.build();
-</pre>
+ </pre>
<p>
Dismissal IDs work if a watch is paired to an Android phone, but not if a
watch is paired to an iPhone.
diff --git a/docs/html/wear/preview/features/complications.jd b/docs/html/wear/preview/features/complications.jd
index 155f733..a0157de 100644
--- a/docs/html/wear/preview/features/complications.jd
+++ b/docs/html/wear/preview/features/complications.jd
@@ -1,46 +1,52 @@
page.title=Watch Face Complications
meta.keywords="wear-preview"
page.tags="wear-preview"
-page.image=images/cards/card-n-sdk_2x.png
-
+page.image=/wear/preview/images/complications-main-image.png
@jd:body
<div id="qv-wrapper">
<div id="qv">
- <ol>
+ <h2>In this document</h2>
+ <ol>
<li>
- <a href=
- "#adding_complications_to_a_watch_face">Adding Complications to a Watch Face</a>
+ <a href="#adding_complications_to_a_watch_face">Adding
+ Complications to a Watch Face</a>
</li>
<li>
- <a href=
- "#exposing_data_to_complications">Exposing Data to Complications</a>
+ <a href="#exposing_data_to_complications">Exposing Data to
+ Complications</a>
</li>
<li>
- <a href=
- "#using_complication_types">Using Complication Types</a>
+ <a href="#using_complication_types">Using Complication Types</a>
</li>
<li>
- <a href=
- "#using_fields_for_complication_data">Using Fields for Complication Data</a>
+ <a href="#using_fields_for_complication_data">Using Fields for
+ Complication Data</a>
</li>
<li>
- <a href=
- "#api_additions">API Additions</a>
+ <a href="#api_additions">API Additions</a>
</li>
- </ol>
+ </ol>
+ <h2>See Also</h2>
+ <ol>
+ <li><a class="external-link"
+ href="https://github.com/googlesamples/android-WatchFace">Watch
+ Face sample app with complications</a></li>
+ </ol>
</div>
</div>
<p>
- A complication is a feature of a watch face <a href=
- "https://en.wikipedia.org/wiki/Complication_(horology)">beyond hours and
- minutes</a>. For example, a battery indicator is a complication.
+ A complication is any feature in a watch face that displays <a href=
+ "https://en.wikipedia.org/wiki/Complication_(horology)">more than hours and
+ minutes</a>. For example, a battery indicator is a complication. The
+ Complications API is for both watch faces and data provider apps.
</p>
- <p>
- The Complications API is for both watch faces and data provider apps.
- </p>
+ <div class="col-4of10">
+ <img src="../images/complications-main-image.png" alt="Complications"
+ id="img-split-screen">
+ </div>
<p>
Watch faces can display extra information without needing code for
@@ -50,6 +56,36 @@
</p>
<p>
+ Along with reviewing this page, download the Android Wear 2.0 Preview
+ Reference (see the Complications API <a href=
+ "#api_additions">additions</a>) and review the Javadoc for complications.
+ </p>
+
+ <p>
+ Apps that provide data to watch faces for complications are called
+ "complication data providers." These apps are not responsible for controlling
+ how their data is rendered on the watch face.
+ This allows a watch face to integrate the data naturally with the
+ watch face design.
+ The consuming watch faces are responsible for drawing
+ the complications.
+ </p>
+
+ <p>
+ Watch faces can receive complication data of
+ <a href="#using_complication_types">various types</a> (e.g. small text
+ data or icon data) and then display it.
+ </p>
+
+ <p>
+ As indicated in the diagram below, Android Wear mediates the flow of data
+ from providers to watch faces.
+ </p>
+
+ <img src="../images/complications-data-flow.png" width="" alt=
+ "Complications data flow" title="Complications data flow">
+
+ <p>
For creating or modifying watch faces, see <a href=
"#adding_complications_to_a_watch_face">Adding complications to a watch
face</a>.
@@ -60,33 +96,6 @@
"#exposing_data_to_complications">Exposing data to complications</a>.
</p>
- <p>
- Along with reviewing this page, download the Android Wear 2.0 Preview
- Reference and review the <a href="#api_additions">API additions</a> in
- the Javadoc for complications.
- </p>
-
- <p>
- Apps that provide data to watch faces for complications are called
- "complication data providers." These apps lack control over how their
- data is rendered. The consuming watch faces are responsible for drawing
- the complications.
- </p>
-
- <p>
- As indicated in the diagram below, Android Wear mediates the flow of data
- from providers to watch faces.
- </p>
-
- <img src="../images/complications-data-flow.png" width="" alt="Complications data flow" title=
- "Complications data flow">
-
- <p>
- Through this process, watch faces can receive complication data of
- <a href="#using_complication_types">various types</a> (e.g. small text
- data or icon data) and then display it.
- </p>
-
<h2 id="adding_complications_to_a_watch_face">
Adding Complications to a Watch Face
</h2>
@@ -205,15 +214,17 @@
<p>
The service's manifest entry should also include an
<code>android:icon</code> attribute. The provided icon should be a
- single-color white icon. This icon should represent the provider and will
- be shown in the provider chooser.
+ single-color white icon. Vector drawables are recommended for the icons.
+ An icon should represent the provider and will be shown in the provider
+ chooser.
</p>
<p>
Include metadata to specify the supported types, update period, and
configuration action, if required; for details, download the Android Wear
2.0 Preview Reference and see the keys listed for the
- <code>ComplicationProviderService</code> class (in the Javadoc).
+ <code>ComplicationProviderService</code> class (in the Javadoc; see
+ <a href="#api_additions">API Additions</a>).
</p>
<h3 id="update_period">
@@ -266,11 +277,7 @@
<p>
Then create the configuration activity with an intent filter for that
action. The configuration activity must reside in the same package as the
- provider.
- </p>
-
- <p>
- The configuration activity must return <code>RESULT_OK</code> or
+ provider. The configuration activity must return <code>RESULT_OK</code> or
<code>RESULT_CANCELED</code>, to tell the system whether the provider
should be set.
</p>
@@ -281,14 +288,15 @@
</p>
<p>
- For details, download the Android Wear 2.0 Preview Reference, containing
- the Javadoc, and see the following in the
- <code>ComplicationProviderService</code> class:
+ For details, download the Android Wear 2.0 Preview Reference (see
+ <a href="#api_additions">API Additions</a>), containing the Javadoc, and
+ see the following in the <code>ComplicationProviderService</code> class:
</p>
<pre>
METADATA_KEY_PROVIDER_CONFIG_ACTION
-</pre>
+ </pre>
+
<h2 id="using_complication_types">
Using Complication Types
</h2>
@@ -340,6 +348,16 @@
gauges can be shown without including text.
</p>
+ <h3 id="examples_of_complication_types">
+ Examples of Complication Types
+ </h3>
+
+ <p>
+ The following shows examples of complication types:
+ </p>
+ <img src="../images/complication-type-exs.png" width="" alt=
+ "Complication types" title="Complications types - examples">
+
<h3 id="types_and_fields">
Types and fields
@@ -352,16 +370,16 @@
<table>
<tr>
- <th scope="col">
+ <th>
Type
</th>
- <th scope="col">
+ <th>
Required fields
</th>
- <th scope="col">
+ <th>
Optional fields
</th>
- <th scope="col">
+ <th>
Notes
</th>
</tr>
@@ -374,7 +392,8 @@
Short text
</td>
<td>
- IconShort title
+ Icon<br>
+ Short title
</td>
<td>
Exactly one of Icon/Short title is expected to be shown if either or
@@ -384,37 +403,6 @@
<tr>
<td>
- LONG_TEXT
- </td>
- <td>
- Long text
- </td>
- <td>
- Long titleIcon*Small image
- </td>
- <td>
- Title is expected to be shown if provided.
- </td>
- </tr>
-
- <tr>
- <td>
- RANGED_VALUE
- </td>
- <td>
- ValueMin valueMax value
- </td>
- <td>
- IconShort textShort title
- </td>
- <td>
- Optional fields are not guaranteed to be displayed. Uses include for
- numerical data within bounds, such as for a percentage.
- </td>
- </tr>
-
- <tr>
- <td>
ICON
</td>
<td>
@@ -430,6 +418,42 @@
<tr>
<td>
+ RANGED_VALUE
+ </td>
+ <td>
+ Value<br>
+ Min value<br>
+ Max value
+ </td>
+ <td>
+ Icon<br>
+ Short text<br>
+ Short title
+ </td>
+ <td>
+ Optional fields are not guaranteed to be displayed.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
+ LONG_TEXT
+ </td>
+ <td>
+ Long text
+ </td>
+ <td>
+ Long title<br>
+ Icon<br>
+ Small image
+ </td>
+ <td>
+ Title is expected to be shown if provided.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
SMALL_IMAGE
</td>
<td>
@@ -467,16 +491,16 @@
<table>
<tr>
- <th scope="col">
+ <th>
Type
</th>
- <th scope="col">
+ <th>
Required fields
</th>
- <th scope="col">
+ <th>
Optional fields
</th>
- <th scope="col">
+ <th>
Notes
</th>
</tr>
@@ -514,16 +538,6 @@
</tr>
</table>
- <h3 id="examples_of_complication_types">
- Examples of Complication Types
- </h3>
- <p>
- The following shows examples of complication types:
- </p>
-
- <img src="../images/complication-type-exs.png" width=""
- alt="Complication types" title="Complications types - examples">
-
<h2 id="using_fields_for_complication_data">
Using Fields for Complication Data
</h2>
@@ -543,10 +557,10 @@
<table>
<tr>
- <th scope="col">
+ <th>
Field
</th>
- <th scope="col">
+ <th>
Description
</th>
</tr>
@@ -563,11 +577,21 @@
<tr>
<td>
+ Icon
+ </td>
+ <td>
+ A single-color image representing the data or the source of the data.
+ Must be tintable. Vector drawables are recommended for this field.
+ </td>
+ </tr>
+
+ <tr>
+ <td>
Short title
</td>
<td>
- Descriptive field for small complications.Should not exceed 7
- characters.May only be meaningful in combination with <em>Short
+ Descriptive field for small complications. Should not exceed 7
+ characters. May only be meaningful in combination with <em>Short
text</em>.
</td>
</tr>
@@ -586,7 +610,7 @@
Long title
</td>
<td>
- Descriptive field for large, text-based complications.May only be
+ Descriptive field for large, text-based complications. May only be
meaningful in combination with <em>Long text</em>.
</td>
</tr>
@@ -596,7 +620,7 @@
Value
</td>
<td>
- A numerical (float) representation of the data.Expected to be
+ A numerical (float) representation of the data. Expected to be
depicted relative to the bounds the <em>Min value</em> and <em>Max
value</em> fields (but not required to be between those bounds).
</td>
@@ -608,7 +632,7 @@
</td>
<td>
The lower bound for the range within which <em>Value</em> should be
- depicted.Only meaningful in combination with <em>Value</em> and
+ depicted. Only meaningful in combination with <em>Value</em> and
<em>Max value</em>.
</td>
</tr>
@@ -619,28 +643,18 @@
</td>
<td>
The upper bound for the range within which <em>value</em> should be
- depicted.Only meaningful in combination with <em>Value</em> and
+ depicted. Only meaningful in combination with <em>Value</em> and
<em>Min value</em>.
</td>
</tr>
<tr>
<td>
- Icon
- </td>
- <td>
- A single-color image representing the data or the source of the
- data.Must be tintable.
- </td>
- </tr>
-
- <tr>
- <td>
Small image
</td>
<td>
- A small image to represent the data or the source of the data.May be
- full color.Not expected to fill the entire watch face.
+ A small image to represent the data or the source of the data. May be
+ full color. Not expected to fill the entire watch face.
</td>
</tr>
@@ -649,7 +663,7 @@
Large image
</td>
<td>
- An image with sufficient resolution to fill the watch face.May be
+ An image with sufficient resolution to fill the watch face. May be
full color.
</td>
</tr>
@@ -681,8 +695,10 @@
</h2>
<p>
- The Complications API includes the following new classes in the Wearable
- Support Library:
+ The Complications API includes new classes in the Wearable Support
+ Library. For more information, download the <a href=
+ "{@docRoot}wear/preview/start.html#get_the_preview_reference_documentation">
+ Android Wear 2.0 Preview Reference</a>.
</p>
<ul>
diff --git a/docs/html/wear/preview/features/ime.jd b/docs/html/wear/preview/features/ime.jd
index 4ee507c..1301be9 100644
--- a/docs/html/wear/preview/features/ime.jd
+++ b/docs/html/wear/preview/features/ime.jd
@@ -13,7 +13,6 @@
<li><a href="#creating">Creating an Input Method for Wear</a></li>
<li><a href="#invoking">Invoking IME</a></li>
<li><a href="#considerations">General IME Considerations</a></li>
- <li><a href="#test">Testing your IME</a></li>
</ol>
</div>
@@ -28,32 +27,40 @@
<p>Wear 2.0 comes with the system default Input Method Editor (IME)
and opens up the IMF APIs for third-party developers to create custom input
-methods for Wear.
-</p>
+methods for Wear.</p>
+<p><img src="{@docRoot}wear/preview/images/new_input_methods.png"></p>
+<p><b>Figure 1</b>. Sample input methods </p>
<h2 id="creating">Creating an Input Method for Wear</h2>
+<p>The Android platform provides a standard framework for creating IMEs. To create
+ a Wear-specific IME, you need to optimize your IME for limited screen size.
+ </p>
-<p>To create an input method for Wear,
-see <a href="http://developer.android.com/guide/topics/text/creating-input-method.html">Creating an Input Method</a>.
+<p>This document provides guidance that can help you create a Wear-specific IME.
+Before you continue with this guide, it's important that you read the
+documentation for
+<a href="{@docRoot}guide/topics/text/creating-input-method.html">Creating an Input Method</a>
+ on handsets.
</p>
-<h2 id="invoking">Invoking IME</h2>
+
+<h2 id="invoking">Invoking an Input Method</h2>
If you are developing an IME for Wear, remember that the
feature is supported only on Android 6.0 (API level 23) and higher versions of
the platform.
To ensure that your IME can only be installed on Wearables that support input
-methods beyond voice, add the following to your application's manifest:
+methods beyond voice, add the following to your app's manifest:
<pre>
<uses-sdk android:minSdkVersion="23" />
</pre>
-This indicates that your application requires Android 6.0 or higher.
-For more information, see <a href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a>
- and the documentation for the <a href="http://developer.android.com/guide/topics/manifest/uses-sdk-element.html"><uses-sdk></a>
+This indicates that your app requires Android 6.0 or higher.
+For more information, see <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">API Levels</a>
+ and the documentation for the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html"><uses-sdk></a>
element.
<p>
-To control how your application is filtered from devices that do not support Wear
-IMEs (for example, on Phone), add the following to your application's manifest:
+To control how your app is filtered from devices that do not support Wear
+IMEs (for example, on Phone), add the following to your app's manifest:
</p>
<pre>
<uses-feature android:required="true" android:name="android.hardware.type.watch" />
@@ -64,9 +71,9 @@
can invoke your IME from:</p>
<ul>
<li>A notification or an app using the
-<a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.html">RemoteInput</a></code> API.</li>
+<a href="{@docRoot}reference/android/support/v4/app/RemoteInput.html">RemoteInput</a></code> API.</li>
<li>Wear apps with an
-<a href="http://developer.android.com/reference/android/widget/EditText.html">EditText</a>
+<a href="{@docRoot}reference/android/widget/EditText.html">EditText</a>
field. Touching a text field places the cursor in the field and automatically
displays the IME on focus.</li>
</ul>
@@ -74,41 +81,39 @@
<h2 id="considerations">General IME Considerations</h2>
-<p>Here are some things to consider when implementing IME for wear:</p>
+<p>Here are some things to consider when implementing IME for Wear:</p>
<ul>
<li><strong>Set Default Action</strong>
<p>
<a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.html">{@code RemoteInput}</a>
and Wear apps expect only single-line text entry. The ENTER key should always trigger
- a call to <a href="http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html#sendDefaultEditorAction(boolean)">sendDefaultEditorAction</a>,
+ a call to <a href="{@docRoot}reference/android/inputmethodservice/InputMethodService.html#sendDefaultEditorAction(boolean)">sendDefaultEditorAction</a>,
which causes the app to dismiss the keyboard and continue on to the next step
or action.</p>
</li>
-<li><Strong>Use full screen mode IME</strong>
+<li><Strong>Use full-screen-mode IME</strong>
<p>
-Most on-screen input methods will consume most of the screen, leaving very little
- of the app visible; hence, we discourage Android Wear apps from presenting a
- visible {@code EditTextView}. Instead, a full-screen IME uses
- <a href="http://developer.android.com/reference/android/inputmethodservice/ExtractEditText.html">ExtractEditText</a>
- to render its own view of the attached editor, also providing control over the
- styling of this view. You can ignore all editor-related events that the IME
- doesn't generate.
-For more details on full-screen mode, see
-<a href="http://developer.android.com/reference/android/inputmethodservice/InputMethodService.html">InputMethodService</a>.
+Input methods on Wear consume most of the screen, leaving very little of the
+ app visible; using full-screen mode ensures an optimal user experience regardless
+ of the app UI. In full-screen mode, an
+ <a href="{@docRoot}reference/android/view/inputmethod/ExtractedText.html">{@code ExtractEditText}</a> provides a mirrored
+ view of the text field being edited and can be styled to blend with the rest of
+ the input method UI. For more details on full-screen mode, see
+ <a href="{@docRoot}reference/android/inputmethodservice/InputMethodService.html">InputMethodService</a>.
</p>
</li>
-<li><strong>Handle inputType flags</strong>
+<li><strong>Handle InputType flags</strong>
<p>
-For privacy reasons, at a minimum you should handle the {@code inputType}
+For privacy reasons, at a minimum you should handle the {@code InputType}
flag {@code TYPE_TEXT_VARIATION_PASSWORD} in your IME. When your IME is in
password mode, make sure that your keyboard is optimized for single key press
(auto spelling correction, auto completion and gesture input are disabled).
Most importantly, keyboard in password mode should support ASCII symbols
regardless of the input language. For more details, see
-<a href="http://developer.android.com/training/keyboard-input/style.html">Specifying The Input Method Type</a>.
+<a href="{@docRoot}training/keyboard-input/style.html">Specifying The Input Method Type</a>.
</p>
</li>
@@ -116,21 +121,13 @@
<p>
Android allows users to easily switch between all IMEs supported by the platform.
In your IME implementation, set the boolean
- <a href="http://developer.android.com/guide/topics/text/creating-input-method.html#Switching">supportsSwitchingToNextInputMethod = true</a>
- to enable your IME to support switching mechanism
+ <a href="{@docRoot}guide/topics/text/creating-input-method.html#Switching">supportsSwitchingToNextInputMethod = true</a>
+ to enable your IME to support the switching mechanism
(so that apps can switch to the next platform-supported IME).
</p>
</li>
</ul>
-<h2 id="test">Test your IME</h2>
-
-<p>To test your IME, install the
-<a href="https://drive.google.com/a/google.com/file/d/0ByOeMdiY1arvWUk5QXU1V0E3cFU/view?usp=sharing">Input Box</a>
- app which has a simple <i><code>EditText</i></code> field.
- When responding to messages from chat apps, you can also use the IME on the
- watch.</p>
-
diff --git a/docs/html/wear/preview/features/notifications.jd b/docs/html/wear/preview/features/notifications.jd
index 21a77c2..5beb712d 100644
--- a/docs/html/wear/preview/features/notifications.jd
+++ b/docs/html/wear/preview/features/notifications.jd
@@ -1,7 +1,231 @@
-page.title=Expanded Notifications
+page.title=Notification Changes in Android Wear 2.0
meta.tags="wear", "wear-preview", "notifications"
page.tags="wear"
+page.image=/wear/preview/images/expanded_diagram.png
+
@jd:body
-<p>stub</p>
\ No newline at end of file
+<div id="qv-wrapper">
+ <div id="qv">
+ <!-- table of contents -->
+ <h2>This document includes</h2>
+ <ol>
+ <li><a href="#visual">Visual Updates</a></li>
+ <li><a href="#expanded">Expanded Notifications</a></li>
+ <li><a href="#messaging">MessagingStyle</a></li>
+ </ol>
+ </div>
+</div>
+
+<p>Android Wear 2.0 updates the visual style and interaction paradigm of notifications
+ as well as introduces expanded notifications, which provide substantial additional
+ content and actions in an app-like experience.
+</p>
+
+<p>The visual and interaction changes make it much easier for users to read and
+ interact with notifications from your app. Expanded notifications enable
+ you to deliver Wear users an app-like experience even if you haven't built an
+ Android Wear app.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> When developing for Wear 2.0, ensure that
+ you have the latest version of the Android Wear app on your phone.
+</p>
+
+<h2 id="visual">Visual Updates</h2>
+<p>Notifications receive important visual updates in Wear 2.0, with
+<a href="http://www.google.com/design/wear">
+material design</a> visual changes.
+</p>
+
+<p><img src="{@docRoot}wear/preview/images/comparison_diagram.png" /> </p>
+<p><b>Figure 1.</b> Comparison of the same notification in Android Wear 1.x and 2.0.</p>
+
+<p>Some of the visual updates include:</p>
+<ul>
+<li><strong>Updated touch targets of a notification</strong>:
+ If no <a href="{@docRoot}reference/android/app/Notification.html#contentIntent">{@code contentIntent}</a>
+ is set or if the notification is
+ <a href="{@docRoot}design/wear/structure.html#Bridged">bridged</a>
+ from a paired phone, then tapping the notification opens an <a href="{@docRoot}wear/preview/features/notifications.html#expanded">expanded notification</a>.
+ If the notification is generated locally by a Wear app and if a
+ <a href="{@docRoot}reference/android/app/Notification.html#contentIntent">{@code contentIntent}</a>
+ is set, tapping the notification fires the
+ <a href="{@docRoot}reference/android/app/Notification.html#contentIntent">{@code contentIntent}</a>.
+ </li>
+
+<li><strong>Dark background color</strong>:
+ If you have notifications that are bridged to wearables, you need to be careful
+ with regards to using color for the notifications. Since a bridged
+ notification needs to support both light (Wear 1.x) and dark (Wear 2.0)
+ backgrounds, it is unlikely that any colors will work well on both.
+ <a href="{@docRoot}reference/android/app/Notification.WearableExtender.html#setDisplayIntent(android.app.PendingIntent)">{@code DisplayIntent}</a>
+ notifications render with both light and dark backgrounds
+ as well, and need to be checked for the same reason.
+ We recommended that you don't set color for bridged notifications.
+
+ When Wear apps post local notifications, you can work around this by checking
+ <a href="{@docRoot}training/basics/supporting-devices/platforms.html#version-codes">the API level of the device</a> they're running on and using an appropriate color
+ for Wear 1.x and a different color for Wear 2.0.
+</li>
+
+<li><strong>Updated horizontal swipe gesture on a notification</strong>:
+ To dismiss a notification in Wear 2.0, the user swipes horizontally in either
+ direction. So if your notification instructs the user to swipe left or right,
+ you must update the text of your notification.
+</li>
+</ul>
+<h2 id="expanded">Expanded Notifications</h2>
+<p>Android Wear 2.0 introduces <i>expanded notifications</i>, which provide
+ substantial additional content and actions for each notification.
+</p>
+<p>When you <a href="{@docRoot}training/wearables/notifications/pages.html">specify additional content pages</a>
+ and actions for a notification, those are available to the user within the
+ expanded notification. Each expanded notification follows
+ <a href="http://www.google.com/design/wear">Material Design for Android Wear</a>,
+ so the user gets an app-like experience.
+</p>
+<p><img src="{@docRoot}wear/preview/images/expanded_diagram.png" /> </p>
+<p><b>Figure 2</b>. An expanded notification with content and actions.</p>
+<p>If the first action in the expanded notification has a
+<a href=" {@docRoot}reference/android/support/v4/app/RemoteInput.html">{@code RemoteInput}</a>
+ (e.g., a Reply action), then the choices you set with <a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.Builder.html#setChoices(java.lang.CharSequence[])">{@code setChoices()}</a>
+ appear within the expanded notification below the first action.
+</p>
+
+<p>The user can view the expanded notification by tapping on a notification when
+ either of the following is true:
+</p>
+<ul>
+ <li>The notification is generated by an app on the paired phone and
+ bridged to Wear.
+ </li>
+ <li>The notification does not have a
+ <a href="http://developer.android.com/reference/android/support/v4/app/NotificationCompat.Builder.html#setContentIntent(android.app.PendingIntent)">{@code contentIntent}</a>.
+ </li>
+</ul>
+<h3>Best practices for expanded notifications</h3>
+<p>To decide when to use expanded notifications, follow these guidelines:</p>
+<ul>
+ <li>All notifications bridged from the paired phone to the Wear device will
+ use expanded notifications.
+ </li>
+ <li>If a notification is generated by an app running locally on Wear 2.0,
+ you should <a href="{@docRoot}training/notify-user/build-notification.html#action">
+ make the touch target of your notification </a> launch
+ <a href="{@docRoot}training/notify-user/build-notification.html#action"> an Activity</a>
+ within your app by calling <a href="{@docRoot}reference/android/support/v4/app/NotificationCompat.Builder.html#setContentIntent(android.app.PendingIntent)">{@code setContentIntent()}</a>.
+ We recommend that you do not use expanded notifications for notifications generated
+ by an app running locally on Wear 2.0.
+ </li>
+</ul>
+
+<h3>Adding expanded notifications</h3>
+<p>
+ Expanded Notifications allow you to include additional content and actions
+ for a notification. You choose the level of detail that your app's notifications
+ will provide; however be judicious with the amount of detail you include in a
+ notification.
+</p>
+<h4>Adding additional content</h4>
+To show additional content in your expanded notification, see <a href="{@docRoot}training/wearables/notifications/pages.html">Adding Pages to a Notification</a>.</p>
+<p>Additional content pages are stacked vertically in the expanded notification
+ and appear in the order they were added.
+ These additional content pages can optionally use a style such as <a href="{@docRoot}reference/android/support/v4/app/NotificationCompat.BigTextStyle.html">{@code BigTextStyle}</a> or <a href="{@docRoot}reference/android/support/v4/app/NotificationCompat.BigPictureStyle.html">{@code BigPictureStyle}</a>.
+</p>
+<h4>Primary action</h4>
+The expanded notification will contain one primary action, which is the first
+action in the notification unless a different action is specified using
+<a href="{@docRoot}reference/android/support/v4/app/NotificationCompat.WearableExtender.html#setContentAction(int)">{@code setContentAction()}</a>.
+</p>
+<h4>Additional actions</h4>
+<p>
+ To specify additional actions, use
+ <a href="{@docRoot}reference/android/support/v4/app/NotificationCompat.WearableExtender.html#addAction(android.support.v4.app.NotificationCompat.Action)">{@code addAction()}</a>
+ or <a href="{@docRoot}reference/android/support/v4/app/NotificationCompat.WearableExtender.html#addActions(java.util.List<android.support.v4.app.NotificationCompat.Action>)">{@code addActions()}</a>.
+ The action drawer of the expanded notification contains all available actions.
+</p>
+<h2 id="messaging">MessagingStyle</h2>
+
+<p>If you have a chat messaging app, your notifications should use
+<a href="{@docRoot}preview/features/notification-updates.html#style">{@code Notification.MessagingStyle}</a>,
+ which is new in Android 6.0. Wear 2.0 uses the chat messages included
+ in a <a href="{@docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a> notification
+ (see <a href="{@docRoot}preview/features/notification-updates.html#style">{@code addMessage()}</a>) to provide
+ a rich chat app-like experience in the expanded notification.
+</p>
+<p class="note">Note: <a href="{@docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a>
+expanded notifications require that you have at least version 1.5.0.2861804 of the
+ <a href="https://play.google.com/store/apps/details?id=com.google.android.wearable.app">Android Wear app</a>
+ on your paired Android phone. That version will be available within the next
+ few weeks in the Play Store.
+</p>
+<h3 id="smart-reply">Smart Reply</h3>
+<p>Wear 2.0 also introduces <i>Smart Reply</i> for <a href="{@docRoot}preview/features/notification-updates.html#style">{@code MessagingStyle}</a> notifications.
+ Smart Reply provides the user with contextually relevant, touchable choices in
+ the expanded notification and in {@code RemoteInput}. These augment the fixed
+ list of choices that the developer provides in
+ <a href="http://developer.android.com/reference/android/support/v4/app/RemoteInput.html">{@code RemoteInput}</a>
+ using the
+ <a href="{@docRoot}reference/android/support/v4/app/RemoteInput.Builder.html#setChoices(java.lang.CharSequence[])">{@code setChoices()}</a> method.
+</p>
+<p>By enabling Smart Reply for your MessagingStyle notifications,
+ you provide users with a fast (single tap), discreet (no speaking aloud), and
+ reliable way to respond to chat messages.
+</p>
+<p><img src="{@docRoot}wear/preview/images/messaging_style.png" /></p>
+<p><b>Figure 3</b>. The expanded notification includes contextually relevant
+ Smart Reply responses below the primary action.
+</p>
+
+<p>Responses generated by Smart Reply are shown in addition to those set using the
+ <a href="{@docRoot}reference/android/support/v4/app/RemoteInput.Builder.html#setChoices(java.lang.CharSequence[])">{@code setChoices()}</a> method.
+</p>
+<p>To enable Smart Reply for your notification action, you need to do the
+following:
+</p>
+<ol>
+ <li>Use <a href="{@docRoot}preview/features/notification-updates.html#style">{@code Notification.MessagingStyle}</a>.
+ </li>
+ <li>Call the method
+ <a href="https://android-dot-devsite.googleplex.com/wear/preview/start.html#get_the_preview_reference_documentation">{@code setAllowGeneratedReplies()}</a>
+ for the notification action.</li>
+ <li>Ensure that the notification action has a
+ <a href="{@docRoot}reference/android/app/RemoteInput.html">{@code RemoteInput}</a>
+ (where the responses will reside).
+ </li>
+</ol>
+<p>The following example shows how to create a MessagingStyle notification with
+Smart Reply responses.</p>
+<pre>
+// Create an intent for the reply action
+Intent replyIntent = new Intent(this, ReplyActivity.class);
+PendingIntent replyPendingIntent =
+ PendingIntent.getActivity(this, 0, replyIntent,
+ PendingIntent.FLAG_UPDATE_CURRENT);
+
+// Create the reply action and add the remote input
+NotificationCompat.Action action =
+ new NotificationCompat.Action.Builder(R.drawable.ic_reply_icon,
+ getString(R.string.label), replyPendingIntent)
+ .addRemoteInput(remoteInput)
+
+// 1) allow generated replies
+.setAllowGeneratedReplies(true)
+ .build();
+
+Notification noti = new NotificationCompat.Builder()
+ .setContentTitle(messages.length + " new messages with " + sender.toString())
+ .setContentText(subject)
+ .setSmallIcon(R.drawable.new_message)
+ .setLargeIcon(aBitmap)
+ // 2) set the style to MessagingStyle
+ .setStyle(new NotificationCompat.MessagingStyle(resources.getString(R.string.reply_name)).addMessage(messages[0].getText(), messages[0].getTime(), messages[0].getSender())
+ .addMessage(messages[1].getText(), messages[1].getTime(), messages[1].getSender()))
+
+
+// 3) add an action with RemoteInput
+.extend(new WearableExtender().addAction(action)).build();
+</pre>
diff --git a/docs/html/wear/preview/features/ui-nav-actions.jd b/docs/html/wear/preview/features/ui-nav-actions.jd
index 587f88f..1408334 100644
--- a/docs/html/wear/preview/features/ui-nav-actions.jd
+++ b/docs/html/wear/preview/features/ui-nav-actions.jd
@@ -1,6 +1,7 @@
page.title=Wear Navigation and Actions
meta.tags="wear", "wear-preview", "navigation", "action"
page.tags="wear"
+page.image=/wear/preview/images/card_drawer.png
@jd:body
@@ -18,23 +19,27 @@
<h2>You should also read</h2>
<ul>
- <li><a href="https://spec.googleplex.com/wear/components/navigation-drawer.html">
+ <li><a href="http://www.google.com/design/wear-spec/components/navigation-drawer.html">
Navigation Drawer Design</a> </li>
<li>
- <a href="https://spec.googleplex.com/wear/components/action-drawer.html">
+ <a href="http://www.google.com/design/wear-spec/components/action-drawer.html">
Action Drawer Design</a>
</ul>
- <h2>Samples</h2>
+ <h2>See Also</h2>
<ol>
-
+ <li>
+ <a href="https://github.com/googlesamples/android-WearDrawers">Sample app with
+ navigation and action drawers</a>
+ </li>
</ol>
</div>
</div>
-<p>Wear 2.0 adds interactive navigation and action drawers that users can pull
-from the top or bottom edge of the window, respectively. The navigation drawer
-appears at the top of the screen and lets users jump to different views within
+<p>As part of the <a href="http://www.google.com/design/wear">Material Design</a>
+ for Android Wear, Wear 2.0 adds interactive navigation and action drawers.
+ The navigation drawer appears at the top of the screen and lets users jump to
+ different views within
the app, similar to the navigation drawer on a phone. The action drawer appears
at the bottom of the screen and provides context-specific actions for the user,
similar to the action bar on a phone. These drawers are accessible when the user
diff --git a/docs/html/wear/preview/images/card_drawer.png b/docs/html/wear/preview/images/card_drawer.png
new file mode 100644
index 0000000..3614f95
--- /dev/null
+++ b/docs/html/wear/preview/images/card_drawer.png
Binary files differ
diff --git a/docs/html/wear/preview/images/comparison_diagram.png b/docs/html/wear/preview/images/comparison_diagram.png
new file mode 100644
index 0000000..7dbf65f2
--- /dev/null
+++ b/docs/html/wear/preview/images/comparison_diagram.png
Binary files differ
diff --git a/docs/html/wear/preview/images/complication-type-exs.png b/docs/html/wear/preview/images/complication-type-exs.png
index d6fe890..6e2287c 100644
--- a/docs/html/wear/preview/images/complication-type-exs.png
+++ b/docs/html/wear/preview/images/complication-type-exs.png
Binary files differ
diff --git a/docs/html/wear/preview/images/complications-data-flow.png b/docs/html/wear/preview/images/complications-data-flow.png
index 7fa43f2..2415535 100644
--- a/docs/html/wear/preview/images/complications-data-flow.png
+++ b/docs/html/wear/preview/images/complications-data-flow.png
Binary files differ
diff --git a/docs/html/wear/preview/images/complications-main-image.png b/docs/html/wear/preview/images/complications-main-image.png
new file mode 100644
index 0000000..dd37b25
--- /dev/null
+++ b/docs/html/wear/preview/images/complications-main-image.png
Binary files differ
diff --git a/docs/html/wear/preview/images/expanded_diagram.png b/docs/html/wear/preview/images/expanded_diagram.png
new file mode 100644
index 0000000..03bca9a
--- /dev/null
+++ b/docs/html/wear/preview/images/expanded_diagram.png
Binary files differ
diff --git a/docs/html/wear/preview/images/hero-1x.png b/docs/html/wear/preview/images/hero-1x.png
index 5dcc847..1d0cb6f 100644
--- a/docs/html/wear/preview/images/hero-1x.png
+++ b/docs/html/wear/preview/images/hero-1x.png
Binary files differ
diff --git a/docs/html/wear/preview/images/hero-2x.png b/docs/html/wear/preview/images/hero-2x.png
index 19a60cd..9f4eb66 100644
--- a/docs/html/wear/preview/images/hero-2x.png
+++ b/docs/html/wear/preview/images/hero-2x.png
Binary files differ
diff --git a/docs/html/wear/preview/images/messaging_style.png b/docs/html/wear/preview/images/messaging_style.png
new file mode 100644
index 0000000..966e524
--- /dev/null
+++ b/docs/html/wear/preview/images/messaging_style.png
Binary files differ
diff --git a/docs/html/wear/preview/images/messaging_style_diagram.png b/docs/html/wear/preview/images/messaging_style_diagram.png
new file mode 100644
index 0000000..3b21c7973
--- /dev/null
+++ b/docs/html/wear/preview/images/messaging_style_diagram.png
Binary files differ
diff --git a/docs/html/wear/preview/images/new_input_methods.png b/docs/html/wear/preview/images/new_input_methods.png
new file mode 100644
index 0000000..c035996
--- /dev/null
+++ b/docs/html/wear/preview/images/new_input_methods.png
Binary files differ
diff --git a/docs/html/wear/preview/images/remoteinput.png b/docs/html/wear/preview/images/remoteinput.png
new file mode 100644
index 0000000..9d80498
--- /dev/null
+++ b/docs/html/wear/preview/images/remoteinput.png
Binary files differ
diff --git a/docs/html/wear/preview/index.jd b/docs/html/wear/preview/index.jd
index 3024654..c273888 100644
--- a/docs/html/wear/preview/index.jd
+++ b/docs/html/wear/preview/index.jd
@@ -25,14 +25,19 @@
<h1 class="dac-hero-title">Android Wear 2.0 Developer Preview</h1>
<p class="dac-hero-description">
Get ready for the next version of Android Wear!
- Support stand-alone Wear devices and apps.
- Create enhanced user interaction and glanceable experiences.
- Test your apps on Wear devices.
+ Support <strong>stand-alone</strong> Wear devices and apps.
+ Create <strong>enhanced user interaction</strong> and
+ <strong>glanceable experiences</strong>.
+ Test your apps on <strong>Wear devices</strong>.
</p>
<a class="dac-hero-cta" href="{@docRoot}wear/preview/program.html">
<span class="dac-sprite dac-auto-chevron"></span>
- Learn more
+ Learn about the Preview
+ </a>
+ <a class="dac-hero-cta" href="https://www.google.com/design/wear">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Material Design for Wear
</a>
</div>
<div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
@@ -57,7 +62,7 @@
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}wear/preview/bug">
+ <a class="dac-action-link" href="http://g.co/wearpreviewbug">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Report an issue
</a>
diff --git a/docs/html/wear/preview/program.jd b/docs/html/wear/preview/program.jd
index 802e8a8..a130663 100644
--- a/docs/html/wear/preview/program.jd
+++ b/docs/html/wear/preview/program.jd
@@ -25,7 +25,7 @@
</h5>
<p>
- Run and test your apps on a range of devices or on an emulator.
+ Run and test your apps on supported Wear devices or the emulator.
</p>
</div>
@@ -35,7 +35,7 @@
</h5>
<p>
- We’ll provide monthly updates during the preview, so you'll be
+ We'll provide frequent updates during the preview, so you'll be
testing against the latest platform changes.
</p>
</div>
@@ -71,8 +71,10 @@
</h5>
<p>
- Report issues and give us feedback using our issue tracker.
- Connect with other developers in the Wear Developer Community.
+ Report issues and give us feedback using our
+ <a href="https://g.co/wearpreviewbug">issue tracker</a>.
+ Connect with other developers in
+ the <a href="https://g.co/androidweardev">Wear Developer Community</a>.
</p>
</div>
@@ -124,11 +126,12 @@
<p>
The first three milestones provide an early test and development
- environment to helps you identify compatibility issues in your current
+ environment to help you identify compatibility issues in your current
apps and plan migration or feature work needed to target the new
platform. This is the priority period in which to give us your feedback
on features and APIs and file compatibility issues — for all of these,
- please use the issue tracker. You can expect some API changes across
+ please use the <a href="https://g.co/wearpreviewbug">issue tracker</a>.
+ You can expect some API changes across
these updates.
</p>
@@ -144,8 +147,6 @@
<p>
As you test and develop on Android Wear 2.0, we strongly recommend
keeping your development environment up-to-date as updates are released.
- Updated preview images will be available that you can download and flash
- manually.
</p>
<p>
@@ -195,18 +196,25 @@
</h3>
<p>
- You can download these hardware system images for Nexus devices from the
- Downloads page:
+ You can download these hardware system images at <a href=
+ "{@docRoot}wear/preview/downloads.html">Download and Test with a
+ Device</a>:
</p>
<ul>
- <li>LG Watch Urbane 2nd Edition “nemo”
+ <li>LGE Watch Urbane 2nd Edition
</li>
- <li>Huawei Watch “sturgeon”
+ <li>Huawei Watch
</li>
</ul>
+ <p>
+ Please keep in mind that the Developer Preview system images
+ are for app developers only, and for compatibility testing and
+ early development only, and are not ready for day-to-day use.
+ </p>
+
<h3 id="documentation_and_sample_code">
Documentation and sample code
</h3>
@@ -216,17 +224,22 @@
</p>
<ul>
- <li>[comment placeholder] Get Started has step-by-step instructions for
+ <li><a href=
+ "{@docRoot}wear/preview/start.html">Get Started</a>
+ has step-by-step instructions for
setting up the SDK.
</li>
- <li>Documentation of new APIs, including an API Overview, downloadable
- API Reference, and developer guides on key features such as
- complications, design patterns for Wear, and building standalone Android
- Wear apps.
+ <li>Documentation of new APIs, including an
+ <a href="{@docRoot}wear/preview/api-overview.html">API Overview</a>,
+ downloadable
+ <a href="{@docRoot}wear/preview/start.html#get_the_preview_reference_documentation">API Reference</a>,
+ and developer guides on key features such as
+ <a href="{@docRoot}wear/preview/features/complications.html">complications</a>
+ and design patterns for Wear.
</li>
- <li>Sample code that demonstrates how to implement [comment placeholder]
+ <li>Sample code that demonstrates how to implement
complications and other new features.
</li>
</ul>
@@ -241,7 +254,8 @@
</p>
<ul>
- <li>Wear Developer Preview Issue Tracker is your primary feedback
+ <li>Wear Developer Preview
+ <a href="https://g.co/wearpreviewbug">Issue Tracker</a> is your primary feedback
channel. You can report bugs, performance issues, and general feedback
through the issue tracker. You can also check for known issues and find
workaround steps.
diff --git a/docs/html/wear/preview/start.jd b/docs/html/wear/preview/start.jd
index 04b9fe6..31ecb46 100644
--- a/docs/html/wear/preview/start.jd
+++ b/docs/html/wear/preview/start.jd
@@ -1,4 +1,4 @@
-page.title=Get Started with the Android Wear 2.0 Developer Preview
+page.title=Get Started with the Preview
meta.keywords="wear-preview"
page.tags="wear-preview"
page.image=images/cards/card-n-sdk_2x.png
@@ -28,8 +28,8 @@
</div>
<p>
- If you want an environment for basic <strong>compatibility
- testing</strong> of your app, you can use your current APK and a
+ If you want an environment for basic compatibility
+ testing of your app, you can use your current APK and a
supported watch or an emulator. You don't necessarily need to update your
full development environment to do basic testing. To simply test your
app's compatibility with a preview system image, see <a href=
@@ -97,19 +97,20 @@
<table>
<tr>
- <th scope="col">
+ <th style="width:300px">
Reference documentation
</th>
- <th scope="col">
- Notes
+ <th>
+ Checksums
</th>
</tr>
<tr>
<td>
- [zip file name]
+ <a href="http://storage.googleapis.com/androiddevelopers/shareables/wear-preview/wearable-support-preview-1-docs.zip">wearable-support-preview-1-docs.zip</a>
</td>
- <td>
+ <td>MD5: eff101c848aff7d0fa7a0812c7670145<br>
+ SHA-1: da1eba1869aaaf8bde30ecfb7e0d624125a41586
</td>
</tr>
</table>
@@ -137,8 +138,8 @@
</li>
<li>If prompted by the Android SDK Manager for the SDK version to use for
- the project, select <strong>Use</strong> <strong>Android Studio's
- SDK</strong>. <//li>
+ the project, select <strong>Use Android Studio's
+ SDK</strong>.
</li>
<li>If prompted to update the Gradle plugin, update the version of the
@@ -151,12 +152,10 @@
'com.google.android.support:wearable:1.4.0'</code>) by changing it to the
following, which requires that your the Google Repository <a href=
"#install_android_studio_and_the_latest_packages">is the latest
- version</a>::
-
- <pre>
- compile 'com.google.android.support:wearable:2.0.0-alpha1'
-
-</pre>
+ version</a>:
+ <pre>
+compile 'com.google.android.support:wearable:2.0.0-alpha1'
+ </pre>
</li>
<li>See the following page for setting up a watch or emulator with a
@@ -195,11 +194,9 @@
<code>dependencies</code> section, update the existing reference to the
Wearable Support Library (perhaps <code>compile
'com.google.android.support:wearable:1.4.0'</code>) to:
-
- <pre>
- compile 'com.google.android.support:wearable:2.0.0-alpha1'
-
-</pre>
+ <pre>
+compile 'com.google.android.support:wearable:2.0.0-alpha1'
+ </pre>
</li>
<li>See the following page for setting up a watch or emulator with a
diff --git a/docs/html/wear/preview/support.jd b/docs/html/wear/preview/support.jd
new file mode 100644
index 0000000..a738e3c
--- /dev/null
+++ b/docs/html/wear/preview/support.jd
@@ -0,0 +1,137 @@
+page.title=Support and Release Notes
+meta.keywords="preview", "wear"
+page.tags="preview", "developer preview"
+
+@jd:body
+
+<p>
+ If you experience problems when developing and testing with the
+ Wear 2.0 Developer Preview, please file bugs at
+ <a href="https://g.co/wearpreviewbug">https://g.co/wearpreviewbug</a>.
+</p>
+
+<p>
+ To discuss issues or ideas with other developers working with Android Wear,
+ join the <a href="https://plus.google.com/communities/113381227473021565406">
+ Wear Developer Google+ community</a>.
+</p>
+
+<h2 id="dp">Developer Preview 1</h2>
+
+<div class="wrap">
+ <div class="cols">
+ <div class="col-6of12">
+ <p><em>Date: May 2016<br />
+ Builds: Wearable Support 2.0.0-alpha1, NVD36G <br />
+ Emulator support: x86 & ARM (32-bit)<br/>
+ </em></p>
+ </div>
+ </div>
+</div>
+
+
+<h3 id="general_advisories">General advisories</h3>
+
+<p>
+ This Developer Preview release is for app developers only and is designed for
+ use in compatibility testing and early development only.
+</p>
+
+<h4 id="deprecations">Deprecations</h4>
+
+
+<p>The following fields are deprecated in the Preview:</p>
+
+<ul>
+ <li>The <code>Notification.WearableExtender#setCustomSizePreset(int)</code>
+ method no longer accepts <code>SIZE_FULL_SCREEN</code> and this value is now
+ undefined.
+ </li>
+
+ <li>The <code>Notification.WearableExtender#setContentIcon(int)</code> method
+ is deprecated.
+ </li>
+</ul>
+
+<h3 id="known_issues">Known Issues</h3>
+
+
+<h4 id="notifications">Notifications</h4>
+
+
+<ul>
+ <li>This preview release does not include support for notification groups,
+ but will be supported in a future release.
+ </li>
+ <li>Tapping on next and previous controls in a notification while playing
+ music does not work.
+ </li>
+ <li>Bottom drawer actions user interface overlaps with media card
+ notifications.
+ </li>
+ <li>The system does not generate Smart Reply responses even if
+ <code>setAllowGeneratedReplies(true)</code> is set.
+ </li>
+</ul>
+
+
+<h4 id="complications">Complications</h4>
+
+<ul>
+ <li>Battery information is not synchronized between watch face and drop down
+ quick menu.
+ </li>
+ <li>Play music crashes when tapping on music complication in watch face.
+ </li>
+</ul>
+
+
+<h4 id="system_user_interface">System User Interface</h4>
+
+<ul>
+ <li>Pressing the hardware button in ambient mode triggers active mode with
+ the app launcher instead of active mode only.
+ </li>
+ <li>Double pressing the power hardware button while on the launcher causes
+ the watch screen to turn black.
+ </li>
+ <li>Dismissing multiple notifications can cause app to force close.
+ </li>
+ <li>Turning screen lock to off (Enable and disable) functionality is not
+ reliable.
+ </li>
+ <li>Airplane mode does not work from quick settings.
+ </li>
+ <li>Tapping Google keyboard English (United States) displays a <em>Settings
+ under construction</em> message.
+ </li>
+ <li>First calendar event notification must be dismissed in order to show the
+ rest of the event card.
+ </li>
+ <li>Unable to turn off the Wifi on wearable.
+ </li>
+</ul>
+
+
+<h4 id="companion_app">Companion App</h4>
+
+<ul>
+ <li>'More actions' via Companion app shows a blank screen on phone running
+ nyc-release and watch running feldspar-release.
+ </li>
+ <li>Select watch face on companion wear app will not change watch face on
+ wearable.
+ </li>
+</ul>
+
+
+<h4 id="devices">Devices</h4>
+
+<ul>
+ <li>On the Huawei Watch, selecting the language, followed by multiple
+ acknowledgement dialogues results in a black screen.
+ </li>
+ <li>On the LG Watch Urbane LTE, when answering call from the watch, the watch
+ does not provide audio from the caller.
+ </li>
+</ul>
diff --git a/docs/html/work/_book.yaml b/docs/html/work/_book.yaml
new file mode 100644
index 0000000..82571f3
--- /dev/null
+++ b/docs/html/work/_book.yaml
@@ -0,0 +1,18 @@
+toc:
+- title: Android for Work Home
+ path: /work/index.html
+
+- title: Overview
+ path: /work/overview.html
+
+- title: Developer Guide
+ path: /work/guide.html
+
+- title: Set up Managed Profiles
+ path: /work/managed-profiles.html
+
+- title: Set up App Restrictions
+ path: /work/app-restrictions.html
+
+- title: Set up Single-Purpose Devices
+ path: /work/cosu.html
diff --git a/docs/html/training/enterprise/app-restrictions.jd b/docs/html/work/app-restrictions.jd
similarity index 78%
rename from docs/html/training/enterprise/app-restrictions.jd
rename to docs/html/work/app-restrictions.jd
index 07b1de7..4122988b 100644
--- a/docs/html/training/enterprise/app-restrictions.jd
+++ b/docs/html/work/app-restrictions.jd
@@ -1,27 +1,18 @@
-page.title=Implementing App Restrictions
+page.title=Set up App Restrictions
page.metaDescription=Learn how to implement app restrictions and configuration settings that can be changed by other apps on the same device.
+page.image=images/work/cards/briefcase_600px.png
+
@jd:body
-<div id="tb-wrapper">
-<div id="tb">
-
-<h2>This lesson teaches you to</h2>
-<ol>
- <li><a href="#define_restrictions">Define App Restrictions</a></li>
- <li><a href="#check_restrictions">Check App Restrictions</a></li>
- <li><a href="#listen">Listen for App Restriction Changes</a></li>
-</ol>
-
-<!-- related docs (NOT javadocs) -->
-<h2>Resources</h2>
-<ul>
- <li><a href="{@docRoot}samples/AppRestrictionSchema/index.html">AppRestrictionSchema</a>
- sample app</li>
- <li><a href="{@docRoot}samples/AppRestrictionEnforcer/index.html">AppRestrictionEnforcer</a>
- sample app</li>
-</ul>
-
-</div>
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#define_restrictions">Define App Restrictions</a></li>
+ <li><a href="#check_restrictions">Check App Restrictions</a></li>
+ <li><a href="#listen">Listen for App Restriction Changes</a></li>
+ </ol>
+ </div>
</div>
<p>If you are developing apps for the enterprise market, you may need to satisfy
@@ -152,10 +143,10 @@
<restrictions xmlns:android="http://schemas.android.com/apk/res/android" >
<restriction
- android:key="download_on_cell"
- android:title="@string/download_on_cell_title"
+ android:key="downloadOnCellular"
+ android:title="App is allowed to download data via cellular"
android:restrictionType="bool"
- android:description="@string/download_on_cell_description"
+ android:description="If 'false', app can only download data via Wi-Fi"
android:defaultValue="true" />
</restrictions>
@@ -166,12 +157,6 @@
documented in the reference for {@link android.content.RestrictionsManager}.
</p>
-<p class="note">
- <strong>Note:</strong> <code>bundle</code> and
- <code>bundle_array</code> restriction types are not supported by Google Play
- for Work.
-</p>
-
<p>
You use each restriction's <code>android:key</code> attribute to read its
value from a restrictions bundle. For this reason, each restriction must have
@@ -217,7 +202,7 @@
</li>
<li>When the app is notified of a restriction change, as described in
- <a href="#listen">Listen for App Configuration
+ <a href="#listen">Listen for Device Configuration
Changes</a>
</li>
</ul>
@@ -260,30 +245,9 @@
the {@link android.content.Intent#ACTION_APPLICATION_RESTRICTIONS_CHANGED
ACTION_APPLICATION_RESTRICTIONS_CHANGED} intent to find out if restrictions
change while your app is active, as described in <a href="#listen">Listen for
- App Restriction Changes</a>.
+ Device Configuration Changes</a>.
</p>
-<p>
- When your app checks for restrictions using
- {@link android.content.RestrictionsManager#getApplicationRestrictions
- RestrictionsManager.getApplicationRestrictions()}, we recommend that you
- check to see if the enterprise administrator has set the key-value pair
- {@link android.os.UserManager#KEY_RESTRICTIONS_PENDING} to true. If so, you
- should block the user from using the app, and prompt them to contact their
- enterprise administrator. The app should then proceed as normal, registering
- for the {@link android.content.Intent#ACTION_APPLICATION_RESTRICTIONS_CHANGED
- ACTION_APPLICATION_RESTRICTIONS_CHANGED} broadcast.
-</p>
-
-<img src="{@docRoot}images/training/enterprise/app_restrictions_diagram.png"
-width="620" srcset="{@docRoot}images/training/enterprise/app_restrictions_diagram.png 1x,
-{@docRoot}images/training/enterprise/app_restrictions_diagram_2x.png 2x" />
-
- <p class="img-caption">
- <strong>Figure 1.</strong> Checking whether restrictions are pending before
- registering for the broadcast.
- </p>
-
<h3 id="read_restrictions">
Reading and applying restrictions
</h3>
@@ -293,11 +257,11 @@
getApplicationRestrictions()} method returns a {@link android.os.Bundle}
containing a key-value pair for each restriction that has been set. The
values are all of type <code>Boolean</code>, <code>int</code>,
- <code>String</code>, <code>String[]</code>, <code>Bundle</code>, and
- <code>Bundle[]</code>. Once you have the restrictions {@link android.os.Bundle},
- you can check the current restrictions settings with the standard
- {@link android.os.Bundle} methods for those data types, such as
- {@link android.os.Bundle#getBoolean getBoolean()} or
+ <code>String</code>, and <code>String[]</code>. Once you have the
+ restrictions {@link android.os.Bundle}, you can check the current
+ restrictions settings with the standard {@link android.os.Bundle} methods for
+ those data types, such as {@link android.os.Bundle#getBoolean getBoolean()}
+ or
{@link android.os.Bundle#getString getString()}.
</p>
@@ -311,11 +275,10 @@
<p>
It is up to your app to take appropriate action based on the current
- restrictions settings. For example, if your app has a restriction schema
- to specify whether it can download over a cellular connection (like the
- example in <a href="#define_restrictions">Define App Restrictions</a>),
- and you find that the restriction is set to false, you would have to disable
- data download except when the device has a Wi-Fi connection, as shown in the
+ restrictions settings. For example, if your app has a restriction specifying
+ whether it can download data over a cellular connection, and you find that
+ the restriction is set to <code>false</code>, you would have to disable data
+ download except when the device has a Wi-Fi connection, as shown in the
following example code:
</p>
@@ -335,13 +298,6 @@
// ...show appropriate notices to user
}</pre>
-<p class="note">
- <strong>Note:</strong> The restrictions schema should be
- backward and forward compatible, since Google Play for Work
- gives the EMM only one version of the App Restrictions
- Schema per app.
- </p>
-
<h2 id="listen">
Listen for App Restriction Changes
</h2>
@@ -389,8 +345,8 @@
<strong>Note:</strong> Ordinarily, your app does not need to be notified
about restriction changes when it is paused. Instead, you should unregister
your broadcast receiver when the app is paused. When the app resumes, you
- first check for the current restrictions (as discussed in
- <a href="#check_restrictions">Check App Restrictions</a>), then register
- your broadcast receiver to make sure you're notified about restriction changes
+ first check for the current restrictions (as discussed in <a href=
+ "#check_restrictions">Check Device Restrictions</a>), then register your
+ broadcast receiver to make sure you're notified about restriction changes
that happen while the app is active.
</p>
diff --git a/docs/html/training/enterprise/cosu.jd b/docs/html/work/cosu.jd
similarity index 90%
rename from docs/html/training/enterprise/cosu.jd
rename to docs/html/work/cosu.jd
index 1d6388b..3058365 100644
--- a/docs/html/training/enterprise/cosu.jd
+++ b/docs/html/work/cosu.jd
@@ -1,27 +1,20 @@
-page.title=Configuring Corporate-Owned, Single-Use Devices
+page.title=Set up Single-Purpose Devices
+page.tags=work, cosu
+page.keywords=cosu, work
page.metaDescription=Learn how to develop single-use solutions for Android devices.
+page.image=images/work/cards/briefcase_600px.png
@jd:body
-<div id="tb-wrapper">
-<div id="tb">
-
-<h2>This lesson teaches you to</h2>
-<ol>
- <li><a href="#locktask">How to use LockTask mode</a></li>
- <li><a href="#cosu-solutions">Build COSU solutions</a></li>
- <li><a href="#create-dpc">Create your own DPC app</a></li>
-</ol>
-
-<!-- related docs (NOT javadocs) -->
-<h2>You should also read</h2>
-<ul>
- <li><a href="{@docRoot}training/enterprise/work-policy-ctrl.html">
-Building a Device Policy Controller</a>
- </li>
-</ul>
-
-</div>
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#locktask">How to use LockTask mode</a></li>
+ <li><a href="#cosu-solutions">Build COSU solutions</a></li>
+ <li><a href="#create-dpc">Create your own DPC app</a></li>
+ </ol>
+ </div>
</div>
<p>
@@ -73,9 +66,9 @@
This graphic compares the features of app pinning and lock task mode:
</p>
-<img src="{@docRoot}images/training/enterprise/pinning_vs_locktaskmode.png"
-width="640" srcset="{@docRoot}images/training/enterprise/pinning_vs_locktaskmode.png 1x,
-{@docRoot}images/training/enterprise/pinning_vs_locktaskmode_2x.png 2x" />
+<img src="{@docRoot}images/work/cosu-pinning_vs_locktaskmode.png"
+width="640" srcset="{@docRoot}images/work/cosu-pinning_vs_locktaskmode.png 1x,
+{@docRoot}images/work/cosu-pinning_vs_locktaskmode_2x.png 2x" />
<p class="img-caption">
<strong>Figure 1.</strong> Comparing the features of app pinning in Lollipop
@@ -422,7 +415,7 @@
// set System Update policy
if (active){
- mDevicePolicyManager.setSystemUpdatePolicy(mAdminComponentName,
+ mDevicePolicyManager.setSystemUpdatePolicy(mAdminComponentName,
SystemUpdatePolicy.createWindowedInstallPolicy(60,120));
}
else
@@ -431,7 +424,7 @@
// set this Activity as a lock task package
mDevicePolicyManager.setLockTaskPackages(mAdminComponentName,
- active ? new String[]{getPackageName()} : new String[]{});
+ active ? new String[]{getPackageName()} : new String[]{});
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_MAIN);
intentFilter.addCategory(Intent.CATEGORY_HOME);
@@ -460,18 +453,18 @@
}
private void enableStayOnWhilePluggedIn(boolean enabled) {
- if (enabled) {
- mDevicePolicyManager.setGlobalSetting(
- mAdminComponentName,
- Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
- BatteryManager.BATTERY_PLUGGED_AC
- | BatteryManager.BATTERY_PLUGGED_USB
- | BatteryManager.BATTERY_PLUGGED_WIRELESS);
- } else {
- mDevicePolicyManager.setGlobalSetting(
- mAdminComponentName,
- Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
- }
+ if (enabled) {
+ mDevicePolicyManager.setGlobalSetting(
+ mAdminComponentName,
+ Settings.Global.STAY_ON_WHILE_PLUGGED_IN,
+ BatteryManager.BATTERY_PLUGGED_AC
+ | BatteryManager.BATTERY_PLUGGED_USB
+ | BatteryManager.BATTERY_PLUGGED_WIRELESS);
+ } else {
+ mDevicePolicyManager.setGlobalSetting(
+ mAdminComponentName,
+ Settings.Global.STAY_ON_WHILE_PLUGGED_IN, 0);
+ }
}
diff --git a/docs/html/training/enterprise/device-management-policy.jd b/docs/html/work/device-management-policy.jd
similarity index 98%
rename from docs/html/training/enterprise/device-management-policy.jd
rename to docs/html/work/device-management-policy.jd
index 5190a22..d564b89 100644
--- a/docs/html/training/enterprise/device-management-policy.jd
+++ b/docs/html/work/device-management-policy.jd
@@ -24,7 +24,7 @@
<h2>Try it out</h2>
<div class="download-box">
- <a href="http://developer.android.com/shareables/training/DeviceManagement.zip"
+ <a href="{@docRoot}shareables/training/DeviceManagement.zip"
class="button">Download the sample</a>
<p class="filename">DeviceManagement.zip</p>
</div>
diff --git a/docs/html/work/guide.jd b/docs/html/work/guide.jd
new file mode 100644
index 0000000..a93bfa5
--- /dev/null
+++ b/docs/html/work/guide.jd
@@ -0,0 +1,530 @@
+page.title=Android for Work Developer Guide
+page.tags="work", "android for work", "afw", "developer", "android"
+page.metaDescription=Android for Work provides organizations with a secure, flexible, and unified Android mobility platform combining devices, applications, and management.
+page.image=images/work/cards/android-studio_600px.png
+
+@jd:body
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ul>
+ <li><a href="#managed-profiles">Managed Profiles</a></li>
+ <li><a href="#app-restrictions">Implementing App Restrictions</a></li>
+ <li><a href="#cosu">COSU Devices</a></li>
+ <li><a href="#sso">Set up Single Sign-on with Chrome Custom Tabs</a></li>
+ <li><a href="#testing">Test Your App</a></li>
+ </ul>
+ </div>
+</div>
+
+<p>
+ Android for Work provides organizations with a secure, flexible, and
+ unified Android mobility platform—combining devices, applications,
+ and management. By default, Android apps are compatible with Android
+ for Work. However, there are additional features you can use to make
+ your Android app work best on a managed device:
+</p>
+
+<ul>
+ <li>
+ <a href="#managed-profiles">Managed profile compatibility</a>—Modify your Android
+ app so it functions best on an Android device with a work profile.
+ </li>
+ <li>
+ <a href="#app-restrictions">Managed configuration using app restrictions</a>—Modify
+ your app to allow IT administrators the option to specify custom
+ settings for your apps.
+ </li>
+ <li>
+ <a href="#cosu">Corporate-owned, single-use (COSU)</a>—Optimize your
+ app so that it can be deployed on an Android device as a kiosk.
+ </li>
+ <li>
+ <a href="#sso">Single Sign-On (SSO)</a>—Simplify the sign-on process
+ for users signing in to different apps on their Android device
+ running Android for Work.
+ </li>
+</ul>
+
+<h3>Prerequisites</h3>
+
+<ol>
+ <li>You’ve created an Android app.</li>
+ <li>You’re ready to modify your app so that it works best with
+ Android for Work.</li>
+ <li>Minimum version: Android 5.0 Lollipop recommended version:
+ Android 6.0 Marshmallow and later.</li>
+</ol>
+
+<p>
+ <strong>Note:</strong> Android for Work functions natively on most
+ Android 5.0 devices; however, Android 6.0 and later offers
+ additional features for Android for Work, especially with regard to
+ COSU.
+</p>
+
+<h2 id="managed-profiles">Manage Profiles</h2>
+
+<p>
+ You can manage a user’s business data and applications through a
+ work profile. A work profile is a managed corporate profile
+ associated with the primary user account on an Android device. A
+ work profile securely isolates work apps and data from personal apps
+ and data. This work profile is in a separate container from the
+ personal profile, which your user controls. These separate profiles
+ allow organizations to manage the business data they care about, but
+ leave everything else on a user’s device under the user’s control.
+ For a deep dive into best practices, see the
+ <a href="{@docRoot}work/managed-profiles.html">Set up Managed Profiles</a>
+ guide. For an overview of those best practices, see below.
+</p>
+
+<h3>Key features of a managed profile</h3>
+
+<ul>
+ <li>Separate and secure profile</li>
+ <li>Google Play for Work for application distribution</li>
+ <li>Separate badged work applications</li>
+ <li>Profile-only management capabilities controlled by an administrator</li>
+</ul>
+
+<h3>Managed profile benefits on Android 5.0+</h3>
+
+<ul>
+ <li>Full device encryption</li>
+ <li>One Android application package (APK) for both profiles when
+ there’s a personal profile and a work profile present on the device</li>
+ <li><a href="https://support.google.com/work/android/answer/6192678"
+ >Device policy controller</a> (DPC) is limited to the managed profile</li>
+ <li>Device administration via the
+ <a href="{@docRoot}reference/android/app/admin/DevicePolicyManager.html"
+ >DevicePolicyManager</a> class</li>
+</ul>
+
+<h3>Considerations for managed profiles</h3>
+<ul>
+ <li>The Android system prevents intents
+ <a href="{@docRoot}reference/android/app/admin/DevicePolicyManager.html#clearCrossProfileIntentFilters(android.content.ComponentName)"
+ >from crossing profiles</a> and IT administrators can
+ <a href="{@docRoot}reference/android/app/admin/DevicePolicyManager.html#enableSystemApp(android.content.ComponentName,%20java.lang.String)"
+ >enable or disable system apps</a>.</li>
+ <li>A file path (Uniform Resource Identifier [URI]) that’s valid on
+ one profile may not be valid on the other.</li>
+</ul>
+
+<h3>Prevent intents from failing between profiles</h3>
+<p>
+ It’s difficult to know which intents can cross between profiles, and
+ which ones are blocked. The only way to know for sure is by testing.
+ Before your app starts an activity, you should verify that the
+ request is resolved by calling
+ <a href="{@docRoot}reference/android/content/Intent.html#resolveActivity(android.content.pm.PackageManager)"
+ ><code>Intent.resolveActivity()</code></a>.
+ <ul>
+ <li>If it returns <code>null</code>, the request doesn’t resolve.</li>
+ <li>If it returns something, it shows that the intent resolves,
+ and it’s safe to send the intent.</li>
+ </ul>
+</p>
+<p>
+ <strong>Note</strong>: For detailed testing instructions, see
+ <a href="{@docRoot}work/managed-profiles.html#prevent_failed_intents"
+ >Prevent Failed Intents</a>.
+</p>
+
+<h3>Share files across profiles</h3>
+<p>
+ Some developers use URIs to mark file paths in Android. However,
+ with Android for Work, because there are separate profiles, we
+ recommend:
+</p>
+
+<table>
+ <tr>
+ <td style="white-space:nowrap;">
+ <strong>Use:</strong><br/>
+ Content URIs
+ </td>
+ <td>
+ <ul>
+ <li>
+ The <a href="{@docRoot}reference/android/content/ContentUris.html"
+ >content URIs</a> contain the authority, path, and ID for a
+ specific file. You can generate this using
+ <a href="{@docRoot}reference/android/support/v4/content/FileProvider.html"
+ >FileProvider</a> subclass.
+ <a href="{@docRoot}training/secure-file-sharing/index.html">Learn more</a>
+ </li>
+ <li>
+ Share and grant permissions to access the content URI using
+ an Intent. Permissions can only be passed across the profile
+ boundary using Intents. If you grant another app access rights
+ to your file using
+ <a href="{@docRoot}reference/android/content/Context.html#grantUriPermission(java.lang.String,%20android.net.Uri,%20int)"
+ ><code>Context.grantUriPermission()</code></a>, it only is granted for
+ that app in the same profile.</li>
+ </ul>
+ </td>
+ </tr>
+ <tr>
+ <td style="white-space:nowrap;">
+ <strong>Don't use:</strong><br/>
+ File URI
+ </td>
+ <td>
+ <ul>
+ <li>Contains the absolute path of the file on the device’s
+ storage.</li>
+ <li>A file path URI that’s valid on one profile isn’t valid on
+ the other.</li>
+ <li>If you attach a file URI to an intent, a handler is unable
+ to access the file in another profile.</li>
+ </ul>
+ </td>
+ </tr>
+</table>
+
+<p>
+ <strong>Next steps</strong>: Once your app supports managed
+ profiles, test it in a work profile. See
+ <a href="#testing">Test your app with Android for Work</a>.
+</p>
+
+<h2 id="app-restrictions">Implementing App Restrictions</h2>
+
+<p>
+ App restrictions are a set of instructions that IT administrators
+ can use to manage their users’ mobile devices in a specific way.
+ These instructions are universal and work across any EMM, allowing
+ administrators to remotely configure applications on their users’
+ phones.
+</p>
+
+<p>
+ If you’re developing apps for business or government, you may need
+ to satisfy your industry’s specific set of requirements. Using
+ application restrictions, the IT administrator can remotely specify
+ settings and enforce policies for their users’ Android apps; for
+ example:
+</p>
+
+<ul>
+ <li>Configure if an app can sync data via cellular/3G, or only Wi-Fi</li>
+ <li>Whitelist or blacklist URLs on a web browser</li>
+ <li>Configure an app's email settings</li>
+ <li>Enable or disable printing</li>
+ <li>Manage bookmarks</li>
+</ul>
+
+<h3>Best practices for implementing app restrictions</h3>
+
+<p>
+ The <a href="{@docRoot}work/app-restrictions.html">Set up App Restrictions</a>
+ guide is the key source for information on how to build and deploy
+ app restrictions. After you’ve reviewed this documentation, see
+ recommendations below for additional guidance.
+</p>
+
+<h4>When first launching the app</h4>
+<p>
+ As soon as you launch an application, you can see if app
+ restrictions are already set for this app in <code>onStart()</code> or
+ <code>onResume()</code>. Additionally, you can find out if your
+ application is managed or unmanaged. For example, if
+ <a href="{@docRoot}reference/android/content/RestrictionsManager.html#getApplicationRestrictions()"
+ ><code>getApplicationRestrictions()</code></a> returns:
+ <ul>
+ <li><strong>A set of application-specific restrictions</strong>—You
+ can configure the app restrictions silently (without requiring
+ user input).</li>
+ <li><strong>An empty bundle</strong>—Your application acts like
+ it’s unmanaged (for example, how the app behaves in a personal
+ profile).</li>
+ <li><strong>A bundle with a single key value pair with
+ <a href="{@docRoot}reference/android/os/UserManager.html#KEY_RESTRICTIONS_PENDING"
+ ><code>KEY_RESTRICTIONS_PENDING</code></a> set to true</strong>—your
+ application is being managed, but the DPC isn’t configured
+ correctly. You should block this user from your app, and direct
+ them to their IT administrator.</li>
+ </ul>
+</p>
+
+<h4>Listen for changes to app restrictions</h4>
+<p>
+ IT administrators can change app restrictions and what policies they
+ want to enforce on their users at any time. Because of this, we
+ recommend you ensure that your app can accept new restrictions as
+ follows:
+</p>
+
+<ul>
+ <li><strong>Fetch restrictions on launch</strong>—Your app should
+ call <code>getApplicationRestrictions()</code> in <code>onStart()</code>
+ and <code>onResume()</code>, and compare against old restrictions
+ to see if changes are required.</li>
+ <li><strong>Listen while running</strong>—Dynamically register
+ <a href="{@docRoot}reference/android/content/Intent.html#ACTION_APPLICATION_RESTRICTIONS_CHANGED"
+ ><code>ACTION_APPLICATION_RESTRICTIONS_CHANGED</code></a> in your
+ running activities or services, after you’ve checked for new
+ restrictions. This intent is sent only to listeners that are
+ dynamically registered, and not to listeners declared in the app
+ manifest.</li>
+ <li><strong>Unregister while not running</strong>—In <code>onPause()</code>,
+ you should unregister for the broadcast of
+ <code>ACTION_APPLICATION_RESTRICTIONS_CHANGED</code>.</li>
+</ul>
+
+<h2 id="cosu">COSU Devices</h2>
+
+<p>
+ Corporate-owned, single-use devices (COSU) are kiosk devices used
+ for a single purpose, such as digital signage displays, ticket
+ printing kiosks, or checkout registers.
+</p>
+<p>
+ When an Android device is configured as a COSU device, the user sees
+ an application locked to the screen with no Home or Recent Apps
+ buttons to escape the app. COSU can also be configured to show a set
+ of applications, such as a library kiosk with an app for the library
+ catalog and a web browser.
+</p>
+<p>
+ For instructions, see
+ <a href="{@docRoot}work/cosu.html">Set up Single-Purpose Devices</a>.
+</p>
+
+<h2 id="sso">Set up Single Sign-on with Chrome Custom Tabs</h2>
+
+<p>
+ Enterprise users often have multiple apps on their device, and they
+ prefer to sign in once to access all of their work applications.
+ Typically, users sign in through a
+ <a href="https://developer.chrome.com/multidevice/webview/overview">WebView</a>;
+ however, there are a couple reasons why this isn’t ideal:
+</p>
+<ol>
+ <li>
+ Users often need to sign in multiple times with the same
+ credentials. The WebView solution often isn’t a true Single
+ Sign-On (SSO) experience.
+ </li>
+ <li>
+ There can be security risks, including malicious applications
+ inspecting cookies or injecting JavaScript® to access a user’s
+ credentials. Even trusted developers are at risk if they rely on
+ potentially malicious third-party SDKs.
+ </li>
+</ol>
+
+<p>
+ A solution to both problems is to authenticate users using Chrome
+ Custom Tabs, instead of WebView. This ensures that authentication:
+</p>
+<ul>
+ <li>
+ Occurs in a secure context (the system browser) where the host app
+ cannot inspect contents.
+ </li>
+ <li>
+ Has a shared cookie state, ensuring the user has to sign in only
+ once.
+ </li>
+</ul>
+
+<h3>Requirements</h3>
+
+<p>
+ Chrome Custom Tabs are supported using Platform APIs from API level
+ 23 (Android 6.0), and support libraries back to API level 4 (Android
+ 1.6). To implement Chrome Custom Tabs, you need to use a supported
+ browser, such as Chrome 45 or later.
+</p>
+
+<h3>How do I implement Chrome Custom Tabs?</h3>
+
+<p>
+ Google, in conjunction with the OpenID Foundation, has published an
+ open source library on GitHub. To set up Chrome Custom Tabs for SSO,
+ see the <a href="https://github.com/openid/AppAuth-Android"
+ >documentation and sample code on GitHub</a>.
+</p>
+
+<h2 id="testing">Test your App with Android for Work</h2>
+
+<p>
+ Once you’ve developed your app, you’ll want to test it in a work
+ profile—both as a profile owner and device owner. See the
+ instructions below.
+</p>
+
+<h3>Use TestDPC to test your Android app</h3>
+
+<p>
+ TestDPC is a tool you can use to test your Android app in a variety
+ of Android for Work environments. You can configure it as a profile
+ owner or a device owner to launch management APIs on your device,
+ using one of these methods:
+</p>
+<ul>
+ <li>Download the source code for TestDPC from
+ <a href="https://github.com/googlesamples/android-testdpc">GitHub</a>.</li>
+ <li>Install TestDPC directly from
+ <a href="https://play.google.com/store/apps/details?id=com.afwsamples.testdpc"
+ >Google Play</a>.</li>
+</ul>
+<p>
+ For more information on how to configure TestDPC, see the
+ instructions below and the
+ <a href="https://github.com/googlesamples/android-testdpc">TestDPC User Guide</a>.
+</p>
+
+<p>
+ <strong>REQUIRED</strong>: Your test Android device needs to run
+ Android 5.0 or later and be able to natively support Android for Work.
+</p>
+
+<h3>Provision a profile owner</h3>
+
+<p>
+ To test your app in a work profile, you need to first provision a
+ profile owner on the TestDPC app:
+</p>
+
+<ol>
+ <li>Launch the TestDPC app and click <strong>Set up profile</strong>.</li>
+ <li>When prompted, click <strong>Set up</strong>, ensuring the
+ TestDPC’s logo is highlighted on the screen.</li>
+ <li>If your device isn’t encrypted, you need to encrypt your device.
+ Follow the briefcase notification after reboot to continue
+ provisioning.<br/>
+ Once you’ve provisioned the profile owner correctly, badged
+ applications appear at the end of your app tray. Install your app
+ on the device and test to see how it runs in the work profile.
+ </li>
+ <li>
+ Install your app on the device and test to see how it runs in the
+ work profile.
+ </li>
+</ol>
+
+<h3>Provision a device owner</h3>
+
+<p>
+ Testing your app as a device owner requires more steps than testing
+ as a profile owner. You first need to provision the device owner on
+ your test device using the
+ <a href="{@docRoot}samples/NfcProvisioning/index.html"
+ >NfcProvisioning sample app</a>. For complete instructions to
+ provision TestDPC in device owner mode using the NfcProvisioning
+ app, see the <a href="https://github.com/googlesamples/android-testdpc"
+ >TestDPC User Guide</a>.
+</p>
+
+<ol>
+ <li>Download the <a href="{@docRoot}samples/NfcProvisioning/index.html"
+ >NfcProvisioning</a> app sample files to your development environment.</li>
+ <li>Unpack the project, open your shell, and <code>cd</code> to the project directory.</li>
+ <li>Add a file to the directory with the <code>local.properties</code> name
+ and the following content:
+ <pre>sdk.dir=/path/to/your/android/sdk</pre>
+ </li>
+ <li>While in the project directory, enter these commands to build the NfcProvisioning APK:
+ <pre>./gradlew init
+./gradlew build</pre>
+ The NfcProvisioning APK you need is now located in <code>./Application/build/outputs/apk</code>.
+ </li>
+ <li>Install the APK on your programmer device, which you can use to provision other devices.</li>
+ <li>Create a text file called <code>nfcprovisioning.txt</code> and
+ include the following information:
+ <pre>android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_NAME=com.afwsamples.testdpc
+android.app.extra.PROVISIONING_DEVICE_ADMIN_PACKAGE_DOWNLOAD_LOCATION=https://testdpc-latest-apk.appspot.com
+android.app.extra.PROVISIONING_DEVICE_ADMIN_SIGNATURE_CHECKSUM=gJD2YwtOiWJHkSMkkIfLRlj-quNqG1fb6v100QmzM9w=
+# note: checksum must be URL-safe
+android.app.extra.PROVISIONING_LOCALE=en_US
+android.app.extra.PROVISIONING_TIME_ZONE=America/New_York</pre>
+ <p>
+ <strong>Note:</strong> If you’re developing for Android 5.0
+ Lollipop, see the instructions in the
+ <a href="https://github.com/googlesamples/android-testdpc"
+ >TestDPC User Guide</a>.
+ </p>
+ </li>
+ <li>Push that text file to your programmer device by entering:
+ <pre>adb push <path-to-nfcprovisioning.txt> /sdcard/</pre>
+ </li>
+ <li>
+ Ensure that the programmer device is connected to Wi-Fi on either
+ an unsecured or WPA2 secured network.
+ <p>
+ The NFC Provisioning app will automatically pass those Wi-Fi
+ credentials onto the target device.
+ </p>
+ </li>
+ <li>Open the NFC Provisioning app and ensure <code>com.google.android.testdpc</code>
+ is auto-populated.</li>
+ <li>Bump the devices to transfer the data.</li>
+ <li>Follow the onscreen instructions to set up your target device.</li>
+ <li>Once you’ve completed provisioning the device owner, you can test your app on that device. You
+ should specifically test how
+ <a href="{@docRoot}work/app-restrictions.html">app restrictions</a>,
+ <a href="{@docRoot}work/managed-profiles.html#sharing_files">URIs</a>, and
+ <a href="{@docRoot}work/managed-profiles.html#prevent_failed_intents">intents</a>
+ work on that device.</li>
+</ol>
+
+<h3>End-to-end testing</h3>
+
+<p>
+ After you’ve finished testing your app in the environments above,
+ you’ll likely want to test your app in an end-to-end production
+ environment. This process includes the steps a customer needs to
+ take to deploy your app in their organization, including:
+</p>
+
+<ul>
+ <li>App distribution through Play</li>
+ <li>Server-side app restriction configuration</li>
+ <li>Server-side profile policy control</li>
+</ul>
+
+<p>
+ You need to access an EMM console to complete the end-to-end
+ testing. The easiest way to get one is to request a testing console
+ from your EMM. Once you have access, complete these tasks:
+</p>
+
+<ol>
+ <li>Create a test version of your application with a
+ <a href="http://tools.android.com/tech-docs/new-build-system/applicationid-vs-packagename"
+ >new ApplicationId</a>.</li>
+ <li>Claim a <a href="https://support.google.com/work/android/answer/6174056"
+ >managed Google domain</a> and bind it to your EMM. If you
+ already have a testing domain that’s bound to an EMM, you may need
+ to unbind it to test it with your preferred EMM. Please consult your
+ EMM for the specific unbinding steps.</li>
+ <li><a href="https://support.google.com/a/answer/2494992"
+ >Publish your application to the private channel</a> for their
+ managed Google domain.</li>
+ <li>Use the EMM console and EMM application to:
+ <ol>
+ <li>Set up work devices.</li>
+ <li>Distribute your application.</li>
+ <li>Set application restrictions.</li>
+ <li>Set device policies.</li>
+ </ol>
+</ol>
+
+<p>
+ This process will differ based on your EMM. Please consult your
+ EMM’s documentation for further details. Congrats! You’ve completed
+ these steps and verified that your app works well with Android for
+ Work.
+</p>
+
+<p>
+ <a href="https://www.google.com/work/android/developers/applyDevHub/">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Learn about the Android for Work DevHub.
+ </a>
+</p>
diff --git a/docs/html/work/index.jd b/docs/html/work/index.jd
new file mode 100644
index 0000000..a71fedb
--- /dev/null
+++ b/docs/html/work/index.jd
@@ -0,0 +1,55 @@
+page.title=Android for Work
+page.tags="android for work, work",
+meta.tags="android for work, work",
+fullpage=true
+section.landing=true
+header.hide=1
+footer.hide=1
+@jd:body
+
+<section class="dac-expand dac-hero dac-light" >
+ <div class="wrap">
+ <div class="cols dac-hero-content">
+ <div class="col-9of16 col-push-7of16 dac-hero-figure">
+ <img class="dac-hero-image" src="{@docRoot}images/work/hero_650px_2x.png"
+ srcset="{@docRoot}images/work/hero_650px.png 1x,
+ {@docRoot}images/work/hero_650px_2x.png 2x">
+ </div>
+ <div class="col-7of16 col-pull-9of16">
+ <h1 class="dac-hero-title">Android for Work</h1>
+ <p class="dac-hero-description">
+ Develop apps for Android for Work to take advantage of
+ security and management features built into Android.
+ </p>
+
+ <a class="dac-hero-cta" href="{@docRoot}work/overview.html">
+ <span class="dac-sprite dac-auto-chevron"></span>
+ Get Started
+ </a>
+ </div>
+ </div>
+ <div class="dac-section dac-small">
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:work/landing/primary"
+ data-cardSizes="6x2"
+ data-maxResults="6"></div>
+ </div>
+ </div>
+</section>
+
+<div class="wrap dac-offset-parent">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#resources">
+ <i class="dac-sprite dac-arrow-down-gray"></i>
+ </a>
+</div>
+
+<section class="dac-section dac-gray dac-small" id="resources">
+ <div class="wrap">
+ <h2 class="norule">Resources</h1>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:work/landing/resources"
+ data-cardSizes="6x6"
+ data-maxResults="16"></div>
+ </div>
+</section>
diff --git a/docs/html/training/enterprise/app-compatibility.jd b/docs/html/work/managed-profiles.jd
similarity index 94%
rename from docs/html/training/enterprise/app-compatibility.jd
rename to docs/html/work/managed-profiles.jd
index 419ba89..3287f55 100644
--- a/docs/html/training/enterprise/app-compatibility.jd
+++ b/docs/html/work/managed-profiles.jd
@@ -1,26 +1,19 @@
-page.title=Ensuring Compatibility with Managed Profiles
+page.title=Set up Managed Profiles
page.metaDescription=Learn how to make sure your apps operate smoothly in a corporate environment by following some best practices.
+page.image=images/work/cards/briefcase_600px.png
@jd:body
-<div id="tb-wrapper">
-<div id="tb">
-
-<h2>This lesson teaches you to</h2>
-<ol>
- <li><a href="#prevent_failed_intents">Prevent Failed Intents</a></li>
- <li><a href="#sharing_files">Share Files Across Profiles</a></li>
- <li><a href="#testing_apps">Test your App for Compatibility with Managed
- Profiles</a></li>
-</ol>
-
-<!-- related docs (NOT javadocs) -->
-<h2>Resources</h2>
-<ul>
- <li><a href="{@docRoot}samples/BasicManagedProfile/index.html">BasicManagedProfile</a></li>
-</ul>
-
-</div>
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ol>
+ <li><a href="#prevent_failed_intents">Prevent Failed Intents</a></li>
+ <li><a href="#sharing_files">Share Files Across Profiles</a></li>
+ <li><a href="#testing_apps">
+ Test your App for Compatibility with Managed Profiles</a></li>
+ </ol>
+ </div>
</div>
<p>The Android platform allows devices to have
diff --git a/docs/html/work/overview.jd b/docs/html/work/overview.jd
new file mode 100644
index 0000000..56d8c20
--- /dev/null
+++ b/docs/html/work/overview.jd
@@ -0,0 +1,142 @@
+page.title=Android for Work Developer Overview
+meta.tags="android for work, work, enterprise, corporate"
+page.tags="android for work, work, enterprise, corporate"
+page.metaDescription=Learn how to build Android apps for the enterprise and take advantage of Google's Android for Work program.
+page.image=images/work/cards/briefcase_600px.png
+
+@jd:body
+
+<div id="qv-wrapper">
+ <div id="qv">
+ <h2>In this document</h2>
+ <ul>
+ <li><a href="#developer-guide">Create Apps Using the Developer Guide</a></li>
+ <li><a href="#community-overview">What Does the Android for Work DevHub Offer?</a></li>
+ <li><a href="#develop-apps">Develop Apps for Enterprises</a></li>
+ <li><a href="#manage-devices">Manage Devices and Apps</a></li>
+ </ul>
+ </div>
+</div>
+
+<p>
+ As an Android for Work developer, you can deploy devices and apps to
+ employees and keep your corporate data secure. With Android for
+ Work, organizations can choose what devices, APIs, and framework
+ they want to use to develop apps.
+</p>
+
+<p>
+ With Android for Work, you can:
+ <ul>
+ <li>Build apps to help employees be more productive in scenarios
+ such as bring your own device (BYOD), and corporate-owned,
+ single-use devices (COSU).</li>
+ <li>Connect with leading enterprise mobility management (EMM)
+ <a href="https://www.google.com/work/android/partners/"
+ >partners</a> to help integrate Android in your business.</li>
+ </ul>
+</p>
+
+<p>
+ Additionally, Android for Work offers a partner program for
+ developers through the
+ <a href="https://www.google.com/work/android/developers/applyDevHub/"
+ >Android for Work DevHub</a>, which provides exclusive access to beta
+ features and developer events, along with access to a community of
+ Android developers making enterprise apps.
+</p>
+
+<h2 id="developer-guide">Create Apps Using the Developer Guide</h2>
+
+<p>
+ The <a href="{@docRoot}work/guide.html"
+ >Android for Work Developer Guide</a> is for developers who want to
+ create Android apps that best utilize and complement the features in
+ Android for Work. The guide defines the best practices to develop
+ and test enterprise-focused apps for Android devices running Android
+ for Work.
+</p>
+
+<h3>If you’re new to creating Android apps ...</h3>
+
+<p>
+ The Developer Guide assumes that you’re working as an independent
+ software vendor (ISV) or in a similar role, and have already built
+ an Android app. If you haven’t yet created an Android app, see
+ <a href="{@docRoot}training/basics/firstapp/index.html"
+ >Building Your First App</a>. If you’re looking for an accelerated
+ course, see the <a href="https://www.udacity.com/course/ud853"
+ >Developing Android Apps</a> course taught by Google employees.
+</p>
+
+<h2 id="community-overview">What Does the Android for Work DevHub Offer?</h2>
+
+<p>
+ The <a href="https://www.google.com/work/android/developers/applyDevHub/"
+ >Android for Work DevHub</a> offers these incentives:
+</p>
+
+<h3>Get exclusives</h3>
+
+<p>
+ Access to beta features and Android for Work developer training and
+ events, including invite-only hackathons.
+</p>
+
+<h3>Learn from experts</h3>
+
+<p>
+ Special content from Android for Work experts, including how to
+ optimize your app for the Play for Work store so that businesses can
+ see your app.
+</p>
+
+<h3>Talk to others</h3>
+
+<p>
+ Access to a moderated space dedicated to enterprise developers. Talk
+ with peers about issues specific to developing Android apps for
+ businesses.
+</p>
+
+<h3>How do I join?</h3>
+
+<p>
+ Apply to join the
+ <a href="https://www.google.com/work/android/developers/applyDevHub/"
+ >Android for Work DevHub</a>.
+</p>
+
+<h2 id="develop-apps">Develop Apps for Enterprises</h2>
+
+<p>
+ Learn how to make your app function smoothly in corporate
+ environments that restrict device features and data access. Go
+ further to support business use of your app by enabling restrictions
+ that administrators can use to remotely configure your app:
+</p>
+
+<div class="dynamic-grid">
+ <div class="resource-widget resource-flow-layout landing col-12"
+ data-query="collection:work/apps"
+ data-cardSizes="6x6"
+ data-maxResults="6">
+ </div>
+</div>
+
+
+<h2 id="manage-devices">Manage Devices and Apps</h2>
+
+<p>
+ Learn how to build policy controller apps that enable enterprise
+ administrators to manage devices, manage corporate apps, and provide
+ access to company resources:
+</p>
+
+<div class="dynamic-grid">
+ <div class="resource-widget resource-flow-layout landing col-12"
+ data-query="collection:work/admin"
+ data-cardSizes="6x6"
+ data-maxResults="4">
+ </div>
+</div>
diff --git a/docs/html/work/work_toc.cs b/docs/html/work/work_toc.cs
new file mode 100644
index 0000000..10658c2
--- /dev/null
+++ b/docs/html/work/work_toc.cs
@@ -0,0 +1,44 @@
+<ul id="nav">
+
+ <li class="nav-section">
+ <div class="nav-section-header empty">
+ <a href="<?cs var:toroot ?>work/index.html">
+ Android for Work Home</a>
+ </div>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header empty">
+ <a href="<?cs var:toroot ?>work/overview.html">
+ Overview</a>
+ </div>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header empty">
+ <a href="<?cs var:toroot ?>work/guide.html">
+ Developer Guide</a>
+ </div>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header empty">
+ <a href="<?cs var:toroot ?>work/managed-profiles.html">
+ Set up Managed Profiles</a></div>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header empty">
+ <a href="<?cs var:toroot ?>work/app-restrictions.html">
+ Set up App Restrictions</a>
+ </div>
+ </li>
+
+ <li class="nav-section">
+ <div class="nav-section-header empty">
+ <a href="<?cs var:toroot ?>work/cosu.html">
+ Set up Single-Purpose Devices</a>
+ </div>
+ </li>
+
+</ul>
diff --git a/docs/image_sources/topic/instant-apps/Play-Services.png b/docs/image_sources/topic/instant-apps/Play-Services.png
new file mode 100644
index 0000000..4b65c991
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/Play-Services.png
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/image03.png b/docs/image_sources/topic/instant-apps/image03.png
new file mode 100644
index 0000000..becc7ff
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/image03.png
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/instant-apps-section-2 b/docs/image_sources/topic/instant-apps/instant-apps-section-2
new file mode 100644
index 0000000..6857e1f
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/instant-apps-section-2
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/instant-apps-section-4 b/docs/image_sources/topic/instant-apps/instant-apps-section-4
new file mode 100644
index 0000000..c9436f1
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/instant-apps-section-4
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/instant-apps-section-5 b/docs/image_sources/topic/instant-apps/instant-apps-section-5
new file mode 100644
index 0000000..b33544c
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/instant-apps-section-5
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/play-services-features-2x.png b/docs/image_sources/topic/instant-apps/play-services-features-2x.png
new file mode 100644
index 0000000..098f91c
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/play-services-features-2x.png
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/s3-BandH-animated.gif b/docs/image_sources/topic/instant-apps/s3-BandH-animated.gif
new file mode 100644
index 0000000..efa8827
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/s3-BandH-animated.gif
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/s3-BandH-static.png b/docs/image_sources/topic/instant-apps/s3-BandH-static.png
new file mode 100644
index 0000000..004afb7
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/s3-BandH-static.png
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/s3-BuzzFeed-animated.gif b/docs/image_sources/topic/instant-apps/s3-BuzzFeed-animated.gif
new file mode 100644
index 0000000..16c4619
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/s3-BuzzFeed-animated.gif
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/s3-BuzzFeed-static.png b/docs/image_sources/topic/instant-apps/s3-BuzzFeed-static.png
new file mode 100644
index 0000000..cdd0dc8
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/s3-BuzzFeed-static.png
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/s3-ParkandPay-animated.gif b/docs/image_sources/topic/instant-apps/s3-ParkandPay-animated.gif
new file mode 100644
index 0000000..f5cbfb0
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/s3-ParkandPay-animated.gif
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/s3-ParkandPay-static.png b/docs/image_sources/topic/instant-apps/s3-ParkandPay-static.png
new file mode 100644
index 0000000..1e07a74
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/s3-ParkandPay-static.png
Binary files differ
diff --git a/docs/image_sources/topic/instant-apps/upgrade-your-app-2x.png b/docs/image_sources/topic/instant-apps/upgrade-your-app-2x.png
new file mode 100644
index 0000000..fbf6a01
--- /dev/null
+++ b/docs/image_sources/topic/instant-apps/upgrade-your-app-2x.png
Binary files differ
diff --git "a/docs/image_sources/topic/instant-apps/works-on-all-2x \0501\051.png" "b/docs/image_sources/topic/instant-apps/works-on-all-2x \0501\051.png"
new file mode 100644
index 0000000..5a44032
--- /dev/null
+++ "b/docs/image_sources/topic/instant-apps/works-on-all-2x \0501\051.png"
Binary files differ
diff --git a/graphics/java/android/graphics/Camera.java b/graphics/java/android/graphics/Camera.java
index 57e0f27..60588d0 100644
--- a/graphics/java/android/graphics/Camera.java
+++ b/graphics/java/android/graphics/Camera.java
@@ -163,6 +163,7 @@
protected void finalize() throws Throwable {
try {
nativeDestructor();
+ native_instance = 0;
} finally {
super.finalize();
}
diff --git a/graphics/java/android/graphics/ColorFilter.java b/graphics/java/android/graphics/ColorFilter.java
index 4838aa0..ac62bf4 100644
--- a/graphics/java/android/graphics/ColorFilter.java
+++ b/graphics/java/android/graphics/ColorFilter.java
@@ -40,6 +40,7 @@
super.finalize();
} finally {
destroyFilter(native_instance);
+ native_instance = 0;
}
}
diff --git a/graphics/java/android/graphics/DrawFilter.java b/graphics/java/android/graphics/DrawFilter.java
index aaefce9..c7fdcb2 100644
--- a/graphics/java/android/graphics/DrawFilter.java
+++ b/graphics/java/android/graphics/DrawFilter.java
@@ -33,6 +33,7 @@
protected void finalize() throws Throwable {
try {
nativeDestructor(mNativeInt);
+ mNativeInt = 0;
} finally {
super.finalize();
}
diff --git a/graphics/java/android/graphics/Movie.java b/graphics/java/android/graphics/Movie.java
index ecb4255..c8f86c6 100644
--- a/graphics/java/android/graphics/Movie.java
+++ b/graphics/java/android/graphics/Movie.java
@@ -21,7 +21,7 @@
import java.io.FileInputStream;
public class Movie {
- private final long mNativeMovie;
+ private long mNativeMovie;
private Movie(long nativeMovie) {
if (nativeMovie == 0) {
@@ -82,6 +82,7 @@
protected void finalize() throws Throwable {
try {
nativeDestructor(mNativeMovie);
+ mNativeMovie = 0;
} finally {
super.finalize();
}
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index daa1d7c..054e29f 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -19,11 +19,11 @@
import android.annotation.ColorInt;
import android.annotation.NonNull;
import android.annotation.Size;
+import android.os.LocaleList;
import android.text.GraphicsOperations;
import android.text.SpannableString;
import android.text.SpannedString;
import android.text.TextUtils;
-import android.util.LocaleList;
import com.android.internal.annotations.GuardedBy;
diff --git a/graphics/java/android/graphics/Rasterizer.java b/graphics/java/android/graphics/Rasterizer.java
index c351d94e..f6a38fe 100644
--- a/graphics/java/android/graphics/Rasterizer.java
+++ b/graphics/java/android/graphics/Rasterizer.java
@@ -26,6 +26,7 @@
protected void finalize() throws Throwable {
finalizer(native_instance);
+ native_instance = 0;
}
private static native void finalizer(long native_instance);
diff --git a/graphics/java/android/graphics/Xfermode.java b/graphics/java/android/graphics/Xfermode.java
index 883350d..c049e41 100644
--- a/graphics/java/android/graphics/Xfermode.java
+++ b/graphics/java/android/graphics/Xfermode.java
@@ -33,6 +33,7 @@
protected void finalize() throws Throwable {
try {
finalizer(native_instance);
+ native_instance = 0;
} finally {
super.finalize();
}
diff --git a/libs/hwui/Android.mk b/libs/hwui/Android.mk
index 8857c41..faf6a52 100644
--- a/libs/hwui/Android.mk
+++ b/libs/hwui/Android.mk
@@ -259,6 +259,7 @@
tests/unit/SkiaBehaviorTests.cpp \
tests/unit/SnapshotTests.cpp \
tests/unit/StringUtilsTests.cpp \
+ tests/unit/TestUtilsTests.cpp \
tests/unit/TextDropShadowCacheTests.cpp \
tests/unit/VectorDrawableTests.cpp
diff --git a/libs/hwui/BakedOpDispatcher.cpp b/libs/hwui/BakedOpDispatcher.cpp
index 2ec7b75..59c1065 100644
--- a/libs/hwui/BakedOpDispatcher.cpp
+++ b/libs/hwui/BakedOpDispatcher.cpp
@@ -791,6 +791,16 @@
renderer.renderGlop(state, glop);
}
+void renderRectForLayer(BakedOpRenderer& renderer, const LayerOp& op, const BakedOpState& state,
+ int color, SkXfermode::Mode mode, SkColorFilter* colorFilter) {
+ SkPaint paint;
+ paint.setColor(color);
+ paint.setXfermodeMode(mode);
+ paint.setColorFilter(colorFilter);
+ RectOp rectOp(op.unmappedBounds, op.localMatrix, op.localClip, &paint);
+ BakedOpDispatcher::onRectOp(renderer, rectOp, state);
+}
+
void BakedOpDispatcher::onLayerOp(BakedOpRenderer& renderer, const LayerOp& op, const BakedOpState& state) {
// Note that we don't use op->paint in this function - it's never set on a LayerOp
OffscreenBuffer* buffer = *op.layerHandle;
@@ -798,12 +808,9 @@
if (CC_UNLIKELY(!buffer)) {
// Layer was not allocated, which can occur if there were no draw ops inside. We draw the
// equivalent by drawing a rect with the same layer properties (alpha/xfer/filter).
- SkPaint paint;
- paint.setAlpha(op.alpha * 255);
- paint.setXfermodeMode(op.mode);
- paint.setColorFilter(op.colorFilter);
- RectOp rectOp(op.unmappedBounds, op.localMatrix, op.localClip, &paint);
- BakedOpDispatcher::onRectOp(renderer, rectOp, state);
+ int color = SkColorSetA(SK_ColorTRANSPARENT, op.alpha * 255);
+ renderRectForLayer(renderer, op, state,
+ color, op.mode, op.colorFilter);
} else {
float layerAlpha = op.alpha * state.alpha;
Glop glop;
@@ -817,6 +824,19 @@
.build();
renderer.renderGlop(state, glop);
}
+
+ if (buffer && !buffer->hasRenderedSinceRepaint) {
+ buffer->hasRenderedSinceRepaint = true;
+ if (CC_UNLIKELY(Properties::debugLayersUpdates)) {
+ // render debug layer highlight
+ renderRectForLayer(renderer, op, state,
+ 0x7f00ff00, SkXfermode::Mode::kSrcOver_Mode, nullptr);
+ } else if (CC_UNLIKELY(Properties::debugOverdraw)) {
+ // render transparent to increment overdraw for repaint area
+ renderRectForLayer(renderer, op, state,
+ SK_ColorTRANSPARENT, SkXfermode::Mode::kSrcOver_Mode, nullptr);
+ }
+ }
}
void BakedOpDispatcher::onCopyToLayerOp(BakedOpRenderer& renderer, const CopyToLayerOp& op, const BakedOpState& state) {
diff --git a/libs/hwui/BakedOpRenderer.cpp b/libs/hwui/BakedOpRenderer.cpp
index 3c302b3..eed0126 100644
--- a/libs/hwui/BakedOpRenderer.cpp
+++ b/libs/hwui/BakedOpRenderer.cpp
@@ -55,6 +55,7 @@
}
mRenderTarget.offscreenBuffer = offscreenBuffer;
+ mRenderTarget.offscreenBuffer->hasRenderedSinceRepaint = false;
// create and bind framebuffer
mRenderTarget.frameBufferId = mRenderState.createFramebuffer();
diff --git a/libs/hwui/FrameBuilder.cpp b/libs/hwui/FrameBuilder.cpp
index 84c8a74..746e99a 100644
--- a/libs/hwui/FrameBuilder.cpp
+++ b/libs/hwui/FrameBuilder.cpp
@@ -81,7 +81,8 @@
// only schedule repaint if node still on layer - possible it may have been
// removed during a dropped frame, but layers may still remain scheduled so
// as not to lose info on what portion is damaged
- if (CC_LIKELY(layerNode->getLayer() != nullptr)) {
+ OffscreenBuffer* layer = layerNode->getLayer();
+ if (CC_LIKELY(layer)) {
ATRACE_FORMAT("Optimize HW Layer DisplayList %s %ux%u",
layerNode->getName(), layerNode->getWidth(), layerNode->getHeight());
@@ -90,7 +91,7 @@
// map current light center into RenderNode's coordinate space
Vector3 lightCenter = mCanvasState.currentSnapshot()->getRelativeLightCenter();
- layerNode->getLayer()->inverseTransformInWindow.mapPoint3d(lightCenter);
+ layer->inverseTransformInWindow.mapPoint3d(lightCenter);
saveForLayer(layerNode->getWidth(), layerNode->getHeight(), 0, 0,
layerDamage, lightCenter, nullptr, layerNode);
diff --git a/libs/hwui/renderstate/OffscreenBufferPool.h b/libs/hwui/renderstate/OffscreenBufferPool.h
index 089f131..73a3392 100644
--- a/libs/hwui/renderstate/OffscreenBufferPool.h
+++ b/libs/hwui/renderstate/OffscreenBufferPool.h
@@ -77,6 +77,8 @@
// vbo / size of mesh
GLsizei elementCount = 0;
GLuint vbo = 0;
+
+ bool hasRenderedSinceRepaint;
};
/**
diff --git a/libs/hwui/tests/common/TestUtils.h b/libs/hwui/tests/common/TestUtils.h
index dbaefa4..4536bef 100644
--- a/libs/hwui/tests/common/TestUtils.h
+++ b/libs/hwui/tests/common/TestUtils.h
@@ -74,6 +74,28 @@
}; \
void test_case_name##_##test_name##_RenderThreadTest::doTheThing(renderthread::RenderThread& renderThread)
+/**
+ * Sets a property value temporarily, generally for the duration of a test, restoring the previous
+ * value when going out of scope.
+ *
+ * Can be used e.g. to test behavior only active while Properties::debugOverdraw is enabled.
+ */
+template <typename T>
+class ScopedProperty {
+public:
+ ScopedProperty(T& property, T newValue)
+ : mPropertyPtr(&property)
+ , mOldValue(property) {
+ property = newValue;
+ }
+ ~ScopedProperty() {
+ *mPropertyPtr = mOldValue;
+ }
+private:
+ T* mPropertyPtr;
+ T mOldValue;
+};
+
class TestUtils {
public:
class SignalingDtor {
diff --git a/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp b/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
index 5613f9f..01d3d70 100644
--- a/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
+++ b/libs/hwui/tests/unit/BakedOpDispatcherTests.cpp
@@ -16,21 +16,22 @@
#include <gtest/gtest.h>
-#include <RecordedOp.h>
#include <BakedOpDispatcher.h>
#include <BakedOpRenderer.h>
#include <FrameBuilder.h>
-#include <SkBlurDrawLooper.h>
+#include <LayerUpdateQueue.h>
#include <hwui/Paint.h>
+#include <RecordedOp.h>
#include <tests/common/TestUtils.h>
+#include <utils/Color.h>
+#include <SkBlurDrawLooper.h>
#include <SkDashPathEffect.h>
using namespace android::uirenderer;
static BakedOpRenderer::LightInfo sLightInfo;
const FrameBuilder::LightGeometry sLightGeometry = { {100, 100, 100}, 50};
-static Rect sBaseClip(100, 100);
class ValidatingBakedOpRenderer : public BakedOpRenderer {
public:
@@ -55,7 +56,7 @@
std::function<void(const Glop& glop)> glopVerifier) {
// Create op, and wrap with basic state.
LinearAllocator allocator;
- auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), sBaseClip);
+ auto snapshot = TestUtils::makeSnapshot(Matrix4::identity(), Rect(100, 100));
auto state = BakedOpState::tryConstruct(allocator, *snapshot, *op);
ASSERT_NE(nullptr, state);
@@ -194,4 +195,84 @@
frameBuilder.replayBakedOps<BakedOpDispatcher>(renderer);
ASSERT_EQ(3, glopCount) << "Exactly three glops expected";
-}
\ No newline at end of file
+}
+
+static void validateLayerDraw(renderthread::RenderThread& renderThread,
+ std::function<void(const Glop& glop)> validator) {
+ auto node = TestUtils::createNode(0, 0, 100, 100,
+ [](RenderProperties& props, TestCanvas& canvas) {
+ props.mutateLayerProperties().setType(LayerType::RenderLayer);
+
+ // provide different blend mode, so decoration draws contrast
+ props.mutateLayerProperties().setXferMode(SkXfermode::Mode::kSrc_Mode);
+ canvas.drawColor(Color::Black, SkXfermode::Mode::kSrcOver_Mode);
+ });
+ OffscreenBuffer** layerHandle = node->getLayerHandle();
+
+ auto syncedNode = TestUtils::getSyncedNode(node);
+
+ // create RenderNode's layer here in same way prepareTree would
+ OffscreenBuffer layer(renderThread.renderState(), Caches::getInstance(), 100, 100);
+ *layerHandle = &layer;
+ {
+ LayerUpdateQueue layerUpdateQueue; // Note: enqueue damage post-sync, so bounds are valid
+ layerUpdateQueue.enqueueLayerWithDamage(node.get(), Rect(0, 0, 100, 100));
+
+ ValidatingBakedOpRenderer renderer(renderThread.renderState(), validator);
+ FrameBuilder frameBuilder(SkRect::MakeWH(100, 100), 100, 100,
+ sLightGeometry, Caches::getInstance());
+ frameBuilder.deferLayers(layerUpdateQueue);
+ frameBuilder.deferRenderNode(*syncedNode);
+ frameBuilder.replayBakedOps<BakedOpDispatcher>(renderer);
+ }
+
+ // clean up layer pointer, so we can safely destruct RenderNode
+ *layerHandle = nullptr;
+}
+
+static FloatColor makeFloatColor(uint32_t color) {
+ FloatColor c;
+ c.set(color);
+ return c;
+}
+
+RENDERTHREAD_TEST(BakedOpDispatcher, layerUpdateProperties) {
+ for (bool debugOverdraw : { false, true }) {
+ for (bool debugLayersUpdates : { false, true }) {
+ ScopedProperty<bool> ovdProp(Properties::debugOverdraw, debugOverdraw);
+ ScopedProperty<bool> lupProp(Properties::debugLayersUpdates, debugLayersUpdates);
+
+ int glopCount = 0;
+ validateLayerDraw(renderThread, [&glopCount, &debugLayersUpdates](const Glop& glop) {
+ if (glopCount == 0) {
+ // 0 - Black layer fill
+ EXPECT_TRUE(glop.fill.colorEnabled);
+ EXPECT_EQ(makeFloatColor(Color::Black), glop.fill.color);
+ } else if (glopCount == 1) {
+ // 1 - Uncolored (textured) layer draw
+ EXPECT_FALSE(glop.fill.colorEnabled);
+ } else if (glopCount == 2) {
+ // 2 - layer overlay, if present
+ EXPECT_TRUE(glop.fill.colorEnabled);
+ // blend srcover, different from that of layer
+ EXPECT_EQ(GLenum(GL_ONE), glop.blend.src);
+ EXPECT_EQ(GLenum(GL_ONE_MINUS_SRC_ALPHA), glop.blend.dst);
+ EXPECT_EQ(makeFloatColor(debugLayersUpdates ? 0x7f00ff00 : 0),
+ glop.fill.color) << "Should be transparent green if debugLayersUpdates";
+ } else if (glopCount < 7) {
+ // 3 - 6 - overdraw indicator overlays, if present
+ EXPECT_TRUE(glop.fill.colorEnabled);
+ uint32_t expectedColor = Caches::getInstance().getOverdrawColor(glopCount - 2);
+ ASSERT_EQ(makeFloatColor(expectedColor), glop.fill.color);
+ } else {
+ ADD_FAILURE() << "Too many glops observed";
+ }
+ glopCount++;
+ });
+ int expectedCount = 2;
+ if (debugLayersUpdates || debugOverdraw) expectedCount++;
+ if (debugOverdraw) expectedCount += 4;
+ EXPECT_EQ(expectedCount, glopCount);
+ }
+ }
+}
diff --git a/libs/hwui/tests/unit/TestUtilsTests.cpp b/libs/hwui/tests/unit/TestUtilsTests.cpp
new file mode 100644
index 0000000..4905957
--- /dev/null
+++ b/libs/hwui/tests/unit/TestUtilsTests.cpp
@@ -0,0 +1,36 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "tests/common/TestUtils.h"
+#include "Properties.h"
+
+#include <gtest/gtest.h>
+
+using namespace android::uirenderer;
+
+TEST(ScopedProperty, simpleBool) {
+ bool previous = Properties::debugOverdraw;
+ {
+ ScopedProperty<bool> debugOverdraw(Properties::debugOverdraw, true);
+ EXPECT_TRUE(Properties::debugOverdraw);
+ }
+ EXPECT_EQ(previous, Properties::debugOverdraw);
+ {
+ ScopedProperty<bool> debugOverdraw(Properties::debugOverdraw, false);
+ EXPECT_FALSE(Properties::debugOverdraw);
+ }
+ EXPECT_EQ(previous, Properties::debugOverdraw);
+}
diff --git a/media/java/android/media/tv/TvInputInfo.java b/media/java/android/media/tv/TvInputInfo.java
index a33b219..3b74ee7 100644
--- a/media/java/android/media/tv/TvInputInfo.java
+++ b/media/java/android/media/tv/TvInputInfo.java
@@ -48,6 +48,7 @@
import org.xmlpull.v1.XmlPullParser;
import org.xmlpull.v1.XmlPullParserException;
+import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.lang.annotation.Retention;
@@ -875,10 +876,8 @@
* for the {@link TvInputService} this TV input implements.
*
* @return TvInputInfo containing information about this TV input.
- * @throws IOException If there was an I/O error.
- * @throws XmlPullParserException If there was an XML parsing error.
*/
- public TvInputInfo build() throws IOException, XmlPullParserException {
+ public TvInputInfo build() {
ComponentName componentName = new ComponentName(mResolveInfo.serviceInfo.packageName,
mResolveInfo.serviceInfo.name);
String id;
@@ -925,15 +924,14 @@
+ tvInputHardwareInfo.getDeviceId();
}
- private void parseServiceMetadata(int inputType)
- throws XmlPullParserException, IOException {
+ private void parseServiceMetadata(int inputType) {
ServiceInfo si = mResolveInfo.serviceInfo;
PackageManager pm = mContext.getPackageManager();
try (XmlResourceParser parser =
si.loadXmlMetaData(pm, TvInputService.SERVICE_META_DATA)) {
if (parser == null) {
- throw new XmlPullParserException("No " + TvInputService.SERVICE_META_DATA
- + " meta-data for " + si.name);
+ throw new IllegalStateException("No " + TvInputService.SERVICE_META_DATA
+ + " meta-data found for " + si.name);
}
Resources res = pm.getResourcesForApplication(si.applicationInfo);
@@ -946,26 +944,19 @@
String nodeName = parser.getName();
if (!XML_START_TAG_NAME.equals(nodeName)) {
- throw new XmlPullParserException(
- "Meta-data does not start with tv-input-service tag in " + si.name);
+ throw new IllegalStateException("Meta-data does not start with "
+ + XML_START_TAG_NAME + " tag for " + si.name);
}
TypedArray sa = res.obtainAttributes(attrs,
com.android.internal.R.styleable.TvInputService);
mSetupActivity = sa.getString(
com.android.internal.R.styleable.TvInputService_setupActivity);
- if (DEBUG) {
- Log.d(TAG, "Setup activity loaded. [" + mSetupActivity + "] for " + si.name);
- }
if (inputType == TYPE_TUNER && TextUtils.isEmpty(mSetupActivity)) {
- throw new XmlPullParserException("Setup activity not found in " + si.name);
+ throw new IllegalStateException("Setup activity not found for " + si.name);
}
mSettingsActivity = sa.getString(
com.android.internal.R.styleable.TvInputService_settingsActivity);
- if (DEBUG) {
- Log.d(TAG, "Settings activity loaded. [" + mSettingsActivity + "] for "
- + si.name);
- }
if (mCanRecord == null) {
mCanRecord = sa.getBoolean(
com.android.internal.R.styleable.TvInputService_canRecord, false);
@@ -975,8 +966,10 @@
com.android.internal.R.styleable.TvInputService_tunerCount, 1);
}
sa.recycle();
+ } catch (IOException | XmlPullParserException e) {
+ throw new IllegalStateException("Failed reading meta-data for " + si.packageName, e);
} catch (NameNotFoundException e) {
- throw new XmlPullParserException("Unable to create context for: " + si.packageName);
+ throw new IllegalStateException("No resources found for " + si.packageName, e);
}
}
}
diff --git a/media/jni/android_media_MediaSync.cpp b/media/jni/android_media_MediaSync.cpp
index 893c414..6de5ea9 100644
--- a/media/jni/android_media_MediaSync.cpp
+++ b/media/jni/android_media_MediaSync.cpp
@@ -159,7 +159,7 @@
if (err > 0) {
break;
}
- AString msgWithErrorCode(msg);
+ AString msgWithErrorCode(msg == NULL ? "" : msg);
msgWithErrorCode.append(" error:");
msgWithErrorCode.append(err);
jniThrowException(env, "java/lang/IllegalStateException", msgWithErrorCode.c_str());
diff --git a/packages/DocumentsUI/res/values-be-rBY/strings.xml b/packages/DocumentsUI/res/values-be-rBY/strings.xml
index 1a0f254..a7038aa 100644
--- a/packages/DocumentsUI/res/values-be-rBY/strings.xml
+++ b/packages/DocumentsUI/res/values-be-rBY/strings.xml
@@ -53,7 +53,7 @@
<string name="save_error" msgid="6167009778003223664">"Не атрымалася захаваць дакумент"</string>
<string name="create_error" msgid="3735649141335444215">"Не атрымалася стварыць папку"</string>
<string name="query_error" msgid="5999895349602476581">"Зараз немагчыма загрузіць змесціва"</string>
- <string name="root_recent" msgid="4470053704320518133">"Апошнія"</string>
+ <string name="root_recent" msgid="4470053704320518133">"Нядаўнія"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> свабодна"</string>
<string name="root_type_service" msgid="2178854894416775409">"Службы захоўвання"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Ярлыкі"</string>
@@ -129,7 +129,7 @@
<string name="open_external_dialog_root_request" msgid="8899108702926347720">"Даць <xliff:g id="APPNAME"><b>^1</b></xliff:g> доступ да вашых даных, у тым ліку фатаграфій і відэа, на <xliff:g id="STORAGE"><i>^2</i></xliff:g>?"</string>
<string name="never_ask_again" msgid="4295278542972859268">"Больш не пытацца"</string>
<string name="allow" msgid="7225948811296386551">"Дазволіць"</string>
- <string name="deny" msgid="2081879885755434506">"Забараніць"</string>
+ <string name="deny" msgid="2081879885755434506">"Адмовіць"</string>
<plurals name="elements_selected" formatted="false" msgid="1376955402452875047">
<item quantity="one">Выбраны <xliff:g id="COUNT_1">%1$d</xliff:g></item>
<item quantity="few">Выбраны <xliff:g id="COUNT_1">%1$d</xliff:g></item>
diff --git a/packages/DocumentsUI/res/values-el/strings.xml b/packages/DocumentsUI/res/values-el/strings.xml
index ddb3eb8..461b191 100644
--- a/packages/DocumentsUI/res/values-el/strings.xml
+++ b/packages/DocumentsUI/res/values-el/strings.xml
@@ -63,7 +63,7 @@
<string name="no_results" msgid="6622510343880730446">"Χωρίς αντιστοιχίσεις στο %1$s"</string>
<string name="toast_no_application" msgid="4632640357724698144">"Δεν είναι δυνατό το άνοιγμα του αρχείου"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Δεν είναι δυνατή η διαγραφή ορισμένων εγγράφων"</string>
- <string name="share_via" msgid="8966594246261344259">"Κοινή χρήση μέσω"</string>
+ <string name="share_via" msgid="8966594246261344259">"Κοινοποίηση μέσω"</string>
<string name="copy_notification_title" msgid="6374299806748219777">"Αντιγραφή αρχείων"</string>
<string name="move_notification_title" msgid="6193835179777284805">"Μετακίνηση αρχείων"</string>
<string name="delete_notification_title" msgid="3329403967712437496">"Διαγραφή αρχείων"</string>
diff --git a/packages/DocumentsUI/res/values-es/strings.xml b/packages/DocumentsUI/res/values-es/strings.xml
index 22b3527..1efe13f 100644
--- a/packages/DocumentsUI/res/values-es/strings.xml
+++ b/packages/DocumentsUI/res/values-es/strings.xml
@@ -43,7 +43,7 @@
<string name="button_select" msgid="527196987259139214">"Seleccionar"</string>
<string name="button_copy" msgid="8706475544635021302">"Copiar"</string>
<string name="button_move" msgid="2202666023104202232">"Mover"</string>
- <string name="button_dismiss" msgid="3714065566893946085">"Ignorar"</string>
+ <string name="button_dismiss" msgid="3714065566893946085">"Descartar"</string>
<string name="button_retry" msgid="4392027584153752797">"Reintentar"</string>
<string name="sort_name" msgid="9183560467917256779">"Por nombre"</string>
<string name="sort_date" msgid="586080032956151448">"Por fecha de modificación"</string>
diff --git a/packages/DocumentsUI/res/values-et-rEE/strings.xml b/packages/DocumentsUI/res/values-et-rEE/strings.xml
index c40cd55..ad1937f 100644
--- a/packages/DocumentsUI/res/values-et-rEE/strings.xml
+++ b/packages/DocumentsUI/res/values-et-rEE/strings.xml
@@ -18,12 +18,12 @@
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"Dokumendid"</string>
<string name="downloads_label" msgid="959113951084633612">"Allalaadimised"</string>
- <string name="title_open" msgid="4353228937663917801">"Ava:"</string>
+ <string name="title_open" msgid="4353228937663917801">"Ava asukohast:"</string>
<string name="title_save" msgid="2433679664882857999">"Salvesta:"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"Uus kaust"</string>
<string name="menu_grid" msgid="6878021334497835259">"Ruudustikkuva"</string>
<string name="menu_list" msgid="7279285939892417279">"Loendikuva"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Sortimisalus:"</string>
+ <string name="menu_sort" msgid="7677740407158414452">"Sortimisalus"</string>
<string name="menu_search" msgid="3816712084502856974">"Otsing"</string>
<string name="menu_settings" msgid="8239065133341597825">"Salvestusruumi seaded"</string>
<string name="menu_open" msgid="432922957274920903">"Ava"</string>
@@ -31,8 +31,8 @@
<string name="menu_share" msgid="3075149983979628146">"Jaga"</string>
<string name="menu_delete" msgid="8138799623850614177">"Kustuta"</string>
<string name="menu_select_all" msgid="8323579667348729928">"Vali kõik"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Kopeeri asukohta ..."</string>
- <string name="menu_move" msgid="1828090633118079817">"Teisaldamine kohta ..."</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Kopeeri asukohta..."</string>
+ <string name="menu_move" msgid="1828090633118079817">"Teisalda asukohta..."</string>
<string name="menu_new_window" msgid="1226032889278727538">"Uus aken"</string>
<string name="menu_copy_to_clipboard" msgid="489311381979634291">"Kopeeri"</string>
<string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Kleebi"</string>
diff --git a/packages/DocumentsUI/res/values-fr-rCA/strings.xml b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
index 916eed5..b91b148 100644
--- a/packages/DocumentsUI/res/values-fr-rCA/strings.xml
+++ b/packages/DocumentsUI/res/values-fr-rCA/strings.xml
@@ -31,7 +31,7 @@
<string name="menu_share" msgid="3075149983979628146">"Partager"</string>
<string name="menu_delete" msgid="8138799623850614177">"Supprimer"</string>
<string name="menu_select_all" msgid="8323579667348729928">"Tout sélectionner"</string>
- <string name="menu_copy" msgid="3612326052677229148">"Copier vers..."</string>
+ <string name="menu_copy" msgid="3612326052677229148">"Copier dans..."</string>
<string name="menu_move" msgid="1828090633118079817">"Déplacer dans…"</string>
<string name="menu_new_window" msgid="1226032889278727538">"Nouvelle fenêtre"</string>
<string name="menu_copy_to_clipboard" msgid="489311381979634291">"Copier"</string>
diff --git a/packages/DocumentsUI/res/values-hu/strings.xml b/packages/DocumentsUI/res/values-hu/strings.xml
index d975ed5..aa9d799 100644
--- a/packages/DocumentsUI/res/values-hu/strings.xml
+++ b/packages/DocumentsUI/res/values-hu/strings.xml
@@ -23,7 +23,7 @@
<string name="menu_create_dir" msgid="2547620241173881754">"Új mappa"</string>
<string name="menu_grid" msgid="6878021334497835259">"Rács"</string>
<string name="menu_list" msgid="7279285939892417279">"Lista"</string>
- <string name="menu_sort" msgid="7677740407158414452">"Rendezés"</string>
+ <string name="menu_sort" msgid="7677740407158414452">"Rendezés alapja"</string>
<string name="menu_search" msgid="3816712084502856974">"Keresés"</string>
<string name="menu_settings" msgid="8239065133341597825">"Tárolóhely beállításai"</string>
<string name="menu_open" msgid="432922957274920903">"Megnyitás"</string>
diff --git a/packages/DocumentsUI/res/values-hy-rAM/strings.xml b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
index e206598..2afb205 100644
--- a/packages/DocumentsUI/res/values-hy-rAM/strings.xml
+++ b/packages/DocumentsUI/res/values-hy-rAM/strings.xml
@@ -32,7 +32,7 @@
<string name="menu_delete" msgid="8138799623850614177">"Ջնջել"</string>
<string name="menu_select_all" msgid="8323579667348729928">"Ընտրել բոլորը"</string>
<string name="menu_copy" msgid="3612326052677229148">"Պատճենել…"</string>
- <string name="menu_move" msgid="1828090633118079817">"Տեղափոխում դեպի…"</string>
+ <string name="menu_move" msgid="1828090633118079817">"Տեղափոխել…"</string>
<string name="menu_new_window" msgid="1226032889278727538">"Նոր պատուհան"</string>
<string name="menu_copy_to_clipboard" msgid="489311381979634291">"Պատճենել"</string>
<string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Տեղադրել"</string>
@@ -59,7 +59,7 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Դյուրանցումներ"</string>
<string name="root_type_device" msgid="7121342474653483538">"Սարքեր"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Հավելյալ ծրագրեր"</string>
- <string name="empty" msgid="7858882803708117596">"Տարրեր չկան"</string>
+ <string name="empty" msgid="7858882803708117596">"Ոչինչ չկա"</string>
<string name="no_results" msgid="6622510343880730446">"%1$s-ում համընկնումներ չկան"</string>
<string name="toast_no_application" msgid="4632640357724698144">"Հնարավոր չէ բացել ֆայլը"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Անհնար է ջնջել որոշ փաստաթղթեր"</string>
diff --git a/packages/DocumentsUI/res/values-lo-rLA/strings.xml b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
index be9b18d..6c2bfd6 100644
--- a/packages/DocumentsUI/res/values-lo-rLA/strings.xml
+++ b/packages/DocumentsUI/res/values-lo-rLA/strings.xml
@@ -31,7 +31,7 @@
<string name="menu_share" msgid="3075149983979628146">"ແບ່ງປັນ"</string>
<string name="menu_delete" msgid="8138799623850614177">"ລຶບ"</string>
<string name="menu_select_all" msgid="8323579667348729928">"ເລືອກທັງຫມົດ"</string>
- <string name="menu_copy" msgid="3612326052677229148">"ອັດສຳເນົາໃສ່…"</string>
+ <string name="menu_copy" msgid="3612326052677229148">"ສຳເນົາໄປໃສ່..."</string>
<string name="menu_move" msgid="1828090633118079817">"ຍ້າຍໄປໃສ່..."</string>
<string name="menu_new_window" msgid="1226032889278727538">"ໜ້າຈໍໃໝ່"</string>
<string name="menu_copy_to_clipboard" msgid="489311381979634291">"ສຳເນົາ"</string>
@@ -53,7 +53,7 @@
<string name="save_error" msgid="6167009778003223664">"ການບັນທຶກເອກະສານລົ້ມເຫລວ"</string>
<string name="create_error" msgid="3735649141335444215">"ການສ້າງໂຟນເດີລົ້ມເຫຼວ"</string>
<string name="query_error" msgid="5999895349602476581">"ບໍ່ສາມາດໂຫຼດເນື້ອຫາໄດ້ໃນຂະນະນີ້"</string>
- <string name="root_recent" msgid="4470053704320518133">"ຫາກໍໃຊ້"</string>
+ <string name="root_recent" msgid="4470053704320518133">"ຫຼ້າສຸດ"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"ຟຣີ <xliff:g id="SIZE">%1$s</xliff:g>"</string>
<string name="root_type_service" msgid="2178854894416775409">"ບໍລິການບ່ອນຈັດເກັບຂໍ້ມູນ"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"ທາງລັດ"</string>
diff --git a/packages/DocumentsUI/res/values-pa-rIN/strings.xml b/packages/DocumentsUI/res/values-pa-rIN/strings.xml
index 1b1f3c1..71f5f59 100644
--- a/packages/DocumentsUI/res/values-pa-rIN/strings.xml
+++ b/packages/DocumentsUI/res/values-pa-rIN/strings.xml
@@ -80,7 +80,7 @@
<item quantity="one"><xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਮਿਟਾ ਰਿਹਾ ਹੈ।</item>
<item quantity="other"><xliff:g id="COUNT_1">%1$d</xliff:g> ਫ਼ਾਈਲਾਂ ਮਿਟਾ ਰਿਹਾ ਹੈ।</item>
</plurals>
- <string name="undo" msgid="7905788502491742328">"ਪਹਿਲਾਂ ਵਰਗਾ ਕਰੋ"</string>
+ <string name="undo" msgid="7905788502491742328">"ਅਣਕੀਤਾ ਕਰੋ"</string>
<string name="copy_preparing" msgid="3896202461003039386">"ਕਾਪੀ ਲਈ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ…"</string>
<string name="move_preparing" msgid="2772219441375531410">"ਮੂਵ ਲਈ ਤਿਆਰ ਕਰ ਰਿਹਾ ਹੈ..."</string>
<string name="delete_preparing" msgid="5655813182533491992">"ਮਿਟਾਉਣ ਦੀ ਤਿਆਰੀ ਹੋ ਰਹੀ ਹੈ…"</string>
diff --git a/packages/DocumentsUI/res/values-ro/strings.xml b/packages/DocumentsUI/res/values-ro/strings.xml
index 78c7988..1f519f5 100644
--- a/packages/DocumentsUI/res/values-ro/strings.xml
+++ b/packages/DocumentsUI/res/values-ro/strings.xml
@@ -38,8 +38,8 @@
<string name="menu_paste_from_clipboard" msgid="2071583031180257091">"Inserați"</string>
<string name="menu_advanced_show" msgid="4693652895715631401">"Afișați stocarea internă"</string>
<string name="menu_advanced_hide" msgid="4218809952721972589">"Ascundeți stocarea internă"</string>
- <string name="menu_file_size_show" msgid="3240323619260823076">"Afișați mărime fișiere"</string>
- <string name="menu_file_size_hide" msgid="8881975928502581042">"Ascundeți mărime fișiere"</string>
+ <string name="menu_file_size_show" msgid="3240323619260823076">"Afișați dimensiunea"</string>
+ <string name="menu_file_size_hide" msgid="8881975928502581042">"Ascundeți dimensiunea"</string>
<string name="button_select" msgid="527196987259139214">"Selectați"</string>
<string name="button_copy" msgid="8706475544635021302">"Copiați"</string>
<string name="button_move" msgid="2202666023104202232">"Mutați"</string>
@@ -59,7 +59,7 @@
<string name="root_type_shortcut" msgid="3318760609471618093">"Comenzi rapide"</string>
<string name="root_type_device" msgid="7121342474653483538">"Dispozitive"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Alte aplicații"</string>
- <string name="empty" msgid="7858882803708117596">"Nu există elemente"</string>
+ <string name="empty" msgid="7858882803708117596">"Niciun element"</string>
<string name="no_results" msgid="6622510343880730446">"Niciun rezultat în %1$s"</string>
<string name="toast_no_application" msgid="4632640357724698144">"Fișierul nu poate fi deschis"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Unele documente nu au putut fi șterse"</string>
diff --git a/packages/DocumentsUI/res/values-sw/strings.xml b/packages/DocumentsUI/res/values-sw/strings.xml
index a164026..46a0277 100644
--- a/packages/DocumentsUI/res/values-sw/strings.xml
+++ b/packages/DocumentsUI/res/values-sw/strings.xml
@@ -53,13 +53,13 @@
<string name="save_error" msgid="6167009778003223664">"Imeshindwa kuhifadhi hati"</string>
<string name="create_error" msgid="3735649141335444215">"Ilishindwa kuunda folda"</string>
<string name="query_error" msgid="5999895349602476581">"Haiwezi kupakia maudhui kwa sasa"</string>
- <string name="root_recent" msgid="4470053704320518133">"Hivi karibuni"</string>
+ <string name="root_recent" msgid="4470053704320518133">"Za hivi karibuni"</string>
<string name="root_available_bytes" msgid="8568452858617033281">"<xliff:g id="SIZE">%1$s</xliff:g> bila malipo"</string>
<string name="root_type_service" msgid="2178854894416775409">"Huduma za hifadhi"</string>
<string name="root_type_shortcut" msgid="3318760609471618093">"Njia za mkato"</string>
<string name="root_type_device" msgid="7121342474653483538">"Vifaa"</string>
<string name="root_type_apps" msgid="8838065367985945189">"Programu zaidi"</string>
- <string name="empty" msgid="7858882803708117596">"Hakuna vipengee"</string>
+ <string name="empty" msgid="7858882803708117596">"Hakuna chochote"</string>
<string name="no_results" msgid="6622510343880730446">"Hakuna zinazolingana katika %1$s"</string>
<string name="toast_no_application" msgid="4632640357724698144">"Haiwezi kufungua faili"</string>
<string name="toast_failed_delete" msgid="2180678019407244069">"Imeshindwa kufuta baadhi ya hati"</string>
diff --git a/packages/DocumentsUI/res/values-tl/strings.xml b/packages/DocumentsUI/res/values-tl/strings.xml
index d2d85ad..adf1b72 100644
--- a/packages/DocumentsUI/res/values-tl/strings.xml
+++ b/packages/DocumentsUI/res/values-tl/strings.xml
@@ -29,7 +29,7 @@
<string name="menu_open" msgid="432922957274920903">"Buksan"</string>
<string name="menu_save" msgid="2394743337684426338">"I-save"</string>
<string name="menu_share" msgid="3075149983979628146">"Ibahagi"</string>
- <string name="menu_delete" msgid="8138799623850614177">"Tanggalin"</string>
+ <string name="menu_delete" msgid="8138799623850614177">"I-delete"</string>
<string name="menu_select_all" msgid="8323579667348729928">"Piliin lahat"</string>
<string name="menu_copy" msgid="3612326052677229148">"Kopyahin sa..."</string>
<string name="menu_move" msgid="1828090633118079817">"Ilipat sa…"</string>
diff --git a/packages/DocumentsUI/res/values-zh-rTW/strings.xml b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
index 6ee919e..16afeb4 100644
--- a/packages/DocumentsUI/res/values-zh-rTW/strings.xml
+++ b/packages/DocumentsUI/res/values-zh-rTW/strings.xml
@@ -17,7 +17,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="app_label" msgid="2783841764617238354">"文件"</string>
- <string name="downloads_label" msgid="959113951084633612">"下載內容"</string>
+ <string name="downloads_label" msgid="959113951084633612">"下載"</string>
<string name="title_open" msgid="4353228937663917801">"開啟檔案"</string>
<string name="title_save" msgid="2433679664882857999">"儲存至"</string>
<string name="menu_create_dir" msgid="2547620241173881754">"新增資料夾"</string>
@@ -33,7 +33,7 @@
<string name="menu_select_all" msgid="8323579667348729928">"全選"</string>
<string name="menu_copy" msgid="3612326052677229148">"複製到…"</string>
<string name="menu_move" msgid="1828090633118079817">"移至…"</string>
- <string name="menu_new_window" msgid="1226032889278727538">"新視窗"</string>
+ <string name="menu_new_window" msgid="1226032889278727538">"新增視窗"</string>
<string name="menu_copy_to_clipboard" msgid="489311381979634291">"複製"</string>
<string name="menu_paste_from_clipboard" msgid="2071583031180257091">"貼上"</string>
<string name="menu_advanced_show" msgid="4693652895715631401">"顯示內部儲存空間"</string>
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
index 64b443b..60eaad2 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardAbsKeyInputView.java
@@ -69,7 +69,7 @@
public void reset() {
// start fresh
mDismissing = false;
- resetPasswordText(false /* animate */);
+ resetPasswordText(false /* animate */, false /* announce */);
// if the user is currently locked out, enforce it.
long deadline = mLockPatternUtils.getLockoutAttemptDeadline(
KeyguardUpdateMonitor.getCurrentUser());
@@ -169,10 +169,10 @@
mSecurityMessageDisplay.setMessage(getWrongPasswordStringId(), true);
}
}
- resetPasswordText(true /* animate */);
+ resetPasswordText(true /* animate */, !matched /* announce deletion if no match */);
}
- protected abstract void resetPasswordText(boolean animate);
+ protected abstract void resetPasswordText(boolean animate, boolean announce);
protected abstract String getPasswordText();
protected abstract void setPasswordEntryEnabled(boolean enabled);
protected abstract void setPasswordEntryInputEnabled(boolean enabled);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
index 4abb795..7ea767c 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
@@ -60,6 +60,7 @@
R.dimen.disappear_y_translation);
}
+ @Override
protected void resetState() {
super.resetState();
mSecurityMessageDisplay.setMessage(R.string.kg_pin_instructions, false);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
index 189f5b7..b75f529 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
@@ -72,6 +72,7 @@
context, android.R.interpolator.fast_out_linear_in);
}
+ @Override
protected void resetState() {
mSecurityMessageDisplay.setMessage(R.string.kg_password_instructions, false);
final boolean wasDisabled = mPasswordEntry.isEnabled();
@@ -159,6 +160,7 @@
// Poke the wakelock any time the text is selected or modified
mPasswordEntry.setOnClickListener(new OnClickListener() {
+ @Override
public void onClick(View v) {
mCallback.userActivity();
}
@@ -175,6 +177,7 @@
switchImeButton.setVisibility(View.VISIBLE);
imeOrDeleteButtonVisible = true;
switchImeButton.setOnClickListener(new OnClickListener() {
+ @Override
public void onClick(View v) {
mCallback.userActivity(); // Leave the screen on a bit longer
// Do not show auxiliary subtypes in password lock screen.
@@ -202,7 +205,7 @@
}
@Override
- protected void resetPasswordText(boolean animate) {
+ protected void resetPasswordText(boolean animate, boolean announce) {
mPasswordEntry.setText("");
}
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java
index f14290a..c8719f3 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPinBasedInputView.java
@@ -159,8 +159,8 @@
}
@Override
- protected void resetPasswordText(boolean animate) {
- mPasswordEntry.reset(animate);
+ protected void resetPasswordText(boolean animate, boolean announce) {
+ mPasswordEntry.reset(animate, announce);
}
@Override
@@ -214,7 +214,7 @@
public boolean onLongClick(View v) {
// check for time-based lockouts
if (mPasswordEntry.isEnabled()) {
- resetPasswordText(true /* animate */);
+ resetPasswordText(true /* animate */, true /* announce */);
}
doHapticKeyClick();
return true;
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java
index 2033159..cfaf7b6 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPinView.java
@@ -71,6 +71,7 @@
super(context, attrs);
}
+ @Override
public void resetState() {
super.resetState();
if (DEBUG) Log.v(TAG, "Resetting state");
@@ -199,6 +200,7 @@
Log.v(TAG, "supplyPinReportResult returned: " + result[0] + " " + result[1]);
}
post(new Runnable() {
+ @Override
public void run() {
onSimCheckResponse(result[0], result[1]);
}
@@ -206,6 +208,7 @@
} catch (RemoteException e) {
Log.e(TAG, "RemoteException for supplyPinReportResult:", e);
post(new Runnable() {
+ @Override
public void run() {
onSimCheckResponse(PhoneConstants.PIN_GENERAL_FAILURE, -1);
}
@@ -250,7 +253,7 @@
if (entry.length() < 4) {
// otherwise, display a message to the user, and don't submit.
mSecurityMessageDisplay.setMessage(R.string.kg_invalid_sim_pin_hint, true);
- resetPasswordText(true);
+ resetPasswordText(true /* animate */, true /* announce */);
mCallback.userActivity();
return;
}
@@ -259,13 +262,16 @@
if (mCheckSimPinThread == null) {
mCheckSimPinThread = new CheckSimPin(mPasswordEntry.getText(), mSubId) {
+ @Override
void onSimCheckResponse(final int result, final int attemptsRemaining) {
post(new Runnable() {
+ @Override
public void run() {
if (mSimUnlockProgressDialog != null) {
mSimUnlockProgressDialog.hide();
}
- resetPasswordText(true /* animate */);
+ resetPasswordText(true /* animate */,
+ result != PhoneConstants.PIN_RESULT_SUCCESS /* announce */);
if (result == PhoneConstants.PIN_RESULT_SUCCESS) {
KeyguardUpdateMonitor.getInstance(getContext())
.reportSimUnlocked(mSubId);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java
index af88239..59c01cf 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardSimPukView.java
@@ -106,7 +106,7 @@
msg = R.string.kg_invalid_confirm_pin_hint;
}
}
- resetPasswordText(true);
+ resetPasswordText(true /* animate */, true /* announce */);
if (msg != 0) {
mSecurityMessageDisplay.setMessage(msg, true);
}
@@ -163,6 +163,7 @@
return displayMessage;
}
+ @Override
public void resetState() {
super.resetState();
mStateMachine.reset();
@@ -242,6 +243,7 @@
Log.v(TAG, "supplyPukReportResult returned: " + result[0] + " " + result[1]);
}
post(new Runnable() {
+ @Override
public void run() {
onSimLockChangedResponse(result[0], result[1]);
}
@@ -249,6 +251,7 @@
} catch (RemoteException e) {
Log.e(TAG, "RemoteException for supplyPukReportResult:", e);
post(new Runnable() {
+ @Override
public void run() {
onSimLockChangedResponse(PhoneConstants.PIN_GENERAL_FAILURE, -1);
}
@@ -316,13 +319,16 @@
if (mCheckSimPukThread == null) {
mCheckSimPukThread = new CheckSimPuk(mPukText, mPinText, mSubId) {
+ @Override
void onSimLockChangedResponse(final int result, final int attemptsRemaining) {
post(new Runnable() {
+ @Override
public void run() {
if (mSimUnlockProgressDialog != null) {
mSimUnlockProgressDialog.hide();
}
- resetPasswordText(true /* animate */);
+ resetPasswordText(true /* animate */,
+ result != PhoneConstants.PIN_RESULT_SUCCESS /* announce */);
if (result == PhoneConstants.PIN_RESULT_SUCCESS) {
KeyguardUpdateMonitor.getInstance(getContext())
.reportSimUnlocked(mSubId);
diff --git a/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java b/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java
index 7dba545..48737f9 100644
--- a/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java
+++ b/packages/Keyguard/src/com/android/keyguard/PasswordTextView.java
@@ -268,7 +268,7 @@
return charState;
}
- public void reset(boolean animated) {
+ public void reset(boolean animated, boolean announce) {
String textbefore = mText;
mText = "";
int length = mTextChars.size();
@@ -297,7 +297,9 @@
if (!animated) {
mTextChars.clear();
}
- sendAccessibilityEventTypeViewTextChanged(textbefore, 0, textbefore.length(), 0);
+ if (announce) {
+ sendAccessibilityEventTypeViewTextChanged(textbefore, 0, textbefore.length(), 0);
+ }
}
void sendAccessibilityEventTypeViewTextChanged(String beforeText, int fromIndex,
diff --git a/packages/PrintRecommendationService/res/values/strings.xml b/packages/PrintRecommendationService/res/values/strings.xml
index 2d127e2..97281de 100644
--- a/packages/PrintRecommendationService/res/values/strings.xml
+++ b/packages/PrintRecommendationService/res/values/strings.xml
@@ -25,7 +25,7 @@
<string name="plugin_vendor_xerox">Xerox</string>
<string name="plugin_vendor_samsung">Samsung Electronics</string>
<string name="plugin_vendor_epson">Epson</string>
- <string name="plugin_vendor_konika_minolta">Konika Minolta</string>
+ <string name="plugin_vendor_konica_minolta">Konica Minolta</string>
<string name="plugin_vendor_fuji">Fuji</string>
<string name="plugin_vendor_morpia">Mopria</string>
</resources>
diff --git a/packages/PrintRecommendationService/res/xml/vendorconfigs.xml b/packages/PrintRecommendationService/res/xml/vendorconfigs.xml
index 98d466c..b7925df 100644
--- a/packages/PrintRecommendationService/res/xml/vendorconfigs.xml
+++ b/packages/PrintRecommendationService/res/xml/vendorconfigs.xml
@@ -67,10 +67,9 @@
</vendor>
<vendor>
- <name>@string/plugin_vendor_konika_minolta</name>
+ <name>@string/plugin_vendor_konica_minolta</name>
<package>com.kmbt.printservice</package>
<mdns-names>
- <mdns-name>kmkmkm</mdns-name>
<mdns-name>Konica Minolta</mdns-name>
<mdns-name>Minolta</mdns-name>
</mdns-names>
diff --git a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
index 8b1fd08..be3df54 100644
--- a/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
+++ b/packages/PrintSpooler/src/com/android/printspooler/ui/PrintActivity.java
@@ -683,6 +683,10 @@
}
});
} else if (resultCode == RESULT_CANCELED) {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "[state]" + STATE_CONFIGURING);
+ }
+
mState = STATE_CONFIGURING;
// The previous update might have been canceled
@@ -714,6 +718,9 @@
SelectPrinterActivity.INTENT_EXTRA_PRINTER);
if (printerInfo != null) {
mCurrentPrinter = printerInfo;
+ mPrintJob.setPrinterId(printerInfo.getId());
+ mPrintJob.setPrinterName(printerInfo.getName());
+
mDestinationSpinnerAdapter.ensurePrinterInVisibleAdapterPosition(printerInfo);
}
}
@@ -898,9 +905,15 @@
private void setState(int state) {
if (isFinalState(mState)) {
if (isFinalState(state)) {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "[state]" + state);
+ }
mState = state;
}
} else {
+ if (DEBUG) {
+ Log.i(LOG_TAG, "[state]" + state);
+ }
mState = state;
}
}
@@ -1954,7 +1967,7 @@
}
public void onPrinterAvailable(PrinterInfo printer) {
- if (mCurrentPrinter.equals(printer)) {
+ if (mCurrentPrinter != null && mCurrentPrinter.equals(printer)) {
setState(STATE_CONFIGURING);
if (canUpdateDocument()) {
updateDocument(false);
@@ -2449,12 +2462,15 @@
PrinterHolder printerHolder = mPrinterHolders.get(i);
PrinterId oldPrinterId = printerHolder.printer.getId();
PrinterInfo updatedPrinter = newPrintersMap.remove(oldPrinterId);
+
if (updatedPrinter != null) {
printerHolder.printer = updatedPrinter;
printerHolder.removed = false;
+ onPrinterAvailable(printerHolder.printer);
newPrinterHolders.add(printerHolder);
} else if (mCurrentPrinter != null && mCurrentPrinter.getId().equals(oldPrinterId)){
printerHolder.removed = true;
+ onPrinterUnavailable(printerHolder.printer);
newPrinterHolders.add(printerHolder);
}
}
@@ -2896,13 +2912,20 @@
}
public int cancel() {
- if (!mPosted) {
- return getStateAfterCancel();
- }
- mPosted = false;
- mHandler.removeCallbacks(this);
+ int state;
- return getStateAfterCancel();
+ if (!mPosted) {
+ state = getStateAfterCancel();
+ } else {
+ mPosted = false;
+ mHandler.removeCallbacks(this);
+
+ state = getStateAfterCancel();
+ }
+
+ mPreviousState = -1;
+
+ return state;
}
@Override
diff --git a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtils.java b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtils.java
index 3c32615..8e43bff 100644
--- a/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/RestrictedLockUtils.java
@@ -24,7 +24,6 @@
import android.content.pm.IPackageManager;
import android.content.pm.UserInfo;
import android.graphics.drawable.Drawable;
-import android.os.Bundle;
import android.os.RemoteException;
import android.os.UserHandle;
import android.os.UserManager;
@@ -74,45 +73,31 @@
if (dpm == null) {
return null;
}
- ComponentName deviceOwner = dpm.getDeviceOwnerComponentOnAnyUser();
- int deviceOwnerUserId = dpm.getDeviceOwnerUserId();
- boolean enforcedByDeviceOwner = false;
- if (deviceOwner != null && deviceOwnerUserId != UserHandle.USER_NULL) {
- Bundle enforcedRestrictions =
- dpm.getUserRestrictionsForUser(deviceOwner, deviceOwnerUserId);
- if (enforcedRestrictions != null
- && enforcedRestrictions.getBoolean(userRestriction, false)) {
- enforcedByDeviceOwner = true;
- }
- }
+ UserManager um = UserManager.get(context);
+ int restrictionSource = um.getUserRestrictionSource(userRestriction,
+ UserHandle.of(userId));
- ComponentName profileOwner = null;
- boolean enforcedByProfileOwner = false;
- if (userId != UserHandle.USER_NULL) {
- profileOwner = dpm.getProfileOwnerAsUser(userId);
- if (profileOwner != null) {
- Bundle enforcedRestrictions =
- dpm.getUserRestrictionsForUser(profileOwner, userId);
- if (enforcedRestrictions != null
- && enforcedRestrictions.getBoolean(userRestriction, false)) {
- enforcedByProfileOwner = true;
- }
- }
- }
-
- if (!enforcedByDeviceOwner && !enforcedByProfileOwner) {
+ // If the restriction is not enforced or enforced only by system then return null
+ if (restrictionSource == UserManager.RESTRICTION_NOT_SET
+ || restrictionSource == UserManager.RESTRICTION_SOURCE_SYSTEM) {
return null;
}
- EnforcedAdmin admin = null;
- if (enforcedByDeviceOwner && enforcedByProfileOwner) {
- admin = new EnforcedAdmin();
+ final boolean enforcedByProfileOwner =
+ (restrictionSource & UserManager.RESTRICTION_SOURCE_PROFILE_OWNER) != 0;
+ final boolean enforcedByDeviceOwner =
+ (restrictionSource & UserManager.RESTRICTION_SOURCE_DEVICE_OWNER) != 0;
+ if (enforcedByProfileOwner) {
+ return getProfileOwner(context, userId);
} else if (enforcedByDeviceOwner) {
- admin = new EnforcedAdmin(deviceOwner, deviceOwnerUserId);
- } else {
- admin = new EnforcedAdmin(profileOwner, userId);
+ // When the restriction is enforced by device owner, return the device owner admin only
+ // if the admin is for the {@param userId} otherwise return a default EnforcedAdmin.
+ final EnforcedAdmin deviceOwner = getDeviceOwner(context);
+ return deviceOwner.userId == userId
+ ? deviceOwner
+ : EnforcedAdmin.MULTIPLE_ENFORCED_ADMIN;
}
- return admin;
+ return null;
}
public static boolean hasBaseUserRestriction(Context context,
@@ -479,6 +464,9 @@
public static EnforcedAdmin checkIfMaximumTimeToLockIsSet(Context context) {
final DevicePolicyManager dpm = (DevicePolicyManager) context.getSystemService(
Context.DEVICE_POLICY_SERVICE);
+ if (dpm == null) {
+ return null;
+ }
LockPatternUtils lockPatternUtils = new LockPatternUtils(context);
EnforcedAdmin enforcedAdmin = null;
final int userId = UserHandle.myUserId();
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index f49594c..774be60 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -203,9 +203,6 @@
@GuardedBy("mLock")
private HandlerThread mHandlerThread;
- @GuardedBy("mLock")
- private Handler mBackgroundHandler;
-
// We have to call in the user manager with no lock held,
private volatile UserManager mUserManager;
@@ -254,7 +251,6 @@
mHandlerThread = new HandlerThread(LOG_TAG,
Process.THREAD_PRIORITY_BACKGROUND);
mHandlerThread.start();
- mBackgroundHandler = new Handler(mHandlerThread.getLooper());
mSettingsRegistry = new SettingsRegistry();
}
registerBroadcastReceivers();
@@ -1680,7 +1676,7 @@
if (mSettingsStates.get(key) == null) {
final int maxBytesPerPackage = getMaxBytesPerPackageForType(getTypeFromKey(key));
SettingsState settingsState = new SettingsState(mLock, getSettingsFile(key), key,
- maxBytesPerPackage, mBackgroundHandler);
+ maxBytesPerPackage, mHandlerThread.getLooper());
mSettingsStates.put(key, settingsState);
}
}
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
index 1e02747..4710d5a 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsState.java
@@ -17,6 +17,7 @@
package com.android.providers.settings;
import android.os.Handler;
+import android.os.Looper;
import android.os.Message;
import android.os.SystemClock;
import android.provider.Settings;
@@ -27,7 +28,6 @@
import android.util.Slog;
import android.util.Xml;
import com.android.internal.annotations.GuardedBy;
-import com.android.internal.os.BackgroundThread;
import libcore.io.IoUtils;
import libcore.util.Objects;
import org.xmlpull.v1.XmlPullParser;
@@ -135,14 +135,14 @@
private long mNextId;
public SettingsState(Object lock, File file, int key, int maxBytesPerAppPackage,
- Handler handler) {
+ Looper looper) {
// It is important that we use the same lock as the settings provider
// to ensure multiple mutations on this state are atomicaly persisted
// as the async persistence should be blocked while we make changes.
mLock = lock;
mStatePersistFile = file;
mKey = key;
- mHandler = handler;
+ mHandler = new MyHandler(looper);
if (maxBytesPerAppPackage == MAX_BYTES_PER_APP_PACKAGE_LIMITED) {
mMaxBytesPerAppPackage = maxBytesPerAppPackage;
mPackageToMemoryUsage = new ArrayMap<>();
@@ -548,8 +548,8 @@
private final class MyHandler extends Handler {
public static final int MSG_PERSIST_SETTINGS = 1;
- public MyHandler() {
- super(BackgroundThread.getHandler().getLooper());
+ public MyHandler(Looper looper) {
+ super(looper);
}
@Override
diff --git a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java
index 53c2958..b5bd8ad 100644
--- a/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java
+++ b/packages/SettingsProvider/test/src/com/android/providers/settings/SettingsStateTest.java
@@ -16,6 +16,7 @@
package com.android.providers.settings;
import android.os.Handler;
+import android.os.Looper;
import android.test.AndroidTestCase;
import android.util.Xml;
@@ -127,7 +128,7 @@
final Object lock = new Object();
final SettingsState ssWriter = new SettingsState(lock, file, 1,
- SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler());
+ SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper());
ssWriter.setVersionLocked(SettingsState.SETTINGS_VERSOIN_NEW_ENCODING);
ssWriter.insertSettingLocked("k1", "\u0000", "package");
@@ -139,7 +140,7 @@
}
final SettingsState ssReader = new SettingsState(lock, file, 1,
- SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler());
+ SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper());
synchronized (lock) {
assertEquals("\u0000", ssReader.getSettingLocked("k1").getValue());
assertEquals("abc", ssReader.getSettingLocked("k2").getValue());
@@ -166,7 +167,7 @@
os.close();
final SettingsState ss = new SettingsState(lock, file, 1,
- SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, new Handler());
+ SettingsState.MAX_BYTES_PER_APP_PACKAGE_UNLIMITED, Looper.getMainLooper());
synchronized (lock) {
SettingsState.Setting s;
s = ss.getSettingLocked("k0");
diff --git a/packages/Shell/AndroidManifest.xml b/packages/Shell/AndroidManifest.xml
index 4e9b59f..9c0aa35d 100644
--- a/packages/Shell/AndroidManifest.xml
+++ b/packages/Shell/AndroidManifest.xml
@@ -111,6 +111,7 @@
<uses-permission android:name="android.permission.VIBRATE" />
<uses-permission android:name="android.permission.MANAGE_ACTIVITY_STACKS" />
<uses-permission android:name="android.permission.CONNECTIVITY_INTERNAL" />
+ <uses-permission android:name="android.permission.CHANGE_COMPONENT_ENABLED_STATE" />
<!-- Permission needed to rename bugreport notifications (so they're not shown as Shell) -->
<uses-permission android:name="android.permission.SUBSTITUTE_NOTIFICATION_APP_NAME" />
diff --git a/packages/SystemUI/res/layout/notification_guts.xml b/packages/SystemUI/res/layout/notification_guts.xml
index 4d72cc8..d09c42b 100644
--- a/packages/SystemUI/res/layout/notification_guts.xml
+++ b/packages/SystemUI/res/layout/notification_guts.xml
@@ -63,14 +63,14 @@
android:id="@+id/importance_buttons"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:layout_marginStart="-6dp"
+ android:paddingStart="3dp"
android:paddingTop="4dp"
android:paddingEnd="8dp" >
<RadioButton
android:id="@+id/silent_importance"
android:layout_width="wrap_content"
android:layout_height="40dp"
- android:paddingStart="32dp"
+ android:paddingStart="22dp"
android:text="@string/show_silently"
style="@style/TextAppearance.NotificationGuts.Radio"
android:buttonTint="@color/notification_guts_buttons" />
@@ -78,7 +78,7 @@
android:id="@+id/block_importance"
android:layout_width="wrap_content"
android:layout_height="40dp"
- android:paddingStart="32dp"
+ android:paddingStart="22dp"
android:text="@string/block"
style="@style/TextAppearance.NotificationGuts.Radio"
android:buttonTint="@color/notification_guts_buttons" />
@@ -86,7 +86,7 @@
android:id="@+id/reset_importance"
android:layout_width="wrap_content"
android:layout_height="40dp"
- android:paddingStart="32dp"
+ android:paddingStart="22dp"
style="@style/TextAppearance.NotificationGuts.Radio"
android:buttonTint="@color/notification_guts_buttons" />
</RadioGroup>
diff --git a/packages/SystemUI/res/values-be-rBY/strings.xml b/packages/SystemUI/res/values-be-rBY/strings.xml
index b650c22..42994cf 100644
--- a/packages/SystemUI/res/values-be-rBY/strings.xml
+++ b/packages/SystemUI/res/values-be-rBY/strings.xml
@@ -98,7 +98,7 @@
<string name="voice_assist_label" msgid="3956854378310019854">"адкрыць галасавую дапамогу"</string>
<string name="camera_label" msgid="7261107956054836961">"адкрыць камеру"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"Выберыце новы макет заданняў"</string>
- <string name="cancel" msgid="6442560571259935130">"Адмяніць"</string>
+ <string name="cancel" msgid="6442560571259935130">"Скасаваць"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Кнопка сумяшчальнасці маштаба."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Маштабаванне малых элементаў для большага экрана."</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth-сувязь."</string>
@@ -431,7 +431,7 @@
<string name="quick_settings_reset_confirmation_button" msgid="2660339101868367515">"Схаваць"</string>
<string name="volumeui_prompt_message" msgid="918680947433389110">"<xliff:g id="APP_NAME">%1$s</xliff:g> хоча быць дыялогам гучнасці."</string>
<string name="volumeui_prompt_allow" msgid="7954396902482228786">"Дазволіць"</string>
- <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Адхiлiць"</string>
+ <string name="volumeui_prompt_deny" msgid="5720663643411696731">"Адмовіць"</string>
<string name="volumeui_notification_title" msgid="4906770126345910955">"<xliff:g id="APP_NAME">%1$s</xliff:g> з\'яўляецца дыялогам гучнасці"</string>
<string name="volumeui_notification_text" msgid="8819536904234337445">"Дакраніцеся, каб аднавіць арыгінал."</string>
<string name="managed_profile_foreground_toast" msgid="5421487114739245972">"Вы выкарыстоўваеце свой працоўны профіль"</string>
@@ -599,7 +599,7 @@
<string name="keycode" msgid="7335281375728356499">"Код клавішы"</string>
<string name="keycode_description" msgid="1403795192716828949">"Кнопка Код клавішы дазваляе дадаваць клавішы ў Панэль навігацыі. Пры націску гэтай кнопкі эмулюецца выбраная клавіша. Спачатку трэба выбраць клавішу для кнопкі, а потым відарыс, які будзе паказвацца на кнопцы."</string>
<string name="select_keycode" msgid="7413765103381924584">"Выберыце клавішу клавіятуры"</string>
- <string name="preview" msgid="9077832302472282938">"Папярэдні прагляд"</string>
+ <string name="preview" msgid="9077832302472282938">"Перадпрагляд"</string>
<string name="drag_to_add_tiles" msgid="7058945779098711293">"Перацягніце, каб дадаць пліткі"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Перацягніце сюды, каб выдаліць"</string>
<string name="qs_edit" msgid="2232596095725105230">"Рэдагаваць"</string>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml
index 2547a2e..7053030 100644
--- a/packages/SystemUI/res/values-bn-rBD/strings.xml
+++ b/packages/SystemUI/res/values-bn-rBD/strings.xml
@@ -43,12 +43,12 @@
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"চালু করুন"</string>
<string name="battery_saver_start_action" msgid="5576697451677486320">"ব্যাটারি সঞ্চয়কারী চালু"</string>
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"সেটিংস"</string>
- <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
+ <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"ওয়াই-ফাই"</string>
<string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"স্বতঃ-ঘূর্ণায়মান স্ক্রীণ"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"নিঃশব্দ করুন"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"স্বতঃ"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"বিজ্ঞপ্তিগুলি"</string>
- <string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth টিথার করা হয়েছে"</string>
+ <string name="bluetooth_tethered" msgid="7094101612161133267">"ব্লুটুথ টিথার করা হয়েছে"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ইনপুট পদ্ধতিগুলি সেট আপ করুন"</string>
<string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ফিজিক্যাল কীবোর্ড"</string>
<string name="usb_device_permission_prompt" msgid="834698001271562057">"এই <xliff:g id="APPLICATION">%1$s</xliff:g> অ্যাপ্লিকেশানটিকে কি USB ডিভাইস অ্যাক্সেস করা মঞ্জুরি দেবেন?"</string>
@@ -99,8 +99,8 @@
<string name="cancel" msgid="6442560571259935130">"বাতিল করুন"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"সামঞ্জস্যের জুম বোতাম৷"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ছোট থেকে বৃহৎ স্ক্রীণে জুম করুন৷"</string>
- <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth সংযুক্ত হয়েছে৷"</string>
- <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth সংযোগ বিচ্ছিন্ন হয়েছে৷"</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ব্লুটুথ সংযুক্ত হয়েছে৷"</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"ব্লুটুথ সংযোগ বিচ্ছিন্ন হয়েছে৷"</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"কোনো ব্যাটারি নেই৷"</string>
<string name="accessibility_battery_one_bar" msgid="7774887721891057523">"এক দন্ড ব্যাটারি রয়েছে৷"</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"দুই দন্ড ব্যাটারি রয়েছে৷"</string>
@@ -147,12 +147,12 @@
<string name="accessibility_data_connection_cdma" msgid="6132648193978823023">"CDMA"</string>
<string name="accessibility_data_connection_roaming" msgid="5977362333466556094">"রোমিং"</string>
<string name="accessibility_data_connection_edge" msgid="4477457051631979278">"Edge"</string>
- <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"Wi-Fi"</string>
+ <string name="accessibility_data_connection_wifi" msgid="2324496756590645221">"ওয়াই-ফাই"</string>
<string name="accessibility_no_sim" msgid="8274017118472455155">"কোনো সিম নেই৷"</string>
<string name="accessibility_cell_data" msgid="7080312242791850520">"সেলুলার ডেটা"</string>
<string name="accessibility_cell_data_on" msgid="4310018593519761767">"সেলুলার ডেটা চালু রয়েছে"</string>
<string name="accessibility_cell_data_off" msgid="8000803571751407635">"সেলুলার ডেটা বন্ধ আছে"</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth টিথারিং৷"</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"ব্লুটুথ টিথারিং৷"</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"বিমান মোড৷"</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"কোনো SIM কার্ড নেই।"</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"পরিষেবা প্রদানকারীর নেটওয়ার্ক পরিবর্তিত হচ্ছে।"</string>
@@ -200,13 +200,13 @@
<string name="accessibility_quick_settings_dnd_off" msgid="2371832603753738581">"“বিরক্ত করবেন না” বন্ধ৷"</string>
<string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"বিরক্ত করবেন না বন্ধ রয়েছে৷"</string>
<string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"বিরক্ত করবেন না চালু রয়েছে৷"</string>
- <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth"</string>
- <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth বন্ধ আছে।"</string>
- <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth চালু আছে।"</string>
- <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Bluetooth সংযুক্ত হচ্ছে।"</string>
- <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"Bluetooth সংযুক্ত হয়েছে৷"</string>
- <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"Bluetooth বন্ধ হয়েছে।"</string>
- <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"Bluetooth চালু হয়েছে।"</string>
+ <string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"ব্লুটুথ"</string>
+ <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"ব্লুটুথ বন্ধ আছে।"</string>
+ <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"ব্লুটুথ চালু আছে।"</string>
+ <string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"ব্লুটুথ সংযুক্ত হচ্ছে।"</string>
+ <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"ব্লুটুথ সংযুক্ত হয়েছে৷"</string>
+ <string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"ব্লুটুথ বন্ধ হয়েছে।"</string>
+ <string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"ব্লুটুথ চালু হয়েছে।"</string>
<string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"অবস্থানের প্রতিবেদন বন্ধ আছে।"</string>
<string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"অবস্থানের প্রতিবেদন চালু আছে।"</string>
<string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"অবস্থানের প্রতিবেদন বন্ধ হয়েছে।"</string>
@@ -239,7 +239,7 @@
<string name="data_usage_disabled_dialog" msgid="8453242888903772524">"আপনার সেট ডেটার সীমা অবধি পৌঁছনোর কারনে ডিভাইস এই চক্রের অবশিষ্টাংশের জন্য ডেটা ব্যবহারে বিরতি দেওয়া হয়েছে৷ \n\nপুনরায় চালু করা হলে পরিষেবা প্রদানকারীর দ্বারা চার্জের করা হতে পারে৷"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"পুনঃসূচনা করুন"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"কোনো ইন্টারনেট সংযোগ নেই"</string>
- <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi সংযুক্ত হয়েছে"</string>
+ <string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"ওয়াই-ফাই সংযুক্ত হয়েছে"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS এর জন্য অনুসন্ধান করা হচ্ছে"</string>
<string name="gps_notification_found_text" msgid="4619274244146446464">"GPS এর দ্বারা সেট করা অবস্থান"</string>
<string name="accessibility_location_active" msgid="2427290146138169014">"অবস্থান অনুরোধ সক্রিয় রয়েছে"</string>
@@ -260,9 +260,9 @@
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"শুধুমাত্র অগ্রাধিকার"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"শুধুমাত্র অ্যালার্মগুলি"</string>
<string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"একদম নিরব"</string>
- <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
- <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> টি ডিভাইস)"</string>
- <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth বন্ধ"</string>
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"ব্লুটুথ"</string>
+ <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"ব্লুটুথ (<xliff:g id="NUMBER">%d</xliff:g> টি ডিভাইস)"</string>
+ <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"ব্লুটুথ বন্ধ"</string>
<string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"যুক্ত করা কোন ডিভাইস উপলব্ধ নয়"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"উজ্জ্বলতা"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"স্বতঃ ঘূর্ণায়মান"</string>
@@ -282,12 +282,12 @@
<string name="quick_settings_user_label" msgid="5238995632130897840">"আমাকে"</string>
<string name="quick_settings_user_title" msgid="4467690427642392403">"ব্যবহারকারী"</string>
<string name="quick_settings_user_new_user" msgid="9030521362023479778">"নতুন ব্যবহারকারী"</string>
- <string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
+ <string name="quick_settings_wifi_label" msgid="9135344704899546041">"ওয়াই-ফাই"</string>
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"সংযুক্ত নয়"</string>
<string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"কোনো নেটওয়ার্ক নেই"</string>
- <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi বন্ধ"</string>
- <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi চালু আছে"</string>
- <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"কোনো Wi-Fi নেটওয়ার্ক উপলব্ধ নেই"</string>
+ <string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"ওয়াই-ফাই বন্ধ"</string>
+ <string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"ওয়াই-ফাই চালু আছে"</string>
+ <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"কোনো ওয়াই-ফাই নেটওয়ার্ক উপলব্ধ নেই"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"কাস্ট করুন"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"কাস্ট করা হচ্ছে"</string>
<string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"নামবিহীন ডিভাইস"</string>
@@ -472,8 +472,8 @@
<string name="overview_nav_bar_gesture" msgid="8579814204727917764">"উপরের দিকে সোয়াইপ করে বিভক্ত-স্ক্রীনে প্রবেশ করার অঙ্গভঙ্গি সক্ষম করুন"</string>
<string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"\'এক নজরে\' বোতাম থেকে উপরের দিকে সোয়াইপ করে, বিভক্ত-স্ক্রীনে প্রবেশ করতে অঙ্গভঙ্গি সক্ষম করুন"</string>
<string name="experimental" msgid="6198182315536726162">"পরীক্ষামূলক"</string>
- <string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth চালু করবেন?"</string>
- <string name="enable_bluetooth_message" msgid="9106595990708985385">"আপনার ট্যাবলেটের সাথে আপনার কীবোর্ড সংযুক্ত করতে, আপনাকে প্রথমে Bluetooth চালু করতে হবে।"</string>
+ <string name="enable_bluetooth_title" msgid="5027037706500635269">"ব্লুটুথ চালু করবেন?"</string>
+ <string name="enable_bluetooth_message" msgid="9106595990708985385">"আপনার ট্যাবলেটের সাথে আপনার কীবোর্ড সংযুক্ত করতে, আপনাকে প্রথমে ব্লুটুথ চালু করতে হবে।"</string>
<string name="enable_bluetooth_confirmation_ok" msgid="6258074250948309715">"চালু করুন"</string>
<string name="show_silently" msgid="6841966539811264192">"নীরবভাবে বিজ্ঞপ্তিগুলি দেখায়"</string>
<string name="block" msgid="2734508760962682611">"সমস্ত বিজ্ঞপ্তি অবরুদ্ধ করুন"</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index f836a99..166282a 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -302,7 +302,7 @@
<string name="quick_settings_connected" msgid="1722253542984847487">"Connectat"</string>
<string name="quick_settings_connecting" msgid="47623027419264404">"S\'està connectant..."</string>
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Ancoratge a xarxa"</string>
- <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Zona Wi-Fi"</string>
+ <string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Punt d\'accés Wi-Fi"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notificacions"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Llanterna"</string>
<string name="quick_settings_cellular_detail_title" msgid="8575062783675171695">"Dades mòbils"</string>
@@ -455,7 +455,7 @@
<string name="alarm_template" msgid="3980063409350522735">"Hora: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="alarm_template_far" msgid="4242179982586714810">"Dia: <xliff:g id="WHEN">%1$s</xliff:g>"</string>
<string name="accessibility_quick_settings_detail" msgid="2579369091672902101">"Configuració ràpida, <xliff:g id="TITLE">%s</xliff:g>."</string>
- <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Zona Wi-Fi"</string>
+ <string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Punt d\'accés Wi-Fi"</string>
<string name="accessibility_managed_profile" msgid="6613641363112584120">"Perfil professional"</string>
<string name="tuner_warning_title" msgid="7094689930793031682">"Diversió per a uns quants, però no per a tothom"</string>
<string name="tuner_warning" msgid="8730648121973575701">"El Personalitzador d\'interfície d\'usuari presenta opcions addicionals per canviar i personalitzar la interfície d\'usuari d\'Android. És possible que aquestes funcions experimentals canviïn, deixin de funcionar o desapareguin en versions futures. Continua amb precaució."</string>
@@ -584,7 +584,7 @@
<string name="select_button" msgid="1597989540662710653">"Tria un botó per afegir-lo"</string>
<string name="add_button" msgid="4134946063432258161">"Afegeix un botó"</string>
<string name="save" msgid="2311877285724540644">"Desa"</string>
- <string name="reset" msgid="2448168080964209908">"Reinicia"</string>
+ <string name="reset" msgid="2448168080964209908">"Restableix"</string>
<string name="no_home_title" msgid="1563808595146071549">"No s\'ha trobat cap botó d\'inici"</string>
<string name="no_home_message" msgid="5408485011659260911">"Per poder navegar per aquest dispositiu, cal un botó d\'inici. Afegeix-ne un abans de desar."</string>
<string name="adjust_button_width" msgid="6138616087197632947">"Ajusta l\'amplada del botó"</string>
@@ -595,7 +595,7 @@
<string name="keycode_description" msgid="1403795192716828949">"Amb els botons de codi de tecla es poden afegir tecles del teclat a la barra de navegació. En prémer aquests botons es duen a terme les mateixes accions que quan es prem la tecla corresponent. Primer cal seleccionar la tecla del botó i, a continuació, triar la imatge que es mostrarà."</string>
<string name="select_keycode" msgid="7413765103381924584">"Selecciona un botó de teclat"</string>
<string name="preview" msgid="9077832302472282938">"Previsualització"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrossega per afegir camps"</string>
+ <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrossega per afegir funcions"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arrossega\'ls aquí per suprimir-los"</string>
<string name="qs_edit" msgid="2232596095725105230">"Edita"</string>
<string name="tuner_time" msgid="6572217313285536011">"Hora"</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index 039be4e..2f1db1b 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -600,7 +600,7 @@
<string name="select_keycode" msgid="7413765103381924584">"Vyberte klávesu na klávesnici"</string>
<string name="preview" msgid="9077832302472282938">"Náhled"</string>
<string name="drag_to_add_tiles" msgid="7058945779098711293">"Dlaždice přidáte přetažením"</string>
- <string name="drag_to_remove_tiles" msgid="3361212377437088062">"Přetažením sem tituly odstraníte"</string>
+ <string name="drag_to_remove_tiles" msgid="3361212377437088062">"Přetažením sem dlaždice odstraníte"</string>
<string name="qs_edit" msgid="2232596095725105230">"Upravit"</string>
<string name="tuner_time" msgid="6572217313285536011">"Čas"</string>
<string-array name="clock_options">
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index b9c04b8..7d3ca4f 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -316,7 +316,7 @@
<string name="recents_empty_message" msgid="808480104164008572">"Ingen nye elementer"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Du har ryddet alt"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Oplysninger om applikationen"</string>
- <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"bliv i app"</string>
+ <string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"skærmfastholdelse"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"søg"</string>
<string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> kunne ikke startes."</string>
<string name="recents_launch_disabled_message" msgid="1624523193008871793">"<xliff:g id="APP">%s</xliff:g> er deaktiveret i sikker tilstand."</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index 3527fe9d..da7d872 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -24,7 +24,7 @@
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"Eliminar de la lista"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"Información de la aplicación"</string>
<string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Aquí aparecerán tus pantallas recientes"</string>
- <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Ignorar aplicaciones recientes"</string>
+ <string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"Descartar aplicaciones recientes"</string>
<plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
<item quantity="other">%d pantallas en Visión general</item>
<item quantity="one">1 pantalla en Visión general</item>
@@ -172,7 +172,7 @@
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
<string name="accessibility_work_mode" msgid="2478631941714607225">"Modo de trabajo"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Ignorar <xliff:g id="APP">%s</xliff:g>."</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Descartar <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Se ha eliminado <xliff:g id="APP">%s</xliff:g>."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Se han ignorado todas las aplicaciones recientes."</string>
<string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Abre la información de la aplicación <xliff:g id="APP">%s</xliff:g>."</string>
@@ -311,11 +311,11 @@
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Uso de datos"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Datos restantes"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Límite superado"</string>
- <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilizado"</string>
+ <string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> usado"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"Límite de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_cellular_detail_data_warning" msgid="2440098045692399009">"Advertencia de <xliff:g id="DATA_LIMIT">%s</xliff:g>"</string>
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"Modo de trabajo"</string>
- <string name="recents_empty_message" msgid="808480104164008572">"Ningún elemento reciente"</string>
+ <string name="recents_empty_message" msgid="808480104164008572">"No hay elementos recientes"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"Has rechazado todo"</string>
<string name="recents_app_info_button_label" msgid="2890317189376000030">"Información de la aplicación"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"fijación de pantalla"</string>
@@ -572,9 +572,9 @@
<string name="headset" msgid="4534219457597457353">"Auriculares"</string>
<string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Auriculares conectados"</string>
<string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Auriculares conectados"</string>
- <string name="data_saver" msgid="5037565123367048522">"Economizador de datos"</string>
- <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Economizador de datos activado"</string>
- <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Economizador de datos desactivado"</string>
+ <string name="data_saver" msgid="5037565123367048522">"Economizador de Datos"</string>
+ <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Economizador de Datos activado"</string>
+ <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Economizador de Datos desactivado"</string>
<string name="switch_bar_on" msgid="1142437840752794229">"Sí"</string>
<string name="switch_bar_off" msgid="8803270596930432874">"No"</string>
<string name="nav_bar" msgid="1993221402773877607">"Barra de navegación"</string>
@@ -597,9 +597,9 @@
<string name="keycode_description" msgid="1403795192716828949">"Con los botones del código de teclado puedes añadir teclas a la barra de navegación que, al pulsarlas, emulan la tecla seleccionada. Primero debes seleccionar la tecla para el botón y, a continuación, la imagen que se va a mostrar en él."</string>
<string name="select_keycode" msgid="7413765103381924584">"Selecciona un botón de teclado"</string>
<string name="preview" msgid="9077832302472282938">"Vista previa"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastrar para añadir mosaicos"</string>
- <string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arrastrar aquí para eliminar"</string>
- <string name="qs_edit" msgid="2232596095725105230">"Cambiar"</string>
+ <string name="drag_to_add_tiles" msgid="7058945779098711293">"Arrastra para añadir funciones"</string>
+ <string name="drag_to_remove_tiles" msgid="3361212377437088062">"Arrastra aquí para quitar una función"</string>
+ <string name="qs_edit" msgid="2232596095725105230">"Editar"</string>
<string name="tuner_time" msgid="6572217313285536011">"Hora"</string>
<string-array name="clock_options">
<item msgid="5965318737560463480">"Mostrar horas, minutos y segundos"</item>
diff --git a/packages/SystemUI/res/values-es/strings_tv.xml b/packages/SystemUI/res/values-es/strings_tv.xml
index 35153d4..32b3b8c 100644
--- a/packages/SystemUI/res/values-es/strings_tv.xml
+++ b/packages/SystemUI/res/values-es/strings_tv.xml
@@ -27,5 +27,5 @@
<string name="pip_onboarding_title" msgid="7850436557670253991">"Imagen en imagen"</string>
<string name="pip_onboarding_description" msgid="4028124563309465267">"El vídeo estará visible hasta que reproduzcas otro. Mantén pulsado el botón "<b>"INICIO"</b>" para controlarlo."</string>
<string name="pip_onboarding_button" msgid="3957426748484904611">"Entendido"</string>
- <string name="recents_tv_dismiss" msgid="3555093879593377731">"Ignorar"</string>
+ <string name="recents_tv_dismiss" msgid="3555093879593377731">"Descartar"</string>
</resources>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index 7b5aa6f..72cd8179 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -231,8 +231,8 @@
<string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"Töörežiim on sees."</string>
<string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"Töörežiim on välja lülitatud."</string>
<string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"Töörežiim on sisse lülitatud."</string>
- <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"Andmemahu säästja on välja lülitatud."</string>
- <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"Andmemahu säästja on sisse lülitatud."</string>
+ <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"Andmeside mahu säästja on välja lülitatud."</string>
+ <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"Andmeside mahu säästja on sisse lülitatud."</string>
<string name="accessibility_brightness" msgid="8003681285547803095">"Ekraani heledus"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G–3G andmekasutus on peatatud"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G andmekasutus on peatatud"</string>
@@ -572,9 +572,9 @@
<string name="headset" msgid="4534219457597457353">"Peakomplekt"</string>
<string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"Kõrvaklapid on ühendatud"</string>
<string name="accessibility_status_bar_headset" msgid="8666419213072449202">"Peakomplekt on ühendatud"</string>
- <string name="data_saver" msgid="5037565123367048522">"Andmemahu säästja"</string>
- <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Andmemahu säästja on sisse lülitatud"</string>
- <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Andmemahu säästja on välja lülitatud"</string>
+ <string name="data_saver" msgid="5037565123367048522">"Andmeside mahu säästja"</string>
+ <string name="accessibility_data_saver_on" msgid="8454111686783887148">"Andmeside mahu säästja on sisse lülitatud"</string>
+ <string name="accessibility_data_saver_off" msgid="8841582529453005337">"Andmeside mahu säästja on välja lülitatud"</string>
<string name="switch_bar_on" msgid="1142437840752794229">"Sees"</string>
<string name="switch_bar_off" msgid="8803270596930432874">"Väljas"</string>
<string name="nav_bar" msgid="1993221402773877607">"Navigeerimisriba"</string>
@@ -599,7 +599,7 @@
<string name="preview" msgid="9077832302472282938">"Eelvaade"</string>
<string name="drag_to_add_tiles" msgid="7058945779098711293">"Lohistage paanide lisamiseks"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Lohistage eemaldamiseks siia"</string>
- <string name="qs_edit" msgid="2232596095725105230">"Muuda"</string>
+ <string name="qs_edit" msgid="2232596095725105230">"Muutmine"</string>
<string name="tuner_time" msgid="6572217313285536011">"Kellaaeg"</string>
<string-array name="clock_options">
<item msgid="5965318737560463480">"Kuva tunnid, minutid ja sekundid"</item>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 5e7e661..732abb3 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -597,7 +597,7 @@
<string name="keycode_description" msgid="1403795192716828949">"Les boutons de codes de touche permettent d\'ajouter des touches du clavier à la barre de navigation. Lorsque vous appuyez sur l\'un de ces boutons, il reproduit la fonction du clavier correspondante. Vous devez d\'abord sélectionner la touche pour le bouton, puis l\'image à afficher sur celui-ci."</string>
<string name="select_keycode" msgid="7413765103381924584">"Sélectionnez la touche du clavier"</string>
<string name="preview" msgid="9077832302472282938">"Aperçu"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Faites glisser des tuiles ici pour les ajouter"</string>
+ <string name="drag_to_add_tiles" msgid="7058945779098711293">"Faites glisser des tuiles pour les ajouter"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Faites glisser les tuiles ici pour les supprimer"</string>
<string name="qs_edit" msgid="2232596095725105230">"Modifier"</string>
<string name="tuner_time" msgid="6572217313285536011">"Heure"</string>
diff --git a/packages/SystemUI/res/values-gu-rIN/strings.xml b/packages/SystemUI/res/values-gu-rIN/strings.xml
index 753e784..e405db4 100644
--- a/packages/SystemUI/res/values-gu-rIN/strings.xml
+++ b/packages/SystemUI/res/values-gu-rIN/strings.xml
@@ -22,7 +22,7 @@
<string name="app_label" msgid="7164937344850004466">"સિસ્ટમ UI"</string>
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"સાફ કરો"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"સૂચિમાંથી દૂર કરો"</string>
- <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"એપ્લિકેશન માહિતી"</string>
+ <string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ઍપ્લિકેશન માહિતી"</string>
<string name="status_bar_no_recent_apps" msgid="7374907845131203189">"તમારી તાજેતરની સ્ક્રીન્સ અહીં દેખાય છે"</string>
<string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"તાજેતરની એપ્લિકેશનો કાઢી નાખો."</string>
<plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
@@ -79,7 +79,7 @@
<string name="usb_preference_title" msgid="6551050377388882787">"USB ફાઇલ ટ્રાન્સફર વિકલ્પો"</string>
<string name="use_mtp_button_title" msgid="4333504413563023626">"મીડિયા પ્લેયર તરીકે માઉન્ટ કરો (MTP)"</string>
<string name="use_ptp_button_title" msgid="7517127540301625751">"કૅમેરા તરીકે માઉન્ટ કરો (PTP)"</string>
- <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac માટે Android ફાઇલ ટ્રાન્સફર એપ્લિકેશન ઇન્સ્ટોલ કરો"</string>
+ <string name="installer_cd_button_title" msgid="2312667578562201583">"Mac માટે Android ફાઇલ ટ્રાન્સફર ઍપ્લિકેશન ઇન્સ્ટોલ કરો"</string>
<string name="accessibility_back" msgid="567011538994429120">"પાછળ"</string>
<string name="accessibility_home" msgid="8217216074895377641">"હોમ"</string>
<string name="accessibility_menu" msgid="316839303324695949">"મેનુ"</string>
@@ -279,7 +279,7 @@
<string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"ફક્ત કટોકટીના કૉલ્સ"</string>
<string name="quick_settings_settings_label" msgid="5326556592578065401">"સેટિંગ્સ"</string>
<string name="quick_settings_time_label" msgid="4635969182239736408">"સમય"</string>
- <string name="quick_settings_user_label" msgid="5238995632130897840">"મારા"</string>
+ <string name="quick_settings_user_label" msgid="5238995632130897840">"હું"</string>
<string name="quick_settings_user_title" msgid="4467690427642392403">"વપરાશકર્તા"</string>
<string name="quick_settings_user_new_user" msgid="9030521362023479778">"નવો વપરાશકર્તા"</string>
<string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
@@ -315,7 +315,7 @@
<string name="quick_settings_work_mode_label" msgid="6244915274350490429">"કાર્ય મોડ"</string>
<string name="recents_empty_message" msgid="808480104164008572">"કોઇ તાજેતરની આઇટમ્સ નથી"</string>
<string name="recents_empty_message_dismissed_all" msgid="2791312568666558651">"તમે બધું સાફ કર્યું"</string>
- <string name="recents_app_info_button_label" msgid="2890317189376000030">"એપ્લિકેશન માહિતી"</string>
+ <string name="recents_app_info_button_label" msgid="2890317189376000030">"ઍપ્લિકેશન માહિતી"</string>
<string name="recents_lock_to_app_button_label" msgid="6942899049072506044">"સ્ક્રીન પિનિંગ"</string>
<string name="recents_search_bar_label" msgid="8074997400187836677">"શોધ"</string>
<string name="recents_launch_error_message" msgid="2969287838120550506">"<xliff:g id="APP">%s</xliff:g> પ્રારંભ કરી શકાયું નથી."</string>
@@ -381,7 +381,7 @@
<string name="user_add_user_title" msgid="4553596395824132638">"નવા વપરાશકર્તાને ઉમેરીએ?"</string>
<string name="user_add_user_message_short" msgid="2161624834066214559">"જ્યારે તમે કોઈ નવા વપરાશકર્તાને ઉમેરો છો, ત્યારે તે વ્યક્તિને તેમનું સ્થાન સેટ કરવાની જરૂર પડે છે.\n\nકોઈપણ વપરાશકર્તા બધા અન્ય વપરાશકર્તાઓ માટે એપ્લિકેશન્સને અપડેટ કરી શકે છે."</string>
<string name="user_remove_user_title" msgid="4681256956076895559">"વપરાશકર્તાને દૂર કરીએ?"</string>
- <string name="user_remove_user_message" msgid="1453218013959498039">"આ વપરાશકર્તાની તમામ એપ્લિકેશન્સ અને ડેટા કાઢી નાખવામાં આવશે."</string>
+ <string name="user_remove_user_message" msgid="1453218013959498039">"આ વપરાશકર્તાની તમામ ઍપ્લિકેશનો અને ડેટા કાઢી નાખવામાં આવશે."</string>
<string name="user_remove_user_remove" msgid="7479275741742178297">"દૂર કરો"</string>
<string name="battery_saver_notification_title" msgid="237918726750955859">"બેટરી સેવર ચાલુ છે"</string>
<string name="battery_saver_notification_text" msgid="820318788126672692">"પ્રદર્શન અને પૃષ્ઠભૂમિ ડેટા ઘટાડે છે"</string>
@@ -400,7 +400,7 @@
<string name="disable_vpn" msgid="4435534311510272506">"VPN અક્ષમ કરો"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ડિસ્કનેક્ટ કરો"</string>
<string name="monitoring_description_device_owned" msgid="5780988291898461883">"તમારું ઉપકરણ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે.\n\nતમારા વ્યવસ્થાપક સેટિંગ્સ, કોર્પોરેટ ઍક્સેસ, એપ્લિકેશનો, તમારા ઉપકરણ સાથે સંકળાયેલ ડેટા અને તમારા ઉપકરણની સ્થાન માહિતી મોનિટર અને સંચાલિત કરી શકે છે. વધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
- <string name="monitoring_description_vpn" msgid="4445150119515393526">"તમે VPN કનેક્શન સેટ કરવા માટે એપ્લિકેશન પરવાનગી આપી.\n\nઆ એપ્લિકેશન ઇમેઇલ્સ, એપ્લિકેશનો અને વેબસાઇટ્સ સહિત તમારા ઉપકરણ અને નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
+ <string name="monitoring_description_vpn" msgid="4445150119515393526">"તમે VPN કનેક્શન સેટ કરવા માટે ઍપ્લિકેશન પરવાનગી આપી.\n\nઆ ઍપ્લિકેશન ઇમેઇલ્સ, ઍપ્લિકેશનો અને વેબસાઇટ્સ સહિત તમારા ઉપકરણ અને નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
<string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"તમારું ઉપકરણ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે.\n\nતમારા વ્યવસ્થાપક સેટિંગ્સ, કોર્પોરેટ ઍક્સેસ, એપ્લિકેશનો, તમારા ઉપકરણ સાથે સંકળાયેલ ડેટા અને તમારા ઉપકરણની સ્થાન માહિતી મોનિટર અને સંચાલિત કરી શકે છે.\n\nતમે VPN સાથે કનેક્ટ થયેલા છો જે ઇમેઇલ્સ, એપ્લિકેશનો અને વેબસાઇટ્સ સહિતની, તમારી નેટવર્ક પ્રવૃત્તિ મોનિટર કરી શકે છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો."</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"તમારી કાર્ય પ્રોફાઇલ <xliff:g id="ORGANIZATION">%1$s</xliff:g> દ્વારા સંચાલિત થાય છે.\n\nતમારા વ્યવસ્થાપક ઇમેઇલ્સ, એપ્લિકેશનો અને વેબસાઇટ્સ સહિતની તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરવામાં સમર્થ છે.\n\nવધુ માહિતી માટે, તમારા વ્યવસ્થાપકનો સંપર્ક કરો.\n\nતમે VPN સાથે પણ કનેક્ટ છો, જે તમારી નેટવર્ક પ્રવૃત્તિને મૉનિટર કરી શકે છે."</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
@@ -465,7 +465,7 @@
<string name="tuner_toast" msgid="603429811084428439">"અભિનંદન! સિસ્ટમ UI ટ્યૂનરને સેટિંગ્સમાં ઉમેરવામાં આવ્યું છે"</string>
<string name="remove_from_settings" msgid="8389591916603406378">"સેટિંગ્સમાંથી દૂર કરો"</string>
<string name="remove_from_settings_prompt" msgid="6069085993355887748">"સેટિંગ્સમાંથી સિસ્ટમ UI ટ્યૂનર દૂર કરી અને તેની તમામ સુવિધાઓનો ઉપયોગ કરવાનું બંધ કરીએ?"</string>
- <string name="activity_not_found" msgid="348423244327799974">"તમારા ઉપકરણ પર એપ્લિકેશન ઇન્સ્ટોલ થયેલ નથી"</string>
+ <string name="activity_not_found" msgid="348423244327799974">"તમારા ઉપકરણ પર ઍપ્લિકેશન ઇન્સ્ટોલ થયેલ નથી"</string>
<string name="clock_seconds" msgid="7689554147579179507">"ઘડિયાળ સેકન્ડ બતાવો"</string>
<string name="clock_seconds_desc" msgid="6282693067130470675">"ઘડિયાળ સેકન્ડ સ્થિતિ બારમાં બતાવો. બૅટરીની આવરદા પર અસર કરી શકે છે."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ઝડપી સેટિંગ્સને ફરીથી ગોઠવો"</string>
@@ -515,7 +515,7 @@
<string name="night_mode_disclaimer" msgid="598914896926759578">"ઘાટી થીમને Android OS ના મુખ્ય ક્ષેત્રો પર લાગુ કરે છે જે સામાન્ય રીતે સેટિંગ્સ જેવી લાઇટ થીમમાં પ્રદર્શિત કરવામાં આવે છે."</string>
<string name="color_apply" msgid="9212602012641034283">"લાગુ કરો"</string>
<string name="color_revert_title" msgid="4746666545480534663">"સેટિંગ્સની પુષ્ટિ કરો"</string>
- <string name="color_revert_message" msgid="9116001069397996691">"કેટલીક રંગ સેટિંગ્સ આ ઉપકરણને બિનઉપયોગી બનાવી શકે છે. આ રંગ સેટિંગ્સની પુષ્ટિ કરવા માટે ઑકે ક્લિક કરો, અન્યથા 10 સેકંડ પછી આ સેટિંગ્સ ફરીથી સેટ થશે."</string>
+ <string name="color_revert_message" msgid="9116001069397996691">"કેટલીક રંગ સેટિંગ્સ આ ઉપકરણને બિનઉપયોગી બનાવી શકે છે. આ રંગ સેટિંગ્સની પુષ્ટિ કરવા માટે ઓકે ક્લિક કરો, અન્યથા 10 સેકંડ પછી આ સેટિંગ્સ ફરીથી સેટ થશે."</string>
<string name="battery_panel_title" msgid="7944156115535366613">"બૅટરી વપરાશ"</string>
<string name="battery_detail_charging_summary" msgid="1279095653533044008">"ચાર્જિંગ દરમિયાન બૅટરી બચતકર્તા ઉપલબ્ધ નથી"</string>
<string name="battery_detail_switch_title" msgid="6285872470260795421">"બૅટરી બચતકર્તા"</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 384d125..6992940 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -61,7 +61,7 @@
<string name="label_view" msgid="6304565553218192990">"Prikaži"</string>
<string name="always_use_device" msgid="1450287437017315906">"Koristi se prema zadanim postavkama za ovaj USB uređaj"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"Koristi se prema zadanim postavkama za ovaj USB pribor"</string>
- <string name="usb_debugging_title" msgid="4513918393387141949">"Omogućiti uklanjanje pogrešaka putem USB-a?"</string>
+ <string name="usb_debugging_title" msgid="4513918393387141949">"Omogućiti otklanjanje pogrešaka putem USB-a?"</string>
<string name="usb_debugging_message" msgid="2220143855912376496">"Otisak prsta RSA ključa računala je: \n <xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
<string name="usb_debugging_always" msgid="303335496705863070">"Uvijek dopusti s ovog računala"</string>
<string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"Otklanjanje pogrešaka putem USB-a nije dopušteno"</string>
@@ -296,7 +296,7 @@
<string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"Nema dostupnih uređaja"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"Svjetlina"</string>
<string name="quick_settings_brightness_dialog_auto_brightness_label" msgid="5064982743784071218">"AUTOMATSKI"</string>
- <string name="quick_settings_inversion_label" msgid="8790919884718619648">"Preokreni boje"</string>
+ <string name="quick_settings_inversion_label" msgid="8790919884718619648">"Zamijeni boje"</string>
<string name="quick_settings_color_space_label" msgid="853443689745584770">"Način korekcije boje"</string>
<string name="quick_settings_more_settings" msgid="326112621462813682">"Više postavki"</string>
<string name="quick_settings_done" msgid="3402999958839153376">"Gotovo"</string>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index 8c92ab1..b7a333b 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -51,8 +51,8 @@
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth-ը կապված է"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Կարգավորել մուտքագրման եղանակները"</string>
<string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Ֆիզիկական ստեղնաշար"</string>
- <string name="usb_device_permission_prompt" msgid="834698001271562057">"Թույլատրե՞լ <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածի մուտքը USB սարք:"</string>
- <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Թույլատրե՞լ, որ <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածը մուտք գործի USB լրասարք:"</string>
+ <string name="usb_device_permission_prompt" msgid="834698001271562057">"Թույլատրե՞լ <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածին օգտագործել USB սարքը։"</string>
+ <string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"Թույլատրե՞լ, <xliff:g id="APPLICATION">%1$s</xliff:g> հավելվածին օգտագործել USB սարքը։"</string>
<string name="usb_device_confirm_prompt" msgid="5161205258635253206">"Բացե՞լ <xliff:g id="ACTIVITY">%1$s</xliff:g>-ը, երբ այս USB կրիչը կապակցված է:"</string>
<string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"Բացե՞լ <xliff:g id="ACTIVITY">%1$s</xliff:g>-ը, երբ այս USB լրասարքը կապակցված է:"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"Այս USB լրասարքի հետ ոչ մի հավելված չի աշխատում: Իմացեք ավելին այս լրասարքի մասին <xliff:g id="URL">%1$s</xliff:g>-ում"</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index e522950..f352d50 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -597,8 +597,8 @@
<string name="keycode_description" msgid="1403795192716828949">"I pulsanti keycode consentono di aggiungere tasti della tastiera alla barra di navigazione. Quando vengono premuti, emulano il tasto selezionato. Innanzitutto è necessario selezionare il tasto da associare al pulsante, poi un\'immagine da mostrare sul pulsante."</string>
<string name="select_keycode" msgid="7413765103381924584">"Seleziona il tasto della tastiera"</string>
<string name="preview" msgid="9077832302472282938">"Anteprima"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Trascina per aggiungere i riquadri"</string>
- <string name="drag_to_remove_tiles" msgid="3361212377437088062">"Trascinali qui per rimuoverli"</string>
+ <string name="drag_to_add_tiles" msgid="7058945779098711293">"Trascina per aggiungere le funzioni"</string>
+ <string name="drag_to_remove_tiles" msgid="3361212377437088062">"Trascina qui per rimuovere"</string>
<string name="qs_edit" msgid="2232596095725105230">"Modifica"</string>
<string name="tuner_time" msgid="6572217313285536011">"Ora"</string>
<string-array name="clock_options">
diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml
index 5485b5d..1c295e6 100644
--- a/packages/SystemUI/res/values-kn-rIN/strings.xml
+++ b/packages/SystemUI/res/values-kn-rIN/strings.xml
@@ -378,7 +378,7 @@
<string name="user_logout_notification_text" msgid="3350262809611876284">"ಪ್ರಸ್ತುತ ಬಳಕೆದಾರರನ್ನು ಲಾಗ್ಔಟ್ ಮಾಡಿ"</string>
<string name="user_logout_notification_action" msgid="1195428991423425062">"ಬಳಕೆದಾರರನ್ನು ಲಾಗ್ಔಟ್ ಮಾಡಿ"</string>
<string name="user_add_user_title" msgid="4553596395824132638">"ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸುವುದೇ?"</string>
- <string name="user_add_user_message_short" msgid="2161624834066214559">"ನೀವು ಒಬ್ಬ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿದಾಗ, ಆ ವ್ಯಕ್ತಿಯು ಅವರ ಸ್ಥಳವನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ.\n\nಯಾವುದೇ ಬಳಕೆದಾರರು ಎಲ್ಲಾ ಇತರೆ ಬಳಕೆದಾರರಿಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ನವೀಕರಿಸಬಹುದು."</string>
+ <string name="user_add_user_message_short" msgid="2161624834066214559">"ನೀವು ಒಬ್ಬ ಹೊಸ ಬಳಕೆದಾರರನ್ನು ಸೇರಿಸಿದಾಗ, ಆ ವ್ಯಕ್ತಿಯು ಅವರ ಸ್ಥಳವನ್ನು ಸ್ಥಾಪಿಸಬೇಕಾಗುತ್ತದೆ.\n\nಯಾವುದೇ ಬಳಕೆದಾರರು ಎಲ್ಲಾ ಇತರೆ ಬಳಕೆದಾರರಿಗಾಗಿ ಅಪ್ಲಿಕೇಶನ್ಗಳನ್ನು ಅಪ್ಡೇಟ್ ಮಾಡಬಹುದು."</string>
<string name="user_remove_user_title" msgid="4681256956076895559">"ಬಳಕೆದಾರರನ್ನು ತೆಗೆದುಹಾಕುವುದೇ?"</string>
<string name="user_remove_user_message" msgid="1453218013959498039">"ಈ ಬಳಕೆದಾರರ ಎಲ್ಲಾ ಅಪ್ಲಿಕೇಶನ್ಗಳು ಮತ್ತು ಡೇಟಾವನ್ನು ಅಳಿಸಲಾಗುವುದು."</string>
<string name="user_remove_user_remove" msgid="7479275741742178297">"ತೆಗೆದುಹಾಕಿ"</string>
@@ -570,9 +570,9 @@
<string name="headset" msgid="4534219457597457353">"ಹೆಡ್ಸೆಟ್"</string>
<string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"ಹೆಡ್ಫೋನ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string>
<string name="accessibility_status_bar_headset" msgid="8666419213072449202">"ಹೆಡ್ಸೆಟ್ ಸಂಪರ್ಕಪಡಿಸಲಾಗಿದೆ"</string>
- <string name="data_saver" msgid="5037565123367048522">"ಡೇಟಾ ಉಳಿಸುವಿಕೆ"</string>
- <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ಡೇಟಾ ಉಳಿಸುವಿಕೆ ಆನ್ ಆಗಿದೆ"</string>
- <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ಡೇಟಾ ಉಳಿಸುವಿಕೆ ಆಫ್ ಆಗಿದೆ"</string>
+ <string name="data_saver" msgid="5037565123367048522">"ಡೇಟಾ ಸೇವರ್"</string>
+ <string name="accessibility_data_saver_on" msgid="8454111686783887148">"ಡೇಟಾ ಸೇವರ್ ಆನ್ ಆಗಿದೆ"</string>
+ <string name="accessibility_data_saver_off" msgid="8841582529453005337">"ಡೇಟಾ ಸೇವರ್ ಆಫ್ ಆಗಿದೆ"</string>
<string name="switch_bar_on" msgid="1142437840752794229">"ಆನ್"</string>
<string name="switch_bar_off" msgid="8803270596930432874">"ಆಫ್"</string>
<string name="nav_bar" msgid="1993221402773877607">"ನ್ಯಾವಿಗೇಷನ್ ಬಾರ್"</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 5d9743c..9eba956 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -231,8 +231,8 @@
<string name="accessibility_quick_settings_work_mode_on" msgid="7650588553988014341">"작업 모드가 사용 설정되었습니다."</string>
<string name="accessibility_quick_settings_work_mode_changed_off" msgid="5605534876107300711">"작업 모드가 사용 중지되었습니다."</string>
<string name="accessibility_quick_settings_work_mode_changed_on" msgid="249840330756998612">"작업 모드가 사용 설정되었습니다."</string>
- <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"데이터 세이버를 사용 중지했습니다."</string>
- <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"데이터 세이버를 사용 설정했습니다."</string>
+ <string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"데이터 절약 모드를 사용 중지했습니다."</string>
+ <string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"데이터 절약 모드를 사용 설정했습니다."</string>
<string name="accessibility_brightness" msgid="8003681285547803095">"디스플레이 밝기"</string>
<string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G 데이터 사용 중지됨"</string>
<string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G 데이터 사용 중지됨"</string>
@@ -572,9 +572,9 @@
<string name="headset" msgid="4534219457597457353">"헤드셋"</string>
<string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"헤드폰 연결됨"</string>
<string name="accessibility_status_bar_headset" msgid="8666419213072449202">"헤드셋 연결됨"</string>
- <string name="data_saver" msgid="5037565123367048522">"데이터 세이버"</string>
- <string name="accessibility_data_saver_on" msgid="8454111686783887148">"데이터 세이버 사용"</string>
- <string name="accessibility_data_saver_off" msgid="8841582529453005337">"데이터 세이버 사용 안함"</string>
+ <string name="data_saver" msgid="5037565123367048522">"데이터 절약 모드"</string>
+ <string name="accessibility_data_saver_on" msgid="8454111686783887148">"데이터 절약 모드 사용"</string>
+ <string name="accessibility_data_saver_off" msgid="8841582529453005337">"데이터 절약 모드 사용 안함"</string>
<string name="switch_bar_on" msgid="1142437840752794229">"사용"</string>
<string name="switch_bar_off" msgid="8803270596930432874">"사용 안함"</string>
<string name="nav_bar" msgid="1993221402773877607">"탐색 메뉴"</string>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index c0e1520..4fd8485 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -23,7 +23,7 @@
<string name="status_bar_clear_all_button" msgid="7774721344716731603">"ລຶບ"</string>
<string name="status_bar_recent_remove_item_title" msgid="6026395868129852968">"ເອົາອອກຈາກລາຍການ"</string>
<string name="status_bar_recent_inspect_item_title" msgid="7793624864528818569">"ຂໍ້ມູນແອັບຯ"</string>
- <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"Your recent screens appear here"</string>
+ <string name="status_bar_no_recent_apps" msgid="7374907845131203189">"ໜ້າຈໍຫຼ້າສຸດຂອງທ່ານຈະປາກົດຢູ່ບ່ອນນີ້"</string>
<string name="status_bar_accessibility_dismiss_recents" msgid="4576076075226540105">"ປິດແອັບຯຫຼ້າສຸດທີ່ໃຊ້"</string>
<plurals name="status_bar_accessibility_recent_apps" formatted="false" msgid="9138535907802238759">
<item quantity="other">%d ໜ້າຈໍຢູ່ໃນພາບລວມ</item>
@@ -359,7 +359,7 @@
<string name="accessibility_multi_user_switch_switcher_with_current" msgid="8434880595284601601">"ປ່ຽນຜູ່ໃຊ້, ຜູ່ໃຊ້ປະຈຸບັນ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_inactive" msgid="1424081831468083402">"ຜູ້ໃຊ້ປະຈຸບັນ <xliff:g id="CURRENT_USER_NAME">%s</xliff:g>"</string>
<string name="accessibility_multi_user_switch_quick_contact" msgid="3020367729287990475">"ສະແດງໂປຣໄຟລ໌"</string>
- <string name="user_add_user" msgid="5110251524486079492">"ເພີ່ມຜູ່ໃຊ້"</string>
+ <string name="user_add_user" msgid="5110251524486079492">"ເພີ່ມຜູ້ໃຊ້"</string>
<string name="user_new_user_name" msgid="426540612051178753">"ຜູ່ໃຊ້ໃໝ່"</string>
<string name="guest_nickname" msgid="8059989128963789678">"ແຂກ"</string>
<string name="guest_new_guest" msgid="600537543078847803">"ເພີ່ມແຂກ"</string>
@@ -378,7 +378,7 @@
<string name="user_logout_notification_text" msgid="3350262809611876284">"ອອກຈາກຜູ້ໃຊ້ປະຈຸບັນ"</string>
<string name="user_logout_notification_action" msgid="1195428991423425062">"ເອົາຜູ້ໃຊ້ອອກຈາກລະບົບ"</string>
<string name="user_add_user_title" msgid="4553596395824132638">"ເພີ່ມຜູ່ໃຊ້ໃໝ່ບໍ?"</string>
- <string name="user_add_user_message_short" msgid="2161624834066214559">"ເມື່ອທ່ານເພີ່ມຜູ່ໃຊ້ໃໝ່, ຜູ່ໃຊ້ນັ້ນຈະຕ້ອງຕັ້ງຄ່າພື້ນທີ່ບ່ອນຈັດເກັບຂໍ້ມູນຂອງລາວ.\n\nຜູ່ໃຊ້ທຸກຄົນສາມາດອັບເດດແອັບຯຂອງຜູ່ໃຊ້ຄົນອື່ນທັງໝົດໄດ້."</string>
+ <string name="user_add_user_message_short" msgid="2161624834066214559">"ເມື່ອທ່ານເພີ່ມຜູ້ໃຊ້ໃໝ່, ຜູ້ໃຊ້ນັ້ນຈະຕ້ອງຕັ້ງຄ່າພື້ນທີ່ບ່ອນຈັດເກັບຂໍ້ມູນຂອງລາວ.\n\nຜູ້ໃຊ້ທຸກຄົນສາມາດອັບເດດແອັບຯຂອງຜູ້ໃຊ້ຄົນອື່ນທັງໝົດໄດ້."</string>
<string name="user_remove_user_title" msgid="4681256956076895559">"ລຶບຜູ້ໃຊ້ອອກບໍ?"</string>
<string name="user_remove_user_message" msgid="1453218013959498039">"ທຸກແອັບ ແລະ ຂໍ້ມູນຂອງຜູ້ໃຊ້ນີ້ຈະຖືກລຶບ."</string>
<string name="user_remove_user_remove" msgid="7479275741742178297">"ເອົາອອກ"</string>
@@ -595,7 +595,7 @@
<string name="keycode_description" msgid="1403795192716828949">"ປຸ່ມ Keycode ອະນຸຍາດໃຫ້ເພີ່ມປຸ່ມແປ້ນພິມໃສ່ແຖບການນຳທາງ. ເມື່ອກົດແລ້ວພວກມັນຈະຮຽນແບບປຸ່ມແປ້ນພິມທີ່ເລືອກ. ທຳອິດຕ້ອງເລືອກປຸ່ມແປ້ນພິມສຳລັບປຸ່ມນັ້ນ, ຕາມດ້ວຍຮູບທີ່ຈະປາກົດຂຶ້ນເທິງປຸ່ມນັ້ນ."</string>
<string name="select_keycode" msgid="7413765103381924584">"ເລືອກປຸ່ມແປ້ນພິມ"</string>
<string name="preview" msgid="9077832302472282938">"ສະແດງຕົວຢ່າງ"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"ລາກເພື່ອເພີ່ມໄທລ໌"</string>
+ <string name="drag_to_add_tiles" msgid="7058945779098711293">"ລາກເພື່ອເພີ່ມໄອຄອນ"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"ລາກມາບ່ອນນີ້ເພື່ອລຶບອອກ"</string>
<string name="qs_edit" msgid="2232596095725105230">"ແກ້ໄຂ"</string>
<string name="tuner_time" msgid="6572217313285536011">"ເວລາ"</string>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml
index b832082..af1bab18 100644
--- a/packages/SystemUI/res/values-ml-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ml-rIN/strings.xml
@@ -38,11 +38,11 @@
<string name="invalid_charger" msgid="4549105996740522523">"USB ചാർജ്ജുചെയ്യൽ പിന്തുണയ്ക്കുന്നില്ല.\nഅതിന്റെ അനുബന്ധ ചാർജ്ജർ മാത്രം ഉപയോഗിക്കുക."</string>
<string name="invalid_charger_title" msgid="3515740382572798460">"USB ചാർജ്ജുചെയ്യൽ പിന്തുണച്ചില്ല."</string>
<string name="invalid_charger_text" msgid="5474997287953892710">"വിതരണം ചെയ്ത ചാർജ്ജർ മാത്രം ഉപയോഗിക്കുക."</string>
- <string name="battery_low_why" msgid="4553600287639198111">"ക്രമീകരണങ്ങൾ"</string>
+ <string name="battery_low_why" msgid="4553600287639198111">"ക്രമീകരണം"</string>
<string name="battery_saver_confirmation_title" msgid="5299585433050361634">"ബാറ്ററി സേവർ ഓണാക്കണോ?"</string>
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"ഓൺ ചെയ്യുക"</string>
<string name="battery_saver_start_action" msgid="5576697451677486320">"ബാറ്ററി സേവർ ഓണാക്കുക"</string>
- <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"ക്രമീകരണങ്ങൾ"</string>
+ <string name="status_bar_settings_settings_button" msgid="3023889916699270224">"ക്രമീകരണം"</string>
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"വൈഫൈ"</string>
<string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"സ്ക്രീൻ സ്വയമേതിരിക്കുക"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"മ്യൂട്ടുചെയ്യുക"</string>
@@ -180,7 +180,7 @@
<string name="accessibility_desc_notification_shade" msgid="4690274844447504208">"അറിയിപ്പ് ഷെയ്ഡ്."</string>
<string name="accessibility_desc_quick_settings" msgid="6186378411582437046">"ദ്രുത ക്രമീകരണങ്ങൾ."</string>
<string name="accessibility_desc_lock_screen" msgid="5625143713611759164">"ലോക്ക് സ്ക്രീൻ."</string>
- <string name="accessibility_desc_settings" msgid="3417884241751434521">"ക്രമീകരണങ്ങൾ"</string>
+ <string name="accessibility_desc_settings" msgid="3417884241751434521">"ക്രമീകരണം"</string>
<string name="accessibility_desc_recent_apps" msgid="4876900986661819788">"കാഴ്ച."</string>
<string name="accessibility_desc_close" msgid="7479755364962766729">"അടയ്ക്കുക"</string>
<string name="accessibility_quick_settings_user" msgid="1104846699869476855">"ഉപയോക്താവ് <xliff:g id="USER">%s</xliff:g>."</string>
@@ -246,7 +246,7 @@
<string name="accessibility_clear_all" msgid="5235938559247164925">"എല്ലാ വിവരങ്ങളും മായ്ക്കുക."</string>
<string name="notification_group_overflow_indicator" msgid="1863231301642314183">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
<string name="status_bar_notification_inspect_item_title" msgid="5668348142410115323">"അറിയിപ്പ് ക്രമീകരണങ്ങൾ"</string>
- <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ക്രമീകരണങ്ങൾ"</string>
+ <string name="status_bar_notification_app_settings_title" msgid="5525260160341558869">"<xliff:g id="APP_NAME">%s</xliff:g> ക്രമീകരണം"</string>
<string name="accessibility_rotation_lock_off" msgid="4062780228931590069">"സ്ക്രീൻ യാന്ത്രികമായി തിരിയും."</string>
<string name="accessibility_rotation_lock_on_landscape" msgid="6731197337665366273">"സ്ക്രീൻ ലാൻഡ്സ്കേപ്പ് ഓറിയന്റേഷനിൽ ലോക്കുചെയ്തു."</string>
<string name="accessibility_rotation_lock_on_portrait" msgid="5809367521644012115">"സ്ക്രീൻ പോർട്രെയ്റ്റ് ഓറിയന്റേഷനിൽ ലോക്കുചെയ്തു."</string>
@@ -277,7 +277,7 @@
<string name="quick_settings_media_device_label" msgid="1302906836372603762">"മീഡിയ ഉപകരണം"</string>
<string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
<string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"അടിയന്തിര കോളുകൾ മാത്രം"</string>
- <string name="quick_settings_settings_label" msgid="5326556592578065401">"ക്രമീകരണങ്ങൾ"</string>
+ <string name="quick_settings_settings_label" msgid="5326556592578065401">"ക്രമീകരണം"</string>
<string name="quick_settings_time_label" msgid="4635969182239736408">"സമയം"</string>
<string name="quick_settings_user_label" msgid="5238995632130897840">"ഞാന്"</string>
<string name="quick_settings_user_title" msgid="4467690427642392403">"ഉപയോക്താവ്"</string>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index d146210..278468a 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -97,8 +97,8 @@
<string name="cancel" msgid="6442560571259935130">"Цуцлах"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"Тохиромжтой өсгөх товч."</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"Жижгээс том дэлгэцрүү өсгөх."</string>
- <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Блютүүт холбогдсон."</string>
- <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Блютүүт тасрав."</string>
+ <string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"Bluetooth холбогдсон."</string>
+ <string name="accessibility_bluetooth_disconnected" msgid="7416648669976870175">"Bluetooth тасрав."</string>
<string name="accessibility_no_battery" msgid="358343022352820946">"Батерей байхгүй."</string>
<string name="accessibility_battery_one_bar" msgid="7774887721891057523">"Батерей нэг баганатай."</string>
<string name="accessibility_battery_two_bars" msgid="8500650438735009973">"Батерей хоёр баганатай."</string>
@@ -150,7 +150,7 @@
<string name="accessibility_cell_data" msgid="7080312242791850520">"Мобайл дата"</string>
<string name="accessibility_cell_data_on" msgid="4310018593519761767">"Мобайл дата асаалттай"</string>
<string name="accessibility_cell_data_off" msgid="8000803571751407635">"Мобайл датаг унтраасан байна"</string>
- <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Блютүүт модем болж байна."</string>
+ <string name="accessibility_bluetooth_tether" msgid="4102784498140271969">"Bluetooth модем болж байна."</string>
<string name="accessibility_airplane_mode" msgid="834748999790763092">"Нислэгийн горим"</string>
<string name="accessibility_no_sims" msgid="3957997018324995781">"SIM карт байхгүй."</string>
<string name="accessibility_carrier_network_change_mode" msgid="4017301580441304305">"Дамжуулагч сүлжээг өөрчилж байна."</string>
@@ -199,10 +199,10 @@
<string name="accessibility_quick_settings_dnd_changed_off" msgid="898107593453022935">"Идэвхгүй болгох үйлдэлд бүү саад бол."</string>
<string name="accessibility_quick_settings_dnd_changed_on" msgid="4483780856613561039">"Идэвхжүүлэх үйлдэлд бүү саад бол."</string>
<string name="accessibility_quick_settings_bluetooth" msgid="6341675755803320038">"Bluetooth."</string>
- <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Блютүүт идэвхгүй."</string>
- <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Блютүүт идэвхтэй."</string>
+ <string name="accessibility_quick_settings_bluetooth_off" msgid="2133631372372064339">"Bluetooth идэвхгүй."</string>
+ <string name="accessibility_quick_settings_bluetooth_on" msgid="7681999166216621838">"Bluetooth идэвхтэй."</string>
<string name="accessibility_quick_settings_bluetooth_connecting" msgid="6953242966685343855">"Блютүүтийг холбож байна."</string>
- <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"Блютүүт холбогдсон."</string>
+ <string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"Bluetooth холбогдсон."</string>
<string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"Блютүүтийг унтраасан."</string>
<string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"Блютүүтийг асаасан."</string>
<string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"Байршил мэдээлэлт идэвхгүй."</string>
@@ -258,9 +258,9 @@
<string name="quick_settings_dnd_priority_label" msgid="483232950670692036">"Зөвхөн чухал зүйлс"</string>
<string name="quick_settings_dnd_alarms_label" msgid="2559229444312445858">"Зөвхөн сэрүүлэг"</string>
<string name="quick_settings_dnd_none_label" msgid="5025477807123029478">"Дуугүй болгох"</string>
- <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Блютүүт"</string>
- <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Блютүүт (<xliff:g id="NUMBER">%d</xliff:g> төхөөрөмж)"</string>
- <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Блютүүт унтраалттай"</string>
+ <string name="quick_settings_bluetooth_label" msgid="6304190285170721401">"Bluetooth"</string>
+ <string name="quick_settings_bluetooth_multiple_devices_label" msgid="3912245565613684735">"Bluetooth (<xliff:g id="NUMBER">%d</xliff:g> төхөөрөмж)"</string>
+ <string name="quick_settings_bluetooth_off_label" msgid="8159652146149219937">"Bluetooth унтраалттай"</string>
<string name="quick_settings_bluetooth_detail_empty_text" msgid="4910015762433302860">"Хослуулсан төхөөрөмж байхгүй"</string>
<string name="quick_settings_brightness_label" msgid="6968372297018755815">"Тодрол"</string>
<string name="quick_settings_rotation_unlocked_label" msgid="7305323031808150099">"Автоматаар эргэх"</string>
diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml
index 2c51984..219f9f8 100644
--- a/packages/SystemUI/res/values-my-rMM/strings.xml
+++ b/packages/SystemUI/res/values-my-rMM/strings.xml
@@ -96,7 +96,7 @@
<string name="voice_assist_label" msgid="3956854378310019854">"အသံ အကူအညီအား ဖွင့်ရန်"</string>
<string name="camera_label" msgid="7261107956054836961">"ကင်မရာ ဖွင့်ရန်"</string>
<string name="recents_caption_resize" msgid="3517056471774958200">"အလုပ်သစ်စီစဥ်မှုကို ရွေးပါ။"</string>
- <string name="cancel" msgid="6442560571259935130">"ထားတော့"</string>
+ <string name="cancel" msgid="6442560571259935130">"ဖျက်သိမ်းရန်"</string>
<string name="accessibility_compatibility_zoom_button" msgid="8461115318742350699">"အံ့ဝင်သောချုံ့ချဲ့ခလုတ်"</string>
<string name="accessibility_compatibility_zoom_example" msgid="4220687294564945780">"ဖန်သားပြင်ပေါ်တွင် အသေးမှအကြီးသို့ချဲ့ခြင်း"</string>
<string name="accessibility_bluetooth_connected" msgid="2707027633242983370">"ဘလူးတုသ်ချိတ်ဆက်ထားမှု"</string>
diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa-rIN/strings.xml
index 5cab544..9ca2df0 100644
--- a/packages/SystemUI/res/values-pa-rIN/strings.xml
+++ b/packages/SystemUI/res/values-pa-rIN/strings.xml
@@ -51,20 +51,20 @@
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth ਟੀਥਰ ਕੀਤੀ"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"ਇਨਪੁਟ ਵਿਧੀਆਂ ਸੈਟ ਅਪ ਕਰੋ"</string>
<string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"ਫਿਜੀਕਲ ਕੀਬੋਰਡ"</string>
- <string name="usb_device_permission_prompt" msgid="834698001271562057">"ਕੀ ਐਪ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ USB ਡਿਵਾਈਸ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
+ <string name="usb_device_permission_prompt" msgid="834698001271562057">"ਕੀ ਐਪ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ USB ਡੀਵਾਈਸ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="usb_accessory_permission_prompt" msgid="5171775411178865750">"ਕੀ ਐਪ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨੂੰ USB ਐਕਸੈਸਰੀ ਤੱਕ ਪਹੁੰਚ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
- <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"ਕੀ ਜਦੋਂ ਇਹ USB ਡਿਵਾਈਸ ਕਨੈਕਟ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ <xliff:g id="ACTIVITY">%1$s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਂਣਾ ਹੈ?"</string>
+ <string name="usb_device_confirm_prompt" msgid="5161205258635253206">"ਕੀ ਜਦੋਂ ਇਹ USB ਡੀਵਾਈਸ ਕਨੈਕਟ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ <xliff:g id="ACTIVITY">%1$s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਂਣਾ ਹੈ?"</string>
<string name="usb_accessory_confirm_prompt" msgid="3808984931830229888">"ਕੀ ਜਦੋਂ ਇਹ USB ਐਕਸੈਸਰੀ ਕਨੈਕਟ ਕੀਤੀ ਜਾਂਦੀ ਹੈ ਤਾਂ <xliff:g id="ACTIVITY">%1$s</xliff:g> ਨੂੰ ਖੋਲ੍ਹਣਾ ਹੈ?"</string>
<string name="usb_accessory_uri_prompt" msgid="513450621413733343">"ਕੋਈ ਇੰਸਟੌਲ ਕੀਤੇ ਐਪਸ ਇਸ USB ਐਕਸੈਸਰੀ ਨਾਲ ਕੰਮ ਨਹੀਂ ਕਰਦੇ। <xliff:g id="URL">%1$s</xliff:g> ਤੇ ਇਸ ਐਕਸੈਸਰੀ ਬਾਰੇ ਹੋਰ ਜਾਣੋ"</string>
<string name="title_usb_accessory" msgid="4966265263465181372">"USB ਐਕਸੈਸਰੀ"</string>
<string name="label_view" msgid="6304565553218192990">"ਦੇਖੋ"</string>
- <string name="always_use_device" msgid="1450287437017315906">"ਇਸ USB ਡਿਵਾਈਸ ਲਈ ਬਾਇ ਡਿਫੌਲਟ ਵਰਤੋ"</string>
+ <string name="always_use_device" msgid="1450287437017315906">"ਇਸ USB ਡੀਵਾਈਸ ਲਈ ਬਾਇ ਡਿਫੌਲਟ ਵਰਤੋ"</string>
<string name="always_use_accessory" msgid="1210954576979621596">"ਇਸ USB ਐਕਸਸੈਰੀ ਲਈ ਬਾਇ ਡਿਫੌਲਟ ਵਰਤੋ"</string>
<string name="usb_debugging_title" msgid="4513918393387141949">"ਕੀ USB ਡੀਬਗਿੰਗ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
<string name="usb_debugging_message" msgid="2220143855912376496">"ਕੰਪਿਊਟਰ ਦਾ RSA ਕੁੰਜੀ ਫਿੰਗਰਪ੍ਰਿੰਟ ਹੈ:\n<xliff:g id="FINGERPRINT">%1$s</xliff:g>"</string>
<string name="usb_debugging_always" msgid="303335496705863070">"ਹਮੇਸ਼ਾਂ ਇਸ ਕੰਪਿਊਟਰ ਤੋਂ ਆਗਿਆ ਦਿਓ"</string>
<string name="usb_debugging_secondary_user_title" msgid="6353808721761220421">"USB ਡਿਬੱਗਿੰਗ ਦੀ ਆਗਿਆ ਨਹੀਂ"</string>
- <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ਇਸ ਡਿਵਾਈਸ ਵਿੱਚ ਵਰਤਮਾਨ ਵਿੱਚ ਸਾਈਨ ਇਨ ਕੀਤਾ ਉਪਭੋਗਤਾ USB ਡਿਬੱਗਿੰਗ ਨੂੰ ਚਾਲੂ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ। ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦਾ ਉਪਯੋਗ ਕਰਨ ਲਈ, ਕਿਰਪਾ ਕਰਕੇ ਕਿਸੇ ਪ੍ਰਸ਼ਾਸਕ ਉਪਭੋਗਤਾ ਵਿੱਚ ਸਵਿੱਚ ਕਰੋ।"</string>
+ <string name="usb_debugging_secondary_user_message" msgid="8572228137833020196">"ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਵਰਤਮਾਨ ਵਿੱਚ ਸਾਈਨ ਇਨ ਕੀਤਾ ਉਪਭੋਗਤਾ USB ਡਿਬੱਗਿੰਗ ਨੂੰ ਚਾਲੂ ਨਹੀਂ ਕਰ ਸਕਦਾ ਹੈ। ਇਸ ਵਿਸ਼ੇਸ਼ਤਾ ਦਾ ਉਪਯੋਗ ਕਰਨ ਲਈ, ਕਿਰਪਾ ਕਰਕੇ ਕਿਸੇ ਪ੍ਰਸ਼ਾਸਕ ਉਪਭੋਗਤਾ ਵਿੱਚ ਸਵਿੱਚ ਕਰੋ।"</string>
<string name="compat_mode_on" msgid="6623839244840638213">"ਸਕ੍ਰੀਨ ਭਰਨ ਲਈ ਜ਼ੂਮ ਕਰੋ"</string>
<string name="compat_mode_off" msgid="4434467572461327898">"ਸਕ੍ਰੀਨ ਭਰਨ ਲਈ ਸਟ੍ਰੈਚ ਕਰੋ"</string>
<string name="screenshot_saving_ticker" msgid="7403652894056693515">"ਸਕ੍ਰੀਨਸ਼ੌਟ ਸੁਰੱਖਿਅਤ ਕਰ ਰਿਹਾ ਹੈ…"</string>
@@ -111,11 +111,11 @@
<string name="accessibility_phone_two_bars" msgid="8384905382804815201">"ਫੋਨ ਦੋ ਬਾਰਸ।"</string>
<string name="accessibility_phone_three_bars" msgid="8521904843919971885">"ਫੋਨ ਤਿੰਨ ਬਾਰਸ।"</string>
<string name="accessibility_phone_signal_full" msgid="6471834868580757898">"ਫੋਨ ਸਿਗਨਲ ਪੂਰਾ।"</string>
- <string name="accessibility_no_data" msgid="4791966295096867555">"ਕੋਈ ਡਾਟਾ ਨਹੀਂ।"</string>
- <string name="accessibility_data_one_bar" msgid="1415625833238273628">"ਡਾਟਾ ਇੱਕ ਬਾਰ।"</string>
- <string name="accessibility_data_two_bars" msgid="6166018492360432091">"ਡਾਟਾ ਦੋ ਬਾਰਸ।"</string>
- <string name="accessibility_data_three_bars" msgid="9167670452395038520">"ਡਾਟਾ ਤਿੰਨ ਬਾਰ।"</string>
- <string name="accessibility_data_signal_full" msgid="2708384608124519369">"ਡਾਟਾ ਸਿਗਨਲ ਪੂਰਾ।"</string>
+ <string name="accessibility_no_data" msgid="4791966295096867555">"ਕੋਈ ਡੈਟਾ ਨਹੀਂ।"</string>
+ <string name="accessibility_data_one_bar" msgid="1415625833238273628">"ਡੈਟਾ ਇੱਕ ਬਾਰ।"</string>
+ <string name="accessibility_data_two_bars" msgid="6166018492360432091">"ਡੈਟਾ ਦੋ ਬਾਰਸ।"</string>
+ <string name="accessibility_data_three_bars" msgid="9167670452395038520">"ਡੈਟਾ ਤਿੰਨ ਬਾਰ।"</string>
+ <string name="accessibility_data_signal_full" msgid="2708384608124519369">"ਡੈਟਾ ਸਿਗਨਲ ਪੂਰਾ।"</string>
<string name="accessibility_wifi_name" msgid="7202151365171148501">"<xliff:g id="WIFI">%s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ।"</string>
<string name="accessibility_bluetooth_name" msgid="8441517146585531676">"<xliff:g id="BLUETOOTH">%s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ।"</string>
<string name="accessibility_cast_name" msgid="4026393061247081201">"<xliff:g id="CAST">%s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਕੀਤਾ ਗਿਆ।"</string>
@@ -207,11 +207,11 @@
<string name="accessibility_quick_settings_bluetooth_connected" msgid="4306637793614573659">"Bluetooth ਕਨੈਕਟ ਕੀਤੀ।"</string>
<string name="accessibility_quick_settings_bluetooth_changed_off" msgid="2730003763480934529">"Bluetooth ਬੰਦ ਹੈ।"</string>
<string name="accessibility_quick_settings_bluetooth_changed_on" msgid="8722351798763206577">"Bluetooth ਚਾਲੂ ਕੀਤੀ।"</string>
- <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਰਿਪੋਰਟਿੰਗ ਬੰਦ।"</string>
- <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਰਿਪੋਰਟਿੰਗ ਚਾਲੂ।"</string>
- <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਰਿਪੋਰਟਿੰਗ ਬੰਦ ਕੀਤੀ।"</string>
- <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਰਿਪੋਰਟਿੰਗ ਚਾਲੂ ਕੀਤੀ।"</string>
- <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ਅਲਾਰਮ <xliff:g id="TIME">%s</xliff:g> ਲਈ ਸੈਟ ਕੀਤਾ।"</string>
+ <string name="accessibility_quick_settings_location_off" msgid="5119080556976115520">"ਟਿਕਾਣਾ ਰਿਪੋਰਟਿੰਗ ਬੰਦ।"</string>
+ <string name="accessibility_quick_settings_location_on" msgid="5809937096590102036">"ਟਿਕਾਣਾ ਰਿਪੋਰਟਿੰਗ ਚਾਲੂ।"</string>
+ <string name="accessibility_quick_settings_location_changed_off" msgid="8526845571503387376">"ਟਿਕਾਣਾ ਰਿਪੋਰਟਿੰਗ ਬੰਦ ਕੀਤੀ।"</string>
+ <string name="accessibility_quick_settings_location_changed_on" msgid="339403053079338468">"ਟਿਕਾਣਾ ਰਿਪੋਰਟਿੰਗ ਚਾਲੂ ਕੀਤੀ।"</string>
+ <string name="accessibility_quick_settings_alarm" msgid="3959908972897295660">"ਅਲਾਰਮ <xliff:g id="TIME">%s</xliff:g> ਲਈ ਸੈੱਟ ਕੀਤਾ ਗਿਆ।"</string>
<string name="accessibility_quick_settings_close" msgid="3115847794692516306">"ਪੈਨਲ ਬੰਦ ਕਰੋ।"</string>
<string name="accessibility_quick_settings_more_time" msgid="3659274935356197708">"ਹੋਰ ਸਮਾਂ।"</string>
<string name="accessibility_quick_settings_less_time" msgid="2404728746293515623">"ਘੱਟ ਸਮਾਂ।"</string>
@@ -232,16 +232,16 @@
<string name="accessibility_quick_settings_data_saver_changed_off" msgid="650231949881093289">"ਡੈਟਾ ਸੇਵਰ ਬੰਦ ਕੀਤਾ ਗਿਆ।"</string>
<string name="accessibility_quick_settings_data_saver_changed_on" msgid="4218725402373934151">"ਡੈਟਾ ਸੇਵਰ ਚਾਲੂ ਕੀਤਾ ਗਿਆ।"</string>
<string name="accessibility_brightness" msgid="8003681285547803095">"ਡਿਸਪਲੇ ਚਮਕ"</string>
- <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ਡਾਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
- <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ਡਾਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
- <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"ਸੈਲਿਊਲਰ ਡਾਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
- <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ਡਾਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
- <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"ਕਿਉਂਕਿ ਤੁਹਾਡੀ ਸੈਟ ਡਾਟਾ ਸੀਮਾ ਪੂਰੀ ਹੋ ਗਈ ਸੀ, ਡਿਵਾਈਸ ਨੇ ਇਸ ਬਾਕੀ ਚੱਕਰ ਲਈ ਡਾਟਾ ਵਰਤੋਂ ਰੋਕ ਦਿੱਤੀ ਹੈ।\n\nਇਸਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਨ ਨਾਲ ਤੁਹਾਡੇ ਕੈਰੀਅਰ ਵੱਲੋਂ ਖ਼ਰਚੇ ਪਾਏ ਜਾ ਸਕਦੇ ਹਨ।"</string>
+ <string name="data_usage_disabled_dialog_3g_title" msgid="5281770593459841889">"2G-3G ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
+ <string name="data_usage_disabled_dialog_4g_title" msgid="1601769736881078016">"4G ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
+ <string name="data_usage_disabled_dialog_mobile_title" msgid="4651001290947318931">"ਸੈਲਿਊਲਰ ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
+ <string name="data_usage_disabled_dialog_title" msgid="3932437232199671967">"ਡੈਟਾ ਰੁਕ ਗਿਆ ਹੈ"</string>
+ <string name="data_usage_disabled_dialog" msgid="8453242888903772524">"ਕਿਉਂਕਿ ਤੁਹਾਡੀ ਸੈਟ ਡੈਟਾ ਸੀਮਾ ਪੂਰੀ ਹੋ ਗਈ ਸੀ, ਡੀਵਾਈਸ ਨੇ ਇਸ ਬਾਕੀ ਚੱਕਰ ਲਈ ਡੈਟਾ ਵਰਤੋਂ ਰੋਕ ਦਿੱਤੀ ਹੈ।\n\nਇਸਨੂੰ ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰਨ ਨਾਲ ਤੁਹਾਡੇ ਕੈਰੀਅਰ ਵੱਲੋਂ ਖ਼ਰਚੇ ਪਾਏ ਜਾ ਸਕਦੇ ਹਨ।"</string>
<string name="data_usage_disabled_dialog_enable" msgid="1412395410306390593">"ਦੁਬਾਰਾ ਸ਼ੁਰੂ ਕਰੋ"</string>
<string name="status_bar_settings_signal_meter_disconnected" msgid="1940231521274147771">"ਕੋਈ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਨਹੀਂ"</string>
<string name="status_bar_settings_signal_meter_wifi_nossid" msgid="6557486452774597820">"Wi-Fi ਕਨੈਕਟ ਕੀਤਾ"</string>
<string name="gps_notification_searching_text" msgid="8574247005642736060">"GPS ਦੀ ਖੋਜ ਕਰ ਰਿਹਾ ਹੈ"</string>
- <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS ਵੱਲੋਂ ਸੈਟ ਕੀਤਾ ਨਿਰਧਾਰਿਤ ਸਥਾਨ"</string>
+ <string name="gps_notification_found_text" msgid="4619274244146446464">"GPS ਵੱਲੋਂ ਸੈੱਟ ਕੀਤਾ ਗਿਆ ਟਿਕਾਣਾ"</string>
<string name="accessibility_location_active" msgid="2427290146138169014">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਸੇਵਾ ਬੇਨਤੀਆਂ ਸਕਿਰਿਆ"</string>
<string name="accessibility_clear_all" msgid="5235938559247164925">"ਸਾਰੀਆਂ ਸੂਚਨਾਵਾਂ ਹਟਾਓ।"</string>
<string name="notification_group_overflow_indicator" msgid="1863231301642314183">"+ <xliff:g id="NUMBER">%s</xliff:g>"</string>
@@ -272,9 +272,9 @@
<string name="quick_settings_rotation_locked_portrait_label" msgid="5102691921442135053">"ਤਸਵੀਰ"</string>
<string name="quick_settings_rotation_locked_landscape_label" msgid="8553157770061178719">"ਲੈਂਡਸਕੇਪ"</string>
<string name="quick_settings_ime_label" msgid="7073463064369468429">"ਇਨਪੁਟ ਵਿਧੀ"</string>
- <string name="quick_settings_location_label" msgid="5011327048748762257">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ"</string>
+ <string name="quick_settings_location_label" msgid="5011327048748762257">"ਟਿਕਾਣਾ"</string>
<string name="quick_settings_location_off_label" msgid="7464544086507331459">"ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਬੰਦ"</string>
- <string name="quick_settings_media_device_label" msgid="1302906836372603762">"ਮੀਡੀਆ ਡਿਵਾਈਸ"</string>
+ <string name="quick_settings_media_device_label" msgid="1302906836372603762">"ਮੀਡੀਆ ਡੀਵਾਈਸ"</string>
<string name="quick_settings_rssi_label" msgid="7725671335550695589">"RSSI"</string>
<string name="quick_settings_rssi_emergency_only" msgid="2713774041672886750">"ਕੇਵਲ ਐਮਰਜੈਂਸੀ ਕਾਲਾਂ"</string>
<string name="quick_settings_settings_label" msgid="5326556592578065401">"ਸੈਟਿੰਗਾਂ"</string>
@@ -284,13 +284,13 @@
<string name="quick_settings_user_new_user" msgid="9030521362023479778">"ਨਵਾਂ ਉਪਭੋਗਤਾ"</string>
<string name="quick_settings_wifi_label" msgid="9135344704899546041">"Wi-Fi"</string>
<string name="quick_settings_wifi_not_connected" msgid="7171904845345573431">"ਕਨੈਕਟ ਨਹੀਂ ਕੀਤਾ"</string>
- <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ਕੋਈ ਨੈਟਵਰਕ ਨਹੀਂ"</string>
+ <string name="quick_settings_wifi_no_network" msgid="2221993077220856376">"ਕੋਈ ਨੈੱਟਵਰਕ ਨਹੀਂ"</string>
<string name="quick_settings_wifi_off_label" msgid="7558778100843885864">"Wi-Fi ਬੰਦ"</string>
<string name="quick_settings_wifi_on_label" msgid="7607810331387031235">"Wi-Fi ਚਾਲੂ"</string>
- <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"ਕੋਈ Wi-Fi ਨੈਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ"</string>
+ <string name="quick_settings_wifi_detail_empty_text" msgid="269990350383909226">"ਕੋਈ Wi-Fi ਨੈੱਟਵਰਕ ਉਪਲਬਧ ਨਹੀਂ"</string>
<string name="quick_settings_cast_title" msgid="7709016546426454729">"ਜੋੜੋ"</string>
<string name="quick_settings_casting" msgid="6601710681033353316">"ਕਾਸਟਿੰਗ"</string>
- <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ਬਿਨਾਂ ਨਾਮ ਦਿੱਤੀ ਡਿਵਾਈਸ"</string>
+ <string name="quick_settings_cast_device_default_name" msgid="5367253104742382945">"ਬਿਨਾਂ ਨਾਮ ਦਿੱਤੀ ਡੀਵਾਈਸ"</string>
<string name="quick_settings_cast_device_default_description" msgid="2484573682378634413">"ਜੋੜਨ ਲਈ ਤਿਆਰ"</string>
<string name="quick_settings_cast_detail_empty_text" msgid="311785821261640623">"ਕੋਈ ਡਿਵਾਈਸਾਂ ਉਪਲਬਧ ਨਹੀਂ"</string>
<string name="quick_settings_brightness_dialog_title" msgid="8599674057673605368">"ਚਮਕ"</string>
@@ -305,9 +305,9 @@
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"ਹੌਟਸਪੌਟ"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"ਸੂਚਨਾਵਾਂ"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"ਫਲੈਸ਼ਲਾਈਟ"</string>
- <string name="quick_settings_cellular_detail_title" msgid="8575062783675171695">"ਸੈਲਿਊਲਰ ਡਾਟਾ"</string>
- <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ਡਾਟਾ ਵਰਤੋਂ"</string>
- <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ਬਾਕੀ ਡਾਟਾ"</string>
+ <string name="quick_settings_cellular_detail_title" msgid="8575062783675171695">"ਸੈਲਿਊਲਰ ਡੈਟਾ"</string>
+ <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"ਡੈਟਾ ਵਰਤੋਂ"</string>
+ <string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"ਬਾਕੀ ਡੈਟਾ"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"ਸੀਮਾ ਤੋਂ ਵੱਧ"</string>
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> ਵਰਤਿਆ"</string>
<string name="quick_settings_cellular_detail_data_limit" msgid="56011158504994128">"<xliff:g id="DATA_LIMIT">%s</xliff:g> ਸੀਮਾ"</string>
@@ -330,7 +330,7 @@
<string name="expanded_header_battery_charging" msgid="205623198487189724">"ਚਾਰਜ ਕਰ ਰਿਹਾ ਹੈ"</string>
<string name="expanded_header_battery_charging_with_time" msgid="457559884275395376">"<xliff:g id="CHARGING_TIME">%s</xliff:g> ਪੂਰਾ ਹੋਣ ਤੱਕ"</string>
<string name="expanded_header_battery_not_charging" msgid="4798147152367049732">"ਚਾਰਜ ਨਹੀਂ ਹੋ ਰਿਹਾ"</string>
- <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ਨੈਟਵਰਕ ਦੀ ਨਿਗਰਾਨੀ\nਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ"</string>
+ <string name="ssl_ca_cert_warning" msgid="9005954106902053641">"ਨੈੱਟਵਰਕ ਦੀ ਨਿਗਰਾਨੀ\nਕੀਤੀ ਜਾ ਸਕਦੀ ਹੈ"</string>
<string name="description_target_search" msgid="3091587249776033139">"ਖੋਜੋ"</string>
<string name="description_direction_up" msgid="7169032478259485180">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ਲਈ ਉੱਪਰ ਸਲਾਈਡ ਕਰੋ।"</string>
<string name="description_direction_left" msgid="7207478719805562165">"<xliff:g id="TARGET_DESCRIPTION">%s</xliff:g> ਤੱਕ ਖੱਬੇ ਪਾਸੇ ਸਲਾਈਡ ਕਰੋ।"</string>
@@ -366,14 +366,14 @@
<string name="guest_new_guest" msgid="600537543078847803">"ਮਹਿਮਾਨ ਜੋੜੋ"</string>
<string name="guest_exit_guest" msgid="7187359342030096885">"ਮਹਿਮਾਨ ਹਟਾਓ"</string>
<string name="guest_exit_guest_dialog_title" msgid="8480693520521766688">"ਕੀ ਮਹਿਮਾਨ ਹਟਾਉਣਾ ਹੈ?"</string>
- <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"ਇਸ ਸੈਸ਼ਨ ਵਿੱਚ ਸਾਰੇ ਐਪਸ ਅਤੇ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
+ <string name="guest_exit_guest_dialog_message" msgid="4155503224769676625">"ਇਸ ਸੈਸ਼ਨ ਵਿੱਚ ਸਾਰੇ ਐਪਸ ਅਤੇ ਡੈਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
<string name="guest_exit_guest_dialog_remove" msgid="7402231963862520531">"ਹਟਾਓ"</string>
<string name="guest_wipe_session_title" msgid="6419439912885956132">"ਮਹਿਮਾਨ, ਫਿਰ ਤੁਹਾਡਾ ਸੁਆਗਤ ਹੈ!"</string>
<string name="guest_wipe_session_message" msgid="8476238178270112811">"ਕੀ ਤੁਸੀਂ ਆਪਣਾ ਸੈਸ਼ਨ ਜਾਰੀ ਰੱਖਣਾ ਚਾਹੁੰਦੇ ਹੋ?"</string>
<string name="guest_wipe_session_wipe" msgid="5065558566939858884">"ਸ਼ੁਰੂ ਕਰੋ"</string>
<string name="guest_wipe_session_dontwipe" msgid="1401113462524894716">"ਹਾਂ, ਜਾਰੀ ਰੱਖੋ"</string>
<string name="guest_notification_title" msgid="1585278533840603063">"ਮਹਿਮਾਨ ਉਪਭੋਗਤਾ"</string>
- <string name="guest_notification_text" msgid="335747957734796689">"ਐਪਸ ਅਤੇ ਡਾਟਾ ਮਿਟਾਉਣ ਲਈ, ਮਹਿਮਾਨ ਉਪਭੋਗਤਾ ਹਟਾਓ"</string>
+ <string name="guest_notification_text" msgid="335747957734796689">"ਐਪਸ ਅਤੇ ਡੈਟਾ ਮਿਟਾਉਣ ਲਈ, ਮਹਿਮਾਨ ਉਪਭੋਗਤਾ ਹਟਾਓ"</string>
<string name="guest_notification_remove_action" msgid="8820670703892101990">"ਮਹਿਮਾਨ ਨੂੰ ਹਟਾਓ"</string>
<string name="user_logout_notification_title" msgid="1453960926437240727">"ਉਪਭੋਗਤਾ ਨੂੰ ਲੌਗ ਆਉਟ ਕਰੋ"</string>
<string name="user_logout_notification_text" msgid="3350262809611876284">"ਵਰਤਮਾਨ ਉਪਭੋਗਤਾ ਨੂੰ ਲੌਗਆਉਟ ਕਰੋ"</string>
@@ -381,35 +381,35 @@
<string name="user_add_user_title" msgid="4553596395824132638">"ਕੀ ਨਵਾਂ ਉਪਭੋਗਤਾ ਜੋੜਨਾ ਹੈ?"</string>
<string name="user_add_user_message_short" msgid="2161624834066214559">"ਜਦੋਂ ਤੁਸੀਂ ਇੱਕ ਨਵਾਂ ਉਪਭੋਗਤਾ ਜੋੜਦੇ ਹੋ, ਉਸ ਵਿਅਕਤੀ ਨੂੰ ਆਪਣਾ ਸਪੇਸ ਸੈਟ ਅਪ ਕਰਨ ਦੀ ਲੋੜ ਹੁੰਦੀ ਹੈ।\n\nਕੋਈ ਵੀ ਉਪਭੋਗਤਾ ਹੋਰ ਸਾਰੇ ਉਪਭੋਗਤਾਵਾਂ ਦੇ ਐਪਸ ਨੂੰ ਅਪਡੇਟ ਕਰ ਸਕਦਾ ਹੈ।"</string>
<string name="user_remove_user_title" msgid="4681256956076895559">"ਕੀ ਉਪਭੋਗਤਾ ਹਟਾਉਣਾ ਹੈ?"</string>
- <string name="user_remove_user_message" msgid="1453218013959498039">"ਇਸ ਉਪਭੋਗਤਾ ਦੇ ਸਾਰੇ ਐਪਸ ਅਤੇ ਡਾਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
+ <string name="user_remove_user_message" msgid="1453218013959498039">"ਇਸ ਉਪਭੋਗਤਾ ਦੇ ਸਾਰੇ ਐਪਸ ਅਤੇ ਡੈਟਾ ਮਿਟਾ ਦਿੱਤਾ ਜਾਏਗਾ।"</string>
<string name="user_remove_user_remove" msgid="7479275741742178297">"ਹਟਾਓ"</string>
<string name="battery_saver_notification_title" msgid="237918726750955859">"ਬੈਟਰੀ ਸੇਵਰ ਚਾਲੂ ਹੈ"</string>
- <string name="battery_saver_notification_text" msgid="820318788126672692">"ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਪਿਛੋਕੜ ਡਾਟਾ ਘੱਟ ਕਰਦਾ ਹੈ"</string>
+ <string name="battery_saver_notification_text" msgid="820318788126672692">"ਪ੍ਰਦਰਸ਼ਨ ਅਤੇ ਪਿਛੋਕੜ ਡੈਟਾ ਘੱਟ ਕਰਦਾ ਹੈ"</string>
<string name="battery_saver_notification_action_text" msgid="109158658238110382">"ਬੈਟਰੀ ਸੇਵਰ ਬੰਦ ਕਰੋ"</string>
<string name="media_projection_dialog_text" msgid="3071431025448218928">"<xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ਉਹ ਸਭ ਕੁਝ ਕੈਪਚਰ ਕਰਨਾ ਸ਼ੁਰੂ ਕਰ ਦੇਵੇਗਾ, ਜੋ ਤੁਹਾਡੀ ਸਕ੍ਰੀਨ ਤੇ ਡਿਸਪਲੇ ਕੀਤਾ ਜਾਂਦਾ ਹੈ।"</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"ਦੁਬਾਰਾ ਨਾ ਦਿਖਾਓ"</string>
<string name="clear_all_notifications_text" msgid="814192889771462828">"ਸਾਰੇ ਹਟਾਓ"</string>
<string name="media_projection_action_text" msgid="8470872969457985954">"ਹੁਣ ਚਾਲੂ ਕਰੋ"</string>
<string name="empty_shade_text" msgid="708135716272867002">"ਕੋਈ ਸੂਚਨਾਵਾਂ ਨਹੀਂ"</string>
- <string name="device_owned_footer" msgid="3802752663326030053">"ਡਿਵਾਈਸ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"</string>
+ <string name="device_owned_footer" msgid="3802752663326030053">"ਡੀਵਾਈਸ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"</string>
- <string name="vpn_footer" msgid="2388611096129106812">"ਨੈਟਵਰਕ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"</string>
- <string name="monitoring_title_device_owned" msgid="7121079311903859610">"ਡਿਵਾਈਸ ਦਾ ਨਿਰੀਖਣ ਕਰਨਾ"</string>
+ <string name="vpn_footer" msgid="2388611096129106812">"ਨੈੱਟਵਰਕ ਦਾ ਨਿਰੀਖਣ ਕੀਤਾ ਜਾ ਸਕਦਾ ਹੈ"</string>
+ <string name="monitoring_title_device_owned" msgid="7121079311903859610">"ਡੀਵਾਈਸ ਦਾ ਨਿਰੀਖਣ ਕਰਨਾ"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"ਪ੍ਰੋਫਾਈਲ ਦਾ ਨਿਰੀਖਣ ਕਰਨਾ"</string>
- <string name="monitoring_title" msgid="169206259253048106">"ਨੈਟਵਰਕ ਨਿਰੀਖਣ ਕਰ ਰਿਹਾ ਹੈ"</string>
+ <string name="monitoring_title" msgid="169206259253048106">"ਨੈੱਟਵਰਕ ਨਿਰੀਖਣ ਕਰ ਰਿਹਾ ਹੈ"</string>
<string name="disable_vpn" msgid="4435534311510272506">"VPN ਨੂੰ ਅਸਮਰੱਥ ਬਣਾਓ"</string>
<string name="disconnect_vpn" msgid="1324915059568548655">"VPN ਨੂੰ ਡਿਸਕਨੈਕਟ ਕਰੋ"</string>
- <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ਤੁਹਾਡੀ ਡਿਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡਾਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
- <string name="monitoring_description_vpn" msgid="4445150119515393526">"ਤੁਸੀਂ ਇੱਕ ਐਪ ਨੂੰ ਇੱਕ VPN ਕਨੈਕਸ਼ਨ ਸੈਟ ਅਪ ਕਰਨ ਦੀ ਅਨੁਮਤੀ ਦਿੱਤੀ ਹੈ।\n\nਇਹ ਐਪ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਅਤੇ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।"</string>
- <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ਤੁਹਾਡੀ ਡਿਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g>ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡਾਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ।\n\nਤੁਸੀਂ ਇੱਕ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਕੀਤਾ ਹੈ, ਜੋ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+ <string name="monitoring_description_device_owned" msgid="5780988291898461883">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡੈਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ। ਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+ <string name="monitoring_description_vpn" msgid="4445150119515393526">"ਤੁਸੀਂ ਇੱਕ ਐਪ ਨੂੰ ਇੱਕ VPN ਕਨੈਕਸ਼ਨ ਸੈਟ ਅਪ ਕਰਨ ਦੀ ਅਨੁਮਤੀ ਦਿੱਤੀ ਹੈ।\n\nਇਹ ਐਪ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਅਤੇ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਸੁਰੱਖਿਅਤ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।"</string>
+ <string name="monitoring_description_vpn_device_owned" msgid="3090670777499161246">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g>ਵੱਲੋਂ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡੈਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ।\n\nਤੁਸੀਂ ਇੱਕ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਕੀਤਾ ਹੈ, ਜੋ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ, ਈਮੇਲਾਂ, ਐਪਸ ਅਤੇ ਵੈਬਸਾਈਟਾਂ ਸਮੇਤ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
<string name="monitoring_description_vpn_profile_owned" msgid="2054949132145039290">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਤੁਹਾਡਾ ਪ੍ਰਸ਼ਾਸਕ ਈਮੇਲ, ਐਪਸ, ਅਤੇ ਵੈੱਬਪੰਨੇ ਸੰਤੇ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰਨ ਦੇ ਸਮਰੱਥ ਹੈ।\n\nਵਧੇਰੇ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਸ਼ਾਸਕ ਨਾਲ ਸੰਪਰਕ ਕਰੋ।\n\nਤੁਸੀਂ VPN ਨਾਲ ਵੀ ਕਨੈਕਟ ਹੋ, ਜੋ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ।"</string>
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
- <string name="monitoring_description_app" msgid="6259179342284742878">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।"</string>
- <string name="monitoring_description_app_personal" msgid="484599052118316268">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।"</string>
- <string name="monitoring_description_app_work" msgid="1754325860918060897">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
- <string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।\n\nਤੁਸੀਂ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ਨਾਲ ਵੀ ਕਨੈਕਟ ਹੋ, ਜੋ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ।"</string>
- <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ਤੁਹਾਡੀ ਡਿਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡਾਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ।\n\nਤੁਸੀਂ ਇੱਕ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈੱਬਪੰਨੇ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
- <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ਡਿਵਾਈਸ ਲੌਕ ਰਹੇਗੀ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਮੈਨੂਅਲੀ ਅਨਲੌਕ ਨਹੀਂ ਕਰਦੇ"</string>
+ <string name="monitoring_description_app" msgid="6259179342284742878">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।"</string>
+ <string name="monitoring_description_app_personal" msgid="484599052118316268">"ਤੁਸੀਂ <xliff:g id="APPLICATION">%1$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।"</string>
+ <string name="monitoring_description_app_work" msgid="1754325860918060897">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+ <string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"ਤੁਹਾਡੀ ਕਾਰਜ ਪ੍ਰੋਫ਼ਾਈਲ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ। ਇਹ <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੈ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈਬਸਫ਼ਿਆਂ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦੀ ਹੈ।\n\nਤੁਸੀਂ <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ਨਾਲ ਵੀ ਕਨੈਕਟ ਹੋ, ਜੋ ਤੁਹਾਡੀ ਨਿੱਜੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦਾ ਨਿਰੀਖਣ ਕਰ ਸਕਦਾ ਹੈ।"</string>
+ <string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"ਤੁਹਾਡੀ ਡੀਵਾਈਸ <xliff:g id="ORGANIZATION">%1$s</xliff:g> ਦੁਆਰਾ ਵਿਵਸਥਿਤ ਕੀਤੀ ਜਾਂਦੀ ਹੈ।\n\nਪ੍ਰਬੰਧਕ ਸੈਟਿੰਗਾਂ, ਕਾਰਪੋਰੇਟ ਪਹੁੰਚ, ਐਪਸ, ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਨਾਲ ਸੰਬੰਧਿਤ ਡੈਟਾ ਅਤੇ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਦੀ ਨਿਰਧਾਰਿਤ ਸਥਾਨ ਜਾਣਕਾਰੀ ਦਾ ਨਿਰੀਖਣ ਅਤੇ ਉਸਨੂੰ ਵਿਵਸਥਿਤ ਕਰ ਸਕਦਾ ਹੈ।\n\nਤੁਸੀਂ ਇੱਕ <xliff:g id="APPLICATION">%2$s</xliff:g> ਨਾਲ ਕਨੈਕਟ ਹੋ, ਜੋ ਈਮੇਲ, ਐਪਸ ਅਤੇ ਵੈੱਬਪੰਨੇ ਸਮੇਤ ਤੁਹਾਡੀ ਨੈੱਟਵਰਕ ਗਤੀਵਿਧੀ ਦੀ ਨਿਗਰਾਨੀ ਕਰ ਸਕਦਾ ਹੈ।\n\nਹੋਰ ਜਾਣਕਾਰੀ ਲਈ, ਆਪਣੇ ਪ੍ਰਬੰਧਕ ਨੂੰ ਸੰਪਰਕ ਕਰੋ।"</string>
+ <string name="keyguard_indication_trust_disabled" msgid="7412534203633528135">"ਡੀਵਾਈਸ ਲੌਕ ਰਹੇਗੀ ਜਦੋਂ ਤੱਕ ਤੁਸੀਂ ਮੈਨੂਅਲੀ ਅਨਲੌਕ ਨਹੀਂ ਕਰਦੇ"</string>
<string name="hidden_notifications_title" msgid="7139628534207443290">"ਤੇਜ਼ੀ ਨਾਲ ਸੂਚਨਾਵਾਂ ਪ੍ਰਾਪਤ ਕਰੋ"</string>
<string name="hidden_notifications_text" msgid="2326409389088668981">"ਅਨਲੌਕ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਉਹਨਾਂ ਨੂੰ ਦੇਖੋ"</string>
<string name="hidden_notifications_cancel" msgid="3690709735122344913">"ਨਹੀਂ ਧੰਨਵਾਦ"</string>
@@ -465,7 +465,7 @@
<string name="tuner_toast" msgid="603429811084428439">"ਵਧਾਈਆਂ! ਸਿਸਟਮ UI ਟਿਊਨਰ ਨੂੰ ਸੈਟਿੰਗਜ਼ ਵਿੱਚ ਜੋੜਿਆ ਗਿਆ ਹੈ"</string>
<string name="remove_from_settings" msgid="8389591916603406378">"ਸੈਟਿੰਗਜ਼ ਤੋਂ ਹਟਾਓ"</string>
<string name="remove_from_settings_prompt" msgid="6069085993355887748">"ਕੀ ਸੈਟਿੰਗਜ਼ ਤੋਂ ਸਿਸਟਮ UI ਟਿਊਨਰ ਨੂੰ ਹਟਾਉਣਾ ਹੈ ਅਤੇ ਇਸਦੀਆਂ ਸਾਰੀਆਂ ਵਿਸ਼ੇਸ਼ਤਾਵਾਂ ਨੂੰ ਉਪਯੋਗ ਕਰਨ ਤੋਂ ਰੋਕਣਾ ਹੈ?"</string>
- <string name="activity_not_found" msgid="348423244327799974">"ਐਪਲੀਕੇਸ਼ਨ ਤੁਹਾਡੀ ਡਿਵਾਈਸ ਤੇ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤੀ ਗਈ ਹੈ"</string>
+ <string name="activity_not_found" msgid="348423244327799974">"ਐਪਲੀਕੇਸ਼ਨ ਤੁਹਾਡੀ ਡੀਵਾਈਸ ਤੇ ਇੰਸਟੌਲ ਨਹੀਂ ਕੀਤੀ ਗਈ ਹੈ"</string>
<string name="clock_seconds" msgid="7689554147579179507">"ਘੜੀ ਸਕਿੰਟ ਦਿਖਾਓ"</string>
<string name="clock_seconds_desc" msgid="6282693067130470675">"ਸਥਿਤੀ ਬਾਰ ਵਿੱਚ ਘੜੀ ਸਕਿੰਟ ਦਿਖਾਓ। ਬੈਟਰੀ ਸਮਰੱਥਾ ਤੇ ਅਸਰ ਪੈ ਸਕਦਾ ਹੈ।"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਦੁਬਾਰਾ ਕ੍ਰਮ ਦਿਓ"</string>
@@ -585,7 +585,7 @@
<string name="select_button" msgid="1597989540662710653">"ਸ਼ਾਮਲ ਕਰਨ ਲਈ ਬਟਨ ਚੁਣੋ"</string>
<string name="add_button" msgid="4134946063432258161">"ਬਟਨ ਸ਼ਾਮਲ ਕਰੋ"</string>
<string name="save" msgid="2311877285724540644">"ਰੱਖਿਅਤ ਕਰੋ"</string>
- <string name="reset" msgid="2448168080964209908">"ਰੀਸੈਟ ਕਰੋ"</string>
+ <string name="reset" msgid="2448168080964209908">"ਰੀਸੈੱਟ ਕਰੋ"</string>
<string name="no_home_title" msgid="1563808595146071549">"ਕੋਈ ਹੋਮ ਬਟਨ ਨਹੀਂ ਮਿਲਿਆ"</string>
<string name="no_home_message" msgid="5408485011659260911">"ਇਸ ਡੀਵਾਈਸ ਵਿੱਚ ਆਵਾਗੌਣ ਕਰਨ ਲਈ ਇੱਕ ਹੋਮ ਬਟਨ ਦੀ ਲੋੜ ਹੈ। ਕਿਰਪਾ ਕਰਕੇ ਰੱਖਿਅਤ ਕਰਨ ਤੋਂ ਪਹਿਲਾਂ ਇੱਕ ਹੋਮ ਬਟਨ ਸ਼ਾਮਲ ਕਰੋ।"</string>
<string name="adjust_button_width" msgid="6138616087197632947">"ਬਟਨ ਚੁੜਾਈ ਵਿਵਸਥਿਤ ਕਰੋ"</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 33c12c2..65e2a92 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -174,7 +174,7 @@
<!-- no translation found for accessibility_casting (6887382141726543668) -->
<skip />
<string name="accessibility_work_mode" msgid="2478631941714607225">"Pracovný režim"</string>
- <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Zrušiť aplikáciu <xliff:g id="APP">%s</xliff:g>"</string>
+ <string name="accessibility_recents_item_will_be_dismissed" msgid="395770242498031481">"Zavrieť aplikáciu <xliff:g id="APP">%s</xliff:g>"</string>
<string name="accessibility_recents_item_dismissed" msgid="6803574935084867070">"Aplikácia <xliff:g id="APP">%s</xliff:g> bola zrušená."</string>
<string name="accessibility_recents_all_items_dismissed" msgid="4464697366179168836">"Všetky nedávne aplikácie boli odmietnuté."</string>
<string name="accessibility_recents_item_open_app_info" msgid="5107479759905883540">"Otvoriť informácie o aplikácii <xliff:g id="APP">%s</xliff:g>"</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index afd2334..66334d4 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -495,7 +495,7 @@
<string name="high_importance" msgid="3441537905162782568">"Pomembnost: stopnja 4"</string>
<string name="max_importance" msgid="4880179829869865275">"Pomembnost: stopnja 5"</string>
<string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Aplikacija določi pomembnost za posamezno obvestilo."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Nikoli ne pokaži obvestil za to aplikacijo."</string>
+ <string name="notification_importance_blocked" msgid="4237497046867398057">"Nikoli ne pokaži obvestil te aplikacije."</string>
<string name="notification_importance_min" msgid="7844224511187027155">"Brez prekinitev, predog., zvoka ali vibrir. v celoz. načinu. Skrij na zakl. zasl. in v vrst. stanja."</string>
<string name="notification_importance_low" msgid="7950291702044409847">"Brez prekinitev, hitrih predogledov, zvoka ali vibriranja v celozaslonskem načinu."</string>
<string name="notification_importance_default" msgid="5924405820269074915">"Brez prekinitev ali hitrih predogledov v celozaslonskem načinu."</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 1a4ea49..3fe37b9 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -43,7 +43,7 @@
<string name="battery_saver_confirmation_ok" msgid="7507968430447930257">"Washa"</string>
<string name="battery_saver_start_action" msgid="5576697451677486320">"Washa kiokoa betri"</string>
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Mipangilio"</string>
- <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Mtandao-Hewa"</string>
+ <string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
<string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Skrini ijizungushe kiotomatiki"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"PUUZA"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"KIOTOMATIKI"</string>
@@ -378,7 +378,7 @@
<string name="user_logout_notification_text" msgid="3350262809611876284">"Mwondoe mtumiaji wa sasa"</string>
<string name="user_logout_notification_action" msgid="1195428991423425062">"ONDOA MTUMIAJI"</string>
<string name="user_add_user_title" msgid="4553596395824132638">"Ungependa kuongeza mtumiaji?"</string>
- <string name="user_add_user_message_short" msgid="2161624834066214559">"Unapomwongeza mtumiaji mpya, mtu huyo anahitaji kusanidi nafasi yake.\n\nMtumiaji yoyote anaweza kusasisha programu kwa ajili ya watumiaji wengine wote."</string>
+ <string name="user_add_user_message_short" msgid="2161624834066214559">"Mtumiaji mpya unayemwongeza anahitaji kuongeza akaunti yake.\n\nMtumiaji yoyote anaweza kusasisha programu kwa niaba ya watumiaji wengine wote."</string>
<string name="user_remove_user_title" msgid="4681256956076895559">"Je, ungependa kuondoa mtumiaji?"</string>
<string name="user_remove_user_message" msgid="1453218013959498039">"Programu na data yote ya mtumiaji huyu itafutwa."</string>
<string name="user_remove_user_remove" msgid="7479275741742178297">"Ondoa"</string>
@@ -491,7 +491,7 @@
<string name="high_importance" msgid="3441537905162782568">"Umuhimu wa Arifa: Kiwango cha 4"</string>
<string name="max_importance" msgid="4880179829869865275">"Umuhimu wa Arifa: Kiwango cha 5"</string>
<string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Programu hubaini umuhimu wa kila arifa."</string>
- <string name="notification_importance_blocked" msgid="4237497046867398057">"Usionyeshe kamwe arifa kutoka programu hii."</string>
+ <string name="notification_importance_blocked" msgid="4237497046867398057">"Usionyeshe arifa zozote kutoka programu hii."</string>
<string name="notification_importance_min" msgid="7844224511187027155">"Usiruhusu ukatizaji wa skrini nzima, arifa za kuchungulia, sauti au mtetemo. Usionyeshe katika skrini iliyofungwa na sehemu ya kuonyesha hali."</string>
<string name="notification_importance_low" msgid="7950291702044409847">"Usiruhusu ukatizaji wa skrini nzima, arifa za kuchungulia, sauti au mtetemo."</string>
<string name="notification_importance_default" msgid="5924405820269074915">"Usiruhusu arifa za kuchungulia au ukatizaji wa skrini nzima."</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index 184c5ac..d6180730 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -44,7 +44,7 @@
<string name="battery_saver_start_action" msgid="5576697451677486320">"I-on ang pagtitipid ng baterya"</string>
<string name="status_bar_settings_settings_button" msgid="3023889916699270224">"Mga Setting"</string>
<string name="status_bar_settings_wifi_button" msgid="1733928151698311923">"Wi-Fi"</string>
- <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"I-auto-rotate ang screen"</string>
+ <string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"I-auto rotate ang screen"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"MUTE"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
<string name="status_bar_settings_notifications" msgid="397146176280905137">"Mga Notification"</string>
@@ -383,7 +383,7 @@
<string name="user_remove_user_message" msgid="1453218013959498039">"Made-delete ang lahat ng app at data ng user na ito."</string>
<string name="user_remove_user_remove" msgid="7479275741742178297">"Alisin"</string>
<string name="battery_saver_notification_title" msgid="237918726750955859">"Naka-on ang tagatipid ng baterya"</string>
- <string name="battery_saver_notification_text" msgid="820318788126672692">"Binabawasan ang pagganap at data sa background"</string>
+ <string name="battery_saver_notification_text" msgid="820318788126672692">"Binabawasan ang performance at data sa background"</string>
<string name="battery_saver_notification_action_text" msgid="109158658238110382">"I-off ang pagtitipid ng baterya"</string>
<string name="media_projection_dialog_text" msgid="3071431025448218928">"Sisimulan ng i-capture ng <xliff:g id="APP_SEEKING_PERMISSION">%s</xliff:g> ang lahat ng ipinapakita sa iyong screen."</string>
<string name="media_projection_remember_text" msgid="3103510882172746752">"Huwag ipakitang muli"</string>
@@ -518,7 +518,7 @@
<string name="battery_panel_title" msgid="7944156115535366613">"Paggamit ng baterya"</string>
<string name="battery_detail_charging_summary" msgid="1279095653533044008">"Hindi available ang Pangtipid sa Baterya kapag nagcha-charge"</string>
<string name="battery_detail_switch_title" msgid="6285872470260795421">"Pangtipid sa Baterya"</string>
- <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Binabawasan ang pagganap at data sa background"</string>
+ <string name="battery_detail_switch_summary" msgid="9049111149407626804">"Binabawasan ang performance at data sa background"</string>
<string name="keyboard_key_button_template" msgid="6230056639734377300">"Button na <xliff:g id="NAME">%1$s</xliff:g>"</string>
<string name="keyboard_key_home" msgid="2243500072071305073">"Home"</string>
<string name="keyboard_key_back" msgid="2337450286042721351">"Back"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 3e200b2..7764073 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -570,7 +570,7 @@
<string name="headset" msgid="4534219457597457353">"耳機"</string>
<string name="accessibility_status_bar_headphones" msgid="9156307120060559989">"已與耳機連線"</string>
<string name="accessibility_status_bar_headset" msgid="8666419213072449202">"已與耳機連線"</string>
- <string name="data_saver" msgid="5037565123367048522">"Data Saver"</string>
+ <string name="data_saver" msgid="5037565123367048522">"數據節省模式"</string>
<string name="accessibility_data_saver_on" msgid="8454111686783887148">"Data Saver 已開啟"</string>
<string name="accessibility_data_saver_off" msgid="8841582529453005337">"Data Saver 已關閉"</string>
<string name="switch_bar_on" msgid="1142437840752794229">"開啟"</string>
diff --git a/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java b/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java
index 0afab88..2aca788 100644
--- a/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/AutoReinflateContainer.java
@@ -18,8 +18,8 @@
import android.content.Context;
import android.content.res.Configuration;
import android.content.res.TypedArray;
+import android.os.LocaleList;
import android.util.AttributeSet;
-import android.util.LocaleList;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
diff --git a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
index 0962d84..f76a68c 100644
--- a/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/ImageWallpaper.java
@@ -31,6 +31,7 @@
import android.opengl.GLUtils;
import android.os.AsyncTask;
import android.os.SystemProperties;
+import android.os.Trace;
import android.renderscript.Matrix4f;
import android.service.wallpaper.WallpaperService;
import android.util.Log;
@@ -166,8 +167,9 @@
}
public void trimMemory(int level) {
- if (level >= ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW &&
- mBackground != null) {
+ if (level >= ComponentCallbacks2.TRIM_MEMORY_RUNNING_LOW
+ && level <= ComponentCallbacks2.TRIM_MEMORY_RUNNING_CRITICAL
+ && mBackground != null) {
if (DEBUG) {
Log.d(TAG, "trimMemory");
}
@@ -309,8 +311,6 @@
Log.d(TAG, "onSurfaceRedrawNeeded");
}
super.onSurfaceRedrawNeeded(holder);
-
- mLastSurfaceHeight = mLastSurfaceWidth = -1;
drawFrame();
}
@@ -324,6 +324,7 @@
return;
}
try {
+ Trace.traceBegin(Trace.TRACE_TAG_VIEW, "drawWallpaper");
DisplayInfo displayInfo = getDefaultDisplayInfo();
int newRotation = displayInfo.rotation;
@@ -418,6 +419,7 @@
drawWallpaperWithCanvas(sh, availw, availh, xPixels, yPixels);
}
} finally {
+ Trace.traceEnd(Trace.TRACE_TAG_VIEW);
if (FIXED_SIZED_SURFACE && !mIsHwAccelerated) {
// If the surface is fixed-size, we should only need to
// draw it once and then we'll let the window manager
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
index 611f9f2..cfc6c52 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
@@ -826,7 +826,7 @@
boolean useThumbnailTransition = (runningTask != null) && !isHomeStackVisible && hasRecentTasks;
// Update the launch state that we need in updateHeaderBarLayout()
- launchState.launchedFromHome = !useThumbnailTransition;
+ launchState.launchedFromHome = !useThumbnailTransition && !mLaunchedWhileDocking;
launchState.launchedFromApp = useThumbnailTransition || mLaunchedWhileDocking;
launchState.launchedViaDockGesture = mLaunchedWhileDocking;
launchState.launchedViaDragGesture = mDraggingInRecents;
diff --git a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java
index 3a17d22..4341ab9c 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/tv/RecentsTvActivity.java
@@ -73,6 +73,8 @@
private final static boolean DEBUG = false;
public final static int EVENT_BUS_PRIORITY = Recents.EVENT_BUS_PRIORITY + 1;
+ private final static String RECENTS_HOME_INTENT_EXTRA =
+ "com.android.systemui.recents.tv.RecentsTvActivity.RECENTS_HOME_INTENT_EXTRA";
private boolean mFinishedOnStartup;
private RecentsPackageMonitor mPackageMonitor;
@@ -320,6 +322,7 @@
homeIntent.addCategory(Intent.CATEGORY_HOME);
homeIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+ homeIntent.putExtra(RECENTS_HOME_INTENT_EXTRA, true);
mFinishLaunchHomeRunnable = new FinishRecentsRunnable(homeIntent);
mPipManager.addListener(mPipListener);
@@ -332,9 +335,19 @@
}
@Override
- protected void onStart() {
- super.onStart();
+ public void onEnterAnimationComplete() {
+ super.onEnterAnimationComplete();
+ if(mLaunchedFromHome) {
+ mHomeRecentsEnterExitAnimationHolder.startEnterAnimation(mPipManager.isPipShown());
+ }
+ mTaskStackViewAdapter.setResetAddedCards(true);
+ EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent());
+ }
+ @Override
+ public void onResume() {
+ super.onResume();
+ mPipRecentsOverlayManager.onRecentsResumed();
// Update the recent tasks
updateRecentsTasks();
@@ -365,24 +378,6 @@
// Notify that recents is now visible
SystemServicesProxy ssp = Recents.getSystemServices();
EventBus.getDefault().send(new RecentsVisibilityChangedEvent(this, true));
-
- updatePipUI();
- }
-
- @Override
- public void onEnterAnimationComplete() {
- super.onEnterAnimationComplete();
- if(mLaunchedFromHome) {
- mHomeRecentsEnterExitAnimationHolder.startEnterAnimation(mPipManager.isPipShown());
- }
- mTaskStackViewAdapter.setResetAddedCards(true);
- EventBus.getDefault().send(new EnterRecentsWindowAnimationCompletedEvent());
- }
-
- @Override
- public void onResume() {
- super.onResume();
- mPipRecentsOverlayManager.onRecentsResumed();
if(mTaskStackHorizontalGridView.getStack().getTaskCount() > 1 && !mLaunchedFromHome) {
// If there are 2 or more tasks, and we are not launching from home
// set the selected position to the 2nd task to allow for faster app switching
@@ -390,6 +385,8 @@
} else {
mTaskStackHorizontalGridView.setSelectedPosition(0);
}
+
+ updatePipUI();
}
@Override
@@ -413,6 +410,9 @@
RecentsConfiguration config = Recents.getConfiguration();
RecentsActivityLaunchState launchState = config.getLaunchState();
launchState.reset();
+
+ // Workaround for b/28333917.
+ finish();
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
index cc8e832..f4c13d7 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackAnimationHelper.java
@@ -276,12 +276,13 @@
tv.onStartFrontTaskEnterAnimation(mStackView.mScreenPinningEnabled);
}
} else if (launchState.launchedViaDockGesture) {
- // Animate the tasks up
+ // Animate the tasks up - add some delay to match the divider animation
AnimationProps taskAnimation = new AnimationProps()
.setDuration(AnimationProps.BOUNDS, dockGestureAnimDuration +
(taskIndexFromBack * DOUBLE_FRAME_OFFSET_MS))
.setInterpolator(AnimationProps.BOUNDS,
ENTER_WHILE_DOCKING_INTERPOLATOR)
+ .setStartDelay(AnimationProps.BOUNDS, 48)
.setListener(postAnimationTrigger.decrementOnAnimationEnd());
postAnimationTrigger.increment();
mStackView.updateTaskViewToTransform(tv, mTmpTransform, taskAnimation);
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
index 3fc66dd..a220f2ed7 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/DividerView.java
@@ -1075,11 +1075,13 @@
mAnimateAfterRecentsDrawn = false;
updateDockSide();
- // Delay switching resizing mode because this might cause jank in recents animation
- // that's long than this animation.
- stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(),
- mLongPressEntraceAnimDuration, Interpolators.FAST_OUT_SLOW_IN,
- 200 /* endDelay */);
+ post(() -> {
+ // Delay switching resizing mode because this might cause jank in recents animation
+ // that's longer than this animation.
+ stopDragging(getCurrentPosition(), mSnapAlgorithm.getMiddleTarget(),
+ mLongPressEntraceAnimDuration, Interpolators.FAST_OUT_SLOW_IN,
+ 200 /* endDelay */);
+ });
}
if (mGrowAfterRecentsDrawn) {
mGrowAfterRecentsDrawn = false;
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
index 34a37ba..5f083d5 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
@@ -111,7 +111,7 @@
Intent intent = new Intent(mContext, ForcedResizableInfoActivity.class);
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchTaskId(mPendingTaskIds.valueAt(i));
- options.setAvoidMoveToFront(true);
+ options.setTaskOverlay(true);
mContext.startActivity(intent, options.toBundle());
}
mPendingTaskIds.clear();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
index 593e170..e66dc74 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -956,32 +956,39 @@
protected View bindVetoButtonClickListener(View row, final StatusBarNotification n) {
View vetoButton = row.findViewById(R.id.veto);
- final String _pkg = n.getPackageName();
- final String _tag = n.getTag();
- final int _id = n.getId();
- final int _userId = n.getUserId();
vetoButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Accessibility feedback
v.announceForAccessibility(
mContext.getString(R.string.accessibility_notification_dismissed));
- try {
- mBarService.onNotificationClear(_pkg, _tag, _id, _userId);
- if (FORCE_REMOTE_INPUT_HISTORY
- && mKeysKeptForRemoteInput.contains(n.getKey())) {
- removeNotification(n.getKey(), null);
- mKeysKeptForRemoteInput.remove(n.getKey());
- }
-
- } catch (RemoteException ex) {
- // system process is dead if we're here.
- }
+ performRemoveNotification(n, false /* removeView */);
}
});
vetoButton.setImportantForAccessibility(View.IMPORTANT_FOR_ACCESSIBILITY_NO);
return vetoButton;
}
+ private void performRemoveNotification(StatusBarNotification n, boolean removeView) {
+ final String pkg = n.getPackageName();
+ final String tag = n.getTag();
+ final int id = n.getId();
+ final int userId = n.getUserId();
+ try {
+ mBarService.onNotificationClear(pkg, tag, id, userId);
+ if (FORCE_REMOTE_INPUT_HISTORY
+ && mKeysKeptForRemoteInput.contains(n.getKey())) {
+ mKeysKeptForRemoteInput.remove(n.getKey());
+ removeView = true;
+ }
+ if (removeView) {
+ removeNotification(n.getKey(), null);
+ }
+
+ } catch (RemoteException ex) {
+ // system process is dead if we're here.
+ }
+ }
+
protected void applyColorsAndBackgrounds(StatusBarNotification sbn,
NotificationData.Entry entry) {
@@ -1826,6 +1833,13 @@
}, afterKeyguardGone);
}
+ public void addPostCollapseAction(Runnable r) {
+ }
+
+ public boolean isCollapsing() {
+ return false;
+ }
+
private final class NotificationClicker implements View.OnClickListener {
public void onClick(final View v) {
if (!(v instanceof ExpandableNotificationRow)) {
@@ -1875,6 +1889,15 @@
HeadsUpManager.setIsClickedNotification(row, true);
mHeadsUpManager.releaseImmediately(notificationKey);
}
+ StatusBarNotification parentToCancel = null;
+ if (shouldAutoCancel(sbn) && mGroupManager.isOnlyChildInGroup(sbn)) {
+ StatusBarNotification summarySbn = mGroupManager.getLogicalGroupSummary(sbn)
+ .getStatusBarNotification();
+ if (shouldAutoCancel(summarySbn)) {
+ parentToCancel = summarySbn;
+ }
+ }
+ final StatusBarNotification parentToCancelFinal = parentToCancel;
new Thread() {
@Override
public void run() {
@@ -1930,6 +1953,28 @@
} catch (RemoteException ex) {
// system process is dead if we're here.
}
+ if (parentToCancelFinal != null) {
+ // We have to post it to the UI thread for synchronization
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ Runnable removeRunnable = new Runnable() {
+ @Override
+ public void run() {
+ performRemoveNotification(parentToCancelFinal,
+ true);
+ }
+ };
+ if (isCollapsing()) {
+ // To avoid lags we're only performing the remove
+ // after the shade was collapsed
+ addPostCollapseAction(removeRunnable);
+ } else {
+ removeRunnable.run();
+ }
+ }
+ });
+ }
}
}.start();
@@ -1943,6 +1988,17 @@
}, afterKeyguardGone);
}
+ private boolean shouldAutoCancel(StatusBarNotification sbn) {
+ int flags = sbn.getNotification().flags;
+ if ((flags & Notification.FLAG_AUTO_CANCEL) != Notification.FLAG_AUTO_CANCEL) {
+ return false;
+ }
+ if ((flags & Notification.FLAG_FOREGROUND_SERVICE) != 0) {
+ return false;
+ }
+ return true;
+ }
+
public void register(ExpandableNotificationRow row, StatusBarNotification sbn) {
Notification notification = sbn.getNotification();
if (notification.contentIntent != null || notification.fullScreenIntent != null) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 3a1752d..b4ce9cd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -329,7 +329,9 @@
if (mChildrenContainer != null) {
mChildrenContainer.removeNotification(row);
}
- mHeaderUtil.restoreNotificationHeader(row);
+ if (!row.isRemoved()) {
+ mHeaderUtil.restoreNotificationHeader(row);
+ }
onChildrenCountChanged();
row.setIsChildInGroup(false, null);
}
@@ -644,7 +646,9 @@
continue;
}
mChildrenContainer.removeNotification(row);
- mHeaderUtil.restoreNotificationHeader(row);
+ if (!row.isRemoved()) {
+ mHeaderUtil.restoreNotificationHeader(row);
+ }
row.setIsChildInGroup(false, null);
}
onChildrenCountChanged();
@@ -1338,6 +1342,9 @@
@Override
protected View getContentView() {
+ if (mIsSummaryWithChildren) {
+ return mChildrenContainer;
+ }
return getShowingLayout();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
index a5d65d2..280663b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
@@ -38,7 +38,6 @@
protected int mClipTopAmount;
private boolean mDark;
private ArrayList<View> mMatchParentViews = new ArrayList<View>();
- private int mClipTopOptimization;
private static Rect mClipRect = new Rect();
private boolean mWillBeGone;
private int mMinClipTopAmount = 0;
@@ -218,6 +217,7 @@
*/
public void setClipTopAmount(int clipTopAmount) {
mClipTopAmount = clipTopAmount;
+ updateClipping();
}
public int getClipTopAmount() {
@@ -306,7 +306,7 @@
public void getBoundsOnScreen(Rect outRect, boolean clipToParent) {
super.getBoundsOnScreen(outRect, clipToParent);
outRect.bottom = outRect.top + getActualHeight();
- outRect.top += getClipTopOptimization();
+ outRect.top += getClipTopAmount();
}
public boolean isSummaryWithChildren() {
@@ -319,7 +319,7 @@
private void updateClipping() {
if (mClipToActualHeight) {
- int top = mClipTopOptimization;
+ int top = getClipTopAmount();
if (top >= getActualHeight()) {
top = getActualHeight() - 1;
}
@@ -335,21 +335,6 @@
updateClipping();
}
- public int getClipTopOptimization() {
- return mClipTopOptimization;
- }
-
- /**
- * Set that the view will be clipped by a given amount from the top. Contrary to
- * {@link #setClipTopAmount} this amount doesn't effect shadows and the background.
- *
- * @param clipTopOptimization the amount to clip from the top
- */
- public void setClipTopOptimization(int clipTopOptimization) {
- mClipTopOptimization = clipTopOptimization;
- updateClipping();
- }
-
public boolean willBeGone() {
return mWillBeGone;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
index ce0163e..bc33b30 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/StatusBarIconView.java
@@ -328,7 +328,7 @@
Notification.Builder builder = Notification.Builder.recoverBuilder(c, n);
String appName = builder.loadHeaderAppName();
- CharSequence title = n.extras.getString(Notification.EXTRA_TITLE);
+ CharSequence title = n.extras.getCharSequence(Notification.EXTRA_TITLE);
CharSequence ticker = n.tickerText;
CharSequence desc = !TextUtils.isEmpty(ticker) ? ticker
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
index 270b6ed..182075f 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
@@ -215,7 +215,11 @@
public boolean isOnlyChildInSuppressedGroup(StatusBarNotification sbn) {
return isGroupSuppressed(sbn.getGroupKey())
- && !sbn.getNotification().isGroupSummary()
+ && isOnlyChildInGroup(sbn);
+ }
+
+ public boolean isOnlyChildInGroup(StatusBarNotification sbn) {
+ return !sbn.getNotification().isGroupSummary()
&& getTotalNumberOfChildren(sbn) == 1;
}
@@ -426,7 +430,6 @@
private boolean isGroupNotFullyVisible(NotificationGroup notificationGroup) {
return notificationGroup.summary == null
- || notificationGroup.summary.row.getClipTopOptimization() > 0
|| notificationGroup.summary.row.getClipTopAmount() > 0
|| notificationGroup.summary.row.getTranslationY() < 0;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 76fb416..e3ce1e2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -1178,6 +1178,7 @@
mKeyguardIndicationController.setStatusBarKeyguardViewManager(
mStatusBarKeyguardViewManager);
mFingerprintUnlockController.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
+ mIconPolicy.setStatusBarKeyguardViewManager(mStatusBarKeyguardViewManager);
mRemoteInputController.addCallback(mStatusBarKeyguardViewManager);
if (FORCE_REMOTE_INPUT_HISTORY) {
@@ -1505,6 +1506,10 @@
mHeadsUpEntriesToRemoveOnSwitch.add(mHeadsUpManager.getEntry(key));
return;
}
+ Entry entry = mNotificationData.get(key);
+ if (entry != null && entry.row != null) {
+ entry.row.setRemoved(true);
+ }
// Let's remove the children if this was a summary
handleGroupSummaryRemoved(key, ranking);
StatusBarNotification old = removeNotificationViews(key, ranking);
@@ -1544,12 +1549,13 @@
// always cancelled. We only remove them if they were dismissed by the user.
return;
}
- entry.row.setRemoved(true);
List<ExpandableNotificationRow> notificationChildren =
entry.row.getNotificationChildren();
ArrayList<ExpandableNotificationRow> toRemove = new ArrayList<>(notificationChildren);
for (int i = 0; i < toRemove.size(); i++) {
toRemove.get(i).setKeepInParent(true);
+ // we need to set this state earlier as otherwise we might generate some weird
+ // animations
toRemove.get(i).setRemoved(true);
}
for (int i = 0; i < toRemove.size(); i++) {
@@ -3823,10 +3829,12 @@
updateMediaMetaData(true /* metaDataChanged */, true);
}
+ @Override
public boolean isCollapsing() {
return mNotificationPanel.isCollapsing();
}
+ @Override
public void addPostCollapseAction(Runnable r) {
mPostCollapseRunnables.add(r);
}
@@ -4060,12 +4068,10 @@
}
if (mState == StatusBarState.KEYGUARD || mState == StatusBarState.SHADE_LOCKED) {
mScrimController.setKeyguardShowing(true);
- mIconPolicy.setKeyguardShowing(true);
} else {
mScrimController.setKeyguardShowing(false);
- mIconPolicy.setKeyguardShowing(false);
}
-
+ mIconPolicy.notifyKeyguardShowingChanged();
mNotificationPanel.setBarState(mState, mKeyguardFadingAway, goingToFullShade);
updateDozingState();
updatePublicMode();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
index 823af36..d9dd9e2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarPolicy.java
@@ -80,6 +80,7 @@
private final StatusBarIconController mIconController;
private final RotationLockController mRotationLockController;
private final DataSaverController mDataSaver;
+ private StatusBarKeyguardViewManager mStatusBarKeyguardViewManager;
// Assume it's all good unless we hear otherwise. We don't always seem
// to get broadcasts that it *is* there.
@@ -95,7 +96,6 @@
private boolean mManagedProfileIconVisible = false;
private boolean mManagedProfileInQuietMode = false;
- private boolean mKeyguardVisible = true;
private BluetoothController mBluetooth;
public PhoneStatusBarPolicy(Context context, StatusBarIconController iconController,
@@ -192,6 +192,11 @@
mDataSaver.addListener(this);
}
+ public void setStatusBarKeyguardViewManager(
+ StatusBarKeyguardViewManager statusBarKeyguardViewManager) {
+ mStatusBarKeyguardViewManager = statusBarKeyguardViewManager;
+ }
+
public void setZenMode(int zen) {
mZen = zen;
updateVolumeZen();
@@ -385,10 +390,9 @@
private void updateManagedProfile() {
if (DEBUG) Log.v(TAG, "updateManagedProfile: mManagedProfileFocused: "
- + mManagedProfileFocused
- + " mKeyguardVisible: " + mKeyguardVisible);
+ + mManagedProfileFocused);
final boolean showIcon;
- if (mManagedProfileFocused && !mKeyguardVisible) {
+ if (mManagedProfileFocused && !mStatusBarKeyguardViewManager.isShowing()) {
showIcon = true;
mIconController.setIcon(mSlotManagedProfile,
R.drawable.stat_sys_managed_profile_status,
@@ -411,20 +415,35 @@
new SynchronousUserSwitchObserver() {
@Override
public void onUserSwitching(int newUserId) throws RemoteException {
- mUserInfoController.reloadUserInfo();
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ mUserInfoController.reloadUserInfo();
+ }
+ });
}
@Override
public void onUserSwitchComplete(int newUserId) throws RemoteException {
- updateAlarm();
- profileChanged(newUserId);
- updateQuietState();
- updateManagedProfile();
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ updateAlarm();
+ profileChanged(newUserId);
+ updateQuietState();
+ updateManagedProfile();
+ }
+ });
}
@Override
public void onForegroundProfileSwitch(int newProfileId) {
- profileChanged(newProfileId);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ profileChanged(newProfileId);
+ }
+ });
}
};
@@ -446,8 +465,7 @@
updateManagedProfile();
}
- public void setKeyguardShowing(boolean visible) {
- mKeyguardVisible = visible;
+ public void notifyKeyguardShowingChanged() {
updateManagedProfile();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java
index e6e189f..cc02ece 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DataSaverController.java
@@ -93,6 +93,9 @@
@Override
public void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted) {
}
+ @Override
+ public void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted) {
+ }
};
public interface Listener {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java
index dafaf61..e919d5c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationChildrenContainer.java
@@ -393,7 +393,6 @@
childState.hideSensitive = parentState.hideSensitive;
childState.belowSpeedBump = parentState.belowSpeedBump;
childState.clipTopAmount = 0;
- childState.topOverLap = 0;
childState.alpha = 0;
if (i < firstOverflowIndex) {
childState.alpha = 1;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index 06412758..70d4aec 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -1757,6 +1757,9 @@
}
private void startBackgroundAnimation() {
+ // left and right are always instantly applied
+ mCurrentBounds.left = mBackgroundBounds.left;
+ mCurrentBounds.right = mBackgroundBounds.right;
startBottomAnimation();
startTopAnimation();
}
@@ -2188,7 +2191,7 @@
}
}
- private void onViewRemovedInternal(View child, ViewGroup transientContainer) {
+ private void onViewRemovedInternal(View child, ViewGroup container) {
if (mChangePositionInProgress) {
// This is only a position change, don't do anything special
return;
@@ -2200,10 +2203,10 @@
boolean animationGenerated = generateRemoveAnimation(child);
if (animationGenerated) {
if (!mSwipedOutViews.contains(child)) {
- getOverlay().add(child);
+ container.getOverlay().add(child);
} else if (Math.abs(expandableView.getTranslation()) != expandableView.getWidth()) {
- transientContainer.addTransientView(child, 0);
- expandableView.setTransientContainer(transientContainer);
+ container.addTransientView(child, 0);
+ expandableView.setTransientContainer(container);
}
} else {
mSwipedOutViews.remove(child);
@@ -2211,7 +2214,7 @@
updateAnimationState(false, child);
// Make sure the clipRect we might have set is removed
- expandableView.setClipTopOptimization(0);
+ expandableView.setClipTopAmount(0);
}
private boolean isChildInGroup(View child) {
@@ -2885,22 +2888,24 @@
mPhoneStatusBar.resetUserExpandedStates();
// lets make sure nothing is in the overlay / transient anymore
- clearTransientViews(this);
+ clearTemporaryViews(this);
for (int i = 0; i < getChildCount(); i++) {
ExpandableView child = (ExpandableView) getChildAt(i);
if (child instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) child;
- clearTransientViews(row.getChildrenContainer());
+ clearTemporaryViews(row.getChildrenContainer());
}
}
- getOverlay().clear();
}
}
- private void clearTransientViews(ViewGroup viewGroup) {
+ private void clearTemporaryViews(ViewGroup viewGroup) {
while (viewGroup != null && viewGroup.getTransientViewCount() != 0) {
viewGroup.removeTransientView(viewGroup.getTransientView(0));
}
+ if (viewGroup != null) {
+ viewGroup.getOverlay().clear();
+ }
}
public void onPanelTrackingStarted() {
@@ -3020,7 +3025,7 @@
private void clearViewOverlays() {
for (View view : mClearOverlayViewsWhenFinished) {
- getOverlay().remove(view);
+ StackStateAnimator.removeFromOverlay(view);
}
}
@@ -3393,9 +3398,6 @@
public void setDismissAllInProgress(boolean dismissAllInProgress) {
mDismissAllInProgress = dismissAllInProgress;
mAmbientState.setDismissAllInProgress(dismissAllInProgress);
- if (dismissAllInProgress) {
- disableClipOptimization();
- }
handleDismissAllClipping();
}
@@ -3416,17 +3418,6 @@
}
}
- private void disableClipOptimization() {
- final int count = getChildCount();
- for (int i = 0; i < count; i++) {
- ExpandableView child = (ExpandableView) getChildAt(i);
- if (child.getVisibility() == GONE) {
- continue;
- }
- child.setClipTopOptimization(0);
- }
- }
-
public boolean isDismissViewNotGone() {
return mDismissView.getVisibility() != View.GONE && !mDismissView.willBeGone();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
index c7333c2..5d26988 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollAlgorithm.java
@@ -138,11 +138,9 @@
private void updateClipping(StackScrollState resultState,
StackScrollAlgorithmState algorithmState, AmbientState ambientState) {
- boolean dismissAllInProgress = ambientState.isDismissAllInProgress();
float drawStart = ambientState.getTopPadding() + ambientState.getStackTranslation();
float previousNotificationEnd = 0;
float previousNotificationStart = 0;
- boolean previousNotificationIsSwiped = false;
int childCount = algorithmState.visibleChildren.size();
for (int i = 0; i < childCount; i++) {
ExpandableView child = algorithmState.visibleChildren.get(i);
@@ -153,36 +151,21 @@
}
float newYTranslation = state.yTranslation;
float newHeight = state.height;
- // apply clipping and shadow
float newNotificationEnd = newYTranslation + newHeight;
- float clipHeight;
- if (previousNotificationIsSwiped) {
- // When the previous notification is swiped, we don't clip the content to the
- // bottom of it.
- clipHeight = newHeight;
+ if (newYTranslation < previousNotificationEnd) {
+ // The previous view is overlapping on top, clip!
+ float overlapAmount = previousNotificationEnd - newYTranslation;
+ state.clipTopAmount = (int) overlapAmount;
} else {
- clipHeight = newNotificationEnd - previousNotificationEnd;
- clipHeight = Math.max(0.0f, clipHeight);
- }
-
- updateChildClippingAndBackground(state, newHeight, clipHeight,
- newHeight - (previousNotificationStart - newYTranslation));
-
- if (dismissAllInProgress) {
- state.clipTopAmount = Math.max(child.getMinClipTopAmount(), state.clipTopAmount);
+ state.clipTopAmount = 0;
}
if (!child.isTransparent()) {
// Only update the previous values if we are not transparent,
// otherwise we would clip to a transparent view.
- if ((dismissAllInProgress && canChildBeDismissed(child))) {
- previousNotificationIsSwiped = true;
- } else {
- previousNotificationIsSwiped = ambientState.getDraggedViews().contains(child);
- previousNotificationEnd = newNotificationEnd;
- previousNotificationStart =newYTranslation + state.clipTopAmount;
- }
+ previousNotificationEnd = newNotificationEnd;
+ previousNotificationStart = newYTranslation;
}
}
}
@@ -193,31 +176,6 @@
}
/**
- * Updates the shadow outline and the clipping for a view.
- *
- * @param state the viewState to update
- * @param realHeight the currently applied height of the view
- * @param clipHeight the desired clip height, the rest of the view will be clipped from the top
- * @param backgroundHeight the desired background height. The shadows of the view will be
- * based on this height and the content will be clipped from the top
- */
- private void updateChildClippingAndBackground(StackViewState state, float realHeight,
- float clipHeight, float backgroundHeight) {
- if (realHeight > clipHeight) {
- // Rather overlap than create a hole.
- state.topOverLap = (int) Math.floor(realHeight - clipHeight);
- } else {
- state.topOverLap = 0;
- }
- if (realHeight > backgroundHeight) {
- // Rather overlap than create a hole.
- state.clipTopAmount = (int) Math.floor(realHeight - backgroundHeight);
- } else {
- state.clipTopAmount = 0;
- }
- }
-
- /**
* Updates the dimmed, activated and hiding sensitive states of the children.
*/
private void updateDimmedActivatedHideSensitive(AmbientState ambientState,
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java
index 1fedc1e..1ccc908 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackScrollState.java
@@ -110,11 +110,11 @@
}
if (child instanceof DismissView) {
DismissView dismissView = (DismissView) child;
- boolean visible = state.topOverLap < mClearAllTopPadding;
+ boolean visible = state.clipTopAmount < mClearAllTopPadding;
dismissView.performVisibilityAnimation(visible && !dismissView.willBeGone());
} else if (child instanceof EmptyShadeView) {
EmptyShadeView emptyShadeView = (EmptyShadeView) child;
- boolean visible = state.topOverLap <= 0;
+ boolean visible = state.clipTopAmount <= 0;
emptyShadeView.performVisibilityAnimation(
visible && !emptyShadeView.willBeGone());
}
@@ -171,10 +171,6 @@
if (oldClipTopAmount != state.clipTopAmount) {
view.setClipTopAmount(state.clipTopAmount);
}
- float oldClipTopOptimization = view.getClipTopOptimization();
- if (oldClipTopOptimization != state.topOverLap) {
- view.setClipTopOptimization(state.topOverLap);
- }
if (view instanceof ExpandableNotificationRow) {
ExpandableNotificationRow row = (ExpandableNotificationRow) view;
row.applyChildrenState(this);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
index e8472ac..6f451ff 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackStateAnimator.java
@@ -22,6 +22,7 @@
import android.animation.PropertyValuesHolder;
import android.animation.ValueAnimator;
import android.view.View;
+import android.view.ViewGroup;
import android.view.animation.Interpolator;
import com.android.systemui.Interpolators;
@@ -90,7 +91,6 @@
private int mCurrentLastNotAddedIndex;
private ValueAnimator mTopOverScrollAnimator;
private ValueAnimator mBottomOverScrollAnimator;
- private ExpandableNotificationRow mChildExpandingView;
private int mHeadsUpAppearHeightBottom;
private boolean mShadeExpanded;
private ArrayList<View> mChildrenToClearFromOverlay = new ArrayList<>();
@@ -127,7 +127,6 @@
continue;
}
- child.setClipTopOptimization(0);
startStackAnimations(child, viewState, finalState, i, -1 /* fixedDelay */);
}
if (!isRunning()) {
@@ -138,7 +137,6 @@
mHeadsUpDisappearChildren.clear();
mNewEvents.clear();
mNewAddChildren.clear();
- mChildExpandingView = null;
}
/**
@@ -797,7 +795,7 @@
private void onAnimationFinished() {
mHostLayout.onChildAnimationFinished();
for (View v : mChildrenToClearFromOverlay) {
- mHostLayout.getOverlay().remove(v);
+ removeFromOverlay(v);
}
mChildrenToClearFromOverlay.clear();
}
@@ -829,7 +827,7 @@
} else if (event.animationType ==
NotificationStackScrollLayout.AnimationEvent.ANIMATION_TYPE_REMOVE) {
if (changingView.getVisibility() == View.GONE) {
- mHostLayout.getOverlay().remove(changingView);
+ removeFromOverlay(changingView);
continue;
}
@@ -854,7 +852,7 @@
@Override
public void run() {
// remove the temporary overlay
- mHostLayout.getOverlay().remove(changingView);
+ removeFromOverlay(changingView);
}
});
} else if (event.animationType ==
@@ -870,7 +868,6 @@
.AnimationEvent.ANIMATION_TYPE_GROUP_EXPANSION_CHANGED) {
ExpandableNotificationRow row = (ExpandableNotificationRow) event.changingView;
row.prepareExpansionChanged(finalState);
- mChildExpandingView = row;
} else if (event.animationType == NotificationStackScrollLayout
.AnimationEvent.ANIMATION_TYPE_HEADS_UP_APPEAR) {
// This item is added, initialize it's properties.
@@ -909,6 +906,13 @@
}
}
+ public static void removeFromOverlay(View changingView) {
+ ViewGroup parent = (ViewGroup) changingView.getParent();
+ if (parent != null) {
+ parent.removeView(changingView);
+ }
+ }
+
public void animateOverScrollToAmount(float targetAmount, final boolean onTop,
final boolean isRubberbanded) {
final float startOverScrollAmount = mHostLayout.getCurrentOverScrollAmount(onTop);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackViewState.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackViewState.java
index fa15195..1114e03 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackViewState.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/StackViewState.java
@@ -40,18 +40,12 @@
public float shadowAlpha;
/**
- * The amount which the view should be clipped from the top. This is calculated to
- * perceive consistent shadows.
+ * How much the child overlaps with the previous child on top. This is used to
+ * show the background properly when the child on top is translating away.
*/
public int clipTopAmount;
/**
- * How much does the child overlap with the previous view on the top? Can be used for
- * a clipping optimization
- */
- public int topOverLap;
-
- /**
* The index of the view, only accounting for views not equal to GONE
*/
public int notGoneIndex;
@@ -75,7 +69,6 @@
hideSensitive = svs.hideSensitive;
belowSpeedBump = svs.belowSpeedBump;
clipTopAmount = svs.clipTopAmount;
- topOverLap = svs.topOverLap;
notGoneIndex = svs.notGoneIndex;
location = svs.location;
}
diff --git a/services/backup/java/com/android/server/backup/BackupManagerService.java b/services/backup/java/com/android/server/backup/BackupManagerService.java
index cfe038c..d2d71bf 100644
--- a/services/backup/java/com/android/server/backup/BackupManagerService.java
+++ b/services/backup/java/com/android/server/backup/BackupManagerService.java
@@ -85,7 +85,9 @@
import android.provider.Settings;
import android.system.ErrnoException;
import android.system.Os;
+import android.text.TextUtils;
import android.util.ArrayMap;
+import android.util.ArraySet;
import android.util.AtomicFile;
import android.util.EventLog;
import android.util.Log;
@@ -99,6 +101,7 @@
import com.android.internal.backup.IObbBackupService;
import com.android.server.AppWidgetBackupBridge;
import com.android.server.EventLogTags;
+import com.android.server.SystemConfig;
import com.android.server.SystemService;
import com.android.server.backup.PackageManagerBackupAgent.Metadata;
@@ -318,6 +321,7 @@
volatile boolean mClearingData;
// Transport bookkeeping
+ final ArraySet<ComponentName> mTransportWhitelist;
final Intent mTransportServiceIntent = new Intent(SERVICE_ACTION_TRANSPORT_HOST);
final ArrayMap<String,String> mTransportNames
= new ArrayMap<String,String>(); // component name -> registration name
@@ -1168,11 +1172,15 @@
// Set up our transport options and initialize the default transport
// TODO: Don't create transports that we don't need to?
- mCurrentTransport = Settings.Secure.getString(context.getContentResolver(),
+ SystemConfig systemConfig = SystemConfig.getInstance();
+ mTransportWhitelist = systemConfig.getBackupTransportWhitelist();
+
+ String transport = Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.BACKUP_TRANSPORT);
- if ("".equals(mCurrentTransport)) {
- mCurrentTransport = null;
+ if (TextUtils.isEmpty(transport)) {
+ transport = null;
}
+ mCurrentTransport = transport;
if (DEBUG) Slog.v(TAG, "Starting with transport " + mCurrentTransport);
// Find all transport hosts and bind to their services
@@ -1184,11 +1192,11 @@
}
if (hosts != null) {
for (int i = 0; i < hosts.size(); i++) {
- final ServiceInfo transport = hosts.get(i).serviceInfo;
+ final ServiceInfo transportService = hosts.get(i).serviceInfo;
if (MORE_DEBUG) {
- Slog.v(TAG, " " + transport.packageName + "/" + transport.name);
+ Slog.v(TAG, " " + transportService.packageName + "/" + transportService.name);
}
- tryBindTransport(transport);
+ tryBindTransport(transportService);
}
}
@@ -2082,6 +2090,11 @@
// Actually bind; presumes that we have already validated the transport service
boolean bindTransport(ServiceInfo transport) {
ComponentName svcName = new ComponentName(transport.packageName, transport.name);
+ if (!mTransportWhitelist.contains(svcName)) {
+ Slog.w(TAG, "Proposed transport " + svcName + " not whitelisted; ignoring");
+ return false;
+ }
+
if (MORE_DEBUG) {
Slog.i(TAG, "Binding to transport host " + svcName);
}
@@ -10271,6 +10284,12 @@
+ " (now = " + System.currentTimeMillis() + ')');
pw.println(" next scheduled: " + KeyValueBackupJob.nextScheduled());
+ pw.println("Transport whitelist:");
+ for (ComponentName transport : mTransportWhitelist) {
+ pw.print(" ");
+ pw.println(transport.flattenToShortString());
+ }
+
pw.println("Available transports:");
final String[] transports = listAllTransports();
if (transports != null) {
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index 0a2153e..ca3c39f 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -25,6 +25,7 @@
import java.io.PrintWriter;
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
@@ -57,7 +58,6 @@
import android.util.ArraySet;
import android.util.AtomicFile;
import android.util.Log;
-import android.util.Pair;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseIntArray;
@@ -110,21 +110,8 @@
/*
* These are app op restrictions imposed per user from various parties.
- *
- * This is organized as follows:
- *
- * ArrayMap w/ mapping:
- * IBinder (for client imposing restriction) --> SparseArray w/ mapping:
- * User handle --> Pair containing:
- * - Array w/ index = AppOp code, value = restricted status boolean
- * - SparseArray w/ mapping:
- * AppOp code --> Set of packages that are not restricted for this code
- *
- * For efficiency, a core assumption here is that the number of per-package exemptions stored
- * here will be relatively small. If this changes, this data structure should be revisited.
*/
- private final ArrayMap<IBinder, SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>>>
- mOpUserRestrictions = new ArrayMap<>();
+ private final ArrayMap<IBinder, ClientRestrictionState> mOpUserRestrictions = new ArrayMap<>();
private static final class UidState {
public final int uid;
@@ -1328,42 +1315,16 @@
for (int i = 0; i < restrictionSetCount; i++) {
// For each client, check that the given op is not restricted, or that the given
// package is exempt from the restriction.
-
- SparseArray<Pair<boolean[],SparseArray<ArraySet<String>>>> perUserRestrictions =
- mOpUserRestrictions.valueAt(i);
-
- Pair<boolean[],SparseArray<ArraySet<String>>> restrictions =
- perUserRestrictions.get(userHandle);
- if (restrictions == null) {
- continue; // No restrictions set by this client
- }
-
- boolean[] opRestrictions = restrictions.first;
- SparseArray<ArraySet<String>> opExceptions = restrictions.second;
-
- if (opRestrictions == null) {
- continue; // No restrictions set by this client
- }
-
- if (opRestrictions[code]) {
-
- if (opExceptions != null) {
- ArraySet<String> ex = opExceptions.get(code);
- if (ex != null && ex.contains(packageName)) {
- continue; // AppOps code is restricted, but this package is exempt
+ ClientRestrictionState restrictionState = mOpUserRestrictions.valueAt(i);
+ if (restrictionState.hasRestriction(code, packageName, userHandle)
+ && AppOpsManager.opAllowSystemBypassRestriction(code)) {
+ // If we are the system, bypass user restrictions for certain codes
+ synchronized (this) {
+ Ops ops = getOpsRawLocked(uid, packageName, true);
+ if ((ops != null) && ops.isPrivileged) {
+ return false;
}
}
-
- if (AppOpsManager.opAllowSystemBypassRestriction(code)) {
- // If we are the system, bypass user restrictions for certain codes
- synchronized (this) {
- Ops ops = getOpsRawLocked(uid, packageName, true);
- if ((ops != null) && ops.isPrivileged) {
- return false;
- }
- }
- }
-
return true;
}
}
@@ -2216,12 +2177,11 @@
checkSystemUid("setUserRestrictions");
Preconditions.checkNotNull(restrictions);
Preconditions.checkNotNull(token);
- final boolean[] opRestrictions = getOrCreateUserRestrictionsForToken(token, userHandle);
- for (int i = 0; i < opRestrictions.length; ++i) {
+ for (int i = 0; i < AppOpsManager._NUM_OP; i++) {
String restriction = AppOpsManager.opToRestriction(i);
- final boolean restricted = restriction != null
- && restrictions.getBoolean(restriction, false);
- setUserRestrictionNoCheck(i, restricted, token, userHandle);
+ if (restriction != null && restrictions.getBoolean(restriction, false)) {
+ setUserRestrictionNoCheck(i, true, token, userHandle, null);
+ }
}
}
@@ -2247,45 +2207,26 @@
}
private void setUserRestrictionNoCheck(int code, boolean restricted, IBinder token,
- int userHandle) {
- setUserRestrictionNoCheck(code, restricted, token, userHandle, /*exceptionPackages*/null);
- }
-
- private void setUserRestrictionNoCheck(int code, boolean restricted, IBinder token,
int userHandle, String[] exceptionPackages) {
+ ClientRestrictionState restrictionState = mOpUserRestrictions.get(token);
- final boolean[] opRestrictions = getOrCreateUserRestrictionsForToken(token, userHandle);
-
- if (restricted) {
- final SparseArray<ArraySet<String>> opExceptions =
- getUserPackageExemptionsForToken(token, userHandle);
-
- ArraySet<String> exceptions = opExceptions.get(code);
- if (exceptionPackages != null && exceptionPackages.length > 0) {
- if (exceptions == null) {
- exceptions = new ArraySet<>(exceptionPackages.length);
- opExceptions.put(code, exceptions);
- } else {
- exceptions.clear();
- }
-
- for (String p : exceptionPackages) {
- exceptions.add(p);
- }
- } else {
- opExceptions.remove(code);
+ if (restrictionState == null) {
+ try {
+ restrictionState = new ClientRestrictionState(token);
+ } catch (RemoteException e) {
+ return;
}
+ mOpUserRestrictions.put(token, restrictionState);
}
- if (opRestrictions[code] == restricted) {
- return;
- }
- opRestrictions[code] = restricted;
- if (!restricted) {
- pruneUserRestrictionsForToken(token, userHandle);
+ if (restrictionState.setRestriction(code, restricted, exceptionPackages, userHandle)) {
+ notifyWatchersOfChange(code);
}
- notifyWatchersOfChange(code);
+ if (restrictionState.isDefault()) {
+ mOpUserRestrictions.remove(token);
+ restrictionState.destroy();
+ }
}
private void notifyWatchersOfChange(int code) {
@@ -2300,7 +2241,7 @@
// There are components watching for mode changes such as window manager
// and location manager which are in our process. The callbacks in these
- // components may require permissions our remote caller does not have.
+ // components may require permissions our remote caller does not have.s
final long identity = Binder.clearCallingIdentity();
try {
final int callbackCount = clonedCallbacks.size();
@@ -2322,110 +2263,11 @@
checkSystemUid("removeUser");
final int tokenCount = mOpUserRestrictions.size();
for (int i = tokenCount - 1; i >= 0; i--) {
- SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>> opRestrictions =
- mOpUserRestrictions.valueAt(i);
- if (opRestrictions != null) {
- opRestrictions.remove(userHandle);
- if (opRestrictions.size() <= 0) {
- mOpUserRestrictions.removeAt(i);
- }
- }
+ ClientRestrictionState opRestrictions = mOpUserRestrictions.valueAt(i);
+ opRestrictions.removeUser(userHandle);
}
}
-
- private void pruneUserRestrictionsForToken(IBinder token, int userHandle) {
- SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>> perTokenRestrictions =
- mOpUserRestrictions.get(token);
- if (perTokenRestrictions != null) {
- final Pair<boolean[], SparseArray<ArraySet<String>>> restrictions =
- perTokenRestrictions.get(userHandle);
-
- if (restrictions != null) {
- final boolean[] opRestrictions = restrictions.first;
- final SparseArray<ArraySet<String>> opExceptions = restrictions.second;
- boolean stillHasRestrictions = false;
- if (opRestrictions != null) {
- for (int i = 0; i < opRestrictions.length; i++) {
- boolean restriction = opRestrictions[i];
- if (restriction) {
- stillHasRestrictions = true;
- } else {
- opExceptions.remove(i);
- }
- }
- }
-
- if (stillHasRestrictions) {
- return;
- }
-
- // No restrictions set for this client
- perTokenRestrictions.remove(userHandle);
- if (perTokenRestrictions.size() <= 0) {
- mOpUserRestrictions.remove(token);
- }
- }
- }
- }
-
- /**
- * Get or create the user restrictions array for a given client if it doesn't already exist.
- *
- * @param token the binder client creating the restriction.
- * @param userHandle the user handle to create a restriction for.
- *
- * @return the array of restriction states for each AppOps code.
- */
- private boolean[] getOrCreateUserRestrictionsForToken(IBinder token, int userHandle) {
- SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>> perTokenRestrictions =
- mOpUserRestrictions.get(token);
-
- if (perTokenRestrictions == null) {
- perTokenRestrictions =
- new SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>>();
- mOpUserRestrictions.put(token, perTokenRestrictions);
- }
-
- Pair<boolean[], SparseArray<ArraySet<String>>> restrictions =
- perTokenRestrictions.get(userHandle);
-
- if (restrictions == null) {
- restrictions = new Pair<boolean[], SparseArray<ArraySet<String>>>(
- new boolean[AppOpsManager._NUM_OP], new SparseArray<ArraySet<String>>());
- perTokenRestrictions.put(userHandle, restrictions);
- }
-
- return restrictions.first;
- }
-
- /**
- * Get the per-package exemptions for each AppOps code for a given client and userHandle.
- *
- * @param token the binder client to get the exemptions for.
- * @param userHandle the user handle to get the exemptions for.
- *
- * @return a mapping from the AppOps code to a set of packages exempt for that code.
- */
- private SparseArray<ArraySet<String>> getUserPackageExemptionsForToken(IBinder token,
- int userHandle) {
- SparseArray<Pair<boolean[], SparseArray<ArraySet<String>>>> perTokenRestrictions =
- mOpUserRestrictions.get(token);
-
- if (perTokenRestrictions == null) {
- return null; // Don't create user restrictions accidentally
- }
-
- Pair<boolean[], SparseArray<ArraySet<String>>> restrictions =
- perTokenRestrictions.get(userHandle);
-
- if (restrictions == null) {
- return null; // Don't create user restrictions accidentally
- }
-
- return restrictions.second;
- }
-
private void checkSystemUid(String function) {
int uid = Binder.getCallingUid();
if (uid != Process.SYSTEM_UID) {
@@ -2456,4 +2298,134 @@
}
return packageNames;
}
+
+ private final class ClientRestrictionState implements DeathRecipient {
+ private final IBinder token;
+ SparseArray<boolean[]> perUserRestrictions;
+ SparseArray<String[]> perUserExcludedPackages;
+
+ public ClientRestrictionState(IBinder token)
+ throws RemoteException {
+ token.linkToDeath(this, 0);
+ this.token = token;
+ }
+
+ public boolean setRestriction(int code, boolean restricted,
+ String[] excludedPackages, int userId) {
+ boolean changed = false;
+
+ if (perUserRestrictions == null && restricted) {
+ perUserRestrictions = new SparseArray<>();
+ }
+
+ if (perUserRestrictions != null) {
+ boolean[] userRestrictions = perUserRestrictions.get(userId);
+ if (userRestrictions == null && restricted) {
+ userRestrictions = new boolean[AppOpsManager._NUM_OP];
+ perUserRestrictions.put(userId, userRestrictions);
+ }
+ if (userRestrictions != null && userRestrictions[code] != restricted) {
+ userRestrictions[code] = restricted;
+ if (!restricted && isDefault(userRestrictions)) {
+ perUserRestrictions.remove(userId);
+ userRestrictions = null;
+ }
+ changed = true;
+ }
+
+ if (userRestrictions != null) {
+ final boolean noExcludedPackages = ArrayUtils.isEmpty(excludedPackages);
+ if (perUserExcludedPackages == null && !noExcludedPackages) {
+ perUserExcludedPackages = new SparseArray<>();
+ }
+ if (perUserExcludedPackages != null && !Arrays.equals(excludedPackages,
+ perUserExcludedPackages.get(userId))) {
+ if (noExcludedPackages) {
+ perUserExcludedPackages.remove(userId);
+ if (perUserExcludedPackages.size() <= 0) {
+ perUserExcludedPackages = null;
+ }
+ } else {
+ perUserExcludedPackages.put(userId, excludedPackages);
+ }
+ changed = true;
+ }
+ }
+ }
+
+ return changed;
+ }
+
+ public boolean hasRestriction(int restriction, String packageName, int userId) {
+ if (perUserRestrictions == null) {
+ return false;
+ }
+ boolean[] restrictions = perUserRestrictions.get(userId);
+ if (restrictions == null) {
+ return false;
+ }
+ if (!restrictions[restriction]) {
+ return false;
+ }
+ if (perUserExcludedPackages == null) {
+ return true;
+ }
+ String[] perUserExclusions = perUserExcludedPackages.get(userId);
+ if (perUserExclusions == null) {
+ return true;
+ }
+ return !ArrayUtils.contains(perUserExclusions, packageName);
+ }
+
+ public void removeUser(int userId) {
+ if (perUserExcludedPackages != null) {
+ perUserExcludedPackages.remove(userId);
+ if (perUserExcludedPackages.size() <= 0) {
+ perUserExcludedPackages = null;
+ }
+ }
+ }
+
+ public boolean isDefault() {
+ return perUserRestrictions == null || perUserRestrictions.size() <= 0;
+ }
+
+ @Override
+ public void binderDied() {
+ synchronized (AppOpsService.this) {
+ mOpUserRestrictions.remove(token);
+ if (perUserRestrictions == null) {
+ return;
+ }
+ final int userCount = perUserRestrictions.size();
+ for (int i = 0; i < userCount; i++) {
+ final boolean[] restrictions = perUserRestrictions.valueAt(i);
+ final int restrictionCount = restrictions.length;
+ for (int j = 0; j < restrictionCount; j++) {
+ if (restrictions[j]) {
+ final int changedCode = j;
+ mHandler.post(() -> notifyWatchersOfChange(changedCode));
+ }
+ }
+ }
+ destroy();
+ }
+ }
+
+ public void destroy() {
+ token.unlinkToDeath(this, 0);
+ }
+
+ private boolean isDefault(boolean[] array) {
+ if (ArrayUtils.isEmpty(array)) {
+ return true;
+ }
+ for (boolean value : array) {
+ if (value) {
+ return false;
+ }
+ }
+ return true;
+ }
+ }
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index 53b2942..b5c2b89 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -1445,6 +1445,14 @@
+ whitelisted + ")");
}
}
+ @Override
+ public void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted) {
+ if (LOGD_RULES) {
+ // caller is NPMS, since we only register with them
+ log("onRestrictBackgroundBlacklistChanged(uid=" + uid + ", blacklisted="
+ + blacklisted + ")");
+ }
+ }
};
/**
diff --git a/services/core/java/com/android/server/DeviceIdleController.java b/services/core/java/com/android/server/DeviceIdleController.java
index b60f3e2..69960c7 100644
--- a/services/core/java/com/android/server/DeviceIdleController.java
+++ b/services/core/java/com/android/server/DeviceIdleController.java
@@ -325,9 +325,7 @@
@Override public void onReceive(Context context, Intent intent) {
switch (intent.getAction()) {
case ConnectivityManager.CONNECTIVITY_ACTION: {
- synchronized (DeviceIdleController.this) {
- updateConnectivityStateLocked(intent);
- }
+ updateConnectivityState(intent);
} break;
case Intent.ACTION_BATTERY_CHANGED: {
synchronized (DeviceIdleController.this) {
@@ -1426,9 +1424,9 @@
mLocalPowerManager.setDeviceIdleWhitelist(mPowerSaveWhitelistAllAppIdArray);
mLocalAlarmManager.setDeviceIdleUserWhitelist(mPowerSaveWhitelistUserAppIdArray);
mDisplayManager.registerDisplayListener(mDisplayListener, null);
- updateConnectivityStateLocked(null);
updateDisplayLocked();
}
+ updateConnectivityState(null);
}
}
@@ -1707,9 +1705,17 @@
}
}
- void updateConnectivityStateLocked(Intent connIntent) {
- if (mConnectivityService != null) {
- NetworkInfo ni = mConnectivityService.getActiveNetworkInfo();
+ void updateConnectivityState(Intent connIntent) {
+ ConnectivityService cm;
+ synchronized (this) {
+ cm = mConnectivityService;
+ }
+ if (cm == null) {
+ return;
+ }
+ // Note: can't call out to ConnectivityService with our lock held.
+ NetworkInfo ni = cm.getActiveNetworkInfo();
+ synchronized (this) {
boolean conn;
if (ni == null) {
conn = false;
diff --git a/services/core/java/com/android/server/InputMethodManagerService.java b/services/core/java/com/android/server/InputMethodManagerService.java
index a584f70..727bf5c 100644
--- a/services/core/java/com/android/server/InputMethodManagerService.java
+++ b/services/core/java/com/android/server/InputMethodManagerService.java
@@ -82,6 +82,7 @@
import android.os.IBinder;
import android.os.IInterface;
import android.os.Message;
+import android.os.LocaleList;
import android.os.Parcel;
import android.os.Process;
import android.os.RemoteException;
@@ -97,7 +98,6 @@
import android.util.ArraySet;
import android.util.AtomicFile;
import android.util.EventLog;
-import android.util.LocaleList;
import android.util.LruCache;
import android.util.Pair;
import android.util.PrintWriterPrinter;
@@ -2643,6 +2643,27 @@
}
@Override
+ public void clearLastInputMethodWindowForTransition(IBinder token) {
+ if (!calledFromValidUser()) {
+ return;
+ }
+ final long ident = Binder.clearCallingIdentity();
+ try {
+ synchronized (mMethodMap) {
+ if (!calledWithValidToken(token)) {
+ final int uid = Binder.getCallingUid();
+ Slog.e(TAG, "Ignoring clearLastInputMethodWindowForTransition due to an "
+ + "invalid token. uid:" + uid + " token:" + token);
+ return;
+ }
+ }
+ mWindowManagerInternal.clearLastInputMethodWindowForTransition();
+ } finally {
+ Binder.restoreCallingIdentity(ident);
+ }
+ }
+
+ @Override
public void notifyUserAction(int sequenceNumber) {
if (DEBUG) {
Slog.d(TAG, "Got the notification of a user action. sequenceNumber:" + sequenceNumber);
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index 22f01ab..0bc1120 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -556,7 +556,7 @@
// chain.
if (DBG) Slog.d(TAG, "Pushing " + size + " active firewall " + name + "UID rules");
for (int i = 0; i < rules.size(); i++) {
- setFirewallUidRuleInternal(chain, rules.keyAt(i), rules.valueAt(i));
+ setFirewallUidRuleLocked(chain, rules.keyAt(i), rules.valueAt(i));
}
}
}
@@ -2240,7 +2240,7 @@
for (int index = uids.length - 1; index >= 0; --index) {
int uid = uids[index];
int rule = rules[index];
- setFirewallUidRule(chain, uid, rule);
+ updateFirewallUidRuleLocked(chain, uid, rule);
newRules.put(uid, rule);
}
// collect the rules to remove.
@@ -2254,7 +2254,25 @@
// remove dead rules
for (int index = rulesToRemove.size() - 1; index >= 0; --index) {
int uid = rulesToRemove.keyAt(index);
- setFirewallUidRuleInternal(chain, uid, FIREWALL_RULE_DEFAULT);
+ updateFirewallUidRuleLocked(chain, uid, FIREWALL_RULE_DEFAULT);
+ }
+ try {
+ switch (chain) {
+ case FIREWALL_CHAIN_DOZABLE:
+ mNetdService.firewallReplaceUidChain("fw_dozable", true, uids);
+ break;
+ case FIREWALL_CHAIN_STANDBY:
+ mNetdService.firewallReplaceUidChain("fw_standby", false, uids);
+ break;
+ case FIREWALL_CHAIN_POWERSAVE:
+ mNetdService.firewallReplaceUidChain("fw_powersave", true, uids);
+ break;
+ case FIREWALL_CHAIN_NONE:
+ default:
+ Slog.d(TAG, "setFirewallUidRules() called on invalid chain: " + chain);
+ }
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Error flushing firewall chain " + chain, e);
}
}
}
@@ -2262,44 +2280,48 @@
@Override
public void setFirewallUidRule(int chain, int uid, int rule) {
enforceSystemUid();
- setFirewallUidRuleInternal(chain, uid, rule);
+ synchronized (mQuotaLock) {
+ setFirewallUidRuleLocked(chain, uid, rule);
+ }
}
- private void setFirewallUidRuleInternal(int chain, int uid, int rule) {
- synchronized (mQuotaLock) {
- SparseIntArray uidFirewallRules = getUidFirewallRules(chain);
-
- final int oldUidFirewallRule = uidFirewallRules.get(uid, FIREWALL_RULE_DEFAULT);
- if (DBG) {
- Slog.d(TAG, "oldRule = " + oldUidFirewallRule
- + ", newRule=" + rule + " for uid=" + uid + " on chain " + chain);
- }
- if (oldUidFirewallRule == rule) {
- if (DBG) Slog.d(TAG, "!!!!! Skipping change");
- // TODO: eventually consider throwing
- return;
- }
-
+ private void setFirewallUidRuleLocked(int chain, int uid, int rule) {
+ if (updateFirewallUidRuleLocked(chain, uid, rule)) {
try {
- String ruleName = getFirewallRuleName(chain, rule);
- String oldRuleName = getFirewallRuleName(chain, oldUidFirewallRule);
-
- if (rule == NetworkPolicyManager.FIREWALL_RULE_DEFAULT) {
- uidFirewallRules.delete(uid);
- } else {
- uidFirewallRules.put(uid, rule);
- }
-
- if (!ruleName.equals(oldRuleName)) {
- mConnector.execute("firewall", "set_uid_rule", getFirewallChainName(chain), uid,
- ruleName);
- }
+ mConnector.execute("firewall", "set_uid_rule", getFirewallChainName(chain), uid,
+ getFirewallRuleName(chain, rule));
} catch (NativeDaemonConnectorException e) {
throw e.rethrowAsParcelableException();
}
}
}
+ // TODO: now that netd supports batching, NMS should not keep these data structures anymore...
+ private boolean updateFirewallUidRuleLocked(int chain, int uid, int rule) {
+ SparseIntArray uidFirewallRules = getUidFirewallRules(chain);
+
+ final int oldUidFirewallRule = uidFirewallRules.get(uid, FIREWALL_RULE_DEFAULT);
+ if (DBG) {
+ Slog.d(TAG, "oldRule = " + oldUidFirewallRule
+ + ", newRule=" + rule + " for uid=" + uid + " on chain " + chain);
+ }
+ if (oldUidFirewallRule == rule) {
+ if (DBG) Slog.d(TAG, "!!!!! Skipping change");
+ // TODO: eventually consider throwing
+ return false;
+ }
+
+ String ruleName = getFirewallRuleName(chain, rule);
+ String oldRuleName = getFirewallRuleName(chain, oldUidFirewallRule);
+
+ if (rule == NetworkPolicyManager.FIREWALL_RULE_DEFAULT) {
+ uidFirewallRules.delete(uid);
+ } else {
+ uidFirewallRules.put(uid, rule);
+ }
+ return !ruleName.equals(oldRuleName);
+ }
+
private @NonNull String getFirewallRuleName(int chain, int rule) {
String ruleName;
if (getFirewallType(chain) == FIREWALL_TYPE_WHITELIST) {
diff --git a/services/core/java/com/android/server/am/ActiveServices.java b/services/core/java/com/android/server/am/ActiveServices.java
index 36f51fc..95dee01 100755
--- a/services/core/java/com/android/server/am/ActiveServices.java
+++ b/services/core/java/com/android/server/am/ActiveServices.java
@@ -2805,28 +2805,63 @@
/**
* Prints a list of ServiceRecords (dumpsys activity services)
*/
- void dumpServicesLocked(FileDescriptor fd, PrintWriter pw, String[] args,
- int opti, boolean dumpAll, boolean dumpClient, String dumpPackage) {
- boolean needSep = false;
- boolean printedAnything = false;
-
- ItemMatcher matcher = new ItemMatcher();
- matcher.build(args, opti);
-
- pw.println("ACTIVITY MANAGER SERVICES (dumpsys activity services)");
- try {
- if (mLastAnrDump != null) {
- pw.println(" Last ANR service:");
- pw.print(mLastAnrDump);
- pw.println();
+ List<ServiceRecord> collectServicesToDumpLocked(ItemMatcher matcher, String dumpPackage) {
+ final ArrayList<ServiceRecord> services = new ArrayList<>();
+ final int[] users = mAm.mUserController.getUsers();
+ for (int user : users) {
+ ServiceMap smap = getServiceMap(user);
+ if (smap.mServicesByName.size() > 0) {
+ for (int si=0; si<smap.mServicesByName.size(); si++) {
+ ServiceRecord r = smap.mServicesByName.valueAt(si);
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
+ if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
+ continue;
+ }
+ services.add(r);
+ }
}
- int[] users = mAm.mUserController.getUsers();
+ }
+
+ return services;
+ }
+
+ final class ServiceDumper {
+ private final FileDescriptor fd;
+ private final PrintWriter pw;
+ private final String[] args;
+ private final int opti;
+ private final boolean dumpAll;
+ private final String dumpPackage;
+ private final ItemMatcher matcher;
+ private final ArrayList<ServiceRecord> services = new ArrayList<>();
+
+ private final long nowReal = SystemClock.elapsedRealtime();
+
+ private boolean needSep = false;
+ private boolean printedAnything = false;
+ private boolean printed = false;
+
+ /**
+ * Note: do not call directly, use {@link #newServiceDumperLocked} instead (this
+ * must be called with the lock held).
+ */
+ ServiceDumper(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll, String dumpPackage) {
+ this.fd = fd;
+ this.pw = pw;
+ this.args = args;
+ this.opti = opti;
+ this.dumpAll = dumpAll;
+ this.dumpPackage = dumpPackage;
+ matcher = new ItemMatcher();
+ matcher.build(args, opti);
+
+ final int[] users = mAm.mUserController.getUsers();
for (int user : users) {
ServiceMap smap = getServiceMap(user);
- boolean printed = false;
if (smap.mServicesByName.size() > 0) {
- long nowReal = SystemClock.elapsedRealtime();
- needSep = false;
for (int si=0; si<smap.mServicesByName.size(); si++) {
ServiceRecord r = smap.mServicesByName.valueAt(si);
if (!matcher.match(r, r.name)) {
@@ -2835,215 +2870,325 @@
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
continue;
}
- if (!printed) {
- if (printedAnything) {
- pw.println();
+ services.add(r);
+ }
+ }
+ }
+ }
+
+ private void dumpHeaderLocked() {
+ pw.println("ACTIVITY MANAGER SERVICES (dumpsys activity services)");
+ if (mLastAnrDump != null) {
+ pw.println(" Last ANR service:");
+ pw.print(mLastAnrDump);
+ pw.println();
+ }
+ }
+
+ void dumpLocked() {
+ dumpHeaderLocked();
+
+ try {
+ int[] users = mAm.mUserController.getUsers();
+ for (int user : users) {
+ // Find the first service for this user.
+ int serviceIdx = 0;
+ while (serviceIdx < services.size() && services.get(serviceIdx).userId != user) {
+ serviceIdx++;
+ }
+ printed = false;
+ if (serviceIdx < services.size()) {
+ needSep = false;
+ while (serviceIdx < services.size()) {
+ ServiceRecord r = services.get(serviceIdx);
+ serviceIdx++;
+ if (r.userId != user) {
+ break;
}
- pw.println(" User " + user + " active services:");
- printed = true;
+ dumpServiceLocalLocked(r);
}
- printedAnything = true;
- if (needSep) {
- pw.println();
- }
- pw.print(" * ");
- pw.println(r);
- if (dumpAll) {
- r.dump(pw, " ");
- needSep = true;
- } else {
- pw.print(" app=");
- pw.println(r.app);
- pw.print(" created=");
- TimeUtils.formatDuration(r.createTime, nowReal, pw);
- pw.print(" started=");
- pw.print(r.startRequested);
- pw.print(" connections=");
- pw.println(r.connections.size());
- if (r.connections.size() > 0) {
- pw.println(" Connections:");
- for (int conni=0; conni<r.connections.size(); conni++) {
- ArrayList<ConnectionRecord> clist = r.connections.valueAt(conni);
- for (int i = 0; i < clist.size(); i++) {
- ConnectionRecord conn = clist.get(i);
- pw.print(" ");
- pw.print(conn.binding.intent.intent.getIntent()
- .toShortString(false, false, false, false));
- pw.print(" -> ");
- ProcessRecord proc = conn.binding.client;
- pw.println(proc != null ? proc.toShortString() : "null");
- }
- }
+ needSep |= printed;
+ }
+
+ dumpUserRemainsLocked(user);
+ }
+ } catch (Exception e) {
+ Slog.w(TAG, "Exception in dumpServicesLocked", e);
+ }
+
+ dumpRemainsLocked();
+ }
+
+ void dumpWithClient() {
+ synchronized(mAm) {
+ dumpHeaderLocked();
+ }
+
+ try {
+ int[] users = mAm.mUserController.getUsers();
+ for (int user : users) {
+ // Find the first service for this user.
+ int serviceIdx = 0;
+ while (serviceIdx < services.size() && services.get(serviceIdx).userId != user) {
+ serviceIdx++;
+ }
+ printed = false;
+ if (serviceIdx < services.size()) {
+ needSep = false;
+ while (serviceIdx < services.size()) {
+ ServiceRecord r = services.get(serviceIdx);
+ serviceIdx++;
+ if (r.userId != user) {
+ break;
}
- }
- if (dumpClient && r.app != null && r.app.thread != null) {
- pw.println(" Client:");
- pw.flush();
- try {
- TransferPipe tp = new TransferPipe();
- try {
- r.app.thread.dumpService(tp.getWriteFd().getFileDescriptor(),
- r, args);
- tp.setBufferPrefix(" ");
- // Short timeout, since blocking here can
- // deadlock with the application.
- tp.go(fd, 2000);
- } finally {
- tp.kill();
- }
- } catch (IOException e) {
- pw.println(" Failure while dumping the service: " + e);
- } catch (RemoteException e) {
- pw.println(" Got a RemoteException while dumping the service");
+ synchronized(mAm) {
+ dumpServiceLocalLocked(r);
}
- needSep = true;
+ dumpServiceClient(r);
+ }
+ needSep |= printed;
+ }
+
+ synchronized(mAm) {
+ dumpUserRemainsLocked(user);
+ }
+ }
+ } catch (Exception e) {
+ Slog.w(TAG, "Exception in dumpServicesLocked", e);
+ }
+
+ synchronized(mAm) {
+ dumpRemainsLocked();
+ }
+ }
+
+ private void dumpUserHeaderLocked(int user) {
+ if (!printed) {
+ if (printedAnything) {
+ pw.println();
+ }
+ pw.println(" User " + user + " active services:");
+ printed = true;
+ }
+ printedAnything = true;
+ if (needSep) {
+ pw.println();
+ }
+ }
+
+ private void dumpServiceLocalLocked(ServiceRecord r) {
+ dumpUserHeaderLocked(r.userId);
+ pw.print(" * ");
+ pw.println(r);
+ if (dumpAll) {
+ r.dump(pw, " ");
+ needSep = true;
+ } else {
+ pw.print(" app=");
+ pw.println(r.app);
+ pw.print(" created=");
+ TimeUtils.formatDuration(r.createTime, nowReal, pw);
+ pw.print(" started=");
+ pw.print(r.startRequested);
+ pw.print(" connections=");
+ pw.println(r.connections.size());
+ if (r.connections.size() > 0) {
+ pw.println(" Connections:");
+ for (int conni=0; conni<r.connections.size(); conni++) {
+ ArrayList<ConnectionRecord> clist = r.connections.valueAt(conni);
+ for (int i = 0; i < clist.size(); i++) {
+ ConnectionRecord conn = clist.get(i);
+ pw.print(" ");
+ pw.print(conn.binding.intent.intent.getIntent()
+ .toShortString(false, false, false, false));
+ pw.print(" -> ");
+ ProcessRecord proc = conn.binding.client;
+ pw.println(proc != null ? proc.toShortString() : "null");
}
}
- needSep |= printed;
}
+ }
+ }
+
+ private void dumpServiceClient(ServiceRecord r) {
+ final ProcessRecord proc = r.app;
+ if (proc == null) {
+ return;
+ }
+ final IApplicationThread thread = proc.thread;
+ if (thread == null) {
+ return;
+ }
+ pw.println(" Client:");
+ pw.flush();
+ try {
+ TransferPipe tp = new TransferPipe();
+ try {
+ thread.dumpService(tp.getWriteFd().getFileDescriptor(), r, args);
+ tp.setBufferPrefix(" ");
+ // Short timeout, since blocking here can
+ // deadlock with the application.
+ tp.go(fd, 2000);
+ } finally {
+ tp.kill();
+ }
+ } catch (IOException e) {
+ pw.println(" Failure while dumping the service: " + e);
+ } catch (RemoteException e) {
+ pw.println(" Got a RemoteException while dumping the service");
+ }
+ needSep = true;
+ }
+
+ private void dumpUserRemainsLocked(int user) {
+ ServiceMap smap = getServiceMap(user);
+ printed = false;
+ for (int si=0, SN=smap.mDelayedStartList.size(); si<SN; si++) {
+ ServiceRecord r = smap.mDelayedStartList.get(si);
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
+ if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
+ continue;
+ }
+ if (!printed) {
+ if (printedAnything) {
+ pw.println();
+ }
+ pw.println(" User " + user + " delayed start services:");
+ printed = true;
+ }
+ printedAnything = true;
+ pw.print(" * Delayed start "); pw.println(r);
+ }
+ printed = false;
+ for (int si=0, SN=smap.mStartingBackground.size(); si<SN; si++) {
+ ServiceRecord r = smap.mStartingBackground.get(si);
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
+ if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
+ continue;
+ }
+ if (!printed) {
+ if (printedAnything) {
+ pw.println();
+ }
+ pw.println(" User " + user + " starting in background:");
+ printed = true;
+ }
+ printedAnything = true;
+ pw.print(" * Starting bg "); pw.println(r);
+ }
+ }
+
+ private void dumpRemainsLocked() {
+ if (mPendingServices.size() > 0) {
printed = false;
- for (int si=0, SN=smap.mDelayedStartList.size(); si<SN; si++) {
- ServiceRecord r = smap.mDelayedStartList.get(si);
+ for (int i=0; i<mPendingServices.size(); i++) {
+ ServiceRecord r = mPendingServices.get(i);
if (!matcher.match(r, r.name)) {
continue;
}
if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
continue;
}
- if (!printed) {
- if (printedAnything) {
- pw.println();
- }
- pw.println(" User " + user + " delayed start services:");
- printed = true;
- }
- printedAnything = true;
- pw.print(" * Delayed start "); pw.println(r);
- }
- printed = false;
- for (int si=0, SN=smap.mStartingBackground.size(); si<SN; si++) {
- ServiceRecord r = smap.mStartingBackground.get(si);
- if (!matcher.match(r, r.name)) {
- continue;
- }
- if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
- continue;
- }
- if (!printed) {
- if (printedAnything) {
- pw.println();
- }
- pw.println(" User " + user + " starting in background:");
- printed = true;
- }
- printedAnything = true;
- pw.print(" * Starting bg "); pw.println(r);
- }
- }
- } catch (Exception e) {
- Slog.w(TAG, "Exception in dumpServicesLocked", e);
- }
-
- if (mPendingServices.size() > 0) {
- boolean printed = false;
- for (int i=0; i<mPendingServices.size(); i++) {
- ServiceRecord r = mPendingServices.get(i);
- if (!matcher.match(r, r.name)) {
- continue;
- }
- if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
- continue;
- }
- printedAnything = true;
- if (!printed) {
- if (needSep) pw.println();
- needSep = true;
- pw.println(" Pending services:");
- printed = true;
- }
- pw.print(" * Pending "); pw.println(r);
- r.dump(pw, " ");
- }
- needSep = true;
- }
-
- if (mRestartingServices.size() > 0) {
- boolean printed = false;
- for (int i=0; i<mRestartingServices.size(); i++) {
- ServiceRecord r = mRestartingServices.get(i);
- if (!matcher.match(r, r.name)) {
- continue;
- }
- if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
- continue;
- }
- printedAnything = true;
- if (!printed) {
- if (needSep) pw.println();
- needSep = true;
- pw.println(" Restarting services:");
- printed = true;
- }
- pw.print(" * Restarting "); pw.println(r);
- r.dump(pw, " ");
- }
- needSep = true;
- }
-
- if (mDestroyingServices.size() > 0) {
- boolean printed = false;
- for (int i=0; i< mDestroyingServices.size(); i++) {
- ServiceRecord r = mDestroyingServices.get(i);
- if (!matcher.match(r, r.name)) {
- continue;
- }
- if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
- continue;
- }
- printedAnything = true;
- if (!printed) {
- if (needSep) pw.println();
- needSep = true;
- pw.println(" Destroying services:");
- printed = true;
- }
- pw.print(" * Destroy "); pw.println(r);
- r.dump(pw, " ");
- }
- needSep = true;
- }
-
- if (dumpAll) {
- boolean printed = false;
- for (int ic=0; ic<mServiceConnections.size(); ic++) {
- ArrayList<ConnectionRecord> r = mServiceConnections.valueAt(ic);
- for (int i=0; i<r.size(); i++) {
- ConnectionRecord cr = r.get(i);
- if (!matcher.match(cr.binding.service, cr.binding.service.name)) {
- continue;
- }
- if (dumpPackage != null && (cr.binding.client == null
- || !dumpPackage.equals(cr.binding.client.info.packageName))) {
- continue;
- }
printedAnything = true;
if (!printed) {
if (needSep) pw.println();
needSep = true;
- pw.println(" Connection bindings to services:");
+ pw.println(" Pending services:");
printed = true;
}
- pw.print(" * "); pw.println(cr);
- cr.dump(pw, " ");
+ pw.print(" * Pending "); pw.println(r);
+ r.dump(pw, " ");
+ }
+ needSep = true;
+ }
+
+ if (mRestartingServices.size() > 0) {
+ printed = false;
+ for (int i=0; i<mRestartingServices.size(); i++) {
+ ServiceRecord r = mRestartingServices.get(i);
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
+ if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
+ continue;
+ }
+ printedAnything = true;
+ if (!printed) {
+ if (needSep) pw.println();
+ needSep = true;
+ pw.println(" Restarting services:");
+ printed = true;
+ }
+ pw.print(" * Restarting "); pw.println(r);
+ r.dump(pw, " ");
+ }
+ needSep = true;
+ }
+
+ if (mDestroyingServices.size() > 0) {
+ printed = false;
+ for (int i=0; i< mDestroyingServices.size(); i++) {
+ ServiceRecord r = mDestroyingServices.get(i);
+ if (!matcher.match(r, r.name)) {
+ continue;
+ }
+ if (dumpPackage != null && !dumpPackage.equals(r.appInfo.packageName)) {
+ continue;
+ }
+ printedAnything = true;
+ if (!printed) {
+ if (needSep) pw.println();
+ needSep = true;
+ pw.println(" Destroying services:");
+ printed = true;
+ }
+ pw.print(" * Destroy "); pw.println(r);
+ r.dump(pw, " ");
+ }
+ needSep = true;
+ }
+
+ if (dumpAll) {
+ printed = false;
+ for (int ic=0; ic<mServiceConnections.size(); ic++) {
+ ArrayList<ConnectionRecord> r = mServiceConnections.valueAt(ic);
+ for (int i=0; i<r.size(); i++) {
+ ConnectionRecord cr = r.get(i);
+ if (!matcher.match(cr.binding.service, cr.binding.service.name)) {
+ continue;
+ }
+ if (dumpPackage != null && (cr.binding.client == null
+ || !dumpPackage.equals(cr.binding.client.info.packageName))) {
+ continue;
+ }
+ printedAnything = true;
+ if (!printed) {
+ if (needSep) pw.println();
+ needSep = true;
+ pw.println(" Connection bindings to services:");
+ printed = true;
+ }
+ pw.print(" * "); pw.println(cr);
+ cr.dump(pw, " ");
+ }
}
}
- }
- if (!printedAnything) {
- pw.println(" (nothing)");
+ if (!printedAnything) {
+ pw.println(" (nothing)");
+ }
}
}
+ ServiceDumper newServiceDumperLocked(FileDescriptor fd, PrintWriter pw, String[] args,
+ int opti, boolean dumpAll, String dumpPackage) {
+ return new ServiceDumper(fd, pw, args, opti, dumpAll, dumpPackage);
+ }
+
/**
* There are three ways to call this:
* - no service specified: dump all the services
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index ded6556..a243493 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -16,6 +16,7 @@
package com.android.server.am;
+import com.android.internal.telephony.TelephonyIntents;
import com.google.android.collect.Lists;
import com.google.android.collect.Maps;
import com.android.internal.R;
@@ -169,6 +170,7 @@
import android.os.IPermissionController;
import android.os.IProcessInfoService;
import android.os.IProgressListener;
+import android.os.LocaleList;
import android.os.Looper;
import android.os.Message;
import android.os.Parcel;
@@ -204,7 +206,6 @@
import android.util.AtomicFile;
import android.util.DebugUtils;
import android.util.EventLog;
-import android.util.LocaleList;
import android.util.Log;
import android.util.Pair;
import android.util.PrintWriterPrinter;
@@ -7050,6 +7051,41 @@
}
@Override
+ public int sendIntentSender(IIntentSender target, int code, Intent intent, String resolvedType,
+ IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
+ if (target instanceof PendingIntentRecord) {
+ return ((PendingIntentRecord)target).sendWithResult(code, intent, resolvedType,
+ finishedReceiver, requiredPermission, options);
+ } else {
+ if (intent == null) {
+ // Weird case: someone has given us their own custom IIntentSender, and now
+ // they have someone else trying to send to it but of course this isn't
+ // really a PendingIntent, so there is no base Intent, and the caller isn't
+ // supplying an Intent... but we never want to dispatch a null Intent to
+ // a receiver, so um... let's make something up.
+ Slog.wtf(TAG, "Can't use null intent with direct IIntentSender call");
+ intent = new Intent(Intent.ACTION_MAIN);
+ }
+ try {
+ target.send(code, intent, resolvedType, null, requiredPermission, options);
+ } catch (RemoteException e) {
+ }
+ // Platform code can rely on getting a result back when the send is done, but if
+ // this intent sender is from outside of the system we can't rely on it doing that.
+ // So instead we don't give it the result receiver, and instead just directly
+ // report the finish immediately.
+ if (finishedReceiver != null) {
+ try {
+ finishedReceiver.performReceive(intent, 0,
+ null, null, false, false, UserHandle.getCallingUserId());
+ } catch (RemoteException e) {
+ }
+ }
+ return 0;
+ }
+ }
+
+ @Override
public void cancelIntentSender(IIntentSender sender) {
if (!(sender instanceof PendingIntentRecord)) {
return;
@@ -13777,8 +13813,18 @@
dumpAssociationsLocked(fd, pw, args, opti, true, dumpClient, dumpPackage);
}
} else if ("services".equals(cmd) || "s".equals(cmd)) {
- synchronized (this) {
- mServices.dumpServicesLocked(fd, pw, args, opti, true, dumpClient, dumpPackage);
+ if (dumpClient) {
+ ActiveServices.ServiceDumper dumper;
+ synchronized (this) {
+ dumper = mServices.newServiceDumperLocked(fd, pw, args, opti, true,
+ dumpPackage);
+ }
+ dumper.dumpWithClient();
+ } else {
+ synchronized (this) {
+ mServices.newServiceDumperLocked(fd, pw, args, opti, true,
+ dumpPackage).dumpLocked();
+ }
}
} else if ("locks".equals(cmd)) {
LockGuard.dump(fd, pw, args);
@@ -13800,50 +13846,105 @@
}
// No piece of data specified, dump everything.
- synchronized (this) {
- dumpPendingIntentsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
- pw.println();
- if (dumpAll) {
- pw.println("-------------------------------------------------------------------------------");
- }
- dumpBroadcastsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
- pw.println();
- if (dumpAll) {
- pw.println("-------------------------------------------------------------------------------");
- }
- dumpProvidersLocked(fd, pw, args, opti, dumpAll, dumpPackage);
- pw.println();
- if (dumpAll) {
- pw.println("-------------------------------------------------------------------------------");
- }
- dumpPermissionsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
- pw.println();
- if (dumpAll) {
- pw.println("-------------------------------------------------------------------------------");
- }
- mServices.dumpServicesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
- pw.println();
- if (dumpAll) {
- pw.println("-------------------------------------------------------------------------------");
- }
- dumpRecentsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
- pw.println();
- if (dumpAll) {
- pw.println("-------------------------------------------------------------------------------");
- }
- dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
- if (mAssociations.size() > 0) {
+ if (dumpClient) {
+ ActiveServices.ServiceDumper sdumper;
+ synchronized (this) {
+ dumpPendingIntentsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
pw.println();
if (dumpAll) {
pw.println("-------------------------------------------------------------------------------");
}
- dumpAssociationsLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
+ dumpBroadcastsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpProvidersLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpPermissionsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ sdumper = mServices.newServiceDumperLocked(fd, pw, args, opti, dumpAll,
+ dumpPackage);
}
+ sdumper.dumpWithClient();
pw.println();
- if (dumpAll) {
- pw.println("-------------------------------------------------------------------------------");
+ synchronized (this) {
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpRecentsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
+ if (mAssociations.size() > 0) {
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpAssociationsLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
+ }
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpProcessesLocked(fd, pw, args, opti, dumpAll, dumpPackage);
}
- dumpProcessesLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+
+ } else {
+ synchronized (this) {
+ dumpPendingIntentsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpBroadcastsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpProvidersLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpPermissionsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ mServices.newServiceDumperLocked(fd, pw, args, opti, dumpAll, dumpPackage)
+ .dumpLocked();
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpRecentsLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpActivitiesLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
+ if (mAssociations.size() > 0) {
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpAssociationsLocked(fd, pw, args, opti, dumpAll, dumpClient, dumpPackage);
+ }
+ pw.println();
+ if (dumpAll) {
+ pw.println("-------------------------------------------------------------------------------");
+ }
+ dumpProcessesLocked(fd, pw, args, opti, dumpAll, dumpPackage);
+ }
}
Binder.restoreCallingIdentity(origId);
}
@@ -15280,7 +15381,7 @@
ProcessList.VISIBLE_APP_ADJ, ProcessList.PERCEPTIBLE_APP_ADJ,
ProcessList.BACKUP_APP_ADJ, ProcessList.HEAVY_WEIGHT_APP_ADJ,
ProcessList.SERVICE_ADJ, ProcessList.HOME_APP_ADJ,
- ProcessList.PREVIOUS_APP_ADJ, ProcessList.SERVICE_B_ADJ, ProcessList.CACHED_APP_MAX_ADJ
+ ProcessList.PREVIOUS_APP_ADJ, ProcessList.SERVICE_B_ADJ, ProcessList.CACHED_APP_MIN_ADJ
};
static final String[] DUMP_MEM_OOM_LABEL = new String[] {
"Native",
@@ -16148,8 +16249,8 @@
catPw.println();
dumpProcessesLocked(null, catPw, emptyArgs, 0, false, null);
catPw.println();
- mServices.dumpServicesLocked(null, catPw, emptyArgs, 0,
- false, false, null);
+ mServices.newServiceDumperLocked(null, catPw, emptyArgs, 0,
+ false, null).dumpLocked();
catPw.println();
dumpActivitiesLocked(null, catPw, emptyArgs, 0, false, false, null);
catPw.flush();
@@ -17252,7 +17353,8 @@
|| Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS.equals(action)
|| AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(action)
|| AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)
- || LocationManager.HIGH_POWER_REQUEST_CHANGE_ACTION.equals(action)) {
+ || LocationManager.HIGH_POWER_REQUEST_CHANGE_ACTION.equals(action)
+ || TelephonyIntents.ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE.equals(action)) {
// Broadcast is either protected, or it's a public action that
// we've relaxed, so it's fine for system internals to send.
} else {
@@ -18549,6 +18651,8 @@
app.systemNoUi = true;
if (app == TOP_APP) {
app.systemNoUi = false;
+ app.curSchedGroup = ProcessList.SCHED_GROUP_TOP_APP;
+ app.adjType = "pers-top-activity";
} else if (activitiesSize > 0) {
for (int j = 0; j < activitiesSize; j++) {
final ActivityRecord r = app.activities.get(j);
diff --git a/services/core/java/com/android/server/am/ActivityMetricsLogger.java b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
index fe085d7..be8f21d 100644
--- a/services/core/java/com/android/server/am/ActivityMetricsLogger.java
+++ b/services/core/java/com/android/server/am/ActivityMetricsLogger.java
@@ -18,6 +18,8 @@
import com.android.internal.logging.MetricsLogger;
import com.android.internal.logging.MetricsProto.MetricsEvent;
+import java.util.ArrayList;
+
/**
* Handles logging into Tron.
*/
@@ -99,6 +101,47 @@
}
/**
+ * Notifies the tracker that the activity is actually launching.
+ *
+ * @param resultCode one of the ActivityManager.START_* flags, indicating the result of the
+ * launch
+ * @param launchedActivity the activity that is being launched
+ */
+ void notifyActivityLaunched(int resultCode, ActivityRecord launchedActivity) {
+ final ProcessRecord processRecord = launchedActivity != null
+ ? mSupervisor.mService.mProcessNames.get(launchedActivity.processName,
+ launchedActivity.appInfo.uid)
+ : null;
+ final boolean processRunning = processRecord != null;
+ final String componentName = launchedActivity != null
+ ? launchedActivity.shortComponentName
+ : null;
+
+ // We consider this a "process switch" if the process of the activity that gets launched
+ // didn't have an activity that was in started state. In this case, we assume that lot
+ // of caches might be purged so the time until it produces the first frame is very
+ // interesting.
+ final boolean processSwitch = processRecord == null
+ || !hasStartedActivity(processRecord, launchedActivity);
+
+ notifyActivityLaunched(resultCode, componentName, processRunning, processSwitch);
+ }
+
+ private boolean hasStartedActivity(ProcessRecord record, ActivityRecord launchedActivity) {
+ final ArrayList<ActivityRecord> activities = record.activities;
+ for (int i = activities.size() - 1; i >= 0; i--) {
+ final ActivityRecord activity = activities.get(i);
+ if (launchedActivity == activity) {
+ continue;
+ }
+ if (!activity.stopped) {
+ return true;
+ }
+ }
+ return false;
+ }
+
+ /**
* Notifies the tracker the the activity is actually launching.
*
* @param resultCode one of the ActivityManager.START_* flags, indicating the result of the
@@ -109,7 +152,7 @@
* activity that was stopped, i.e. the started activity is "switching"
* processes
*/
- void notifyActivityLaunched(int resultCode, @Nullable String componentName,
+ private void notifyActivityLaunched(int resultCode, @Nullable String componentName,
boolean processRunning, boolean processSwitch) {
if (resultCode < 0 || componentName == null || !processSwitch) {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index fa69b4a8..3ccac9e2 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -202,6 +202,7 @@
static final int STARTING_WINDOW_SHOWN = 1;
static final int STARTING_WINDOW_REMOVED = 2;
int mStartingWindowState = STARTING_WINDOW_NOT_SHOWN;
+ boolean mTaskOverlay = false; // Task is always on-top of other activities in the task.
boolean mUpdateTaskThumbnailWhenHidden;
ActivityContainer mInitialActivityContainer;
@@ -1390,6 +1391,17 @@
pendingVoiceInteractionStart = false;
}
+ void showStartingWindow(ActivityRecord prev, boolean createIfNeeded) {
+ final CompatibilityInfo compatInfo =
+ service.compatibilityInfoForPackageLocked(info.applicationInfo);
+ final boolean shown = service.mWindowManager.setAppStartingWindow(
+ appToken, packageName, theme, compatInfo, nonLocalizedLabel, labelRes, icon,
+ logo, windowFlags, prev != null ? prev.appToken : null, createIfNeeded);
+ if (shown) {
+ mStartingWindowState = STARTING_WINDOW_SHOWN;
+ }
+ }
+
void saveToXml(XmlSerializer out) throws IOException, XmlPullParserException {
out.attribute(null, ATTR_ID, String.valueOf(createTime));
out.attribute(null, ATTR_LAUNCHEDFROMUID, String.valueOf(launchedFromUid));
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index 62d114d..82431e7 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -1725,13 +1725,9 @@
continue;
}
aboveTop = false;
- // mLaunchingBehind: Activities launching behind are at the back of the task stack
- // but must be drawn initially for the animation as though they were visible.
- final boolean activityVisibleBehind =
- (behindTranslucentActivity || stackVisibleBehind) && visibleBehind == r;
- final boolean isVisible = (!behindFullscreenActivity || r.mLaunchTaskBehind
- || activityVisibleBehind) && okToShowLocked(r);
- if (isVisible) {
+
+ if (shouldBeVisible(r, behindTranslucentActivity, stackVisibleBehind,
+ visibleBehind, behindFullscreenActivity)) {
if (DEBUG_VISIBILITY) Slog.v(TAG_VISIBILITY, "Make visible? " + r
+ " finishing=" + r.finishing + " state=" + r.state);
// First: if this is not the current activity being started, make
@@ -1819,6 +1815,31 @@
}
}
+ /** Return true if the input activity should be made visible */
+ private boolean shouldBeVisible(ActivityRecord r, boolean behindTranslucentActivity,
+ boolean stackVisibleBehind, ActivityRecord visibleBehind,
+ boolean behindFullscreenActivity) {
+ // mLaunchingBehind: Activities launching behind are at the back of the task stack
+ // but must be drawn initially for the animation as though they were visible.
+ final boolean activityVisibleBehind =
+ (behindTranslucentActivity || stackVisibleBehind) && visibleBehind == r;
+
+ if (!okToShowLocked(r)) {
+ return false;
+ }
+
+ boolean isVisible =
+ !behindFullscreenActivity || r.mLaunchTaskBehind || activityVisibleBehind;
+
+ if (isVisible && r.isRecentsActivity()) {
+ // Recents activity can only be visible if the home stack isn't fullscreen or is the
+ // focused stack.
+ isVisible = !mFullscreen || mStackSupervisor.isFocusedStack(this);
+ }
+
+ return isVisible;
+ }
+
private void checkTranslucentActivityWaiting(ActivityRecord top) {
if (mTranslucentActivityWaiting != top) {
mUndrawnActivitiesBelowTopTranslucent.clear();
@@ -2017,6 +2038,9 @@
void cancelInitializingActivities() {
final ActivityRecord topActivity = topRunningActivityLocked();
boolean aboveTop = true;
+ // We don't want to clear starting window for activities that aren't behind fullscreen
+ // activities as we need to display their starting window until they are done initializing.
+ boolean behindFullscreenActivity = false;
for (int taskNdx = mTaskHistory.size() - 1; taskNdx >= 0; --taskNdx) {
final ArrayList<ActivityRecord> activities = mTaskHistory.get(taskNdx).mActivities;
for (int activityNdx = activities.size() - 1; activityNdx >= 0; --activityNdx) {
@@ -2025,16 +2049,20 @@
if (r == topActivity) {
aboveTop = false;
}
+ behindFullscreenActivity |= r.fullscreen;
continue;
}
if (r.state == ActivityState.INITIALIZING
- && r.mStartingWindowState == STARTING_WINDOW_SHOWN) {
+ && r.mStartingWindowState == STARTING_WINDOW_SHOWN
+ && behindFullscreenActivity) {
if (DEBUG_VISIBILITY) Slog.w(TAG_VISIBILITY,
"Found orphaned starting window " + r);
r.mStartingWindowState = STARTING_WINDOW_REMOVED;
mWindowManager.removeAppStartingWindow(r.appToken);
}
+
+ behindFullscreenActivity |= r.fullscreen;
}
}
}
@@ -2459,12 +2487,7 @@
next.hasBeenLaunched = true;
} else if (SHOW_APP_STARTING_PREVIEW && lastStack != null &&
mStackSupervisor.isFrontStack(lastStack)) {
- mWindowManager.setAppStartingWindow(
- next.appToken, next.packageName, next.theme,
- mService.compatibilityInfoForPackageLocked(next.info.applicationInfo),
- next.nonLocalizedLabel, next.labelRes, next.icon, next.logo,
- next.windowFlags, null, true);
- next.mStartingWindowState = STARTING_WINDOW_SHOWN;
+ next.showStartingWindow(null, true);
}
mStackSupervisor.startSpecificActivityLocked(next, true, false);
if (DEBUG_STACK) mStackSupervisor.validateTopActivitiesLocked();
@@ -2490,14 +2513,7 @@
next.hasBeenLaunched = true;
} else {
if (SHOW_APP_STARTING_PREVIEW) {
- mWindowManager.setAppStartingWindow(
- next.appToken, next.packageName, next.theme,
- mService.compatibilityInfoForPackageLocked(
- next.info.applicationInfo),
- next.nonLocalizedLabel,
- next.labelRes, next.icon, next.logo, next.windowFlags,
- null, true);
- next.mStartingWindowState = STARTING_WINDOW_SHOWN;
+ next.showStartingWindow(null, true);
}
if (DEBUG_SWITCH) Slog.v(TAG_SWITCH, "Restarting: " + next);
}
@@ -2712,7 +2728,7 @@
// "has the same starting icon" as the next one. This allows the
// window manager to keep the previous window it had previously
// created, if it still had one.
- ActivityRecord prev = mResumedActivity;
+ ActivityRecord prev = r.task.topRunningActivityWithStartingWindowLocked();
if (prev != null) {
// We don't want to reuse the previous starting preview if:
// (1) The current activity is in a different task.
@@ -2724,13 +2740,7 @@
prev = null;
}
}
- mWindowManager.setAppStartingWindow(
- r.appToken, r.packageName, r.theme,
- mService.compatibilityInfoForPackageLocked(
- r.info.applicationInfo), r.nonLocalizedLabel,
- r.labelRes, r.icon, r.logo, r.windowFlags,
- prev != null ? prev.appToken : null, showStartingIcon);
- r.mStartingWindowState = STARTING_WINDOW_SHOWN;
+ r.showStartingWindow(prev, showStartingIcon);
}
} else {
// If this is the first activity, don't do any fancy animations,
@@ -4383,14 +4393,49 @@
}
/**
- * Make sure the given activity matches the current configuration. Returns
- * false if the activity had to be destroyed. Returns true if the
- * configuration is the same, or the activity will remain running as-is
- * for whatever reason. Ensures the HistoryRecord is updated with the
+ * Ensures all visible activities at or below the input activity have the right configuration.
+ */
+ void ensureVisibleActivitiesConfigurationLocked(ActivityRecord start, boolean preserveWindow) {
+ if (start == null || !start.visible) {
+ return;
+ }
+
+ final TaskRecord startTask = start.task;
+ boolean behindFullscreen = false;
+ boolean updatedConfig = false;
+
+ for (int taskIndex = mTaskHistory.indexOf(startTask); taskIndex >= 0; --taskIndex) {
+ final TaskRecord task = mTaskHistory.get(taskIndex);
+ final ArrayList<ActivityRecord> activities = task.mActivities;
+ int activityIndex =
+ (start.task == task) ? activities.indexOf(start) : activities.size() - 1;
+ for (; activityIndex >= 0; --activityIndex) {
+ final ActivityRecord r = activities.get(activityIndex);
+ updatedConfig |= ensureActivityConfigurationLocked(r, 0, preserveWindow);
+ if (r.fullscreen) {
+ behindFullscreen = true;
+ break;
+ }
+ }
+ if (behindFullscreen) {
+ break;
+ }
+ }
+ if (updatedConfig) {
+ // Ensure the resumed state of the focus activity if we updated the confiugaration of
+ // any activity.
+ mStackSupervisor.resumeFocusedStackTopActivityLocked();
+ }
+ }
+
+ /**
+ * Make sure the given activity matches the current configuration. Returns false if the activity
+ * had to be destroyed. Returns true if the configuration is the same, or the activity will
+ * remain running as-is for whatever reason. Ensures the HistoryRecord is updated with the
* correct configuration and all other bookkeeping is handled.
*/
- final boolean ensureActivityConfigurationLocked(ActivityRecord r, int globalChanges,
- boolean preserveWindow) {
+ boolean ensureActivityConfigurationLocked(
+ ActivityRecord r, int globalChanges, boolean preserveWindow) {
if (mConfigWillChange) {
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
"Skipping config check (will change): " + r);
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 4bf28b2..0baca9e 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -2014,8 +2014,8 @@
try {
resizeStackUncheckedLocked(stack, bounds, tempTaskBounds, tempTaskInsetBounds);
if (!deferResume) {
- ensureConfigurationAndResume(
- stack, stack.topRunningActivityLocked(), preserveWindows);
+ stack.ensureVisibleActivitiesConfigurationLocked(
+ stack.topRunningActivityLocked(), preserveWindows);
}
} finally {
mWindowManager.continueSurfaceLayout();
@@ -2091,18 +2091,6 @@
stack.setBounds(bounds);
}
- private void ensureConfigurationAndResume(ActivityStack stack, ActivityRecord r,
- boolean preserveWindows) {
- if (r == null || !r.visible) {
- return;
- }
- final boolean updated = stack.ensureActivityConfigurationLocked(r, 0,
- preserveWindows);
- if (!updated) {
- resumeFocusedStackTopActivityLocked();
- }
- }
-
void moveTasksToFullscreenStackLocked(int fromStackId, boolean onTop) {
final ActivityStack stack = getStack(fromStackId);
if (stack == null) {
@@ -2204,7 +2192,7 @@
}
}
}
- ensureConfigurationAndResume(stack, r, preserveWindows);
+ stack.ensureVisibleActivitiesConfigurationLocked(r, preserveWindows);
} finally {
mAllowDockedStackResize = true;
mWindowManager.continueSurfaceLayout();
@@ -2230,7 +2218,7 @@
ActivityRecord r = stack.topRunningActivityLocked();
resizeStackUncheckedLocked(stack, pinnedBounds, tempPinnedTaskBounds,
null);
- ensureConfigurationAndResume(stack, r, false);
+ stack.ensureVisibleActivitiesConfigurationLocked(r, false);
} finally {
mWindowManager.continueSurfaceLayout();
Trace.traceEnd(TRACE_TAG_ACTIVITY_MANAGER);
@@ -4423,6 +4411,8 @@
&& task.getRootActivity() != null) {
mActivityMetricsLogger.notifyActivityLaunching();
mService.moveTaskToFrontLocked(task.taskId, 0, bOptions);
+ mActivityMetricsLogger.notifyActivityLaunched(ActivityManager.START_TASK_TO_FRONT,
+ task.getTopActivity());
// If we are launching the task in the docked stack, put it into resizing mode so
// the window renders full-screen with the background filling the void. Also only
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 64bd14c..ad57ae2 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -620,6 +620,10 @@
.getSystemService(Context.KEYGUARD_SERVICE);
final Intent credential =
km.createConfirmDeviceCredentialIntent(null, null, userId);
+ // For safety, check null here in case users changed the setting after the checking.
+ if (credential == null) {
+ return;
+ }
final ActivityRecord activityRecord = targetStack.topRunningActivityLocked();
if (activityRecord != null) {
final IIntentSender target = mService.getIntentSenderLocked(
@@ -846,42 +850,13 @@
}
}
- final String componentName = outRecord[0] != null ? outRecord[0].shortComponentName
- : null;
final ActivityRecord launchedActivity = mReusedActivity != null
? mReusedActivity : outRecord[0];
- final ProcessRecord processRecord = launchedActivity != null
- ? mService.mProcessNames.get(launchedActivity.processName,
- launchedActivity.appInfo.uid)
- : null;
- final boolean processRunning = processRecord != null;
-
- // We consider this a "process switch" if the process of the activity that gets launched
- // didn't have an activity that was in started state. In this case, we assume that lot
- // of caches might be purged so the time until it produces the first frame is very
- // interesting.
- final boolean processSwitch = processRecord == null
- || !hasStartedActivity(processRecord, launchedActivity);
- mSupervisor.mActivityMetricsLogger.notifyActivityLaunched(res, componentName,
- processRunning, processSwitch);
+ mSupervisor.mActivityMetricsLogger.notifyActivityLaunched(res, launchedActivity);
return res;
}
}
- final boolean hasStartedActivity(ProcessRecord record, ActivityRecord launchedActivity) {
- final ArrayList<ActivityRecord> activities = record.activities;
- for (int i = activities.size() - 1; i >= 0; i--) {
- final ActivityRecord activity = activities.get(i);
- if (launchedActivity == activity) {
- continue;
- }
- if (!activity.stopped) {
- return true;
- }
- }
- return false;
- }
-
final int startActivities(IApplicationThread caller, int callingUid, String callingPackage,
Intent[] intents, String[] resolvedTypes, IBinder resultTo,
Bundle bOptions, int userId) {
@@ -1149,17 +1124,23 @@
// activity.
mService.setFocusedActivityLocked(mStartActivity, "startedActivity");
}
- if (mTargetStack.isFocusable()) {
- mSupervisor.resumeFocusedStackTopActivityLocked(mTargetStack, mStartActivity,
- mOptions);
- } else {
+ final ActivityRecord topTaskActivity = mStartActivity.task.topRunningActivityLocked();
+ if (!mTargetStack.isFocusable()
+ || (topTaskActivity != null && topTaskActivity.mTaskOverlay
+ && mStartActivity != topTaskActivity)) {
// If the activity is not focusable, we can't resume it, but still would like to
// make sure it becomes visible as it starts (this will also trigger entry
// animation). An example of this are PIP activities.
+ // Also, we don't want to resume activities in a task that currently has an overlay
+ // as the starting activity just needs to be in the visible paused state until the
+ // over is removed.
mTargetStack.ensureActivitiesVisibleLocked(null, 0, !PRESERVE_WINDOWS);
// Go ahead and tell window manager to execute app transition for this activity
// since the app transition will not be triggered through the resume channel.
mWindowManager.executeAppTransition();
+ } else {
+ mSupervisor.resumeFocusedStackTopActivityLocked(mTargetStack, mStartActivity,
+ mOptions);
}
} else {
mTargetStack.addRecentActivityLocked(mStartActivity);
@@ -1226,7 +1207,8 @@
mDoResume = false;
}
- if (mOptions != null && mOptions.getLaunchTaskId() != -1 && mOptions.getAvoidMoveToFront()) {
+ if (mOptions != null && mOptions.getLaunchTaskId() != -1 && mOptions.getTaskOverlay()) {
+ r.mTaskOverlay = true;
final TaskRecord task = mSupervisor.anyTaskForIdLocked(mOptions.getLaunchTaskId());
final ActivityRecord top = task != null ? task.getTopActivity() : null;
if (top != null && !top.visible) {
diff --git a/services/core/java/com/android/server/am/BatteryStatsService.java b/services/core/java/com/android/server/am/BatteryStatsService.java
index 96934f0..b4df10f 100644
--- a/services/core/java/com/android/server/am/BatteryStatsService.java
+++ b/services/core/java/com/android/server/am/BatteryStatsService.java
@@ -1323,55 +1323,60 @@
delta.mTimestamp = latest.getTimeStamp();
delta.mStackState = latest.getStackState();
- // These times seem to be the most reliable.
- delta.mControllerTxTimeMs = latest.mControllerTxTimeMs - lastTxMs;
- delta.mControllerRxTimeMs = latest.mControllerRxTimeMs - lastRxMs;
+ final long txTimeMs = latest.mControllerTxTimeMs - lastTxMs;
+ final long rxTimeMs = latest.mControllerRxTimeMs - lastRxMs;
+ final long idleTimeMs = latest.mControllerIdleTimeMs - lastIdleMs;
- // WiFi calculates the idle time as a difference from the on time and the various
- // Rx + Tx times. There seems to be some missing time there because this sometimes
- // becomes negative. Just cap it at 0 and move on.
- // b/21613534
- delta.mControllerIdleTimeMs = Math.max(0, latest.mControllerIdleTimeMs - lastIdleMs);
- delta.mControllerEnergyUsed = Math.max(0, latest.mControllerEnergyUsed - lastEnergy);
-
- if (delta.mControllerTxTimeMs < 0 || delta.mControllerRxTimeMs < 0) {
+ if (txTimeMs < 0 || rxTimeMs < 0) {
// The stats were reset by the WiFi system (which is why our delta is negative).
// Returns the unaltered stats.
delta.mControllerEnergyUsed = latest.mControllerEnergyUsed;
delta.mControllerRxTimeMs = latest.mControllerRxTimeMs;
delta.mControllerTxTimeMs = latest.mControllerTxTimeMs;
delta.mControllerIdleTimeMs = latest.mControllerIdleTimeMs;
-
Slog.v(TAG, "WiFi energy data was reset, new WiFi energy data is " + delta);
- }
-
- // There is some accuracy error in reports so allow some slop in the results.
- final long SAMPLE_ERROR_MILLIS = 750;
- final long totalTimeMs = delta.mControllerIdleTimeMs + delta.mControllerRxTimeMs +
- delta.mControllerTxTimeMs;
- if (totalTimeMs > timePeriodMs + SAMPLE_ERROR_MILLIS) {
- StringBuilder sb = new StringBuilder();
- sb.append("Total time ");
- TimeUtils.formatDuration(totalTimeMs, sb);
- sb.append(" is longer than sample period ");
- TimeUtils.formatDuration(timePeriodMs, sb);
- sb.append(".\n");
- sb.append("Previous WiFi snapshot: ").append("idle=");
- TimeUtils.formatDuration(lastIdleMs, sb);
- sb.append(" rx=");
- TimeUtils.formatDuration(lastRxMs, sb);
- sb.append(" tx=");
- TimeUtils.formatDuration(lastTxMs, sb);
- sb.append(" e=").append(lastEnergy);
- sb.append("\n");
- sb.append("Current WiFi snapshot: ").append("idle=");
- TimeUtils.formatDuration(latest.mControllerIdleTimeMs, sb);
- sb.append(" rx=");
- TimeUtils.formatDuration(latest.mControllerRxTimeMs, sb);
- sb.append(" tx=");
- TimeUtils.formatDuration(latest.mControllerTxTimeMs, sb);
- sb.append(" e=").append(latest.mControllerEnergyUsed);
- Slog.wtf(TAG, sb.toString());
+ } else {
+ final long totalActiveTimeMs = txTimeMs + rxTimeMs;
+ long maxExpectedIdleTimeMs;
+ // Active time can never be greater than the total time, the stats received seem
+ // to be corrupt.
+ if (totalActiveTimeMs > timePeriodMs) {
+ maxExpectedIdleTimeMs = timePeriodMs;
+ StringBuilder sb = new StringBuilder();
+ sb.append("Total Active time ");
+ TimeUtils.formatDuration(totalActiveTimeMs, sb);
+ sb.append(" is longer than sample period ");
+ TimeUtils.formatDuration(timePeriodMs, sb);
+ sb.append(".\n");
+ sb.append("Previous WiFi snapshot: ").append("idle=");
+ TimeUtils.formatDuration(lastIdleMs, sb);
+ sb.append(" rx=");
+ TimeUtils.formatDuration(lastRxMs, sb);
+ sb.append(" tx=");
+ TimeUtils.formatDuration(lastTxMs, sb);
+ sb.append(" e=").append(lastEnergy);
+ sb.append("\n");
+ sb.append("Current WiFi snapshot: ").append("idle=");
+ TimeUtils.formatDuration(latest.mControllerIdleTimeMs, sb);
+ sb.append(" rx=");
+ TimeUtils.formatDuration(latest.mControllerRxTimeMs, sb);
+ sb.append(" tx=");
+ TimeUtils.formatDuration(latest.mControllerTxTimeMs, sb);
+ sb.append(" e=").append(latest.mControllerEnergyUsed);
+ Slog.wtf(TAG, sb.toString());
+ } else {
+ maxExpectedIdleTimeMs = timePeriodMs - totalActiveTimeMs;
+ }
+ // These times seem to be the most reliable.
+ delta.mControllerTxTimeMs = txTimeMs;
+ delta.mControllerRxTimeMs = rxTimeMs;
+ // WiFi calculates the idle time as a difference from the on time and the various
+ // Rx + Tx times. There seems to be some missing time there because this sometimes
+ // becomes negative. Just cap it at 0 and ensure that it is less than the expected idle
+ // time from the difference in timestamps.
+ // b/21613534
+ delta.mControllerIdleTimeMs = Math.min(maxExpectedIdleTimeMs, Math.max(0, idleTimeMs));
+ delta.mControllerEnergyUsed = Math.max(0, latest.mControllerEnergyUsed - lastEnergy);
}
mLastInfo = latest;
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index 1222f54..0acc2a0 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -38,7 +38,6 @@
import android.content.pm.ResolveInfo;
import android.os.Build;
import android.os.Bundle;
-import android.os.DeadObjectException;
import android.os.Handler;
import android.os.IBinder;
import android.os.Looper;
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index b8f45bc..1f8d26b 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -198,16 +198,21 @@
ref = new WeakReference<PendingIntentRecord>(this);
}
- public int send(int code, Intent intent, String resolvedType, IIntentReceiver finishedReceiver,
- String requiredPermission, Bundle options) throws TransactionTooLargeException {
+ public void send(int code, Intent intent, String resolvedType, IIntentReceiver finishedReceiver,
+ String requiredPermission, Bundle options) {
+ sendInner(code, intent, resolvedType, finishedReceiver,
+ requiredPermission, null, null, 0, 0, 0, options, null);
+ }
+
+ public int sendWithResult(int code, Intent intent, String resolvedType,
+ IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
return sendInner(code, intent, resolvedType, finishedReceiver,
requiredPermission, null, null, 0, 0, 0, options, null);
}
int sendInner(int code, Intent intent, String resolvedType, IIntentReceiver finishedReceiver,
String requiredPermission, IBinder resultTo, String resultWho, int requestCode,
- int flagsMask, int flagsValues, Bundle options, IActivityContainer container)
- throws TransactionTooLargeException {
+ int flagsMask, int flagsValues, Bundle options, IActivityContainer container) {
if (intent != null) intent.setDefusable(true);
if (options != null) options.setDefusable(true);
@@ -253,6 +258,7 @@
if (userId == UserHandle.USER_CURRENT) {
userId = owner.mUserController.getCurrentOrTargetUserIdLocked();
}
+ int res = 0;
switch (key.type) {
case ActivityManager.INTENT_SENDER_ACTIVITY:
if (options == null) {
@@ -312,21 +318,23 @@
resolvedType, key.packageName, userId);
} catch (RuntimeException e) {
Slog.w(TAG, "Unable to send startService intent", e);
+ } catch (TransactionTooLargeException e) {
+ res = ActivityManager.START_CANCELED;
}
break;
}
- if (sendFinish) {
+ if (sendFinish && res != ActivityManager.START_CANCELED) {
try {
finishedReceiver.performReceive(new Intent(finalIntent), 0,
null, null, false, false, key.userId);
} catch (RemoteException e) {
}
}
-
+
Binder.restoreCallingIdentity(origId);
-
- return 0;
+
+ return res;
}
}
return ActivityManager.START_CANCELED;
diff --git a/services/core/java/com/android/server/am/TaskRecord.java b/services/core/java/com/android/server/am/TaskRecord.java
index af7740f..729d32f 100644
--- a/services/core/java/com/android/server/am/TaskRecord.java
+++ b/services/core/java/com/android/server/am/TaskRecord.java
@@ -88,6 +88,7 @@
import static com.android.server.am.ActivityRecord.APPLICATION_ACTIVITY_TYPE;
import static com.android.server.am.ActivityRecord.HOME_ACTIVITY_TYPE;
import static com.android.server.am.ActivityRecord.RECENTS_ACTIVITY_TYPE;
+import static com.android.server.am.ActivityRecord.STARTING_WINDOW_SHOWN;
final class TaskRecord {
private static final String TAG = TAG_WITH_CLASS_NAME ? "TaskRecord" : TAG_AM;
@@ -685,6 +686,20 @@
return null;
}
+ ActivityRecord topRunningActivityWithStartingWindowLocked() {
+ if (stack != null) {
+ for (int activityNdx = mActivities.size() - 1; activityNdx >= 0; --activityNdx) {
+ ActivityRecord r = mActivities.get(activityNdx);
+ if (r.mStartingWindowState != STARTING_WINDOW_SHOWN
+ || r.finishing || !stack.okToShowLocked(r)) {
+ continue;
+ }
+ return r;
+ }
+ }
+ return null;
+ }
+
void setFrontOfTask() {
setFrontOfTask(null);
}
@@ -760,6 +775,18 @@
// Otherwise make all added activities match this one.
r.mActivityType = taskType;
}
+
+ final int size = mActivities.size();
+
+ if (index == size && size > 0) {
+ final ActivityRecord top = mActivities.get(size - 1);
+ if (top.mTaskOverlay) {
+ // Place below the task overlay activity since the overlay activity should always
+ // be on top.
+ index--;
+ }
+ }
+
mActivities.add(index, r);
updateEffectiveIntent();
if (r.isPersistable()) {
diff --git a/services/core/java/com/android/server/am/UserController.java b/services/core/java/com/android/server/am/UserController.java
index c4e39c9..595d086 100644
--- a/services/core/java/com/android/server/am/UserController.java
+++ b/services/core/java/com/android/server/am/UserController.java
@@ -1468,7 +1468,7 @@
}
final KeyguardManager km = (KeyguardManager) mService.mContext
.getSystemService(KEYGUARD_SERVICE);
- return km.isDeviceLocked(userId);
+ return km.isDeviceLocked(userId) && km.isDeviceSecure(userId);
}
boolean isLockScreenDisabled(@UserIdInt int userId) {
diff --git a/services/core/java/com/android/server/connectivity/Vpn.java b/services/core/java/com/android/server/connectivity/Vpn.java
index 6c1e1a7..8c4e113 100644
--- a/services/core/java/com/android/server/connectivity/Vpn.java
+++ b/services/core/java/com/android/server/connectivity/Vpn.java
@@ -22,6 +22,9 @@
import static android.net.RouteInfo.RTN_UNREACHABLE;
import android.Manifest;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.annotation.UserIdInt;
import android.app.AppGlobals;
import android.app.AppOpsManager;
import android.app.PendingIntent;
@@ -67,9 +70,11 @@
import android.security.Credentials;
import android.security.KeyStore;
import android.text.TextUtils;
+import android.util.ArraySet;
import android.util.Log;
import com.android.internal.annotations.GuardedBy;
+import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.net.LegacyVpnInfo;
import com.android.internal.net.VpnConfig;
import com.android.internal.net.VpnInfo;
@@ -88,7 +93,10 @@
import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
import java.util.List;
+import java.util.Set;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.concurrent.atomic.AtomicInteger;
@@ -119,9 +127,18 @@
private final Looper mLooper;
private final NetworkCapabilities mNetworkCapabilities;
- /* list of users using this VPN. */
+ /**
+ * List of UIDs that are set to use this VPN by default. Normally, every UID in the user is
+ * added to this set but that can be changed by adding allowed or disallowed applications. It
+ * is non-null iff the VPN is connected.
+ *
+ * Unless the VPN has set allowBypass=true, these UIDs are forced into the VPN.
+ *
+ * @see VpnService.Builder#addAllowedApplication(String)
+ * @see VpnService.Builder#addDisallowedApplication(String)
+ */
@GuardedBy("this")
- private List<UidRange> mVpnUsers = null;
+ private Set<UidRange> mVpnUsers = null;
// Handle of user initiating VPN.
private final int mUserHandle;
@@ -467,22 +484,8 @@
Binder.restoreCallingIdentity(token);
}
- addVpnUserLocked(mUserHandle);
- // If the user can have restricted profiles, assign all its restricted profiles to this VPN
- if (canHaveRestrictedProfile(mUserHandle)) {
- token = Binder.clearCallingIdentity();
- List<UserInfo> users;
- try {
- users = UserManager.get(mContext).getUsers();
- } finally {
- Binder.restoreCallingIdentity(token);
- }
- for (UserInfo user : users) {
- if (user.isRestricted() && (user.restrictedProfileParentId == mUserHandle)) {
- addVpnUserLocked(user.id);
- }
- }
- }
+ mVpnUsers = createUserAndRestrictedProfilesRanges(mUserHandle,
+ mConfig.allowedApplications, mConfig.disallowedApplications);
mNetworkAgent.addUidRanges(mVpnUsers.toArray(new UidRange[mVpnUsers.size()]));
mNetworkInfo.setIsAvailable(true);
@@ -568,7 +571,7 @@
Connection oldConnection = mConnection;
NetworkAgent oldNetworkAgent = mNetworkAgent;
mNetworkAgent = null;
- List<UidRange> oldUsers = mVpnUsers;
+ Set<UidRange> oldUsers = mVpnUsers;
// Configure the interface. Abort if any of these steps fails.
ParcelFileDescriptor tun = ParcelFileDescriptor.adoptFd(jniCreate(config.mtu));
@@ -601,8 +604,6 @@
mConfig = config;
// Set up forwarding and DNS rules.
- mVpnUsers = new ArrayList<UidRange>();
-
agentConnect();
if (oldConnection != null) {
@@ -657,44 +658,93 @@
return uids;
}
- // Note: This function adds to mVpnUsers but does not publish list to NetworkAgent.
- private void addVpnUserLocked(int userHandle) {
- if (mVpnUsers == null) {
- throw new IllegalStateException("VPN is not active");
- }
+ /**
+ * Creates a {@link Set} of non-intersecting {@link UidRange} objects including all UIDs
+ * associated with one user, and any restricted profiles attached to that user.
+ *
+ * <p>If one of {@param allowedApplications} or {@param disallowedApplications} is provided,
+ * the UID ranges will match the app whitelist or blacklist specified there. Otherwise, all UIDs
+ * in each user and profile will be included.
+ *
+ * @param userHandle The userId to create UID ranges for along with any of its restricted
+ * profiles.
+ * @param allowedApplications (optional) whitelist of applications to include.
+ * @param disallowedApplications (optional) blacklist of applications to exclude.
+ */
+ @VisibleForTesting
+ Set<UidRange> createUserAndRestrictedProfilesRanges(@UserIdInt int userHandle,
+ @Nullable List<String> allowedApplications,
+ @Nullable List<String> disallowedApplications) {
+ final Set<UidRange> ranges = new ArraySet<>();
- if (mConfig.allowedApplications != null) {
+ // Assign the top-level user to the set of ranges
+ addUserToRanges(ranges, userHandle, allowedApplications, disallowedApplications);
+
+ // If the user can have restricted profiles, assign all its restricted profiles too
+ if (canHaveRestrictedProfile(userHandle)) {
+ final long token = Binder.clearCallingIdentity();
+ List<UserInfo> users;
+ try {
+ users = UserManager.get(mContext).getUsers();
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ for (UserInfo user : users) {
+ if (user.isRestricted() && (user.restrictedProfileParentId == userHandle)) {
+ addUserToRanges(ranges, user.id, allowedApplications, disallowedApplications);
+ }
+ }
+ }
+ return ranges;
+ }
+
+ /**
+ * Updates a {@link Set} of non-intersecting {@link UidRange} objects to include all UIDs
+ * associated with one user.
+ *
+ * <p>If one of {@param allowedApplications} or {@param disallowedApplications} is provided,
+ * the UID ranges will match the app whitelist or blacklist specified there. Otherwise, all UIDs
+ * in the user will be included.
+ *
+ * @param ranges {@link Set} of {@link UidRange}s to which to add.
+ * @param userHandle The userId to add to {@param ranges}.
+ * @param allowedApplications (optional) whitelist of applications to include.
+ * @param disallowedApplications (optional) blacklist of applications to exclude.
+ */
+ @VisibleForTesting
+ void addUserToRanges(@NonNull Set<UidRange> ranges, @UserIdInt int userHandle,
+ @Nullable List<String> allowedApplications,
+ @Nullable List<String> disallowedApplications) {
+ if (allowedApplications != null) {
// Add ranges covering all UIDs for allowedApplications.
int start = -1, stop = -1;
- for (int uid : getAppsUids(mConfig.allowedApplications, userHandle)) {
+ for (int uid : getAppsUids(allowedApplications, userHandle)) {
if (start == -1) {
start = uid;
} else if (uid != stop + 1) {
- mVpnUsers.add(new UidRange(start, stop));
+ ranges.add(new UidRange(start, stop));
start = uid;
}
stop = uid;
}
- if (start != -1) mVpnUsers.add(new UidRange(start, stop));
- } else if (mConfig.disallowedApplications != null) {
+ if (start != -1) ranges.add(new UidRange(start, stop));
+ } else if (disallowedApplications != null) {
// Add all ranges for user skipping UIDs for disallowedApplications.
final UidRange userRange = UidRange.createForUser(userHandle);
int start = userRange.start;
- for (int uid : getAppsUids(mConfig.disallowedApplications, userHandle)) {
+ for (int uid : getAppsUids(disallowedApplications, userHandle)) {
if (uid == start) {
start++;
} else {
- mVpnUsers.add(new UidRange(start, uid - 1));
+ ranges.add(new UidRange(start, uid - 1));
start = uid + 1;
}
}
- if (start <= userRange.stop) mVpnUsers.add(new UidRange(start, userRange.stop));
+ if (start <= userRange.stop) ranges.add(new UidRange(start, userRange.stop));
} else {
// Add all UIDs for the user.
- mVpnUsers.add(UidRange.createForUser(userHandle));
+ ranges.add(UidRange.createForUser(userHandle));
}
-
- prepareStatusIntent();
}
// Returns the subset of the full list of active UID ranges the VPN applies to (mVpnUsers) that
@@ -703,7 +753,7 @@
final UidRange userRange = UidRange.createForUser(userHandle);
final List<UidRange> ranges = new ArrayList<UidRange>();
for (UidRange range : mVpnUsers) {
- if (range.start >= userRange.start && range.stop <= userRange.stop) {
+ if (userRange.containsRange(range)) {
ranges.add(range);
}
}
@@ -719,7 +769,6 @@
mNetworkAgent.removeUidRanges(ranges.toArray(new UidRange[ranges.size()]));
}
mVpnUsers.removeAll(ranges);
- mStatusIntent = null;
}
public void onUserAdded(int userHandle) {
@@ -729,7 +778,8 @@
&& mVpnUsers != null) {
synchronized(Vpn.this) {
try {
- addVpnUserLocked(userHandle);
+ addUserToRanges(mVpnUsers, userHandle, mConfig.allowedApplications,
+ mConfig.disallowedApplications);
if (mNetworkAgent != null) {
final List<UidRange> ranges = uidRangesForUser(userHandle);
mNetworkAgent.addUidRanges(ranges.toArray(new UidRange[ranges.size()]));
@@ -902,7 +952,7 @@
return false;
}
for (UidRange uidRange : mVpnUsers) {
- if (uidRange.start <= uid && uid <= uidRange.stop) {
+ if (uidRange.contains(uid)) {
return true;
}
}
@@ -1408,7 +1458,7 @@
// Now INetworkManagementEventObserver is watching our back.
mInterface = mConfig.interfaze;
- mVpnUsers = new ArrayList<UidRange>();
+ prepareStatusIntent();
agentConnect();
diff --git a/services/core/java/com/android/server/input/InputManagerService.java b/services/core/java/com/android/server/input/InputManagerService.java
index c649012..b5d5486 100644
--- a/services/core/java/com/android/server/input/InputManagerService.java
+++ b/services/core/java/com/android/server/input/InputManagerService.java
@@ -18,7 +18,7 @@
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.util.LocaleList;
+import android.os.LocaleList;
import android.view.Display;
import com.android.internal.inputmethod.InputMethodSubtypeHandle;
import com.android.internal.os.SomeArgs;
diff --git a/services/core/java/com/android/server/job/controllers/ConnectivityController.java b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
index 9fd22686..7d28633 100644
--- a/services/core/java/com/android/server/job/controllers/ConnectivityController.java
+++ b/services/core/java/com/android/server/job/controllers/ConnectivityController.java
@@ -178,6 +178,11 @@
public void onRestrictBackgroundWhitelistChanged(int uid, boolean whitelisted) {
updateTrackedJobs(uid);
}
+
+ @Override
+ public void onRestrictBackgroundBlacklistChanged(int uid, boolean blacklisted) {
+ updateTrackedJobs(uid);
+ }
};
@Override
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 4bdc237..67cd7c3 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -266,6 +266,7 @@
private static final int MSG_RESTRICT_BACKGROUND_WHITELIST_CHANGED = 9;
private static final int MSG_UPDATE_INTERFACE_QUOTA = 10;
private static final int MSG_REMOVE_INTERFACE_QUOTA = 11;
+ private static final int MSG_RESTRICT_BACKGROUND_BLACKLIST_CHANGED = 12;
private final Context mContext;
private final IActivityManager mActivityManager;
@@ -1707,9 +1708,14 @@
private void setUidPolicyUncheckedLocked(int uid, int oldPolicy, int policy, boolean persist) {
setUidPolicyUncheckedLocked(uid, policy, persist);
+ final boolean isBlacklisted = policy == POLICY_REJECT_METERED_BACKGROUND;
+ mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_BLACKLIST_CHANGED, uid,
+ isBlacklisted ? 1 : 0).sendToTarget();
+
+ final boolean wasBlacklisted = oldPolicy == POLICY_REJECT_METERED_BACKGROUND;
// Checks if app was added or removed to the blacklist.
- if ((oldPolicy == POLICY_NONE && policy == POLICY_REJECT_METERED_BACKGROUND)
- || (oldPolicy == POLICY_REJECT_METERED_BACKGROUND && policy == POLICY_NONE)) {
+ if ((oldPolicy == POLICY_NONE && isBlacklisted)
+ || (wasBlacklisted && policy == POLICY_NONE)) {
mHandler.obtainMessage(MSG_RESTRICT_BACKGROUND_WHITELIST_CHANGED, uid, 1, null)
.sendToTarget();
}
@@ -3096,6 +3102,16 @@
}
}
+ private void dispatchRestrictBackgroundBlacklistChanged(INetworkPolicyListener listener,
+ int uid, boolean blacklisted) {
+ if (listener != null) {
+ try {
+ listener.onRestrictBackgroundBlacklistChanged(uid, blacklisted);
+ } catch (RemoteException ignored) {
+ }
+ }
+ }
+
private Handler.Callback mHandlerCallback = new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
@@ -3186,7 +3202,6 @@
}
mListeners.finishBroadcast();
}
-
final PackageManager pm = mContext.getPackageManager();
final String[] packages = pm.getPackagesForUid(uid);
if (changed && packages != null) {
@@ -3202,6 +3217,21 @@
}
return true;
}
+ case MSG_RESTRICT_BACKGROUND_BLACKLIST_CHANGED: {
+ final int uid = msg.arg1;
+ final boolean blacklisted = msg.arg2 == 1;
+
+ dispatchRestrictBackgroundBlacklistChanged(mConnectivityListener, uid,
+ blacklisted);
+ final int length = mListeners.beginBroadcast();
+ for (int i = 0; i < length; i++) {
+ final INetworkPolicyListener listener = mListeners.getBroadcastItem(i);
+ dispatchRestrictBackgroundBlacklistChanged(listener, uid,
+ blacklisted);
+ }
+ mListeners.finishBroadcast();
+ return true;
+ }
case MSG_ADVISE_PERSIST_THRESHOLD: {
final long lowestRule = (Long) msg.obj;
try {
diff --git a/services/core/java/com/android/server/notification/ZenModeHelper.java b/services/core/java/com/android/server/notification/ZenModeHelper.java
index 60e00a9..6864ed8 100644
--- a/services/core/java/com/android/server/notification/ZenModeHelper.java
+++ b/services/core/java/com/android/server/notification/ZenModeHelper.java
@@ -55,6 +55,7 @@
import android.service.notification.ZenModeConfig.ScheduleInfo;
import android.service.notification.ZenModeConfig.ZenRule;
import android.text.TextUtils;
+import android.util.AndroidRuntimeException;
import android.util.Log;
import android.util.SparseArray;
@@ -293,7 +294,9 @@
ZenModeConfig newConfig;
synchronized (mConfig) {
- if (mConfig == null) return null;
+ if (mConfig == null) {
+ throw new AndroidRuntimeException("Could not create rule");
+ }
if (DEBUG) {
Log.d(TAG, "addAutomaticZenRule rule= " + automaticZenRule + " reason=" + reason);
}
@@ -304,7 +307,7 @@
if (setConfigLocked(newConfig, reason, true)) {
return rule.id;
} else {
- return null;
+ throw new AndroidRuntimeException("Could not create rule");
}
}
}
diff --git a/services/core/java/com/android/server/pm/PackageDexOptimizer.java b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
index 89747b5..26a840d 100644
--- a/services/core/java/com/android/server/pm/PackageDexOptimizer.java
+++ b/services/core/java/com/android/server/pm/PackageDexOptimizer.java
@@ -328,10 +328,11 @@
for (String apkPath : pkg.getAllCodePathsExcludingResourceOnly()) {
try {
- apkPath = new File(apkPath).getCanonicalPath();
+ apkPath = PackageManagerServiceUtils.realpath(new File(apkPath));
} catch (IOException e) {
// Log an error but continue without it.
Slog.w(TAG, "Failed to get canonical path", e);
+ continue;
}
String useMarker = apkPath.replace('/', '@');
final int[] currentUserIds = UserManagerService.getInstance().getUserIds();
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index b6c269e..488645d 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -164,7 +164,6 @@
import android.content.res.Resources;
import android.graphics.Bitmap;
import android.hardware.display.DisplayManager;
-import android.net.INetworkPolicyManager;
import android.net.Uri;
import android.os.Binder;
import android.os.Build;
@@ -1043,6 +1042,7 @@
static final int CHECK_PENDING_VERIFICATION = 16;
static final int START_INTENT_FILTER_VERIFICATIONS = 17;
static final int INTENT_FILTER_VERIFIED = 18;
+ static final int WRITE_PACKAGE_LIST = 19;
static final int WRITE_SETTINGS_DELAY = 10*1000; // 10 seconds
@@ -1665,6 +1665,14 @@
}
Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
} break;
+ case WRITE_PACKAGE_LIST: {
+ Process.setThreadPriority(Process.THREAD_PRIORITY_DEFAULT);
+ synchronized (mPackages) {
+ removeMessages(WRITE_PACKAGE_LIST);
+ mSettings.writePackageListLPr(msg.arg1);
+ }
+ Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+ } break;
case CHECK_PENDING_VERIFICATION: {
final int verificationId = msg.arg1;
final PackageVerificationState state = mPendingVerification.get(verificationId);
@@ -2112,6 +2120,14 @@
}
}
+ void scheduleWritePackageListLocked(int userId) {
+ if (!mHandler.hasMessages(WRITE_PACKAGE_LIST)) {
+ Message msg = mHandler.obtainMessage(WRITE_PACKAGE_LIST);
+ msg.arg1 = userId;
+ mHandler.sendMessageDelayed(msg, WRITE_SETTINGS_DELAY);
+ }
+ }
+
void scheduleWritePackageRestrictionsLocked(UserHandle user) {
final int userId = user == null ? UserHandle.USER_ALL : user.getIdentifier();
scheduleWritePackageRestrictionsLocked(userId);
@@ -2708,6 +2724,7 @@
StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE
| Installer.FLAG_CLEAR_CODE_CACHE_ONLY);
}
+ clearAppProfilesLIF(ps.pkg, UserHandle.USER_ALL);
}
ver.fingerprint = Build.FINGERPRINT;
}
@@ -7565,15 +7582,62 @@
}
}
- private void destroyAppProfilesLIF(PackageParser.Package pkg) {
+ private void destroyAppProfilesLIF(PackageParser.Package pkg, int userId) {
if (pkg == null) {
Slog.wtf(TAG, "Package was null!", new Throwable());
return;
}
destroyAppProfilesLeafLIF(pkg);
+ destroyAppReferenceProfileLeafLIF(pkg, userId);
final int childCount = (pkg.childPackages != null) ? pkg.childPackages.size() : 0;
for (int i = 0; i < childCount; i++) {
destroyAppProfilesLeafLIF(pkg.childPackages.get(i));
+ destroyAppReferenceProfileLeafLIF(pkg.childPackages.get(i), userId);
+ }
+ }
+
+ private void destroyAppReferenceProfileLeafLIF(PackageParser.Package pkg, int userId) {
+ if (pkg.isForwardLocked()) {
+ return;
+ }
+
+ for (String path : pkg.getAllCodePathsExcludingResourceOnly()) {
+ try {
+ path = PackageManagerServiceUtils.realpath(new File(path));
+ } catch (IOException e) {
+ // TODO: Should we return early here ?
+ Slog.w(TAG, "Failed to get canonical path", e);
+ continue;
+ }
+
+ final String useMarker = path.replace('/', '@');
+ for (int realUserId : resolveUserIds(userId)) {
+ File profileDir = Environment.getDataProfilesDeForeignDexDirectory(realUserId);
+ File foreignUseMark = new File(profileDir, useMarker);
+ if (foreignUseMark.exists()) {
+ if (!foreignUseMark.delete()) {
+ Slog.w(TAG, "Unable to delete foreign user mark for package: "
+ + pkg.packageName);
+ }
+ }
+
+ File[] markers = profileDir.listFiles();
+ if (markers != null) {
+ final String searchString = "@" + pkg.packageName + "@";
+ // We also delete all markers that contain the package name we're
+ // uninstalling. These are associated with secondary dex-files belonging
+ // to the package. Reconstructing the path of these dex files is messy
+ // in general.
+ for (File marker : markers) {
+ if (marker.getName().indexOf(searchString) > 0) {
+ if (!marker.delete()) {
+ Slog.w(TAG, "Unable to delete foreign user mark for package: "
+ + pkg.packageName);
+ }
+ }
+ }
+ }
+ }
}
}
@@ -7585,12 +7649,13 @@
}
}
- private void clearAppProfilesLIF(PackageParser.Package pkg) {
+ private void clearAppProfilesLIF(PackageParser.Package pkg, int userId) {
if (pkg == null) {
Slog.wtf(TAG, "Package was null!", new Throwable());
return;
}
clearAppProfilesLeafLIF(pkg);
+ destroyAppReferenceProfileLeafLIF(pkg, userId);
final int childCount = (pkg.childPackages != null) ? pkg.childPackages.size() : 0;
for (int i = 0; i < childCount; i++) {
clearAppProfilesLeafLIF(pkg.childPackages.get(i));
@@ -7794,7 +7859,7 @@
// DELETE_DATA_ON_FAILURES is only used by frozen paths
destroyAppDataLIF(pkg, UserHandle.USER_ALL,
StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
- destroyAppProfilesLIF(pkg);
+ destroyAppProfilesLIF(pkg, UserHandle.USER_ALL);
}
}
}
@@ -14142,7 +14207,7 @@
clearAppDataLIF(pkg, UserHandle.USER_ALL, StorageManager.FLAG_STORAGE_DE
| StorageManager.FLAG_STORAGE_CE | Installer.FLAG_CLEAR_CODE_CACHE_ONLY);
- clearAppProfilesLIF(pkg);
+ clearAppProfilesLIF(deletedPackage, UserHandle.USER_ALL);
try {
final PackageParser.Package newPackage = scanPackageTracedLI(pkg, policyFlags,
@@ -14268,7 +14333,7 @@
// Successfully disabled the old package. Now proceed with re-installation
clearAppDataLIF(pkg, UserHandle.USER_ALL, StorageManager.FLAG_STORAGE_DE
| StorageManager.FLAG_STORAGE_CE | Installer.FLAG_CLEAR_CODE_CACHE_ONLY);
- clearAppProfilesLIF(pkg);
+ clearAppProfilesLIF(deletedPackage, UserHandle.USER_ALL);
res.setReturnCode(PackageManager.INSTALL_SUCCEEDED);
pkg.setApplicationInfoFlags(ApplicationInfo.FLAG_UPDATED_SYSTEM_APP,
@@ -15512,7 +15577,7 @@
}
destroyAppDataLIF(resolvedPkg, UserHandle.USER_ALL,
StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
- destroyAppProfilesLIF(resolvedPkg);
+ destroyAppProfilesLIF(resolvedPkg, UserHandle.USER_ALL);
if (outInfo != null) {
outInfo.dataRemoved = true;
}
@@ -16047,6 +16112,7 @@
destroyAppDataLIF(pkg, userId,
StorageManager.FLAG_STORAGE_DE | StorageManager.FLAG_STORAGE_CE);
+ destroyAppProfilesLIF(pkg, userId);
removeKeystoreDataIfNeeded(nextUserId, ps.appId);
schedulePackageCleaning(ps.name, nextUserId, false);
synchronized (mPackages) {
@@ -16152,7 +16218,7 @@
try (PackageFreezer freezer = freezePackage(packageName, "clearApplicationProfileData")) {
synchronized (mInstallLock) {
- clearAppProfilesLIF(pkg);
+ clearAppProfilesLIF(pkg, UserHandle.USER_ALL);
}
}
}
@@ -17484,6 +17550,14 @@
throw new IllegalArgumentException(
"Unknown component: " + packageName + "/" + className);
}
+ // Don't allow other apps to disable an active profile owner
+ if (!UserHandle.isSameApp(uid, pkgSetting.appId)) {
+ final DevicePolicyManagerInternal dpmi = LocalServices
+ .getService(DevicePolicyManagerInternal.class);
+ if (dpmi != null && dpmi.hasDeviceOwnerOrProfileOwner(packageName, userId)) {
+ throw new SecurityException("Cannot disable a device owner or a profile owner");
+ }
+ }
// Allow root and verify that userId is not being specified by a different user
if (!allowedByPermission && !UserHandle.isSameApp(uid, pkgSetting.appId)) {
throw new SecurityException(
@@ -17491,6 +17565,25 @@
+ Binder.getCallingPid()
+ ", uid=" + uid + ", package uid=" + pkgSetting.appId);
}
+ if (uid == Process.SHELL_UID) {
+ // Shell can only change whole packages between ENABLED and DISABLED_USER states
+ int oldState = pkgSetting.getEnabled(userId);
+ if (className == null
+ &&
+ (oldState == COMPONENT_ENABLED_STATE_DISABLED_USER
+ || oldState == COMPONENT_ENABLED_STATE_DEFAULT
+ || oldState == COMPONENT_ENABLED_STATE_ENABLED)
+ &&
+ (newState == COMPONENT_ENABLED_STATE_DISABLED_USER
+ || newState == COMPONENT_ENABLED_STATE_DEFAULT
+ || newState == COMPONENT_ENABLED_STATE_ENABLED)) {
+ // ok
+ } else {
+ throw new SecurityException(
+ "Shell cannot change component state for " + packageName + "/"
+ + className + " to " + newState);
+ }
+ }
if (className == null) {
// We're dealing with an application/package level state change
if (pkgSetting.getEnabled(userId) == newState) {
@@ -20039,18 +20132,25 @@
}
/** Called by UserManagerService */
- void createNewUser(int userHandle) {
+ void createNewUser(int userId) {
synchronized (mInstallLock) {
- mSettings.createNewUserLI(this, mInstaller, userHandle);
+ mSettings.createNewUserLI(this, mInstaller, userId);
}
synchronized (mPackages) {
- applyFactoryDefaultBrowserLPw(userHandle);
- primeDomainVerificationsLPw(userHandle);
+ scheduleWritePackageRestrictionsLocked(userId);
+ scheduleWritePackageListLocked(userId);
+ applyFactoryDefaultBrowserLPw(userId);
+ primeDomainVerificationsLPw(userId);
}
}
- void newUserCreated(final int userHandle) {
- mDefaultPermissionPolicy.grantDefaultPermissions(userHandle);
+ void onBeforeUserStartUninitialized(final int userId) {
+ synchronized (mPackages) {
+ if (mSettings.areDefaultRuntimePermissionsGrantedLPr(userId)) {
+ return;
+ }
+ }
+ mDefaultPermissionPolicy.grantDefaultPermissions(userId);
// If permission review for legacy apps is required, we represent
// dagerous permissions for such apps as always granted runtime
// permissions to keep per user flag state whether review is needed.
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 67cbcd8..b305ba7 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -25,9 +25,13 @@
import android.content.pm.ResolveInfo;
import android.os.RemoteException;
import android.os.UserHandle;
+import android.system.ErrnoException;
import android.util.ArraySet;
import android.util.Log;
+import libcore.io.Libcore;
+import java.io.File;
+import java.io.IOException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
@@ -163,4 +167,16 @@
return result;
}
-}
\ No newline at end of file
+
+ /**
+ * Returns the canonicalized path of {@code path} as per {@code realpath(3)}
+ * semantics.
+ */
+ public static String realpath(File path) throws IOException {
+ try {
+ return Libcore.os.realpath(path.getAbsolutePath());
+ } catch (ErrnoException ee) {
+ throw ee.rethrowAsIOException();
+ }
+ }
+}
diff --git a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
index 4de8b57..1eeff14 100644
--- a/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
+++ b/services/core/java/com/android/server/pm/PackageManagerShellCommand.java
@@ -1463,14 +1463,13 @@
private IIntentSender.Stub mLocalSender = new IIntentSender.Stub() {
@Override
- public int send(int code, Intent intent, String resolvedType,
+ public void send(int code, Intent intent, String resolvedType,
IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) {
try {
mResult.offer(intent, 5, TimeUnit.SECONDS);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
- return 0;
}
};
diff --git a/services/core/java/com/android/server/pm/Settings.java b/services/core/java/com/android/server/pm/Settings.java
index 7fc0e8c..75bd35c 100644
--- a/services/core/java/com/android/server/pm/Settings.java
+++ b/services/core/java/com/android/server/pm/Settings.java
@@ -4014,8 +4014,6 @@
}
synchronized (mPackages) {
applyDefaultPreferredAppsLPw(service, userHandle);
- writePackageRestrictionsLPr(userHandle);
- writePackageListLPr(userHandle);
}
}
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index e72d233..33ccf16 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -1,4 +1,3 @@
-
/*
* Copyright (C) 2011 The Android Open Source Project
*
@@ -23,6 +22,7 @@
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.annotation.SystemApi;
import android.annotation.UserIdInt;
import android.app.Activity;
import android.app.ActivityManager;
@@ -31,7 +31,9 @@
import android.app.IActivityManager;
import android.app.IStopUserCallback;
import android.app.KeyguardManager;
+import android.app.admin.DevicePolicyManager;
import android.content.BroadcastReceiver;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
@@ -143,6 +145,7 @@
private static final String TAG_USER = "user";
private static final String TAG_RESTRICTIONS = "restrictions";
private static final String TAG_DEVICE_POLICY_RESTRICTIONS = "device_policy_restrictions";
+ private static final String TAG_GLOBAL_RESTRICTION_OWNER_ID = "globalRestrictionOwnerUserId";
private static final String TAG_ENTRY = "entry";
private static final String TAG_VALUE = "value";
private static final String TAG_SEED_ACCOUNT_OPTIONS = "seedAccountOptions";
@@ -276,6 +279,12 @@
private Bundle mDevicePolicyGlobalUserRestrictions;
/**
+ * Id of the user that set global restrictions.
+ */
+ @GuardedBy("mRestrictionsLock")
+ private int mGlobalRestrictionOwnerUserId = UserHandle.USER_NULL;
+
+ /**
* User restrictions set by {@link com.android.server.devicepolicy.DevicePolicyManagerService}
* for each user.
*/
@@ -996,6 +1005,13 @@
if (globalChanged) {
mDevicePolicyGlobalUserRestrictions = global;
}
+ // Remember the global restriction owner userId to be able to make a distinction
+ // in getUserRestrictionSource on who set local policies.
+ mGlobalRestrictionOwnerUserId = userId;
+ } else {
+ // When profile owner sets restrictions it passes null global bundle and we reset
+ // global restriction owner userId.
+ mGlobalRestrictionOwnerUserId = UserHandle.USER_NULL;
}
{
// Update local.
@@ -1079,6 +1095,54 @@
}
/**
+ * @hide
+ *
+ * Returns who set a user restriction on a user.
+ * Requires {@link android.Manifest.permission#MANAGE_USERS} permission.
+ * @param restrictionKey the string key representing the restriction
+ * @param userId the id of the user for whom to retrieve the restrictions.
+ * @return The source of user restriction. Any combination of
+ * {@link UserManager#RESTRICTION_NOT_SET},
+ * {@link UserManager#RESTRICTION_SOURCE_SYSTEM},
+ * {@link UserManager#RESTRICTION_SOURCE_DEVICE_OWNER}
+ * and {@link UserManager#RESTRICTION_SOURCE_PROFILE_OWNER}
+ */
+ @Override
+ public int getUserRestrictionSource(String restrictionKey, int userId) {
+ checkManageUsersPermission("getUserRestrictionSource");
+ int result = UserManager.RESTRICTION_NOT_SET;
+
+ // Shortcut for the most common case
+ if (!hasUserRestriction(restrictionKey, userId)) {
+ return result;
+ }
+
+ if (hasBaseUserRestriction(restrictionKey, userId)) {
+ result |= UserManager.RESTRICTION_SOURCE_SYSTEM;
+ }
+
+ synchronized(mRestrictionsLock) {
+ Bundle localRestrictions = mDevicePolicyLocalUserRestrictions.get(userId);
+ if (!UserRestrictionsUtils.isEmpty(localRestrictions)
+ && localRestrictions.getBoolean(restrictionKey)) {
+ // Local restrictions may have been set by device owner the userId of which is
+ // stored in mGlobalRestrictionOwnerUserId.
+ if (mGlobalRestrictionOwnerUserId == userId) {
+ result |= UserManager.RESTRICTION_SOURCE_DEVICE_OWNER;
+ } else {
+ result |= UserManager.RESTRICTION_SOURCE_PROFILE_OWNER;
+ }
+ }
+ if (!UserRestrictionsUtils.isEmpty(mDevicePolicyGlobalUserRestrictions)
+ && mDevicePolicyGlobalUserRestrictions.getBoolean(restrictionKey)) {
+ result |= UserManager.RESTRICTION_SOURCE_DEVICE_OWNER;
+ }
+ }
+
+ return result;
+ }
+
+ /**
* @return UserRestrictions that are in effect currently. This always returns a new
* {@link Bundle}.
*/
@@ -1475,6 +1539,11 @@
break;
}
}
+ } else if (name.equals(TAG_GLOBAL_RESTRICTION_OWNER_ID)) {
+ String ownerUserId = parser.getAttributeValue(null, ATTR_ID);
+ if (ownerUserId != null) {
+ mGlobalRestrictionOwnerUserId = Integer.parseInt(ownerUserId);
+ }
}
}
}
@@ -1734,6 +1803,9 @@
UserRestrictionsUtils.writeRestrictions(serializer,
mDevicePolicyGlobalUserRestrictions, TAG_DEVICE_POLICY_RESTRICTIONS);
}
+ serializer.startTag(null, TAG_GLOBAL_RESTRICTION_OWNER_ID);
+ serializer.attribute(null, ATTR_ID, Integer.toString(mGlobalRestrictionOwnerUserId));
+ serializer.endTag(null, TAG_GLOBAL_RESTRICTION_OWNER_ID);
int[] userIdsToWrite;
synchronized (mUsersLock) {
userIdsToWrite = new int[mUsers.size()];
@@ -2074,7 +2146,6 @@
synchronized (mRestrictionsLock) {
mBaseUserRestrictions.append(userId, restrictions);
}
- mPm.newUserCreated(userId);
Intent addedIntent = new Intent(Intent.ACTION_USER_ADDED);
addedIntent.putExtra(Intent.EXTRA_USER_HANDLE, userId);
mContext.sendBroadcastAsUser(addedIntent, UserHandle.ALL,
@@ -2634,6 +2705,10 @@
synchronized (mRestrictionsLock) {
applyUserRestrictionsLR(userId);
}
+ UserInfo userInfo = getUserInfoNoChecks(userId);
+ if (userInfo != null && !userInfo.isInitialized()) {
+ mPm.onBeforeUserStartUninitialized(userId);
+ }
}
}
@@ -2970,6 +3045,8 @@
.dumpRestrictions(pw, " ", mDevicePolicyGlobalUserRestrictions);
}
pw.println();
+ pw.println(" Global restrictions owner id:" + mGlobalRestrictionOwnerUserId);
+ pw.println();
pw.println(" Guest restrictions:");
synchronized (mGuestRestrictions) {
UserRestrictionsUtils.dumpRestrictions(pw, " ", mGuestRestrictions);
diff --git a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
index 29b9b92..a77d512 100644
--- a/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
+++ b/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
@@ -380,6 +380,10 @@
@Override
public void onVrStateChanged(boolean enabled) throws RemoteException {
mVrModeEnabled = enabled;
+ if (mVrModeEnabled) {
+ mHandler.removeMessages(H.SHOW);
+ mHandler.sendEmptyMessage(H.HIDE);
+ }
}
};
}
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index b2cf89b..b30817f 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -553,6 +553,7 @@
static final Rect mTmpStableFrame = new Rect();
static final Rect mTmpNavigationFrame = new Rect();
static final Rect mTmpOutsetFrame = new Rect();
+ private static final Rect mTmpRect = new Rect();
WindowState mTopFullscreenOpaqueWindowState;
WindowState mTopFullscreenOpaqueOrDimmingWindowState;
@@ -3797,8 +3798,9 @@
}
@Override
- public boolean getInsetHintLw(WindowManager.LayoutParams attrs, int displayRotation,
- Rect outContentInsets, Rect outStableInsets, Rect outOutsets) {
+ public boolean getInsetHintLw(WindowManager.LayoutParams attrs, Rect taskBounds,
+ int displayRotation, int displayWidth, int displayHeight, Rect outContentInsets,
+ Rect outStableInsets, Rect outOutsets) {
final int fl = PolicyControl.getWindowFlags(null, attrs);
final int sysuiVis = PolicyControl.getSystemUiVisibility(null, attrs);
final int systemUiVisibility = (sysuiVis | attrs.subtreeSystemUiVisibility);
@@ -3852,6 +3854,12 @@
outStableInsets.set(mStableLeft, mStableTop,
availRight - mStableRight, availBottom - mStableBottom);
+ if (taskBounds != null) {
+ calculateRelevantTaskInsets(taskBounds, outContentInsets,
+ displayWidth, displayHeight);
+ calculateRelevantTaskInsets(taskBounds, outStableInsets,
+ displayWidth, displayHeight);
+ }
return mForceShowSystemBars;
}
outContentInsets.setEmpty();
@@ -3859,6 +3867,22 @@
return mForceShowSystemBars;
}
+ /**
+ * For any given task bounds, the insets relevant for these bounds given the insets relevant
+ * for the entire display.
+ */
+ private void calculateRelevantTaskInsets(Rect taskBounds, Rect inOutInsets, int displayWidth,
+ int displayHeight) {
+ mTmpRect.set(0, 0, displayWidth, displayHeight);
+ mTmpRect.inset(inOutInsets);
+ mTmpRect.intersect(taskBounds);
+ int leftInset = mTmpRect.left - taskBounds.left;
+ int topInset = mTmpRect.top - taskBounds.top;
+ int rightInset = taskBounds.right - mTmpRect.right;
+ int bottomInset = taskBounds.bottom - mTmpRect.bottom;
+ inOutInsets.set(leftInset, topInset, rightInset, bottomInset);
+ }
+
private boolean shouldUseOutsets(WindowManager.LayoutParams attrs, int fl) {
return attrs.type == TYPE_WALLPAPER || (fl & (WindowManager.LayoutParams.FLAG_FULLSCREEN
| WindowManager.LayoutParams.FLAG_LAYOUT_IN_OVERSCAN)) != 0;
diff --git a/services/core/java/com/android/server/tv/TvInputManagerService.java b/services/core/java/com/android/server/tv/TvInputManagerService.java
index 52baa60..b488297 100644
--- a/services/core/java/com/android/server/tv/TvInputManagerService.java
+++ b/services/core/java/com/android/server/tv/TvInputManagerService.java
@@ -331,7 +331,7 @@
try {
TvInputInfo info = new TvInputInfo.Builder(mContext, ri).build();
inputList.add(info);
- } catch (XmlPullParserException | IOException e) {
+ } catch (Exception e) {
Slog.e(TAG, "failed to load TV input " + si.name, e);
continue;
}
@@ -347,8 +347,8 @@
TvInputState inputState = userState.inputMap.get(info.getId());
if (inputState == null) {
inputState = new TvInputState();
- inputState.info = info;
}
+ inputState.info = info;
inputMap.put(info.getId(), inputState);
}
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index d2d9363..7a387ad 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -606,12 +606,7 @@
private void setMinimizedDockedStack(boolean minimized) {
final TaskStack stack = mDisplayContent.getDockedStackVisibleForUserLocked();
notifyDockedStackMinimizedChanged(minimized, 0);
- if (stack == null) {
- return;
- }
- if (stack.setAdjustedForMinimizedDock(minimized ? 1f : 0f)) {
- mService.mWindowPlacerLocked.performSurfacePlacement();
- }
+ setMinimizeAmount(stack, minimized ? 1f : 0f);
}
private boolean isAnimationMaximizing() {
@@ -695,11 +690,8 @@
float t = Math.min(1f, (float) (now - mAnimationStartTime) / mAnimationDuration);
t = (isAnimationMaximizing() ? TOUCH_RESPONSE_INTERPOLATOR : mMinimizedDockInterpolator)
.getInterpolation(t);
- if (stack != null) {
- if (stack.setAdjustedForMinimizedDock(getMinimizeAmount(stack, t))) {
- mService.mWindowPlacerLocked.performSurfacePlacement();
- }
- }
+ setMinimizeAmount(stack, getMinimizeAmount(stack, t));
+
if (t >= 1.0f) {
mAnimatingForMinimizedDockedStack = false;
return false;
@@ -708,6 +700,42 @@
}
}
+ void setMinimizeAmount(TaskStack dockedStack, float minimizeAmount) {
+ final ArrayList<TaskStack> stacks = mDisplayContent.getStacks();
+
+ // If the docked stack is not visible, clear the complementary stack on all stacks.
+ if (dockedStack == null) {
+ for (int i = stacks.size() - 1; i >= 0; --i) {
+ final TaskStack stack = stacks.get(i);
+ stack.resetAdjustedForComplementDock();
+ }
+ return;
+ }
+
+ // Otherwise if the docked stack minimize amount has changed, update the adjusted bounds
+ // on the other stack that's currently visible, so that the stack's getDimBounds()
+ // occupies what's left by the docked stack. This is needed so that stuff like wallpaper
+ // gets cropped properly to the area left by the dock.
+ if (dockedStack.setAdjustedForMinimizedDock(minimizeAmount)) {
+ final boolean adjusted =
+ dockedStack.isVisibleForUserLocked() && minimizeAmount != 0.0f;
+ dockedStack.getDimBounds(mTmpRect2);
+ int dockSide = dockedStack.getDockSide();
+ for (int i = stacks.size() - 1; i >= 0; --i) {
+ final TaskStack stack = stacks.get(i);
+ if (stack == dockedStack) {
+ continue;
+ }
+ if (stack.isVisibleLocked() && adjusted) {
+ stack.setAdjustedForComplementDock(mTmpRect2, dockSide);
+ } else {
+ stack.resetAdjustedForComplementDock();
+ }
+ }
+ mService.mWindowPlacerLocked.performSurfacePlacement();
+ }
+ }
+
private float getInterpolatedAnimationValue(float t) {
return t * mAnimationTarget + (1 - t) * mAnimationStart;
}
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 1852b4c..eb8c1dc 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -122,6 +122,7 @@
private float mAdjustImeAmount;
private float mAdjustDividerAmount;
private final int mDockedStackMinimizeThickness;
+ private boolean mAdjustedForForComplementDock;
// If this is true, we are in the bounds animating mode.
// The task will be down or upscaled to perfectly fit the
@@ -247,7 +248,9 @@
insetBounds = mFullyAdjustedImeBounds;
}
}
- alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, insetBounds);
+ if (!mAdjustedForForComplementDock) {
+ alignTasksToAdjustedBounds(adjusted ? mAdjustedBounds : mBounds, insetBounds);
+ }
mDisplayContent.layoutNeeded = true;
}
@@ -854,6 +857,7 @@
mImeWin = imeWin;
mImeGoingAway = false;
if (!mAdjustedForIme || forceUpdate) {
+ mAdjustedForForComplementDock = false;
mAdjustedForIme = true;
mAdjustImeAmount = 0f;
mAdjustDividerAmount = 0f;
@@ -916,10 +920,12 @@
* @return Whether the amount has changed and a layout is needed.
*/
boolean setAdjustedForMinimizedDock(float minimizeAmount) {
+ mAdjustedForForComplementDock = false;
+
if (minimizeAmount != mMinimizeAmount) {
mMinimizeAmount = minimizeAmount;
updateAdjustedBounds();
- return isVisibleForUserLocked();
+ return true;
} else {
return false;
}
@@ -929,6 +935,33 @@
return mMinimizeAmount != 0f;
}
+ void setAdjustedForComplementDock(Rect dockBounds, int dockSide) {
+ if (mMinimizeAmount != 0f || mAdjustedForIme) {
+ return;
+ }
+ mTmpAdjustedBounds.set(mBounds);
+ if (dockSide == DOCKED_TOP) {
+ mTmpAdjustedBounds.top = dockBounds.bottom;
+ } else if (dockSide == DOCKED_LEFT) {
+ mTmpAdjustedBounds.left = dockBounds.right;
+ } else if (dockSide == DOCKED_RIGHT) {
+ mTmpAdjustedBounds.right = dockBounds.left;
+ } else {
+ Slog.w(TAG_WM, "setAdjustedForComplementDock: invalid dock side " + dockSide);
+ return;
+ }
+ mAdjustedForForComplementDock = true;
+ setAdjustedBounds(mTmpAdjustedBounds);
+ }
+
+ void resetAdjustedForComplementDock() {
+ if (mAdjustedForForComplementDock) {
+ mAdjustedForForComplementDock = false;
+ mTmpAdjustedBounds.setEmpty();
+ setAdjustedBounds(mTmpAdjustedBounds);
+ }
+ }
+
/**
* Puts all visible tasks that are adjusted for IME into resizing mode and adds the windows
* to the list of to be drawn windows the service is waiting for.
@@ -1089,7 +1122,7 @@
}
setAdjustedBounds(mTmpAdjustedBounds);
- final boolean isImeTarget = (mService.getImeTargetStackLocked() == this);
+ final boolean isImeTarget = (mService.getImeFocusStackLocked() == this);
if (mAdjustedForIme && adjust && !isImeTarget) {
final float alpha = Math.max(mAdjustImeAmount, mAdjustDividerAmount)
* IME_ADJUST_DIM_AMOUNT;
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index 1132758..ca8b7e5 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -2117,8 +2117,17 @@
}
if (displayContent.isDefaultDisplay) {
- if (mPolicy.getInsetHintLw(win.mAttrs, mRotation, outContentInsets, outStableInsets,
- outOutsets)) {
+ final DisplayInfo displayInfo = displayContent.getDisplayInfo();
+ final Rect taskBounds;
+ if (atoken != null && atoken.mTask != null) {
+ taskBounds = mTmpRect;
+ atoken.mTask.getBounds(mTmpRect);
+ } else {
+ taskBounds = null;
+ }
+ if (mPolicy.getInsetHintLw(win.mAttrs, taskBounds, mRotation,
+ displayInfo.logicalWidth, displayInfo.logicalHeight, outContentInsets,
+ outStableInsets, outOutsets)) {
res |= WindowManagerGlobal.ADD_FLAG_ALWAYS_CONSUME_NAV_BAR;
}
} else {
@@ -4023,7 +4032,7 @@
}
@Override
- public void setAppStartingWindow(IBinder token, String pkg,
+ public boolean setAppStartingWindow(IBinder token, String pkg,
int theme, CompatibilityInfo compatInfo,
CharSequence nonLocalizedLabel, int labelRes, int icon, int logo,
int windowFlags, IBinder transferFrom, boolean createIfNeeded) {
@@ -4040,18 +4049,18 @@
AppWindowToken wtoken = findAppWindowToken(token);
if (wtoken == null) {
Slog.w(TAG_WM, "Attempted to set icon of non-existing app token: " + token);
- return;
+ return false;
}
// If the display is frozen, we won't do anything until the
// actual window is displayed so there is no reason to put in
// the starting window.
if (!okToDisplay()) {
- return;
+ return false;
}
if (wtoken.startingData != null) {
- return;
+ return false;
}
// If this is a translucent window, then don't
@@ -4066,7 +4075,7 @@
if (ent == null) {
// Whoops! App doesn't exist. Um. Okay. We'll just
// pretend like we didn't see that.
- return;
+ return false;
}
final boolean windowIsTranslucent = ent.array.getBoolean(
com.android.internal.R.styleable.Window_windowIsTranslucent, false);
@@ -4080,33 +4089,33 @@
+ " Floating=" + windowIsFloating
+ " ShowWallpaper=" + windowShowWallpaper);
if (windowIsTranslucent) {
- return;
+ return false;
}
if (windowIsFloating || windowDisableStarting) {
- return;
+ return false;
}
if (windowShowWallpaper) {
if (mWallpaperControllerLocked.getWallpaperTarget() == null) {
// If this theme is requesting a wallpaper, and the wallpaper
- // is not curently visible, then this effectively serves as
+ // is not currently visible, then this effectively serves as
// an opaque window and our starting window transition animation
// can still work. We just need to make sure the starting window
// is also showing the wallpaper.
windowFlags |= FLAG_SHOW_WALLPAPER;
} else {
- return;
+ return false;
}
}
}
if (transferStartingWindow(transferFrom, wtoken)) {
- return;
+ return true;
}
// There is no existing starting window, and the caller doesn't
// want us to create one, so that's it!
if (!createIfNeeded) {
- return;
+ return false;
}
if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Creating StartingData");
@@ -4119,6 +4128,7 @@
if (DEBUG_STARTING_WINDOW) Slog.v(TAG_WM, "Enqueueing ADD_STARTING");
mH.sendMessageAtFrontOfQueue(m);
}
+ return true;
}
private boolean transferStartingWindow(IBinder transferFrom, AppWindowToken wtoken) {
@@ -7571,7 +7581,7 @@
final WindowState imeWin = mInputMethodWindow;
final boolean imeVisible = imeWin != null && imeWin.isVisibleLw() && imeWin.isDisplayedLw();
final boolean dockVisible = isStackVisibleLocked(DOCKED_STACK_ID);
- final TaskStack imeTargetStack = getImeTargetStackLocked();
+ final TaskStack imeTargetStack = getImeFocusStackLocked();
final int imeDockSide = (dockVisible && imeTargetStack != null) ?
imeTargetStack.getDockSide() : DOCKED_INVALID;
final boolean imeOnTop = (imeDockSide == DOCKED_TOP);
@@ -7740,10 +7750,13 @@
return mCurrentFocus;
}
- TaskStack getImeTargetStackLocked() {
- // Don't use WindowState.getStack() because it returns home stack for system windows.
- Task imeTask = mInputMethodTarget != null ? mInputMethodTarget.getTask() : null;
- return imeTask != null ? imeTask.mStack : null;
+ TaskStack getImeFocusStackLocked() {
+ // Don't use mCurrentFocus.getStack() because it returns home stack for system windows.
+ // Also don't use mInputMethodTarget's stack, because some window with FLAG_NOT_FOCUSABLE
+ // and FLAG_ALT_FOCUSABLE_IM flags both set might be set to IME target so they're moved
+ // to make room for IME, but the window is not the focused window that's taking input.
+ return (mFocusedApp != null && mFocusedApp.mTask != null) ?
+ mFocusedApp.mTask.mStack : null;
}
private void showAuditSafeModeNotification() {
@@ -11294,6 +11307,13 @@
}
@Override
+ public void clearLastInputMethodWindowForTransition() {
+ synchronized (mWindowMap) {
+ mPolicy.setLastInputMethodWindowLw(null, null);
+ }
+ }
+
+ @Override
public boolean isHardKeyboardAvailable() {
synchronized (mWindowMap) {
return mHardKeyboardAvailable;
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index acf1689..52273dc 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -1298,6 +1298,9 @@
if (!finalClipRect.equals(mLastFinalClipRect)) {
mLastFinalClipRect.set(finalClipRect);
mSurfaceController.setFinalCropInTransaction(finalClipRect);
+ if (mDestroyPreservedSurfaceUponRedraw && mPendingDestroySurface != null) {
+ mPendingDestroySurface.setFinalCropInTransaction(finalClipRect);
+ }
}
}
@@ -1370,7 +1373,8 @@
// If we are animating, we either apply the clip before applying all the animation
// transformation or after all the transformation.
- final boolean useFinalClipRect = isAnimationSet() && stackClip == STACK_CLIP_AFTER_ANIM;
+ final boolean useFinalClipRect = isAnimationSet() && stackClip == STACK_CLIP_AFTER_ANIM
+ || mDestroyPreservedSurfaceUponRedraw;
// We need to do some acrobatics with surface position, because their clip region is
// relative to the inside of the surface, but the stack bounds aren't.
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index 3cc3edf..a5eb0b2 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -2658,7 +2658,7 @@
int userHandle = params[0];
if (userHandle == UserHandle.USER_ALL) {
- for (UserInfo userInfo : mUserManager.getUsers()) {
+ for (UserInfo userInfo : mUserManager.getUsers(true)) {
manageNotification(userInfo.getUserHandle());
}
} else {
@@ -2668,7 +2668,7 @@
}
private void manageNotification(UserHandle userHandle) {
- if (!mUserManager.isUserRunning(userHandle)) {
+ if (!mUserManager.isUserUnlocked(userHandle)) {
return;
}
@@ -5672,7 +5672,10 @@
// Shutting down backup manager service permanently.
long ident = mInjector.binderClearCallingIdentity();
try {
- mInjector.getIBackupManager().setBackupServiceActive(UserHandle.USER_SYSTEM, false);
+ if (mInjector.getIBackupManager() != null) {
+ mInjector.getIBackupManager()
+ .setBackupServiceActive(UserHandle.USER_SYSTEM, false);
+ }
} catch (RemoteException e) {
throw new IllegalStateException("Failed deactivating backup service.", e);
} finally {
@@ -7312,23 +7315,6 @@
}
@Override
- public Bundle getUserRestrictionsForUser(ComponentName who, int userHandle) {
- if (!mHasFeature) {
- return null;
- }
- Preconditions.checkNotNull(who, "ComponentName is null");
- enforceFullCrossUsersPermission(userHandle);
- enforceCanManageProfileAndDeviceOwners();
- synchronized (this) {
- ActiveAdmin activeAdmin = getActiveAdminUncheckedLocked(who, userHandle);
- if (activeAdmin == null) {
- return null;
- }
- return activeAdmin.userRestrictions;
- }
- }
-
- @Override
public boolean setApplicationHidden(ComponentName who, String packageName,
boolean hidden) {
Preconditions.checkNotNull(who, "ComponentName is null");
diff --git a/services/tests/servicestests/src/com/android/server/connectivity/VpnTest.java b/services/tests/servicestests/src/com/android/server/connectivity/VpnTest.java
new file mode 100644
index 0000000..3295bf5
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/connectivity/VpnTest.java
@@ -0,0 +1,198 @@
+/*
+ * Copyright (C) 2016 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.server.connectivity;
+
+import static android.content.pm.UserInfo.FLAG_ADMIN;
+import static android.content.pm.UserInfo.FLAG_MANAGED_PROFILE;
+import static android.content.pm.UserInfo.FLAG_PRIMARY;
+import static android.content.pm.UserInfo.FLAG_RESTRICTED;
+import static org.mockito.Mockito.*;
+
+import android.annotation.UserIdInt;
+import android.content.Context;
+import android.content.pm.PackageManager;
+import android.content.pm.UserInfo;
+import android.net.UidRange;
+import android.os.INetworkManagementService;
+import android.os.Looper;
+import android.os.UserHandle;
+import android.os.UserManager;
+import android.test.AndroidTestCase;
+import android.test.suitebuilder.annotation.SmallTest;
+import android.util.ArrayMap;
+import android.util.ArraySet;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Map;
+import java.util.Set;
+
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+/**
+ * Tests for {@link Vpn}.
+ *
+ * Build, install and run with:
+ * runtest --path src/com/android/server/connectivity/VpnTest.java
+ */
+public class VpnTest extends AndroidTestCase {
+ private static final String TAG = "VpnTest";
+
+ // Mock users
+ static final UserInfo primaryUser = new UserInfo(27, "Primary", FLAG_ADMIN | FLAG_PRIMARY);
+ static final UserInfo secondaryUser = new UserInfo(15, "Secondary", FLAG_ADMIN);
+ static final UserInfo restrictedProfileA = new UserInfo(40, "RestrictedA", FLAG_RESTRICTED);
+ static final UserInfo restrictedProfileB = new UserInfo(42, "RestrictedB", FLAG_RESTRICTED);
+ static final UserInfo managedProfileA = new UserInfo(45, "ManagedA", FLAG_MANAGED_PROFILE);
+ static {
+ restrictedProfileA.restrictedProfileParentId = primaryUser.id;
+ restrictedProfileB.restrictedProfileParentId = secondaryUser.id;
+ managedProfileA.profileGroupId = primaryUser.id;
+ }
+
+ @Mock private Context mContext;
+ @Mock private UserManager mUserManager;
+ @Mock private PackageManager mPackageManager;
+ @Mock private INetworkManagementService mNetService;
+
+ @Override
+ public void setUp() throws Exception {
+ MockitoAnnotations.initMocks(this);
+ when(mContext.getPackageManager()).thenReturn(mPackageManager);
+ when(mContext.getSystemService(eq(Context.USER_SERVICE))).thenReturn(mUserManager);
+ doNothing().when(mNetService).registerObserver(any());
+ }
+
+ @SmallTest
+ public void testRestrictedProfilesAreAddedToVpn() {
+ setMockedUsers(primaryUser, secondaryUser, restrictedProfileA, restrictedProfileB);
+
+ final Vpn vpn = createVpn(primaryUser.id);
+ final Set<UidRange> ranges = vpn.createUserAndRestrictedProfilesRanges(primaryUser.id,
+ null, null);
+
+ assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+ UidRange.createForUser(primaryUser.id),
+ UidRange.createForUser(restrictedProfileA.id)
+ })), ranges);
+ }
+
+ @SmallTest
+ public void testManagedProfilesAreNotAddedToVpn() {
+ setMockedUsers(primaryUser, managedProfileA);
+
+ final Vpn vpn = createVpn(primaryUser.id);
+ final Set<UidRange> ranges = vpn.createUserAndRestrictedProfilesRanges(primaryUser.id,
+ null, null);
+
+ assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+ UidRange.createForUser(primaryUser.id)
+ })), ranges);
+ }
+
+ @SmallTest
+ public void testAddUserToVpnOnlyAddsOneUser() {
+ setMockedUsers(primaryUser, restrictedProfileA, managedProfileA);
+
+ final Vpn vpn = createVpn(primaryUser.id);
+ final Set<UidRange> ranges = new ArraySet<>();
+ vpn.addUserToRanges(ranges, primaryUser.id, null, null);
+
+ assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+ UidRange.createForUser(primaryUser.id)
+ })), ranges);
+ }
+
+ @SmallTest
+ public void testUidWhiteAndBlacklist() throws Exception {
+ final Map<String, Integer> packages = new ArrayMap<>();
+ packages.put("com.example", 66);
+ packages.put("org.example", 77);
+ packages.put("net.example", 78);
+ setMockedPackages(packages);
+
+ final Vpn vpn = createVpn(primaryUser.id);
+ final UidRange user = UidRange.createForUser(primaryUser.id);
+
+ // Whitelist
+ final Set<UidRange> allow = vpn.createUserAndRestrictedProfilesRanges(primaryUser.id,
+ new ArrayList<String>(packages.keySet()), null);
+ assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+ new UidRange(user.start + 66, user.start + 66),
+ new UidRange(user.start + 77, user.start + 78)
+ })), allow);
+
+ // Blacklist
+ final Set<UidRange> disallow = vpn.createUserAndRestrictedProfilesRanges(primaryUser.id,
+ null, new ArrayList<String>(packages.keySet()));
+ assertEquals(new ArraySet<>(Arrays.asList(new UidRange[] {
+ new UidRange(user.start, user.start + 65),
+ new UidRange(user.start + 67, user.start + 76),
+ new UidRange(user.start + 79, user.stop)
+ })), disallow);
+ }
+
+ /**
+ * @return A subclass of {@link Vpn} which is reliably:
+ * <ul>
+ * <li>Associated with a specific user ID</li>
+ * <li>Not in always-on mode</li>
+ * </ul>
+ */
+ private Vpn createVpn(@UserIdInt int userId) {
+ return new Vpn(Looper.myLooper(), mContext, mNetService, userId);
+ }
+
+ /**
+ * Populate {@link #mUserManager} with a list of fake users.
+ */
+ private void setMockedUsers(UserInfo... users) {
+ final Map<Integer, UserInfo> userMap = new ArrayMap<>();
+ for (UserInfo user : users) {
+ userMap.put(user.id, user);
+ }
+
+ doAnswer(invocation -> {
+ return new ArrayList(userMap.values());
+ }).when(mUserManager).getUsers();
+
+ doAnswer(invocation -> {
+ final int id = (int) invocation.getArguments()[0];
+ return userMap.get(id);
+ }).when(mUserManager).getUserInfo(anyInt());
+
+ doAnswer(invocation -> {
+ final int id = (int) invocation.getArguments()[0];
+ return (userMap.get(id).flags & UserInfo.FLAG_ADMIN) != 0;
+ }).when(mUserManager).canHaveRestrictedProfile(anyInt());
+ }
+
+ /**
+ * Populate {@link #mPackageManager} with a fake packageName-to-UID mapping.
+ */
+ private void setMockedPackages(final Map<String, Integer> packages) {
+ try {
+ doAnswer(invocation -> {
+ final String appName = (String) invocation.getArguments()[0];
+ final int userId = (int) invocation.getArguments()[1];
+ return UserHandle.getUid(userId, packages.get(appName));
+ }).when(mPackageManager).getPackageUidAsUser(anyString(), anyInt());
+ } catch (Exception e) {
+ }
+ }
+}
diff --git a/telephony/java/com/android/internal/telephony/TelephonyIntents.java b/telephony/java/com/android/internal/telephony/TelephonyIntents.java
index eafb3d4..46b0fbd 100644
--- a/telephony/java/com/android/internal/telephony/TelephonyIntents.java
+++ b/telephony/java/com/android/internal/telephony/TelephonyIntents.java
@@ -384,6 +384,9 @@
* <li><em>phones radio access family </em> - A RadioAccessFamily
* array, contain phone ID and new radio access family for each phone.</li>
* </ul>
+ *
+ * <p class="note">
+ * Requires the READ_PHONE_STATE permission.
*/
public static final String ACTION_SET_RADIO_CAPABILITY_DONE =
"android.intent.action.ACTION_SET_RADIO_CAPABILITY_DONE";
@@ -423,4 +426,10 @@
*/
public static final String ACTION_REQUEST_NETWORK_FAILED =
"android.intent.action.REQUEST_NETWORK_FAILED";
+
+ /**
+ * Broadcast action to trigger CI OMA-DM Session.
+ */
+ public static final String ACTION_REQUEST_OMADM_CONFIGURATION_UPDATE =
+ "com.android.omadm.service.CONFIGURATION_UPDATE";
}
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index f9e008e..ceebdd5 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -336,10 +336,11 @@
}
@Override
- public void setAppStartingWindow(IBinder arg0, String arg1, int arg2, CompatibilityInfo arg3,
+ public boolean setAppStartingWindow(IBinder arg0, String arg1, int arg2, CompatibilityInfo arg3,
CharSequence arg4, int arg5, int arg6, int arg7, int arg8, IBinder arg9, boolean arg10)
throws RemoteException {
// TODO Auto-generated method stub
+ return false;
}
@Override
diff --git a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
index 0cf51a4..3f276c9 100644
--- a/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
+++ b/tools/layoutlib/bridge/src/com/android/layoutlib/bridge/android/BridgeIInputMethodManager.java
@@ -219,6 +219,11 @@
}
@Override
+ public void clearLastInputMethodWindowForTransition(IBinder arg0) throws RemoteException {
+ // TODO Auto-generated method stub
+ }
+
+ @Override
public InputBindResult startInputOrWindowGainedFocus(
/* @InputMethodClient.StartInputReason */ int startInputReason,
IInputMethodClient client, IBinder windowToken, int controlFlags, int softInputMode,