Hold a weak reference to PointerController when handling vsync
am: 33c5903e77
Change-Id: If3e218dfdaa68953d184812884b7ed80ab16acfa
diff --git a/Android.mk b/Android.mk
index 61df64e..2d52854 100644
--- a/Android.mk
+++ b/Android.mk
@@ -63,6 +63,7 @@
core/java/android/accessibilityservice/IAccessibilityServiceClient.aidl \
core/java/android/accounts/IAccountManager.aidl \
core/java/android/accounts/IAccountManagerResponse.aidl \
+ core/java/android/accounts/IAccountAccessTracker.aidl \
core/java/android/accounts/IAccountAuthenticator.aidl \
core/java/android/accounts/IAccountAuthenticatorResponse.aidl \
core/java/android/app/IActivityContainer.aidl \
@@ -897,7 +898,7 @@
## SDK version identifiers used in the published docs
# major[.minor] version for current SDK. (full releases only)
-framework_docs_SDK_VERSION:=6.0
+framework_docs_SDK_VERSION:=7.0
# release version (ie "Release x") (full releases only)
framework_docs_SDK_REL_ID:=1
@@ -906,7 +907,7 @@
-hdf sdk.preview.version 5 \
-hdf sdk.version $(framework_docs_SDK_VERSION) \
-hdf sdk.rel.id $(framework_docs_SDK_REL_ID) \
- -hdf sdk.preview 1
+ -hdf sdk.preview 0
# ==== the api stubs and current.xml ===========================
include $(CLEAR_VARS)
@@ -926,6 +927,7 @@
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-api $(INTERNAL_PLATFORM_API_FILE) \
-removedApi $(INTERNAL_PLATFORM_REMOVED_API_FILE) \
-nodocs
@@ -959,6 +961,7 @@
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-showAnnotation android.annotation.SystemApi \
-api $(INTERNAL_PLATFORM_SYSTEM_API_FILE) \
-removedApi $(INTERNAL_PLATFORM_SYSTEM_REMOVED_API_FILE) \
@@ -993,6 +996,7 @@
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-stubs $(TARGET_OUT_COMMON_INTERMEDIATES)/JAVA_LIBRARIES/android_test_stubs_current_intermediates/src \
-showAnnotation android.annotation.TestApi \
-api $(INTERNAL_PLATFORM_TEST_API_FILE) \
@@ -1026,6 +1030,7 @@
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-parsecomments
LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
@@ -1064,7 +1069,7 @@
-sdkvalues $(OUT_DOCS) \
-hdf android.whichdoc offline
-LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk-dev
+LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
include $(BUILD_DROIDDOC)
@@ -1107,7 +1112,7 @@
static_doc_index_redirect := $(out_dir)/index.html
$(static_doc_index_redirect): \
- $(LOCAL_PATH)/docs/docs-preview-index.html | $(ACP)
+ $(LOCAL_PATH)/docs/docs-documentation-redirect.html | $(ACP)
$(hide) mkdir -p $(dir $@)
$(hide) $(ACP) $< $@
@@ -1139,7 +1144,7 @@
-hdf android.hasSamples true \
-samplesdir $(samples_dir)
-LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk-dev
+LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
include $(BUILD_DROIDDOC)
@@ -1163,6 +1168,7 @@
LOCAL_DROIDDOC_OPTIONS:= \
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-showAnnotation android.annotation.SystemApi \
-title "Android SDK - Including system APIs." \
-toroot / \
@@ -1199,17 +1205,42 @@
LOCAL_DROIDDOC_OPTIONS:= \
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
- -devsite \
- -hdf devsite true \
-toroot / \
-hdf android.whichdoc online \
+ -devsite \
$(sample_groups) \
- -useUpdatedTemplates \
-hdf android.hasSamples true \
- -yaml _book.yaml \
-samplesdir $(samples_dir)
-LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk-dev
+LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
+
+include $(BUILD_DROIDDOC)
+
+# ==== docs for the web (on the devsite app engine server) =======================
+include $(CLEAR_VARS)
+LOCAL_SRC_FILES:=$(framework_docs_LOCAL_SRC_FILES)
+LOCAL_INTERMEDIATE_SOURCES:=$(framework_docs_LOCAL_INTERMEDIATE_SOURCES)
+LOCAL_STATIC_JAVA_LIBRARIES:=$(framework_docs_LOCAL_STATIC_JAVA_LIBRARIES)
+LOCAL_JAVA_LIBRARIES:=$(framework_docs_LOCAL_JAVA_LIBRARIES)
+LOCAL_MODULE_CLASS:=$(framework_docs_LOCAL_MODULE_CLASS)
+LOCAL_DROIDDOC_SOURCE_PATH:=$(framework_docs_LOCAL_DROIDDOC_SOURCE_PATH)
+LOCAL_DROIDDOC_HTML_DIR:=$(framework_docs_LOCAL_DROIDDOC_HTML_DIR)
+LOCAL_ADDITIONAL_JAVA_DIR:=$(framework_docs_LOCAL_ADDITIONAL_JAVA_DIR)
+LOCAL_ADDITIONAL_DEPENDENCIES:=$(framework_docs_LOCAL_ADDITIONAL_DEPENDENCIES)
+# specify a second html input dir and an output path relative to OUT_DIR)
+LOCAL_ADDITIONAL_HTML_DIR:=docs/html-intl /
+
+LOCAL_MODULE := ds-static
+
+LOCAL_DROIDDOC_OPTIONS:= \
+ $(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -hdf android.whichdoc online \
+ -staticonly \
+ -toroot / \
+ -devsite \
+ -ignoreJdLinks
+
+LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
include $(BUILD_DROIDDOC)
@@ -1234,11 +1265,10 @@
-toroot / \
-hdf android.whichdoc online \
$(sample_groups) \
- -useUpdatedTemplates \
-hdf android.hasSamples true \
-samplesdir $(samples_dir)
-LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk-dev
+LOCAL_DROIDDOC_CUSTOM_TEMPLATE_DIR:=build/tools/droiddoc/templates-sdk
include $(BUILD_DROIDDOC)
@@ -1257,6 +1287,7 @@
LOCAL_MODULE := hidden
LOCAL_DROIDDOC_OPTIONS:=\
$(framework_docs_LOCAL_DROIDDOC_OPTIONS) \
+ -referenceonly \
-title "Android SDK - Including hidden APIs."
# -hidden
diff --git a/api/current.txt b/api/current.txt
index e1d1af6..533b577 100644
--- a/api/current.txt
+++ b/api/current.txt
@@ -43913,6 +43913,7 @@
field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea
field public static final int TYPE_BASE_APPLICATION = 1; // 0x1
field public static final int TYPE_CHANGED = 2; // 0x2
+ field public static final int TYPE_DRAWN_APPLICATION = 4; // 0x4
field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db
field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc
field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9
diff --git a/api/system-current.txt b/api/system-current.txt
index 9d045b3..c33fe6e 100644
--- a/api/system-current.txt
+++ b/api/system-current.txt
@@ -47093,6 +47093,7 @@
field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea
field public static final int TYPE_BASE_APPLICATION = 1; // 0x1
field public static final int TYPE_CHANGED = 2; // 0x2
+ field public static final int TYPE_DRAWN_APPLICATION = 4; // 0x4
field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db
field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc
field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9
diff --git a/api/test-current.txt b/api/test-current.txt
index ed078d2..74e65d9 100644
--- a/api/test-current.txt
+++ b/api/test-current.txt
@@ -3255,6 +3255,7 @@
method public java.lang.Object getAnimatedValue(java.lang.String);
method public long getCurrentPlayTime();
method public long getDuration();
+ method public static float getDurationScale();
method public static long getFrameDelay();
method public int getRepeatCount();
method public int getRepeatMode();
@@ -3272,6 +3273,7 @@
method public void setCurrentFraction(float);
method public void setCurrentPlayTime(long);
method public android.animation.ValueAnimator setDuration(long);
+ method public static void setDurationScale(float);
method public void setEvaluator(android.animation.TypeEvaluator);
method public void setFloatValues(float...);
method public static void setFrameDelay(long);
@@ -43994,6 +43996,7 @@
field public static final int TYPE_APPLICATION_SUB_PANEL = 1002; // 0x3ea
field public static final int TYPE_BASE_APPLICATION = 1; // 0x1
field public static final int TYPE_CHANGED = 2; // 0x2
+ field public static final int TYPE_DRAWN_APPLICATION = 4; // 0x4
field public static final int TYPE_INPUT_METHOD = 2011; // 0x7db
field public static final int TYPE_INPUT_METHOD_DIALOG = 2012; // 0x7dc
field public static final int TYPE_KEYGUARD_DIALOG = 2009; // 0x7d9
diff --git a/cmds/bootanimation/BootAnimation.cpp b/cmds/bootanimation/BootAnimation.cpp
index a2d34e4..2fa1ee6 100644
--- a/cmds/bootanimation/BootAnimation.cpp
+++ b/cmds/bootanimation/BootAnimation.cpp
@@ -68,15 +68,25 @@
static const char SYSTEM_DATA_DIR_PATH[] = "/data/system";
static const char SYSTEM_TIME_DIR_NAME[] = "time";
static const char SYSTEM_TIME_DIR_PATH[] = "/data/system/time";
+static const char CLOCK_FONT_ASSET[] = "images/clock_font.png";
+static const char CLOCK_FONT_ZIP_NAME[] = "clock_font.png";
static const char LAST_TIME_CHANGED_FILE_NAME[] = "last_time_change";
static const char LAST_TIME_CHANGED_FILE_PATH[] = "/data/system/time/last_time_change";
static const char ACCURATE_TIME_FLAG_FILE_NAME[] = "time_is_accurate";
static const char ACCURATE_TIME_FLAG_FILE_PATH[] = "/data/system/time/time_is_accurate";
// Java timestamp format. Don't show the clock if the date is before 2000-01-01 00:00:00.
static const long long ACCURATE_TIME_EPOCH = 946684800000;
+static constexpr char FONT_BEGIN_CHAR = ' ';
+static constexpr char FONT_END_CHAR = '~' + 1;
+static constexpr size_t FONT_NUM_CHARS = FONT_END_CHAR - FONT_BEGIN_CHAR + 1;
+static constexpr size_t FONT_NUM_COLS = 16;
+static constexpr size_t FONT_NUM_ROWS = FONT_NUM_CHARS / FONT_NUM_COLS;
+static const int TEXT_CENTER_VALUE = INT_MAX;
+static const int TEXT_MISSING_VALUE = INT_MIN;
static const char EXIT_PROP_NAME[] = "service.bootanim.exit";
static const char PLAY_SOUND_PROP_NAME[] = "persist.sys.bootanim.play_sound";
static const int ANIM_ENTRY_NAME_MAX = 256;
+static constexpr size_t TEXT_POS_LEN_MAX = 16;
static const char BOOT_COMPLETED_PROP_NAME[] = "sys.boot_completed";
static const char BOOTREASON_PROP_NAME[] = "ro.boot.bootreason";
// bootreasons list in "system/core/bootstat/bootstat.cpp".
@@ -175,15 +185,14 @@
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+
return NO_ERROR;
}
-status_t BootAnimation::initTexture(const Animation::Frame& frame)
+status_t BootAnimation::initTexture(FileMap* map, int* width, int* height)
{
- //StopWatch watch("blah");
-
SkBitmap bitmap;
- SkMemoryStream stream(frame.map->getDataPtr(), frame.map->getDataLength());
+ SkMemoryStream stream(map->getDataPtr(), map->getDataLength());
SkImageDecoder* codec = SkImageDecoder::Factory(&stream);
if (codec != NULL) {
codec->setDitherImage(false);
@@ -196,7 +205,7 @@
// FileMap memory is never released until application exit.
// Release it now as the texture is already loaded and the memory used for
// the packed resource can be released.
- delete frame.map;
+ delete map;
// ensure we can call getPixels(). No need to call unlock, since the
// bitmap will go out of scope when we return from this method.
@@ -242,6 +251,9 @@
glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, crop);
+ *width = w;
+ *height = h;
+
return NO_ERROR;
}
@@ -404,7 +416,6 @@
return false;
}
-
void BootAnimation::checkExit() {
// Allow surface flinger to gracefully request shutdown
char value[PROPERTY_VALUE_MAX];
@@ -415,6 +426,47 @@
}
}
+bool BootAnimation::validClock(const Animation::Part& part) {
+ return part.clockPosX != TEXT_MISSING_VALUE && part.clockPosY != TEXT_MISSING_VALUE;
+}
+
+bool parseTextCoord(const char* str, int* dest) {
+ if (strcmp("c", str) == 0) {
+ *dest = TEXT_CENTER_VALUE;
+ return true;
+ }
+
+ char* end;
+ int val = (int) strtol(str, &end, 0);
+ if (end == str || *end != '\0' || val == INT_MAX || val == INT_MIN) {
+ return false;
+ }
+ *dest = val;
+ return true;
+}
+
+// Parse two position coordinates. If only string is non-empty, treat it as the y value.
+void parsePosition(const char* str1, const char* str2, int* x, int* y) {
+ bool success = false;
+ if (strlen(str1) == 0) { // No values were specified
+ // success = false
+ } else if (strlen(str2) == 0) { // we have only one value
+ if (parseTextCoord(str1, y)) {
+ *x = TEXT_CENTER_VALUE;
+ success = true;
+ }
+ } else {
+ if (parseTextCoord(str1, x) && parseTextCoord(str2, y)) {
+ success = true;
+ }
+ }
+
+ if (!success) {
+ *x = TEXT_MISSING_VALUE;
+ *y = TEXT_MISSING_VALUE;
+ }
+}
+
// Parse a color represented as an HTML-style 'RRGGBB' string: each pair of
// characters in str is a hex number in [0, 255], which are converted to
// floating point values in the range [0.0, 1.0] and placed in the
@@ -461,24 +513,87 @@
return true;
}
-// The time glyphs are stored in a single image of height 64 pixels. Each digit is 40 pixels wide,
-// and the colon character is half that at 20 pixels. The glyph order is '0123456789:'.
-// We render 24 hour time.
-void BootAnimation::drawTime(const Texture& clockTex, const int yPos) {
- static constexpr char TIME_FORMAT[] = "%H:%M";
- static constexpr int TIME_LENGTH = sizeof(TIME_FORMAT);
+// The font image should be a 96x2 array of character images. The
+// columns are the printable ASCII characters 0x20 - 0x7f. The
+// top row is regular text; the bottom row is bold.
+status_t BootAnimation::initFont(Font* font, const char* fallback) {
+ status_t status = NO_ERROR;
- static constexpr int DIGIT_HEIGHT = 64;
- static constexpr int DIGIT_WIDTH = 40;
- static constexpr int COLON_WIDTH = DIGIT_WIDTH / 2;
- static constexpr int TIME_WIDTH = (DIGIT_WIDTH * 4) + COLON_WIDTH;
+ if (font->map != nullptr) {
+ glGenTextures(1, &font->texture.name);
+ glBindTexture(GL_TEXTURE_2D, font->texture.name);
- if (clockTex.h < DIGIT_HEIGHT || clockTex.w < (10 * DIGIT_WIDTH + COLON_WIDTH)) {
- ALOGE("Clock texture is too small; abandoning boot animation clock");
- mClockEnabled = false;
- return;
+ status = initTexture(font->map, &font->texture.w, &font->texture.h);
+
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
+ glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT);
+ } else if (fallback != nullptr) {
+ status = initTexture(&font->texture, mAssets, fallback);
+ } else {
+ return NO_INIT;
}
+ if (status == NO_ERROR) {
+ font->char_width = font->texture.w / FONT_NUM_COLS;
+ font->char_height = font->texture.h / FONT_NUM_ROWS / 2; // There are bold and regular rows
+ }
+
+ return status;
+}
+
+void BootAnimation::drawText(const char* str, const Font& font, bool bold, int* x, int* y) {
+ glEnable(GL_BLEND); // Allow us to draw on top of the animation
+ glBindTexture(GL_TEXTURE_2D, font.texture.name);
+
+ const int len = strlen(str);
+ const int strWidth = font.char_width * len;
+
+ if (*x == TEXT_CENTER_VALUE) {
+ *x = (mWidth - strWidth) / 2;
+ } else if (*x < 0) {
+ *x = mWidth + *x - strWidth;
+ }
+ if (*y == TEXT_CENTER_VALUE) {
+ *y = (mHeight - font.char_height) / 2;
+ } else if (*y < 0) {
+ *y = mHeight + *y - font.char_height;
+ }
+
+ int cropRect[4] = { 0, 0, font.char_width, -font.char_height };
+
+ for (int i = 0; i < len; i++) {
+ char c = str[i];
+
+ if (c < FONT_BEGIN_CHAR || c > FONT_END_CHAR) {
+ c = '?';
+ }
+
+ // Crop the texture to only the pixels in the current glyph
+ const int charPos = (c - FONT_BEGIN_CHAR); // Position in the list of valid characters
+ const int row = charPos / FONT_NUM_COLS;
+ const int col = charPos % FONT_NUM_COLS;
+ cropRect[0] = col * font.char_width; // Left of column
+ cropRect[1] = row * font.char_height * 2; // Top of row
+ // Move down to bottom of regular (one char_heigh) or bold (two char_heigh) line
+ cropRect[1] += bold ? 2 * font.char_height : font.char_height;
+ glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect);
+
+ glDrawTexiOES(*x, *y, 0, font.char_width, font.char_height);
+
+ *x += font.char_width;
+ }
+
+ glDisable(GL_BLEND); // Return to the animation's default behaviour
+ glBindTexture(GL_TEXTURE_2D, 0);
+}
+
+// We render 24 hour time.
+void BootAnimation::drawClock(const Font& font, const int xPos, const int yPos) {
+ static constexpr char TIME_FORMAT[] = "%H:%M";
+ static constexpr int TIME_LENGTH = 6;
+
time_t rawtime;
time(&rawtime);
struct tm* timeInfo = localtime(&rawtime);
@@ -492,36 +607,9 @@
return;
}
- glEnable(GL_BLEND); // Allow us to draw on top of the animation
- glBindTexture(GL_TEXTURE_2D, clockTex.name);
-
- int xPos = (mWidth - TIME_WIDTH) / 2;
- int cropRect[4] = { 0, DIGIT_HEIGHT, DIGIT_WIDTH, -DIGIT_HEIGHT };
-
- for (int i = 0; i < TIME_LENGTH - 1; i++) {
- char c = timeBuff[i];
- int width = DIGIT_WIDTH;
- int pos = c - '0'; // Position in the character list
- if (pos < 0 || pos > 10) {
- continue;
- }
- if (c == ':') {
- width = COLON_WIDTH;
- }
-
- // Crop the texture to only the pixels in the current glyph
- int left = pos * DIGIT_WIDTH;
- cropRect[0] = left;
- cropRect[2] = width;
- glTexParameteriv(GL_TEXTURE_2D, GL_TEXTURE_CROP_RECT_OES, cropRect);
-
- glDrawTexiOES(xPos, yPos, 0, width, DIGIT_HEIGHT);
-
- xPos += width;
- }
-
- glDisable(GL_BLEND); // Return to the animation's default behaviour
- glBindTexture(GL_TEXTURE_2D, 0);
+ int x = xPos;
+ int y = yPos;
+ drawText(timeBuff, font, false, &x, &y);
}
bool BootAnimation::parseAnimationDesc(Animation& animation)
@@ -544,9 +632,10 @@
int height = 0;
int count = 0;
int pause = 0;
- int clockPosY = -1;
char path[ANIM_ENTRY_NAME_MAX];
char color[7] = "000000"; // default to black if unspecified
+ char clockPos1[TEXT_POS_LEN_MAX + 1] = "";
+ char clockPos2[TEXT_POS_LEN_MAX + 1] = "";
char pathType;
if (sscanf(l, "%d %d %d", &width, &height, &fps) == 3) {
@@ -554,15 +643,15 @@
animation.width = width;
animation.height = height;
animation.fps = fps;
- } else if (sscanf(l, " %c %d %d %s #%6s %d",
- &pathType, &count, &pause, path, color, &clockPosY) >= 4) {
- // ALOGD("> type=%c, count=%d, pause=%d, path=%s, color=%s, clockPosY=%d", pathType, count, pause, path, color, clockPosY);
+ } else if (sscanf(l, " %c %d %d %s #%6s %16s %16s",
+ &pathType, &count, &pause, path, color, clockPos1, clockPos2) >= 4) {
+ //ALOGD("> type=%c, count=%d, pause=%d, path=%s, color=%s, clockPos1=%s, clockPos2=%s",
+ // pathType, count, pause, path, color, clockPos1, clockPos2);
Animation::Part part;
part.playUntilComplete = pathType == 'c';
part.count = count;
part.pause = pause;
part.path = path;
- part.clockPosY = clockPosY;
part.audioData = NULL;
part.animation = NULL;
if (!parseColor(color, part.backgroundColor)) {
@@ -571,6 +660,7 @@
part.backgroundColor[1] = 0.0f;
part.backgroundColor[2] = 0.0f;
}
+ parsePosition(clockPos1, clockPos2, &part.clockPosX, &part.clockPosY);
animation.parts.add(part);
}
else if (strcmp(l, "$SYSTEM") == 0) {
@@ -614,6 +704,14 @@
const String8 path(entryName.getPathDir());
const String8 leaf(entryName.getPathLeaf());
if (leaf.size() > 0) {
+ if (entryName == CLOCK_FONT_ZIP_NAME) {
+ FileMap* map = zip->createEntryFileMap(entry);
+ if (map) {
+ animation.clockFont.map = map;
+ }
+ continue;
+ }
+
for (size_t j = 0; j < pcount; j++) {
if (path == animation.parts[j].path) {
uint16_t method;
@@ -698,7 +796,7 @@
bool anyPartHasClock = false;
for (size_t i=0; i < animation->parts.size(); i++) {
- if(animation->parts[i].clockPosY >= 0) {
+ if(validClock(animation->parts[i])) {
anyPartHasClock = true;
break;
}
@@ -736,10 +834,11 @@
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
- bool clockTextureInitialized = false;
+ bool clockFontInitialized = false;
if (mClockEnabled) {
- clockTextureInitialized = (initTexture(&mClock, mAssets, "images/clock64.png") == NO_ERROR);
- mClockEnabled = clockTextureInitialized;
+ clockFontInitialized =
+ (initFont(&animation->clockFont, CLOCK_FONT_ASSET) == NO_ERROR);
+ mClockEnabled = clockFontInitialized;
}
if (mClockEnabled && !updateIsTimeAccurate()) {
@@ -756,8 +855,8 @@
releaseAnimation(animation);
- if (clockTextureInitialized) {
- glDeleteTextures(1, &mClock.name);
+ if (clockFontInitialized) {
+ glDeleteTextures(1, &animation->clockFont.texture.name);
}
return false;
@@ -813,7 +912,8 @@
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
glTexParameterx(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
}
- initTexture(frame);
+ int w, h;
+ initTexture(frame.map, &w, &h);
}
const int xc = animationX + frame.trimX;
@@ -835,8 +935,8 @@
// which is equivalent to mHeight - (yc + frame.trimHeight)
glDrawTexiOES(xc, mHeight - (yc + frame.trimHeight),
0, frame.trimWidth, frame.trimHeight);
- if (mClockEnabled && mTimeIsAccurate && part.clockPosY >= 0) {
- drawTime(mClock, part.clockPosY);
+ if (mClockEnabled && mTimeIsAccurate && validClock(part)) {
+ drawClock(animation.clockFont, part.clockPosX, part.clockPosY);
}
eglSwapBuffers(mDisplay, mSurface);
@@ -915,6 +1015,7 @@
Animation *animation = new Animation;
animation->fileName = fn;
animation->zip = zip;
+ animation->clockFont.map = nullptr;
mLoadedFiles.add(animation->fileName);
parseAnimationDesc(*animation);
diff --git a/cmds/bootanimation/BootAnimation.h b/cmds/bootanimation/BootAnimation.h
index fd497a3..42759f1 100644
--- a/cmds/bootanimation/BootAnimation.h
+++ b/cmds/bootanimation/BootAnimation.h
@@ -74,6 +74,13 @@
GLuint name;
};
+ struct Font {
+ FileMap* map;
+ Texture texture;
+ int char_width;
+ int char_height;
+ };
+
struct Animation {
struct Frame {
String8 name;
@@ -90,8 +97,12 @@
struct Part {
int count; // The number of times this part should repeat, 0 for infinite
int pause; // The number of frames to pause for at the end of this part
- int clockPosY; // The y position of the clock, in pixels, from the bottom of the
- // display (the clock is centred horizontally). -1 to disable the clock
+ int clockPosX; // The x position of the clock, in pixels. Positive values offset from
+ // the left of the screen, negative values offset from the right.
+ int clockPosY; // The y position of the clock, in pixels. Positive values offset from
+ // the bottom of the screen, negative values offset from the top.
+ // If either of the above are INT_MIN the clock is disabled, if INT_MAX
+ // the clock is centred on that axis.
String8 path;
String8 trimData;
SortedVector<Frame> frames;
@@ -108,13 +119,17 @@
String8 audioConf;
String8 fileName;
ZipFileRO* zip;
+ Font clockFont;
};
status_t initTexture(Texture* texture, AssetManager& asset, const char* name);
- status_t initTexture(const Animation::Frame& frame);
+ status_t initTexture(FileMap* map, int* width, int* height);
+ status_t initFont(Font* font, const char* fallback);
bool android();
bool movie();
- void drawTime(const Texture& clockTex, const int yPos);
+ void drawText(const char* str, const Font& font, bool bold, int* x, int* y);
+ void drawClock(const Font& font, const int xPos, const int yPos);
+ bool validClock(const Animation::Part& part);
Animation* loadAnimation(const String8&);
bool playAnimation(const Animation&);
void releaseAnimation(Animation*) const;
@@ -127,7 +142,6 @@
sp<SurfaceComposerClient> mSession;
AssetManager mAssets;
Texture mAndroid[2];
- Texture mClock;
int mWidth;
int mHeight;
bool mUseNpotTextures = false;
diff --git a/cmds/wm/src/com/android/commands/wm/Wm.java b/cmds/wm/src/com/android/commands/wm/Wm.java
index f7f7c88..383cd01 100644
--- a/cmds/wm/src/com/android/commands/wm/Wm.java
+++ b/cmds/wm/src/com/android/commands/wm/Wm.java
@@ -23,6 +23,7 @@
import android.graphics.Rect;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.UserHandle;
import android.util.AndroidException;
import android.util.DisplayMetrics;
import android.view.Display;
@@ -201,9 +202,11 @@
try {
if (density > 0) {
// TODO(multidisplay): For now Configuration only applies to main screen.
- mWm.setForcedDisplayDensity(Display.DEFAULT_DISPLAY, density);
+ mWm.setForcedDisplayDensityForUser(Display.DEFAULT_DISPLAY, density,
+ UserHandle.USER_CURRENT);
} else {
- mWm.clearForcedDisplayDensity(Display.DEFAULT_DISPLAY);
+ mWm.clearForcedDisplayDensityForUser(Display.DEFAULT_DISPLAY,
+ UserHandle.USER_CURRENT);
}
} catch (RemoteException e) {
}
diff --git a/core/java/android/accessibilityservice/AccessibilityService.java b/core/java/android/accessibilityservice/AccessibilityService.java
index ae78e218..c4eaccc 100644
--- a/core/java/android/accessibilityservice/AccessibilityService.java
+++ b/core/java/android/accessibilityservice/AccessibilityService.java
@@ -628,8 +628,8 @@
if (connection == null) {
return false;
}
- List<MotionEvent> events = MotionEventGenerator.getMotionEventsFromGestureDescription(
- gesture, 100);
+ List<GestureDescription.GestureStep> steps =
+ MotionEventGenerator.getGestureStepsFromGestureDescription(gesture, 100);
try {
synchronized (mLock) {
mGestureStatusCallbackSequence++;
@@ -641,8 +641,8 @@
callback, handler);
mGestureStatusCallbackInfos.put(mGestureStatusCallbackSequence, callbackInfo);
}
- connection.sendMotionEvents(mGestureStatusCallbackSequence,
- new ParceledListSlice<>(events));
+ connection.sendGesture(mGestureStatusCallbackSequence,
+ new ParceledListSlice<>(steps));
}
} catch (RemoteException re) {
throw new RuntimeException(re);
diff --git a/core/java/android/accessibilityservice/GestureDescription.java b/core/java/android/accessibilityservice/GestureDescription.java
index fc9581e..d9b03fa 100644
--- a/core/java/android/accessibilityservice/GestureDescription.java
+++ b/core/java/android/accessibilityservice/GestureDescription.java
@@ -21,6 +21,8 @@
import android.graphics.Path;
import android.graphics.PathMeasure;
import android.graphics.RectF;
+import android.os.Parcel;
+import android.os.Parcelable;
import android.view.InputDevice;
import android.view.MotionEvent;
import android.view.MotionEvent.PointerCoords;
@@ -303,13 +305,37 @@
}
}
- private static class TouchPoint {
+ /**
+ * The location of a finger for gesture dispatch
+ *
+ * @hide
+ */
+ public static class TouchPoint implements Parcelable {
+ private static final int FLAG_IS_START_OF_PATH = 0x01;
+ private static final int FLAG_IS_END_OF_PATH = 0x02;
+
int mPathIndex;
boolean mIsStartOfPath;
boolean mIsEndOfPath;
float mX;
float mY;
+ public TouchPoint() {
+ }
+
+ public TouchPoint(TouchPoint pointToCopy) {
+ copyFrom(pointToCopy);
+ }
+
+ public TouchPoint(Parcel parcel) {
+ mPathIndex = parcel.readInt();
+ int startEnd = parcel.readInt();
+ mIsStartOfPath = (startEnd & FLAG_IS_START_OF_PATH) != 0;
+ mIsEndOfPath = (startEnd & FLAG_IS_END_OF_PATH) != 0;
+ mX = parcel.readFloat();
+ mY = parcel.readFloat();
+ }
+
void copyFrom(TouchPoint other) {
mPathIndex = other.mPathIndex;
mIsStartOfPath = other.mIsStartOfPath;
@@ -317,12 +343,94 @@
mX = other.mX;
mY = other.mY;
}
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeInt(mPathIndex);
+ int startEnd = mIsStartOfPath ? FLAG_IS_START_OF_PATH : 0;
+ startEnd |= mIsEndOfPath ? FLAG_IS_END_OF_PATH : 0;
+ dest.writeInt(startEnd);
+ dest.writeFloat(mX);
+ dest.writeFloat(mY);
+ }
+
+ public static final Parcelable.Creator<TouchPoint> CREATOR
+ = new Parcelable.Creator<TouchPoint>() {
+ public TouchPoint createFromParcel(Parcel in) {
+ return new TouchPoint(in);
+ }
+
+ public TouchPoint[] newArray(int size) {
+ return new TouchPoint[size];
+ }
+ };
+ }
+
+ /**
+ * A step along a gesture. Contains all of the touch points at a particular time
+ *
+ * @hide
+ */
+ public static class GestureStep implements Parcelable {
+ public long timeSinceGestureStart;
+ public int numTouchPoints;
+ public TouchPoint[] touchPoints;
+
+ public GestureStep(long timeSinceGestureStart, int numTouchPoints,
+ TouchPoint[] touchPointsToCopy) {
+ this.timeSinceGestureStart = timeSinceGestureStart;
+ this.numTouchPoints = numTouchPoints;
+ this.touchPoints = new TouchPoint[numTouchPoints];
+ for (int i = 0; i < numTouchPoints; i++) {
+ this.touchPoints[i] = new TouchPoint(touchPointsToCopy[i]);
+ }
+ }
+
+ public GestureStep(Parcel parcel) {
+ timeSinceGestureStart = parcel.readLong();
+ Parcelable[] parcelables =
+ parcel.readParcelableArray(TouchPoint.class.getClassLoader());
+ numTouchPoints = (parcelables == null) ? 0 : parcelables.length;
+ touchPoints = new TouchPoint[numTouchPoints];
+ for (int i = 0; i < numTouchPoints; i++) {
+ touchPoints[i] = (TouchPoint) parcelables[i];
+ }
+ }
+
+ @Override
+ public int describeContents() {
+ return 0;
+ }
+
+ @Override
+ public void writeToParcel(Parcel dest, int flags) {
+ dest.writeLong(timeSinceGestureStart);
+ dest.writeParcelableArray(touchPoints, flags);
+ }
+
+ public static final Parcelable.Creator<GestureStep> CREATOR
+ = new Parcelable.Creator<GestureStep>() {
+ public GestureStep createFromParcel(Parcel in) {
+ return new GestureStep(in);
+ }
+
+ public GestureStep[] newArray(int size) {
+ return new GestureStep[size];
+ }
+ };
}
/**
* Class to convert a GestureDescription to a series of MotionEvents.
+ *
+ * @hide
*/
- static class MotionEventGenerator {
+ public static class MotionEventGenerator {
/**
* Constants used to initialize all MotionEvents
*/
@@ -341,39 +449,53 @@
private static PointerCoords[] sPointerCoords;
private static PointerProperties[] sPointerProps;
- static List<MotionEvent> getMotionEventsFromGestureDescription(
+ static List<GestureStep> getGestureStepsFromGestureDescription(
GestureDescription description, int sampleTimeMs) {
- final List<MotionEvent> motionEvents = new ArrayList<>();
+ final List<GestureStep> gestureSteps = new ArrayList<>();
// Point data at each time we generate an event for
final TouchPoint[] currentTouchPoints =
getCurrentTouchPoints(description.getStrokeCount());
- // Point data sent in last touch event
- int lastTouchPointSize = 0;
- final TouchPoint[] lastTouchPoints =
- getLastTouchPoints(description.getStrokeCount());
-
+ int currentTouchPointSize = 0;
/* Loop through each time slice where there are touch points */
long timeSinceGestureStart = 0;
long nextKeyPointTime = description.getNextKeyPointAtLeast(timeSinceGestureStart);
while (nextKeyPointTime >= 0) {
- timeSinceGestureStart = (lastTouchPointSize == 0) ? nextKeyPointTime
+ timeSinceGestureStart = (currentTouchPointSize == 0) ? nextKeyPointTime
: Math.min(nextKeyPointTime, timeSinceGestureStart + sampleTimeMs);
- int currentTouchPointSize = description.getPointsForTime(timeSinceGestureStart,
+ currentTouchPointSize = description.getPointsForTime(timeSinceGestureStart,
currentTouchPoints);
-
- appendMoveEventIfNeeded(motionEvents, lastTouchPoints, lastTouchPointSize,
- currentTouchPoints, currentTouchPointSize, timeSinceGestureStart);
- lastTouchPointSize = appendUpEvents(motionEvents, lastTouchPoints,
- lastTouchPointSize, currentTouchPoints, currentTouchPointSize,
- timeSinceGestureStart);
- lastTouchPointSize = appendDownEvents(motionEvents, lastTouchPoints,
- lastTouchPointSize, currentTouchPoints, currentTouchPointSize,
- timeSinceGestureStart);
+ gestureSteps.add(new GestureStep(timeSinceGestureStart, currentTouchPointSize,
+ currentTouchPoints));
/* Move to next time slice */
nextKeyPointTime = description.getNextKeyPointAtLeast(timeSinceGestureStart + 1);
}
+ return gestureSteps;
+ }
+
+ public static List<MotionEvent> getMotionEventsFromGestureSteps(List<GestureStep> steps) {
+ final List<MotionEvent> motionEvents = new ArrayList<>();
+
+ // Number of points in last touch event
+ int lastTouchPointSize = 0;
+ TouchPoint[] lastTouchPoints;
+
+ for (int i = 0; i < steps.size(); i++) {
+ GestureStep step = steps.get(i);
+ int currentTouchPointSize = step.numTouchPoints;
+ lastTouchPoints = getLastTouchPoints(
+ Math.max(lastTouchPointSize, currentTouchPointSize));
+
+ appendMoveEventIfNeeded(motionEvents, lastTouchPoints, lastTouchPointSize,
+ step.touchPoints, currentTouchPointSize, step.timeSinceGestureStart);
+ lastTouchPointSize = appendUpEvents(motionEvents, lastTouchPoints,
+ lastTouchPointSize, step.touchPoints, currentTouchPointSize,
+ step.timeSinceGestureStart);
+ lastTouchPointSize = appendDownEvents(motionEvents, lastTouchPoints,
+ lastTouchPointSize, step.touchPoints, currentTouchPointSize,
+ step.timeSinceGestureStart);
+ }
return motionEvents;
}
diff --git a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
index 7a55079..81cddba 100644
--- a/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
+++ b/core/java/android/accessibilityservice/IAccessibilityServiceConnection.aidl
@@ -88,5 +88,5 @@
void setSoftKeyboardCallbackEnabled(boolean enabled);
- void sendMotionEvents(int sequence, in ParceledListSlice events);
+ void sendGesture(int sequence, in ParceledListSlice gestureSteps);
}
diff --git a/core/java/android/accounts/Account.java b/core/java/android/accounts/Account.java
index 7b83a30..6c16e32 100644
--- a/core/java/android/accounts/Account.java
+++ b/core/java/android/accounts/Account.java
@@ -16,9 +16,17 @@
package android.accounts;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.os.Parcelable;
import android.os.Parcel;
+import android.os.RemoteException;
import android.text.TextUtils;
+import android.util.ArraySet;
+import android.util.Log;
+import com.android.internal.annotations.GuardedBy;
+
+import java.util.Set;
/**
* Value type that represents an Account in the {@link AccountManager}. This object is
@@ -26,8 +34,14 @@
* suitable for use as the key of a {@link java.util.Map}
*/
public class Account implements Parcelable {
+ private static final String TAG = "Account";
+
+ @GuardedBy("sAccessedAccounts")
+ private static final Set<Account> sAccessedAccounts = new ArraySet<>();
+
public final String name;
public final String type;
+ private final @Nullable IAccountAccessTracker mAccessTracker;
public boolean equals(Object o) {
if (o == this) return true;
@@ -44,6 +58,20 @@
}
public Account(String name, String type) {
+ this(name, type, null);
+ }
+
+ /**
+ * @hide
+ */
+ public Account(@NonNull Account other, @Nullable IAccountAccessTracker accessTracker) {
+ this(other.name, other.type, accessTracker);
+ }
+
+ /**
+ * @hide
+ */
+ public Account(String name, String type, IAccountAccessTracker accessTracker) {
if (TextUtils.isEmpty(name)) {
throw new IllegalArgumentException("the name must not be empty: " + name);
}
@@ -52,11 +80,29 @@
}
this.name = name;
this.type = type;
+ this.mAccessTracker = accessTracker;
}
public Account(Parcel in) {
this.name = in.readString();
this.type = in.readString();
+ this.mAccessTracker = IAccountAccessTracker.Stub.asInterface(in.readStrongBinder());
+ if (mAccessTracker != null) {
+ synchronized (sAccessedAccounts) {
+ if (sAccessedAccounts.add(this)) {
+ try {
+ mAccessTracker.onAccountAccessed();
+ } catch (RemoteException e) {
+ Log.e(TAG, "Error noting account access", e);
+ }
+ }
+ }
+ }
+ }
+
+ /** @hide */
+ public IAccountAccessTracker getAccessTracker() {
+ return mAccessTracker;
}
public int describeContents() {
@@ -66,6 +112,7 @@
public void writeToParcel(Parcel dest, int flags) {
dest.writeString(name);
dest.writeString(type);
+ dest.writeStrongInterface(mAccessTracker);
}
public static final Creator<Account> CREATOR = new Creator<Account>() {
diff --git a/core/java/android/accounts/AccountManager.java b/core/java/android/accounts/AccountManager.java
index 7465ed9..632e4b9 100644
--- a/core/java/android/accounts/AccountManager.java
+++ b/core/java/android/accounts/AccountManager.java
@@ -28,6 +28,7 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.IntentSender;
import android.content.res.Resources;
import android.database.SQLException;
import android.os.Build;
@@ -178,6 +179,14 @@
public static final String KEY_ACCOUNT_TYPE = "accountType";
/**
+ * Bundle key used for the {@link IAccountAccessTracker} account access tracker
+ * used for noting the account was accessed when unmarshalled from a parcel.
+ *
+ * @hide
+ */
+ public static final String KEY_ACCOUNT_ACCESS_TRACKER = "accountAccessTracker";
+
+ /**
* Bundle key used for the auth token value in results
* from {@link #getAuthToken} and friends.
*/
@@ -265,6 +274,15 @@
"android.accounts.AccountAuthenticator";
public static final String AUTHENTICATOR_ATTRIBUTES_NAME = "account-authenticator";
+ /**
+ * Token type for the special case where a UID has access only to an account
+ * but no authenticator specific auth token types.
+ *
+ * @hide
+ */
+ public static final String ACCOUNT_ACCESS_TOKEN_TYPE =
+ "com.android.AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE";
+
private final Context mContext;
private final IAccountManager mService;
private final Handler mMainHandler;
@@ -803,7 +821,9 @@
public Account bundleToResult(Bundle bundle) throws AuthenticatorException {
String name = bundle.getString(KEY_ACCOUNT_NAME);
String type = bundle.getString(KEY_ACCOUNT_TYPE);
- return new Account(name, type);
+ IAccountAccessTracker tracker = IAccountAccessTracker.Stub.asInterface(
+ bundle.getBinder(KEY_ACCOUNT_ACCESS_TRACKER));
+ return new Account(name, type, tracker);
}
}.start();
}
@@ -2259,6 +2279,7 @@
result.putString(KEY_ACCOUNT_NAME, null);
result.putString(KEY_ACCOUNT_TYPE, null);
result.putString(KEY_AUTHTOKEN, null);
+ result.putBinder(KEY_ACCOUNT_ACCESS_TRACKER, null);
try {
mResponse.onResult(result);
} catch (RemoteException e) {
@@ -2284,9 +2305,13 @@
public void onResult(Bundle value) throws RemoteException {
Account account = new Account(
value.getString(KEY_ACCOUNT_NAME),
- value.getString(KEY_ACCOUNT_TYPE));
- mFuture = getAuthToken(account, mAuthTokenType, mLoginOptions,
- mActivity, mMyCallback, mHandler);
+ value.getString(KEY_ACCOUNT_TYPE),
+ IAccountAccessTracker.Stub.asInterface(
+ value.getBinder(
+ KEY_ACCOUNT_ACCESS_TRACKER)));
+ mFuture = getAuthToken(account, mAuthTokenType,
+ mLoginOptions, mActivity, mMyCallback,
+ mHandler);
}
@Override
@@ -2333,7 +2358,9 @@
setException(new AuthenticatorException("account not in result"));
return;
}
- final Account account = new Account(accountName, accountType);
+ final IAccountAccessTracker tracker = IAccountAccessTracker.Stub.asInterface(
+ result.getBinder(KEY_ACCOUNT_ACCESS_TRACKER));
+ final Account account = new Account(accountName, accountType, tracker);
mNumAccounts = 1;
getAuthToken(account, mAuthTokenType, null /* options */, mActivity,
mMyCallback, mHandler);
@@ -2960,4 +2987,49 @@
}
}.start();
}
+
+ /**
+ * Gets whether a given package under a user has access to an account.
+ * Can be called only from the system UID.
+ *
+ * @param account The account for which to check.
+ * @param packageName The package for which to check.
+ * @param userHandle The user for which to check.
+ * @return True if the package can access the account.
+ *
+ * @hide
+ */
+ public boolean hasAccountAccess(@NonNull Account account, @NonNull String packageName,
+ @NonNull UserHandle userHandle) {
+ try {
+ return mService.hasAccountAccess(account, packageName, userHandle);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
+
+ /**
+ * Creates an intent to request access to a given account for a UID.
+ * The returned intent should be stated for a result where {@link
+ * Activity#RESULT_OK} result means access was granted whereas {@link
+ * Activity#RESULT_CANCELED} result means access wasn't granted. Can
+ * be called only from the system UID.
+ *
+ * @param account The account for which to request.
+ * @param packageName The package name which to request.
+ * @param userHandle The user for which to request.
+ * @return The intent to request account access or null if the package
+ * doesn't exist.
+ *
+ * @hide
+ */
+ public IntentSender createRequestAccountAccessIntentSenderAsUser(@NonNull Account account,
+ @NonNull String packageName, @NonNull UserHandle userHandle) {
+ try {
+ return mService.createRequestAccountAccessIntentSenderAsUser(account, packageName,
+ userHandle);
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+ }
}
diff --git a/core/java/android/accounts/AccountManagerInternal.java b/core/java/android/accounts/AccountManagerInternal.java
new file mode 100644
index 0000000..0ac7197
--- /dev/null
+++ b/core/java/android/accounts/AccountManagerInternal.java
@@ -0,0 +1,76 @@
+/*
+ * 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 android.accounts;
+
+import android.annotation.IntRange;
+import android.annotation.NonNull;
+import android.os.RemoteCallback;
+
+/**
+ * Account manager local system service interface.
+ *
+ * @hide Only for use within the system server.
+ */
+public abstract class AccountManagerInternal {
+
+ /**
+ * Listener for explicit UID account access grant changes.
+ */
+ public interface OnAppPermissionChangeListener {
+
+ /**
+ * Called when the explicit grant state for a given UID to
+ * access an account changes.
+ *
+ * @param account The account
+ * @param uid The UID for which the grant changed
+ */
+ public void onAppPermissionChanged(Account account, int uid);
+ }
+
+ /**
+ * Requests that a given package is given access to an account.
+ * The provided callback will be invoked with a {@link android.os.Bundle}
+ * containing the result which will be a boolean value mapped to the
+ * {@link AccountManager#KEY_BOOLEAN_RESULT} key.
+ *
+ * @param account The account for which to request.
+ * @param packageName The package name for which to request.
+ * @param userId Concrete user id for which to request.
+ * @param callback A callback for receiving the result.
+ */
+ public abstract void requestAccountAccess(@NonNull Account account,
+ @NonNull String packageName, @IntRange(from = 0) int userId,
+ @NonNull RemoteCallback callback);
+
+ /**
+ * Check whether the given UID has access to the account.
+ *
+ * @param account The account
+ * @param uid The UID
+ * @return Whether the UID can access the account
+ */
+ public abstract boolean hasAccountAccess(@NonNull Account account, @IntRange(from = 0) int uid);
+
+ /**
+ * Adds a listener for explicit UID account access grant changes.
+ *
+ * @param listener The listener
+ */
+ public abstract void addOnAppPermissionChangeListener(
+ @NonNull OnAppPermissionChangeListener listener);
+}
diff --git a/core/java/android/accounts/GrantCredentialsPermissionActivity.java b/core/java/android/accounts/GrantCredentialsPermissionActivity.java
index 12b2b9c..38eab29 100644
--- a/core/java/android/accounts/GrantCredentialsPermissionActivity.java
+++ b/core/java/android/accounts/GrantCredentialsPermissionActivity.java
@@ -35,12 +35,10 @@
*/
public class GrantCredentialsPermissionActivity extends Activity implements View.OnClickListener {
public static final String EXTRAS_ACCOUNT = "account";
- public static final String EXTRAS_AUTH_TOKEN_LABEL = "authTokenLabel";
public static final String EXTRAS_AUTH_TOKEN_TYPE = "authTokenType";
public static final String EXTRAS_RESPONSE = "response";
- public static final String EXTRAS_ACCOUNT_TYPE_LABEL = "accountTypeLabel";
- public static final String EXTRAS_PACKAGES = "application";
public static final String EXTRAS_REQUESTING_UID = "uid";
+
private Account mAccount;
private String mAuthTokenType;
private int mUid;
@@ -109,7 +107,11 @@
}
}
};
- AccountManager.get(this).getAuthTokenLabel(mAccount.type, mAuthTokenType, callback, null);
+
+ if (!AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE.equals(mAuthTokenType)) {
+ AccountManager.get(this).getAuthTokenLabel(mAccount.type,
+ mAuthTokenType, callback, null);
+ }
findViewById(R.id.allow_button).setOnClickListener(this);
findViewById(R.id.deny_button).setOnClickListener(this);
diff --git a/core/java/android/accounts/IAccountAccessTracker.aidl b/core/java/android/accounts/IAccountAccessTracker.aidl
new file mode 100644
index 0000000..e12b3d1
--- /dev/null
+++ b/core/java/android/accounts/IAccountAccessTracker.aidl
@@ -0,0 +1,26 @@
+/*
+ * 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 android.accounts;
+
+/**
+ * Interface to track which apps accessed an account
+ *
+ * @hide
+ */
+oneway interface IAccountAccessTracker {
+ void onAccountAccessed();
+}
diff --git a/core/java/android/accounts/IAccountManager.aidl b/core/java/android/accounts/IAccountManager.aidl
index 7199288..56a6488 100644
--- a/core/java/android/accounts/IAccountManager.aidl
+++ b/core/java/android/accounts/IAccountManager.aidl
@@ -19,8 +19,10 @@
import android.accounts.IAccountManagerResponse;
import android.accounts.Account;
import android.accounts.AuthenticatorDescription;
+import android.content.IntentSender;
import android.os.Bundle;
-
+import android.os.RemoteCallback;
+import android.os.UserHandle;
/**
* Central application service that provides account management.
@@ -102,4 +104,10 @@
/* Check if credentials update is suggested */
void isCredentialsUpdateSuggested(in IAccountManagerResponse response, in Account account,
String statusToken);
+
+ /* Check if the package in a user can access an account */
+ boolean hasAccountAccess(in Account account, String packageName, in UserHandle userHandle);
+ /* Crate an intent to request account access for package and a given user id */
+ IntentSender createRequestAccountAccessIntentSenderAsUser(in Account account,
+ String packageName, in UserHandle userHandle);
}
diff --git a/core/java/android/animation/ValueAnimator.java b/core/java/android/animation/ValueAnimator.java
index e3f8fa4..7e16e3e 100644
--- a/core/java/android/animation/ValueAnimator.java
+++ b/core/java/android/animation/ValueAnimator.java
@@ -18,6 +18,7 @@
import android.annotation.CallSuper;
import android.annotation.IntDef;
+import android.annotation.TestApi;
import android.os.Looper;
import android.os.Trace;
import android.util.AndroidRuntimeException;
@@ -261,6 +262,7 @@
/**
* @hide
*/
+ @TestApi
public static void setDurationScale(float durationScale) {
sDurationScale = durationScale;
}
@@ -268,6 +270,7 @@
/**
* @hide
*/
+ @TestApi
public static float getDurationScale() {
return sDurationScale;
}
diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java
index 06a01fc..e4880b0 100644
--- a/core/java/android/app/Activity.java
+++ b/core/java/android/app/Activity.java
@@ -175,11 +175,11 @@
* part of the platform's application model. For a detailed perspective on the structure of an
* Android application and how activities behave, please read the
* <a href="{@docRoot}guide/topics/fundamentals.html">Application Fundamentals</a> and
- * <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>
+ * <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a>
* developer guides.</p>
*
* <p>You can also find a detailed discussion about how to create activities in the
- * <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>
+ * <a href="{@docRoot}guide/components/activities.html">Activities</a>
* developer guide.</p>
* </div>
*
@@ -3366,7 +3366,7 @@
* should override the method {@link #onPrepareNavigateUpTaskStack(TaskStackBuilder)}
* to supply those arguments.</p>
*
- * <p>See <a href="{@docRoot}guide/topics/fundamentals/tasks-and-back-stack.html">Tasks and Back Stack</a>
+ * <p>See <a href="{@docRoot}guide/components/tasks-and-back-stack.html">Tasks and Back Stack</a>
* from the developer guide and <a href="{@docRoot}design/patterns/navigation.html">Navigation</a>
* from the design guide for more information about navigating within your app.</p>
*
@@ -4482,7 +4482,7 @@
*
* @throws android.content.ActivityNotFoundException
*
- * @see {@link #startActivity(Intent, Bundle)}
+ * @see #startActivity(Intent, Bundle)
* @see #startActivityForResult
*/
@Override
@@ -4509,7 +4509,7 @@
*
* @throws android.content.ActivityNotFoundException
*
- * @see {@link #startActivity(Intent)}
+ * @see #startActivity(Intent)
* @see #startActivityForResult
*/
@Override
@@ -4531,7 +4531,7 @@
*
* @throws android.content.ActivityNotFoundException
*
- * @see {@link #startActivities(Intent[], Bundle)}
+ * @see #startActivities(Intent[], Bundle)
* @see #startActivityForResult
*/
@Override
@@ -4558,7 +4558,7 @@
*
* @throws android.content.ActivityNotFoundException
*
- * @see {@link #startActivities(Intent[])}
+ * @see #startActivities(Intent[])
* @see #startActivityForResult
*/
@Override
@@ -4940,7 +4940,7 @@
* <p>As of {@link android.os.Build.VERSION_CODES#JELLY_BEAN} an alternative
* to using this with starting activities is to supply the desired animation
* information through a {@link ActivityOptions} bundle to
- * {@link #startActivity(Intent, Bundle) or a related function. This allows
+ * {@link #startActivity(Intent, Bundle)} or a related function. This allows
* you to specify a custom animation even when starting an activity from
* outside the context of the current top activity.
*
@@ -6122,7 +6122,6 @@
* the return value must be checked.
*
* @see #onVisibleBehindCanceled()
- * @see #onBackgroundVisibleBehindChanged(boolean)
*/
public boolean requestVisibleBehind(boolean visible) {
if (!mResumed) {
@@ -6150,7 +6149,6 @@
* process. Otherwise {@link #onStop()} will be called following return.
*
* @see #requestVisibleBehind(boolean)
- * @see #onBackgroundVisibleBehindChanged(boolean)
*/
@CallSuper
public void onVisibleBehindCanceled() {
diff --git a/core/java/android/app/ActivityTransitionState.java b/core/java/android/app/ActivityTransitionState.java
index 2219238..aef1d0c 100644
--- a/core/java/android/app/ActivityTransitionState.java
+++ b/core/java/android/app/ActivityTransitionState.java
@@ -337,11 +337,12 @@
}
public void startExitOutTransition(Activity activity, Bundle options) {
- if (!activity.getWindow().hasFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)) {
+ mEnterTransitionCoordinator = null;
+ if (!activity.getWindow().hasFeature(Window.FEATURE_ACTIVITY_TRANSITIONS) ||
+ mExitTransitionCoordinators == null) {
return;
}
ActivityOptions activityOptions = new ActivityOptions(options);
- mEnterTransitionCoordinator = null;
if (activityOptions.getAnimationType() == ActivityOptions.ANIM_SCENE_TRANSITION) {
int key = activityOptions.getExitCoordinatorKey();
int index = mExitTransitionCoordinators.indexOfKey(key);
diff --git a/core/java/android/app/Fragment.java b/core/java/android/app/Fragment.java
index 8afca78..5dead28 100644
--- a/core/java/android/app/Fragment.java
+++ b/core/java/android/app/Fragment.java
@@ -194,7 +194,7 @@
* <div class="special reference">
* <h3>Developer Guides</h3>
* <p>For more information about using fragments, read the
- * <a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+ * <a href="{@docRoot}guide/components/fragments.html">Fragments</a> developer guide.</p>
* </div>
*
* <a name="OlderPlatforms"></a>
diff --git a/core/java/android/app/FragmentManager.java b/core/java/android/app/FragmentManager.java
index cd7665c..bfaf332 100644
--- a/core/java/android/app/FragmentManager.java
+++ b/core/java/android/app/FragmentManager.java
@@ -59,7 +59,7 @@
* <div class="special reference">
* <h3>Developer Guides</h3>
* <p>For more information about using fragments, read the
- * <a href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a> developer guide.</p>
+ * <a href="{@docRoot}guide/components/fragments.html">Fragments</a> developer guide.</p>
* </div>
*
* While the FragmentManager API was introduced in
diff --git a/core/java/android/app/ITransientNotification.aidl b/core/java/android/app/ITransientNotification.aidl
index 35b53a4..d5b3ed0 100644
--- a/core/java/android/app/ITransientNotification.aidl
+++ b/core/java/android/app/ITransientNotification.aidl
@@ -19,7 +19,7 @@
/** @hide */
oneway interface ITransientNotification {
- void show();
+ void show(IBinder windowToken);
void hide();
}
diff --git a/core/java/android/app/IWallpaperManager.aidl b/core/java/android/app/IWallpaperManager.aidl
index db7d54b..75a5bf7 100644
--- a/core/java/android/app/IWallpaperManager.aidl
+++ b/core/java/android/app/IWallpaperManager.aidl
@@ -44,7 +44,7 @@
*/
ParcelFileDescriptor setWallpaper(String name, in String callingPackage,
in Rect cropHint, boolean allowBackup, out Bundle extras, int which,
- IWallpaperManagerCallback completion);
+ IWallpaperManagerCallback completion, int userId);
/**
* Set the live wallpaper. This only affects the system wallpaper.
@@ -128,7 +128,7 @@
/*
* Backup: is the current system wallpaper image eligible for off-device backup?
*/
- boolean isWallpaperBackupEligible(int userId);
+ boolean isWallpaperBackupEligible(int which, int userId);
/*
* Keyguard: register a callback for being notified that lock-state relevant
diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java
index 20cbde1..219afea 100644
--- a/core/java/android/app/WallpaperManager.java
+++ b/core/java/android/app/WallpaperManager.java
@@ -48,6 +48,7 @@
import android.os.IBinder;
import android.os.Looper;
import android.os.ParcelFileDescriptor;
+import android.os.Process;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemProperties;
@@ -939,7 +940,8 @@
/* Set the wallpaper to the default values */
ParcelFileDescriptor fd = sGlobals.mService.setWallpaper(
"res:" + resources.getResourceName(resid),
- mContext.getOpPackageName(), null, false, result, which, completion);
+ mContext.getOpPackageName(), null, false, result, which, completion,
+ UserHandle.myUserId());
if (fd != null) {
FileOutputStream fos = null;
boolean ok = false;
@@ -1040,6 +1042,19 @@
public int setBitmap(Bitmap fullImage, Rect visibleCropHint,
boolean allowBackup, @SetWallpaperFlags int which)
throws IOException {
+ return setBitmap(fullImage, visibleCropHint, allowBackup, which,
+ UserHandle.myUserId());
+ }
+
+ /**
+ * Like {@link #setBitmap(Bitmap, Rect, boolean, int)}, but allows to pass in an explicit user
+ * id. If the user id doesn't match the user id the process is running under, calling this
+ * requires permission {@link android.Manifest.permission#INTERACT_ACROSS_USERS_FULL}.
+ * @hide
+ */
+ public int setBitmap(Bitmap fullImage, Rect visibleCropHint,
+ boolean allowBackup, @SetWallpaperFlags int which, int userId)
+ throws IOException {
validateRect(visibleCropHint);
if (sGlobals.mService == null) {
Log.w(TAG, "WallpaperService not running");
@@ -1050,7 +1065,7 @@
try {
ParcelFileDescriptor fd = sGlobals.mService.setWallpaper(null,
mContext.getOpPackageName(), visibleCropHint, allowBackup,
- result, which, completion);
+ result, which, completion, userId);
if (fd != null) {
FileOutputStream fos = null;
try {
@@ -1176,7 +1191,7 @@
try {
ParcelFileDescriptor fd = sGlobals.mService.setWallpaper(null,
mContext.getOpPackageName(), visibleCropHint, allowBackup,
- result, which, completion);
+ result, which, completion, UserHandle.myUserId());
if (fd != null) {
FileOutputStream fos = null;
try {
@@ -1680,13 +1695,13 @@
* Only the OS itself may use this method.
* @hide
*/
- public boolean isWallpaperBackupEligible() {
+ public boolean isWallpaperBackupEligible(int which) {
if (sGlobals.mService == null) {
Log.w(TAG, "WallpaperService not running");
throw new RuntimeException(new DeadSystemException());
}
try {
- return sGlobals.mService.isWallpaperBackupEligible(mContext.getUserId());
+ return sGlobals.mService.isWallpaperBackupEligible(which, mContext.getUserId());
} catch (RemoteException e) {
Log.e(TAG, "Exception querying wallpaper backup eligibility: " + e.getMessage());
}
diff --git a/core/java/android/app/admin/DevicePolicyManager.java b/core/java/android/app/admin/DevicePolicyManager.java
index 2a12ac8..688876c 100644
--- a/core/java/android/app/admin/DevicePolicyManager.java
+++ b/core/java/android/app/admin/DevicePolicyManager.java
@@ -1276,6 +1276,33 @@
public static final int PASSWORD_QUALITY_MANAGED = 0x80000;
/**
+ * @hide
+ *
+ * adb shell dpm set-{device,profile}-owner will normally not allow installing an owner to
+ * a user with accounts. {@link #ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED}
+ * and {@link #ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED} are the account features
+ * used by authenticator to exempt their accounts from this:
+ *
+ * <ul>
+ * <li>Non-test-only DO/PO still can't be installed when there are accounts.
+ * <p>In order to make an apk test-only, add android:testOnly="true" to the
+ * <application> tag in the manifest.
+ *
+ * <li>Test-only DO/PO can be installed even when there are accounts, as long as all the
+ * accounts have the {@link #ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED} feature.
+ * Some authenticators claim to have any features, so to detect it, we also check
+ * {@link #ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED} and disallow installing
+ * if any of the accounts have it.
+ * </ul>
+ */
+ public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED =
+ "android.account.DEVICE_OR_PROFILE_OWNER_ALLOWED";
+
+ /** @hide See {@link #ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED} */
+ public static final String ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED =
+ "android.account.DEVICE_OR_PROFILE_OWNER_DISALLOWED";
+
+ /**
* Called by an application that is administering the device to set the password restrictions it
* is imposing. After setting this, the user will not be able to enter a new password that is
* not at least as restrictive as what has been set. Note that the current password will remain
@@ -2219,6 +2246,7 @@
* @throws SecurityException if the calling application does not own an active administrator
* that uses {@link DeviceAdminInfo#USES_POLICY_RESET_PASSWORD}
* @throws IllegalStateException if the calling user is locked or has a managed profile.
+ * @throws IllegalArgumentException if the password does not meet system requirements.
*/
public boolean resetPassword(String password, int flags) {
throwIfParentInstance("resetPassword");
diff --git a/core/java/android/app/package.html b/core/java/android/app/package.html
index f37f1dc..b259cad 100644
--- a/core/java/android/app/package.html
+++ b/core/java/android/app/package.html
@@ -34,7 +34,7 @@
<p>For information about using some the classes in this package, see the following
documents: <a href="{@docRoot}guide/topics/fundamentals/activities.html">Activities</a>, <a
href="{@docRoot}guide/topics/fundamentals/services.html">Services</a>, <a
-href="{@docRoot}guide/topics/fundamentals/fragments.html">Fragments</a>, <a
+href="{@docRoot}guide/components/fragments.html">Fragments</a>, <a
href="{@docRoot}guide/topics/ui/actionbar.html">Using the Action Bar</a>, <a
href="{@docRoot}guide/topics/ui/dialogs.html">Creating Dialogs</a>, and <a
href="{@docRoot}guide/topics/ui/notifiers/index.html">Notifying the User</a>.</p>
diff --git a/core/java/android/bluetooth/BluetoothAdapter.java b/core/java/android/bluetooth/BluetoothAdapter.java
index 47ae687..246a752 100644
--- a/core/java/android/bluetooth/BluetoothAdapter.java
+++ b/core/java/android/bluetooth/BluetoothAdapter.java
@@ -89,8 +89,11 @@
*
* <div class="special reference">
* <h3>Developer Guides</h3>
- * <p>For more information about using Bluetooth, read the
- * <a href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.
+ * <p>
+ * For more information about using Bluetooth, read the <a href=
+ * "{@docRoot}guide/topics/connectivity/bluetooth.html">Bluetooth</a> developer
+ * guide.
+ * </p>
* </div>
*
* {@see BluetoothDevice}
diff --git a/core/java/android/bluetooth/BluetoothDevice.java b/core/java/android/bluetooth/BluetoothDevice.java
index f43fb30..189147e 100644
--- a/core/java/android/bluetooth/BluetoothDevice.java
+++ b/core/java/android/bluetooth/BluetoothDevice.java
@@ -59,8 +59,11 @@
*
* <div class="special reference">
* <h3>Developer Guides</h3>
- * <p>For more information about using Bluetooth, read the
- * <a href="{@docRoot}guide/topics/wireless/bluetooth.html">Bluetooth</a> developer guide.</p>
+ * <p>
+ * For more information about using Bluetooth, read the <a href=
+ * "{@docRoot}guide/topics/connectivity/bluetooth.html">Bluetooth</a> developer
+ * guide.
+ * </p>
* </div>
*
* {@see BluetoothAdapter}
diff --git a/core/java/android/bluetooth/BluetoothManager.java b/core/java/android/bluetooth/BluetoothManager.java
index 35437a1..00058a9 100644
--- a/core/java/android/bluetooth/BluetoothManager.java
+++ b/core/java/android/bluetooth/BluetoothManager.java
@@ -38,8 +38,11 @@
*
* <div class="special reference">
* <h3>Developer Guides</h3>
- * <p>For more information about using BLUETOOTH, read the
- * <a href="{@docRoot}guide/topics/connectivity/bluetooth.html">Bluetooth</a> developer guide.</p>
+ * <p>
+ * For more information about using BLUETOOTH, read the <a href=
+ * "{@docRoot}guide/topics/connectivity/bluetooth.html">Bluetooth</a> developer
+ * guide.
+ * </p>
* </div>
*
* @see Context#getSystemService
diff --git a/core/java/android/content/ContentResolver.java b/core/java/android/content/ContentResolver.java
index b3320d6..daa1b93 100644
--- a/core/java/android/content/ContentResolver.java
+++ b/core/java/android/content/ContentResolver.java
@@ -1877,6 +1877,7 @@
if (extras != null) {
String accountName = extras.getString(SYNC_EXTRAS_ACCOUNT);
if (!TextUtils.isEmpty(accountName)) {
+ // TODO: No references to Google in AOSP
account = new Account(accountName, "com.google");
}
extras.remove(SYNC_EXTRAS_ACCOUNT);
diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java
index 3f18ea9..f908abc 100644
--- a/core/java/android/content/Context.java
+++ b/core/java/android/content/Context.java
@@ -2761,8 +2761,10 @@
* <dd> A {@link android.net.ConnectivityManager ConnectivityManager} for
* handling management of network connections.
* <dt> {@link #WIFI_SERVICE} ("wifi")
- * <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of
- * Wi-Fi connectivity.
+ * <dd> A {@link android.net.wifi.WifiManager WifiManager} for management of Wi-Fi
+ * connectivity. On releases before NYC, it should only be obtained from an application
+ * context, and not from any other derived context to avoid memory leaks within the calling
+ * process.
* <dt> {@link #WIFI_P2P_SERVICE} ("wifip2p")
* <dd> A {@link android.net.wifi.p2p.WifiP2pManager WifiP2pManager} for management of
* Wi-Fi Direct connectivity.
diff --git a/core/java/android/content/Intent.java b/core/java/android/content/Intent.java
index 4d9db98..1cf23ae 100644
--- a/core/java/android/content/Intent.java
+++ b/core/java/android/content/Intent.java
@@ -4314,6 +4314,14 @@
public static final int FLAG_DEBUG_TRIAGED_MISSING = 0x00000100;
/**
+ * Internal flag used to indicate ephemeral applications should not be
+ * considered when resolving the intent.
+ *
+ * @hide
+ */
+ public static final int FLAG_IGNORE_EPHEMERAL = 0x00000200;
+
+ /**
* If set, the new activity is not kept in the history stack. As soon as
* the user navigates away from it, the activity is finished. This may also
* be set with the {@link android.R.styleable#AndroidManifestActivity_noHistory
diff --git a/core/java/android/content/Loader.java b/core/java/android/content/Loader.java
index c5e0ea7..3faf13b 100644
--- a/core/java/android/content/Loader.java
+++ b/core/java/android/content/Loader.java
@@ -44,7 +44,7 @@
* <div class="special reference">
* <h3>Developer Guides</h3>
* <p>For more information about using loaders, read the
- * <a href="{@docRoot}guide/topics/fundamentals/loaders.html">Loaders</a> developer guide.</p>
+ * <a href="{@docRoot}guide/components/loaders.html">Loaders</a> developer guide.</p>
* </div>
*
* @param <D> The result returned when the load is complete
diff --git a/core/java/android/content/SyncAdapterType.java b/core/java/android/content/SyncAdapterType.java
index 8a16ac9..6ef7fd2 100644
--- a/core/java/android/content/SyncAdapterType.java
+++ b/core/java/android/content/SyncAdapterType.java
@@ -16,6 +16,7 @@
package android.content;
+import android.annotation.Nullable;
import android.text.TextUtils;
import android.os.Parcelable;
import android.os.Parcel;
@@ -33,6 +34,7 @@
private final boolean isAlwaysSyncable;
private final boolean allowParallelSyncs;
private final String settingsActivity;
+ private final String packageName;
public SyncAdapterType(String authority, String accountType, boolean userVisible,
boolean supportsUploading) {
@@ -50,6 +52,7 @@
this.allowParallelSyncs = false;
this.settingsActivity = null;
this.isKey = false;
+ this.packageName = null;
}
/** @hide */
@@ -57,7 +60,8 @@
boolean supportsUploading,
boolean isAlwaysSyncable,
boolean allowParallelSyncs,
- String settingsActivity) {
+ String settingsActivity,
+ String packageName) {
if (TextUtils.isEmpty(authority)) {
throw new IllegalArgumentException("the authority must not be empty: " + authority);
}
@@ -72,6 +76,7 @@
this.allowParallelSyncs = allowParallelSyncs;
this.settingsActivity = settingsActivity;
this.isKey = false;
+ this.packageName = packageName;
}
private SyncAdapterType(String authority, String accountType) {
@@ -89,6 +94,7 @@
this.allowParallelSyncs = false;
this.settingsActivity = null;
this.isKey = true;
+ this.packageName = null;
}
public boolean supportsUploading() {
@@ -148,6 +154,16 @@
return settingsActivity;
}
+ /**
+ * The package hosting the sync adapter.
+ * @return The package name.
+ *
+ * @hide
+ */
+ public @Nullable String getPackageName() {
+ return packageName;
+ }
+
public static SyncAdapterType newKey(String authority, String accountType) {
return new SyncAdapterType(authority, accountType);
}
@@ -181,6 +197,7 @@
+ ", isAlwaysSyncable=" + isAlwaysSyncable
+ ", allowParallelSyncs=" + allowParallelSyncs
+ ", settingsActivity=" + settingsActivity
+ + ", packageName=" + packageName
+ "}";
}
}
@@ -201,6 +218,7 @@
dest.writeInt(isAlwaysSyncable ? 1 : 0);
dest.writeInt(allowParallelSyncs ? 1 : 0);
dest.writeString(settingsActivity);
+ dest.writeString(packageName);
}
public SyncAdapterType(Parcel source) {
@@ -211,6 +229,7 @@
source.readInt() != 0,
source.readInt() != 0,
source.readInt() != 0,
+ source.readString(),
source.readString());
}
diff --git a/core/java/android/content/SyncAdaptersCache.java b/core/java/android/content/SyncAdaptersCache.java
index 6704b75..ddbdb8a 100644
--- a/core/java/android/content/SyncAdaptersCache.java
+++ b/core/java/android/content/SyncAdaptersCache.java
@@ -81,7 +81,7 @@
sa.getString(com.android.internal.R.styleable
.SyncAdapter_settingsActivity);
return new SyncAdapterType(authority, accountType, userVisible, supportsUploading,
- isAlwaysSyncable, allowParallelSyncs, settingsActivity);
+ isAlwaysSyncable, allowParallelSyncs, settingsActivity, packageName);
} finally {
sa.recycle();
}
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 82cd448..2093124 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -2290,11 +2290,7 @@
b.append(cls);
return b.toString().intern();
}
- if (c >= 'a' && c <= 'z') {
- return cls.intern();
- }
- outError[0] = "Bad class name " + cls + " in package " + pkg;
- return null;
+ return cls.intern();
}
private static String buildCompoundName(String pkg,
@@ -2755,12 +2751,7 @@
}
if (ai.name != null) {
- ai.className = buildClassName(pkgName, ai.name, outError);
- if (ai.className == null) {
- sa.recycle();
- mParseError = PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED;
- return false;
- }
+ ai.className = ai.name;
}
String manageSpaceActivity = sa.getNonConfigurationString(
diff --git a/core/java/android/content/pm/RegisteredServicesCache.java b/core/java/android/content/pm/RegisteredServicesCache.java
index 6162d1a..a110383 100644
--- a/core/java/android/content/pm/RegisteredServicesCache.java
+++ b/core/java/android/content/pm/RegisteredServicesCache.java
@@ -30,6 +30,7 @@
import android.os.UserManager;
import android.util.AtomicFile;
import android.util.AttributeSet;
+import android.util.IntArray;
import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
@@ -54,6 +55,7 @@
import java.io.PrintWriter;
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;
@@ -344,6 +346,47 @@
}
}
+ public void updateServices(int userId) {
+ if (DEBUG) {
+ Slog.d(TAG, "updateServices u" + userId);
+ }
+ List<ServiceInfo<V>> allServices;
+ synchronized (mServicesLock) {
+ final UserServices<V> user = findOrCreateUserLocked(userId);
+ // If services haven't been initialized yet - no updates required
+ if (user.services == null) {
+ return;
+ }
+ allServices = new ArrayList<>(user.services.values());
+ }
+ IntArray updatedUids = null;
+ for (ServiceInfo<V> service : allServices) {
+ int versionCode = service.componentInfo.applicationInfo.versionCode;
+ String pkg = service.componentInfo.packageName;
+ ApplicationInfo newAppInfo = null;
+ try {
+ newAppInfo = mContext.getPackageManager().getApplicationInfoAsUser(pkg, 0, userId);
+ } catch (NameNotFoundException e) {
+ // Package uninstalled - treat as null app info
+ }
+ // If package updated or removed
+ if ((newAppInfo == null) || (newAppInfo.versionCode != versionCode)) {
+ if (DEBUG) {
+ Slog.d(TAG, "Package " + pkg + " uid=" + service.uid
+ + " updated. New appInfo: " + newAppInfo);
+ }
+ if (updatedUids == null) {
+ updatedUids = new IntArray();
+ }
+ updatedUids.add(service.uid);
+ }
+ }
+ if (updatedUids != null && updatedUids.size() > 0) {
+ int[] updatedUidsArray = updatedUids.toArray();
+ generateServicesMap(updatedUidsArray, userId);
+ }
+ }
+
@VisibleForTesting
protected boolean inSystemImage(int callerUid) {
String[] packages = mContext.getPackageManager().getPackagesForUid(callerUid);
@@ -379,10 +422,11 @@
*/
private void generateServicesMap(int[] changedUids, int userId) {
if (DEBUG) {
- Slog.d(TAG, "generateServicesMap() for " + userId + ", changed UIDs = " + changedUids);
+ Slog.d(TAG, "generateServicesMap() for " + userId + ", changed UIDs = "
+ + Arrays.toString(changedUids));
}
- final ArrayList<ServiceInfo<V>> serviceInfos = new ArrayList<ServiceInfo<V>>();
+ final ArrayList<ServiceInfo<V>> serviceInfos = new ArrayList<>();
final List<ResolveInfo> resolveInfos = queryIntentServices(userId);
for (ResolveInfo resolveInfo : resolveInfos) {
try {
diff --git a/core/java/android/content/pm/ResolveInfo.java b/core/java/android/content/pm/ResolveInfo.java
index c9be6ed..b5df4d7 100644
--- a/core/java/android/content/pm/ResolveInfo.java
+++ b/core/java/android/content/pm/ResolveInfo.java
@@ -68,12 +68,6 @@
public EphemeralResolveInfo ephemeralResolveInfo;
/**
- * A ResolveInfo that points at the ephemeral installer.
- * @hide
- */
- public ResolveInfo ephemeralInstaller;
-
- /**
* The IntentFilter that was matched for this ResolveInfo.
*/
public IntentFilter filter;
diff --git a/core/java/android/hardware/location/ContextHubManager.java b/core/java/android/hardware/location/ContextHubManager.java
index 0c3d4b3..d4dcacc 100644
--- a/core/java/android/hardware/location/ContextHubManager.java
+++ b/core/java/android/hardware/location/ContextHubManager.java
@@ -123,10 +123,18 @@
/**
* Load a nano app on a specified context hub.
*
+ * Note that loading is asynchronous. When we return from this method,
+ * the nano app (probably) hasn't loaded yet. Assuming a return of 0
+ * from this method, then the final success/failure for the load, along
+ * with the "handle" for the nanoapp, is all delivered in a byte
+ * string via a call to Callback.onMessageReceipt.
+ *
+ * TODO(b/30784270): Provide a better success/failure and "handle" delivery.
+ *
* @param hubHandle handle of context hub to load the app on.
* @param app the nanoApp to load on the hub
*
- * @return int nanoAppInstance of the loaded nanoApp on success,
+ * @return 0 if the command for loading was sent to the context hub;
* -1 otherwise
*
* @see NanoApp
@@ -150,9 +158,17 @@
/**
* Unload a specified nanoApp
*
- * @param nanoAppHandle handle of the nanoApp to load
+ * Note that unloading is asynchronous. When we return from this method,
+ * the nano app (probably) hasn't unloaded yet. Assuming a return of 0
+ * from this method, then the final success/failure for the unload is
+ * delivered in a byte string via a call to Callback.onMessageReceipt.
*
- * @return int 0 on success, -1 otherwise
+ * TODO(b/30784270): Provide a better success/failure delivery.
+ *
+ * @param nanoAppHandle handle of the nanoApp to unload
+ *
+ * @return 0 if the command for unloading was sent to the context hub;
+ * -1 otherwise
*/
public int unloadNanoApp(int nanoAppHandle) {
int retVal = -1;
@@ -169,6 +185,24 @@
/**
* get information about the nano app instance
*
+ * NOTE: The returned NanoAppInstanceInfo does _not_ contain correct
+ * information for several fields, specifically:
+ * - getName()
+ * - getPublisher()
+ * - getNeededExecMemBytes()
+ * - getNeededReadMemBytes()
+ * - getNeededWriteMemBytes()
+ *
+ * For example, say you call loadNanoApp() with a NanoApp that has
+ * getName() returning "My Name". Later, if you call getNanoAppInstanceInfo
+ * for that nanoapp, the returned NanoAppInstanceInfo's getName()
+ * method will claim "Preloaded app, unknown", even though you would
+ * have expected "My Name". For now, as the user, you'll need to
+ * separately track the above fields if they are of interest to you.
+ *
+ * TODO(b/30943489): Have the returned NanoAppInstanceInfo contain the
+ * correct information.
+ *
* @param nanoAppHandle handle of the nanoAppInstance
* @return NanoAppInstanceInfo Information about the nano app instance.
*
@@ -209,6 +243,14 @@
/**
* Send a message to a specific nano app instance on a context hub.
*
+ * Note that the return value of this method only speaks of success
+ * up to the point of sending this to the Context Hub. It is not
+ * an assurance that the Context Hub successfully sent this message
+ * on to the nanoapp. If assurance is desired, a protocol should be
+ * established between your code and the nanoapp, with the nanoapp
+ * sending a confirmation message (which will be reported via
+ * Callback.onMessageReceipt).
+ *
* @param hubHandle handle of the hub to send the message to
* @param nanoAppHandle handle of the nano app to send to
* @param message Message to be sent
diff --git a/core/java/android/hardware/location/ContextHubService.java b/core/java/android/hardware/location/ContextHubService.java
index 062c958..eea2387 100644
--- a/core/java/android/hardware/location/ContextHubService.java
+++ b/core/java/android/hardware/location/ContextHubService.java
@@ -162,6 +162,28 @@
msgHeader[HEADER_FIELD_MSG_TYPE] = MSG_LOAD_NANO_APP;
long appId = app.getAppId();
+ // TODO(b/30808791): Remove this hack when the NanoApp API is fixed.
+ // Due to a bug in the NanoApp API, only the least significant four
+ // bytes of the app ID can be stored. The most significant five
+ // bytes of a normal app ID are the "vendor", and thus the most
+ // significant of the bytes we have is the least significant byte
+ // of the vendor. In the case that byte is the ASCII value for
+ // lower-case 'L', we assume the vendor is supposed to be "Googl"
+ // and fill in the four most significant bytes accordingly.
+ if ((appId >> 32) != 0) {
+ // We're unlikely to notice this warning, but at least
+ // we can avoid running our hack logic.
+ Log.w(TAG, "Code has not been updated since API fix.");
+ } else {
+ // Note: Lower-case 'L', not the number 1.
+ if (((appId >> 24) & 0xFF) == (long)'l') {
+ // Assume we're a Google nanoapp.
+ appId |= ((long)'G') << 56;
+ appId |= ((long)'o') << 48;
+ appId |= ((long)'o') << 40;
+ appId |= ((long)'g') << 32;
+ }
+ }
msgHeader[HEADER_FIELD_LOAD_APP_ID_LO] = (int)(appId & 0xFFFFFFFF);
msgHeader[HEADER_FIELD_LOAD_APP_ID_HI] = (int)((appId >> 32) & 0xFFFFFFFF);
@@ -322,9 +344,16 @@
appInfo.setNeededReadMemBytes(PRE_LOADED_APP_MEM_REQ);
appInfo.setNeededWriteMemBytes(PRE_LOADED_APP_MEM_REQ);
+ String action;
+ if (mNanoAppHash.containsKey(appInstanceHandle)) {
+ action = "Updated";
+ } else {
+ action = "Added";
+ }
+
mNanoAppHash.put(appInstanceHandle, appInfo);
- Log.d(TAG, "Added app instance " + appInstanceHandle + " with id " + appId
- + " version " + appVersion);
+ Log.d(TAG, action + " app instance " + appInstanceHandle + " with id "
+ + appId + " version " + appVersion);
return 0;
}
diff --git a/core/java/android/hardware/location/NanoAppFilter.java b/core/java/android/hardware/location/NanoAppFilter.java
index 8db70e9..bf35a3d 100644
--- a/core/java/android/hardware/location/NanoAppFilter.java
+++ b/core/java/android/hardware/location/NanoAppFilter.java
@@ -43,7 +43,8 @@
private long mAppIdVendorMask;
// Id of the context hub this instance is expected on
- private int mContextHubId;
+ // TODO: Provide an API which will let us change this HubId.
+ private int mContextHubId = HUB_ANY;
/**
* Flag indicating any version. With this flag set, all versions shall match provided version.
diff --git a/core/java/android/hardware/location/NanoAppInstanceInfo.java b/core/java/android/hardware/location/NanoAppInstanceInfo.java
index 71a5a88..ac6d83f 100644
--- a/core/java/android/hardware/location/NanoAppInstanceInfo.java
+++ b/core/java/android/hardware/location/NanoAppInstanceInfo.java
@@ -113,7 +113,12 @@
}
/**
- * Set the application version
+ * Get the application version
+ *
+ * NOTE: There is a race condition where shortly after loading, this
+ * may return -1 instead of the correct version.
+ *
+ * TODO(b/30970527): Fix this race condition.
*
* @return int - version of the app
*/
diff --git a/core/java/android/net/LocalSocketImpl.java b/core/java/android/net/LocalSocketImpl.java
index b83fb26..0f0e9c4 100644
--- a/core/java/android/net/LocalSocketImpl.java
+++ b/core/java/android/net/LocalSocketImpl.java
@@ -516,13 +516,11 @@
Os.setsockoptLinger(fd, OsConstants.SOL_SOCKET, OsConstants.SO_LINGER, linger);
break;
case SocketOptions.SO_TIMEOUT:
- /*
- * SO_TIMEOUT from the core library gets converted to
- * SO_SNDTIMEO, but the option is supposed to set both
- * send and receive timeouts. Note: The incoming timeout
- * value is in milliseconds.
- */
+ // The option must set both send and receive timeouts.
+ // Note: The incoming timeout value is in milliseconds.
StructTimeval timeval = StructTimeval.fromMillis(intValue);
+ Os.setsockoptTimeval(fd, OsConstants.SOL_SOCKET, OsConstants.SO_RCVTIMEO,
+ timeval);
Os.setsockoptTimeval(fd, OsConstants.SOL_SOCKET, OsConstants.SO_SNDTIMEO,
timeval);
break;
diff --git a/core/java/android/net/NetworkIdentity.java b/core/java/android/net/NetworkIdentity.java
index 9cd563e..d570e66 100644
--- a/core/java/android/net/NetworkIdentity.java
+++ b/core/java/android/net/NetworkIdentity.java
@@ -175,7 +175,11 @@
if (isNetworkTypeMobile(type)) {
if (state.subscriberId == null) {
- Slog.w(TAG, "Active mobile network without subscriber!");
+ if (state.networkInfo.getState() != NetworkInfo.State.DISCONNECTED &&
+ state.networkInfo.getState() != NetworkInfo.State.UNKNOWN) {
+ Slog.w(TAG, "Active mobile network without subscriber! ni = "
+ + state.networkInfo);
+ }
}
subscriberId = state.subscriberId;
diff --git a/core/java/android/os/AsyncTask.java b/core/java/android/os/AsyncTask.java
index 63f39c5..9a4b599 100644
--- a/core/java/android/os/AsyncTask.java
+++ b/core/java/android/os/AsyncTask.java
@@ -35,8 +35,8 @@
import java.util.concurrent.atomic.AtomicInteger;
/**
- * <p>AsyncTask enables proper and easy use of the UI thread. This class allows to
- * perform background operations and publish results on the UI thread without
+ * <p>AsyncTask enables proper and easy use of the UI thread. This class allows you
+ * to perform background operations and publish results on the UI thread without
* having to manipulate threads and/or handlers.</p>
*
* <p>AsyncTask is designed to be a helper class around {@link Thread} and {@link Handler}
@@ -55,7 +55,7 @@
* <div class="special reference">
* <h3>Developer Guides</h3>
* <p>For more information about using tasks and threads, read the
- * <a href="{@docRoot}guide/topics/fundamentals/processes-and-threads.html">Processes and
+ * <a href="{@docRoot}guide/components/processes-and-threads.html">Processes and
* Threads</a> developer guide.</p>
* </div>
*
@@ -298,12 +298,16 @@
mWorker = new WorkerRunnable<Params, Result>() {
public Result call() throws Exception {
mTaskInvoked.set(true);
-
- Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
- //noinspection unchecked
- Result result = doInBackground(mParams);
- Binder.flushPendingCommands();
- return postResult(result);
+ Result result = null;
+ try {
+ Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND);
+ //noinspection unchecked
+ result = doInBackground(mParams);
+ Binder.flushPendingCommands();
+ } finally {
+ postResult(result);
+ }
+ return result;
}
};
diff --git a/core/java/android/os/Build.java b/core/java/android/os/Build.java
index 9f02050..3d3dc9c 100644
--- a/core/java/android/os/Build.java
+++ b/core/java/android/os/Build.java
@@ -714,7 +714,7 @@
public static final int N = 24;
/**
- * N MR1: Still ¯\_(シ)_/¯.
+ * N MR1: Nougat++.
*/
public static final int N_MR1 = 25;
}
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 8d6d9ed..4616af8 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -372,6 +372,14 @@
}
/**
+ * @see #getDataPreloadsDirectory()
+ * {@hide}
+ */
+ public static File getDataPreloadsMediaDirectory() {
+ return new File(getDataPreloadsDirectory(), "media");
+ }
+
+ /**
* Return the primary shared/external storage directory. This directory may
* not currently be accessible if it has been mounted by the user on their
* computer, has been removed from the device, or some other problem has
diff --git a/core/java/android/os/FileObserver.java b/core/java/android/os/FileObserver.java
index 4e705e0..dd85e15 100644
--- a/core/java/android/os/FileObserver.java
+++ b/core/java/android/os/FileObserver.java
@@ -16,6 +16,7 @@
package android.os;
+import android.annotation.Nullable;
import android.util.Log;
import java.lang.ref.WeakReference;
@@ -204,7 +205,8 @@
*
* @param event The type of event which happened
* @param path The path, relative to the main monitored file or directory,
- * of the file or directory which triggered the event
+ * of the file or directory which triggered the event. This value can
+ * be {@code null} for certain events, such as {@link #MOVE_SELF}.
*/
- public abstract void onEvent(int event, String path);
+ public abstract void onEvent(int event, @Nullable String path);
}
diff --git a/core/java/android/os/Process.java b/core/java/android/os/Process.java
index 4ef882e..e1b7fda 100644
--- a/core/java/android/os/Process.java
+++ b/core/java/android/os/Process.java
@@ -567,6 +567,15 @@
ZygoteState zygoteState, ArrayList<String> args)
throws ZygoteStartFailedEx {
try {
+ // Throw early if any of the arguments are malformed. This means we can
+ // avoid writing a partial response to the zygote.
+ int sz = args.size();
+ for (int i = 0; i < sz; i++) {
+ if (args.get(i).indexOf('\n') >= 0) {
+ throw new ZygoteStartFailedEx("embedded newlines not allowed");
+ }
+ }
+
/**
* See com.android.internal.os.ZygoteInit.readArgumentList()
* Presently the wire format to the zygote process is:
@@ -583,13 +592,8 @@
writer.write(Integer.toString(args.size()));
writer.newLine();
- int sz = args.size();
for (int i = 0; i < sz; i++) {
String arg = args.get(i);
- if (arg.indexOf('\n') >= 0) {
- throw new ZygoteStartFailedEx(
- "embedded newlines not allowed");
- }
writer.write(arg);
writer.newLine();
}
@@ -598,11 +602,16 @@
// Should there be a timeout on this?
ProcessStartResult result = new ProcessStartResult();
+
+ // Always read the entire result from the input stream to avoid leaving
+ // bytes in the stream for future process starts to accidentally stumble
+ // upon.
result.pid = inputStream.readInt();
+ result.usingWrapper = inputStream.readBoolean();
+
if (result.pid < 0) {
throw new ZygoteStartFailedEx("fork() failed");
}
- result.usingWrapper = inputStream.readBoolean();
return result;
} catch (IOException ex) {
zygoteState.close();
diff --git a/core/java/android/os/Trace.java b/core/java/android/os/Trace.java
index 9e8103a..3ae28fd 100644
--- a/core/java/android/os/Trace.java
+++ b/core/java/android/os/Trace.java
@@ -81,6 +81,8 @@
public static final long TRACE_TAG_SYSTEM_SERVER = 1L << 19;
/** @hide */
public static final long TRACE_TAG_DATABASE = 1L << 20;
+ /** @hide */
+ public static final long TRACE_TAG_NETWORK = 1L << 21;
private static final long TRACE_TAG_NOT_READY = 1L << 63;
private static final int MAX_SECTION_NAME_LEN = 127;
diff --git a/core/java/android/preference/Preference.java b/core/java/android/preference/Preference.java
index b1cad05..ec1e102 100644
--- a/core/java/android/preference/Preference.java
+++ b/core/java/android/preference/Preference.java
@@ -719,6 +719,9 @@
* @see #setIcon(Drawable)
*/
public Drawable getIcon() {
+ if (mIcon == null && mIconResId != 0) {
+ mIcon = getContext().getDrawable(mIconResId);
+ }
return mIcon;
}
diff --git a/core/java/android/provider/CallLog.java b/core/java/android/provider/CallLog.java
index fbd61cf3..c7c6ceb 100644
--- a/core/java/android/provider/CallLog.java
+++ b/core/java/android/provider/CallLog.java
@@ -284,8 +284,10 @@
/**
* The cached name associated with the phone number, if it exists.
- * This value is not guaranteed to be current, if the contact information
- * associated with this number has changed.
+ *
+ * <p>This value is typically filled in by the dialer app for the caching purpose,
+ * so it's not guaranteed to be present, and may not be current if the contact
+ * information associated with this number has changed.
* <P>Type: TEXT</P>
*/
public static final String CACHED_NAME = "name";
@@ -293,8 +295,10 @@
/**
* The cached number type (Home, Work, etc) associated with the
* phone number, if it exists.
- * This value is not guaranteed to be current, if the contact information
- * associated with this number has changed.
+ *
+ * <p>This value is typically filled in by the dialer app for the caching purpose,
+ * so it's not guaranteed to be present, and may not be current if the contact
+ * information associated with this number has changed.
* <P>Type: INTEGER</P>
*/
public static final String CACHED_NUMBER_TYPE = "numbertype";
@@ -302,8 +306,10 @@
/**
* The cached number label, for a custom number type, associated with the
* phone number, if it exists.
- * This value is not guaranteed to be current, if the contact information
- * associated with this number has changed.
+ *
+ * <p>This value is typically filled in by the dialer app for the caching purpose,
+ * so it's not guaranteed to be present, and may not be current if the contact
+ * information associated with this number has changed.
* <P>Type: TEXT</P>
*/
public static final String CACHED_NUMBER_LABEL = "numberlabel";
@@ -339,40 +345,50 @@
/**
* The cached URI to look up the contact associated with the phone number, if it exists.
- * This value may not be current if the contact information associated with this number
- * has changed.
+ *
+ * <p>This value is typically filled in by the dialer app for the caching purpose,
+ * so it's not guaranteed to be present, and may not be current if the contact
+ * information associated with this number has changed.
* <P>Type: TEXT</P>
*/
public static final String CACHED_LOOKUP_URI = "lookup_uri";
/**
* The cached phone number of the contact which matches this entry, if it exists.
- * This value may not be current if the contact information associated with this number
- * has changed.
+ *
+ * <p>This value is typically filled in by the dialer app for the caching purpose,
+ * so it's not guaranteed to be present, and may not be current if the contact
+ * information associated with this number has changed.
* <P>Type: TEXT</P>
*/
public static final String CACHED_MATCHED_NUMBER = "matched_number";
/**
* The cached normalized(E164) version of the phone number, if it exists.
- * This value may not be current if the contact information associated with this number
- * has changed.
+ *
+ * <p>This value is typically filled in by the dialer app for the caching purpose,
+ * so it's not guaranteed to be present, and may not be current if the contact
+ * information associated with this number has changed.
* <P>Type: TEXT</P>
*/
public static final String CACHED_NORMALIZED_NUMBER = "normalized_number";
/**
* The cached photo id of the picture associated with the phone number, if it exists.
- * This value may not be current if the contact information associated with this number
- * has changed.
+ *
+ * <p>This value is typically filled in by the dialer app for the caching purpose,
+ * so it's not guaranteed to be present, and may not be current if the contact
+ * information associated with this number has changed.
* <P>Type: INTEGER (long)</P>
*/
public static final String CACHED_PHOTO_ID = "photo_id";
/**
* The cached photo URI of the picture associated with the phone number, if it exists.
- * This value may not be current if the contact information associated with this number
- * has changed.
+ *
+ * <p>This value is typically filled in by the dialer app for the caching purpose,
+ * so it's not guaranteed to be present, and may not be current if the contact
+ * information associated with this number has changed.
* <P>Type: TEXT (URI)</P>
*/
public static final String CACHED_PHOTO_URI = "photo_uri";
@@ -380,9 +396,10 @@
/**
* The cached phone number, formatted with formatting rules based on the country the
* user was in when the call was made or received.
- * This value is not guaranteed to be present, and may not be current if the contact
- * information associated with this number
- * has changed.
+ *
+ * <p>This value is typically filled in by the dialer app for the caching purpose,
+ * so it's not guaranteed to be present, and may not be current if the contact
+ * information associated with this number has changed.
* <P>Type: TEXT</P>
*/
public static final String CACHED_FORMATTED_NUMBER = "formatted_number";
diff --git a/core/java/android/provider/ContactsContract.java b/core/java/android/provider/ContactsContract.java
index c70304e..c495e6c 100644
--- a/core/java/android/provider/ContactsContract.java
+++ b/core/java/android/provider/ContactsContract.java
@@ -35,6 +35,7 @@
import android.content.res.AssetFileDescriptor;
import android.content.res.Resources;
import android.database.Cursor;
+import android.database.CursorWrapper;
import android.database.DatabaseUtils;
import android.graphics.Rect;
import android.net.Uri;
@@ -138,8 +139,20 @@
public static final String DIRECTORY_PARAM_KEY = "directory";
/**
- * A query parameter that limits the number of results returned. The
+ * A query parameter that limits the number of results returned for supported URIs. The
* parameter value should be an integer.
+ *
+ * <p>This parameter is not supported by all URIs. Supported URIs include, but not limited to,
+ * {@link Contacts#CONTENT_URI},
+ * {@link RawContacts#CONTENT_URI},
+ * {@link Data#CONTENT_URI},
+ * {@link CommonDataKinds.Phone#CONTENT_URI},
+ * {@link CommonDataKinds.Callable#CONTENT_URI},
+ * {@link CommonDataKinds.Email#CONTENT_URI},
+ * {@link CommonDataKinds.Contactables#CONTENT_URI},
+ *
+ * <p>In order to limit the number of rows returned by a non-supported URI, you can implement a
+ * {@link CursorWrapper} and override the {@link CursorWrapper#getCount()} methods.
*/
public static final String LIMIT_PARAM_KEY = "limit";
@@ -437,6 +450,9 @@
/**
* _ID of the default directory, which represents locally stored contacts.
+ * <b>This is only supported by {@link ContactsContract.Contacts#CONTENT_URI} and
+ * {@link ContactsContract.Contacts#CONTENT_FILTER_URI}.
+ * Other URLs do not support the concept of "visible" or "invisible" contacts.
*/
public static final long DEFAULT = 0;
diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java
index 5da55b1..f14b672 100755
--- a/core/java/android/provider/Settings.java
+++ b/core/java/android/provider/Settings.java
@@ -5345,6 +5345,13 @@
public static final String LONG_PRESS_TIMEOUT = "long_press_timeout";
/**
+ * The duration in milliseconds between the first tap's up event and the second tap's
+ * down event for an interaction to be considered part of the same multi-press.
+ * @hide
+ */
+ public static final String MULTI_PRESS_TIMEOUT = "multi_press_timeout";
+
+ /**
* List of the enabled print services.
*
* N and beyond uses {@link #DISABLED_PRINT_SERVICES}. But this might be used in an upgrade
@@ -5839,6 +5846,8 @@
/**
* If nonzero, ANRs in invisible background processes bring up a dialog.
* Otherwise, the process will be silently killed.
+ *
+ * Also prevents ANRs and crash dialogs from being suppressed.
* @hide
*/
public static final String ANR_SHOW_BACKGROUND = "anr_show_background";
@@ -6019,6 +6028,17 @@
public static final String ASSIST_SCREENSHOT_ENABLED = "assist_screenshot_enabled";
/**
+ * Specifies whether the screen will show an animation if screen contents are sent to the
+ * assist application (active voice interaction service).
+ *
+ * Note that the disclosure will be forced for third-party assistants or if the device
+ * does not support disabling it.
+ *
+ * @hide
+ */
+ public static final String ASSIST_DISCLOSURE_ENABLED = "assist_disclosure_enabled";
+
+ /**
* Names of the service components that the current user has explicitly allowed to
* see all of the user's notifications, separated by ':'.
*
@@ -6300,6 +6320,12 @@
"system_navigation_keys_enabled";
/**
+ * Holds comma separated list of ordering of QS tiles.
+ * @hide
+ */
+ public static final String QS_TILES = "sysui_qs_tiles";
+
+ /**
* Whether preloaded APKs have been installed for the user.
* @hide
*/
@@ -6307,6 +6333,13 @@
= "demo_user_setup_complete";
/**
+ * Specifies whether the web action API is enabled.
+ *
+ * @hide
+ */
+ public static final String WEB_ACTION_ENABLED = "web_action_enabled";
+
+ /**
* This are the settings to be backed up.
*
* NOTE: Settings are backed up and restored in the order they appear
@@ -6382,7 +6415,11 @@
NIGHT_DISPLAY_CUSTOM_START_TIME,
NIGHT_DISPLAY_CUSTOM_END_TIME,
NIGHT_DISPLAY_AUTO_MODE,
- NIGHT_DISPLAY_ACTIVATED
+ NIGHT_DISPLAY_ACTIVATED,
+ CAMERA_DOUBLE_TWIST_TO_FLIP_ENABLED,
+ CAMERA_DOUBLE_TAP_POWER_GESTURE_DISABLED,
+ SYSTEM_NAVIGATION_KEYS_ENABLED,
+ QS_TILES,
};
/**
@@ -7384,27 +7421,41 @@
public static final String WEBVIEW_DATA_REDUCTION_PROXY_KEY =
"webview_data_reduction_proxy_key";
- /**
- * Whether or not the WebView fallback mechanism should be enabled.
- * 0=disabled, 1=enabled.
- * @hide
- */
- public static final String WEBVIEW_FALLBACK_LOGIC_ENABLED =
- "webview_fallback_logic_enabled";
+ /**
+ * Whether or not the WebView fallback mechanism should be enabled.
+ * 0=disabled, 1=enabled.
+ * @hide
+ */
+ public static final String WEBVIEW_FALLBACK_LOGIC_ENABLED =
+ "webview_fallback_logic_enabled";
- /**
- * Name of the package used as WebView provider (if unset the provider is instead determined
- * by the system).
- * @hide
- */
- public static final String WEBVIEW_PROVIDER = "webview_provider";
+ /**
+ * Name of the package used as WebView provider (if unset the provider is instead determined
+ * by the system).
+ * @hide
+ */
+ public static final String WEBVIEW_PROVIDER = "webview_provider";
- /**
- * Developer setting to enable WebView multiprocess rendering.
- * @hide
- */
- @SystemApi
- public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess";
+ /**
+ * Developer setting to enable WebView multiprocess rendering.
+ * @hide
+ */
+ @SystemApi
+ public static final String WEBVIEW_MULTIPROCESS = "webview_multiprocess";
+
+ /**
+ * The maximum number of notifications shown in 24 hours when switching networks.
+ * @hide
+ */
+ public static final String NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT =
+ "network_switch_notification_daily_limit";
+
+ /**
+ * The minimum time in milliseconds between notifications when switching networks.
+ * @hide
+ */
+ public static final String NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS =
+ "network_switch_notification_rate_limit_millis";
/**
* Whether Wifi display is enabled/disabled
@@ -8708,6 +8759,16 @@
public static final String RETAIL_DEMO_MODE_CONSTANTS = "retail_demo_mode_constants";
/**
+ * The reason for the settings database being downgraded. This is only for
+ * troubleshooting purposes and its value should not be interpreted in any way.
+ *
+ * Type: string
+ *
+ * @hide
+ */
+ public static final String DATABASE_DOWNGRADE_REASON = "database_downgrade_reason";
+
+ /**
* Settings to backup. This is here so that it's in the same place as the settings
* keys and easy to update.
*
diff --git a/core/java/android/provider/VoicemailContract.java b/core/java/android/provider/VoicemailContract.java
index 27b0a8b..5099eeb 100644
--- a/core/java/android/provider/VoicemailContract.java
+++ b/core/java/android/provider/VoicemailContract.java
@@ -30,7 +30,6 @@
import android.telecom.PhoneAccount;
import android.telecom.PhoneAccountHandle;
import android.telecom.Voicemail;
-
import java.util.List;
/**
@@ -123,22 +122,36 @@
"android.intent.action.VOICEMAIL_SMS_RECEIVED";
/**
- * Extra included in {@link #ACTION_VOICEMAIL_SMS_RECEIVED} broadcast intents to indicate the
- * event type of the SMS. Common values are "SYNC" or "STATUS"
+ * Optional extra included in {@link #ACTION_VOICEMAIL_SMS_RECEIVED} broadcast intents to
+ * indicate the event type of the SMS. Common values are "SYNC" or "STATUS". The extra will not
+ * exist if the framework cannot parse the SMS as voicemail but the carrier pattern indicates
+ * it is.
*/
/** @hide */
public static final String EXTRA_VOICEMAIL_SMS_PREFIX =
"com.android.voicemail.extra.VOICEMAIL_SMS_PREFIX";
/**
- * Extra included in {@link #ACTION_VOICEMAIL_SMS_RECEIVED} broadcast intents to indicate the
- * fields sent by the SMS
+ * Optional extra included in {@link #ACTION_VOICEMAIL_SMS_RECEIVED} broadcast intents to
+ * indicate the fields sent by the SMS. The extra will not exist if the framework cannot
+ * parse the SMS as voicemail but the carrier pattern indicates it is.
*/
/** @hide */
public static final String EXTRA_VOICEMAIL_SMS_FIELDS =
"com.android.voicemail.extra.VOICEMAIL_SMS_FIELDS";
/**
+ * Extra included in {@link #ACTION_VOICEMAIL_SMS_RECEIVED} broadcast intents to indicate the
+ * message body of the SMS. This extra is included if the framework cannot
+ * parse the SMS as voicemail but the carrier pattern indicates it is.
+ */
+ /**
+ * @hide
+ */
+ public static final String EXTRA_VOICEMAIL_SMS_MESSAGE_BODY =
+ "com.android.voicemail.extra.VOICEMAIL_SMS_MESSAGE_BODY";
+
+ /**
* Extra included in {@link #ACTION_VOICEMAIL_SMS_RECEIVED} broadcast intents to indicate he
* subscription ID of the phone account that received the SMS.
*/
diff --git a/core/java/android/security/net/config/DirectoryCertificateSource.java b/core/java/android/security/net/config/DirectoryCertificateSource.java
index e3c9d65..119f5d0 100644
--- a/core/java/android/security/net/config/DirectoryCertificateSource.java
+++ b/core/java/android/security/net/config/DirectoryCertificateSource.java
@@ -19,6 +19,7 @@
import android.os.Environment;
import android.os.UserHandle;
import android.util.ArraySet;
+import android.util.Log;
import android.util.Pair;
import java.io.BufferedInputStream;
import java.io.File;
@@ -44,6 +45,7 @@
* @hide
*/
abstract class DirectoryCertificateSource implements CertificateSource {
+ private static final String LOG_TAG = "DirectoryCertificateSrc";
private final File mDir;
private final Object mLock = new Object();
private final CertificateFactory mCertFactory;
@@ -149,6 +151,9 @@
continue;
}
X509Certificate cert = readCertificate(fileName);
+ if (cert == null) {
+ continue;
+ }
if (!subj.equals(cert.getSubjectX500Principal())) {
continue;
}
@@ -173,6 +178,9 @@
continue;
}
X509Certificate cert = readCertificate(fileName);
+ if (cert == null) {
+ continue;
+ }
if (!subj.equals(cert.getSubjectX500Principal())) {
continue;
}
@@ -194,6 +202,7 @@
is = new BufferedInputStream(new FileInputStream(new File(mDir, file)));
return (X509Certificate) mCertFactory.generateCertificate(is);
} catch (CertificateException | IOException e) {
+ Log.e(LOG_TAG, "Failed to read certificate from " + file, e);
return null;
} finally {
IoUtils.closeQuietly(is);
diff --git a/core/java/android/util/ArraySet.java b/core/java/android/util/ArraySet.java
index 1e765b6..a02c070 100644
--- a/core/java/android/util/ArraySet.java
+++ b/core/java/android/util/ArraySet.java
@@ -156,28 +156,46 @@
synchronized (ArraySet.class) {
if (mTwiceBaseCache != null) {
final Object[] array = mTwiceBaseCache;
- mArray = array;
- mTwiceBaseCache = (Object[])array[0];
- mHashes = (int[])array[1];
- array[0] = array[1] = null;
- mTwiceBaseCacheSize--;
- if (DEBUG) Log.d(TAG, "Retrieving 2x cache " + mHashes
- + " now have " + mTwiceBaseCacheSize + " entries");
- return;
+ try {
+ mArray = array;
+ mTwiceBaseCache = (Object[]) array[0];
+ mHashes = (int[]) array[1];
+ array[0] = array[1] = null;
+ mTwiceBaseCacheSize--;
+ if (DEBUG) Log.d(TAG, "Retrieving 2x cache " + mHashes
+ + " now have " + mTwiceBaseCacheSize + " entries");
+ return;
+ } catch (ClassCastException e) {
+ }
+ // Whoops! Someone trampled the array (probably due to not protecting
+ // their access with a lock). Our cache is corrupt; report and give up.
+ Slog.wtf(TAG, "Found corrupt ArraySet cache: [0]=" + array[0]
+ + " [1]=" + array[1]);
+ mTwiceBaseCache = null;
+ mTwiceBaseCacheSize = 0;
}
}
} else if (size == BASE_SIZE) {
synchronized (ArraySet.class) {
if (mBaseCache != null) {
final Object[] array = mBaseCache;
- mArray = array;
- mBaseCache = (Object[])array[0];
- mHashes = (int[])array[1];
- array[0] = array[1] = null;
- mBaseCacheSize--;
- if (DEBUG) Log.d(TAG, "Retrieving 1x cache " + mHashes
- + " now have " + mBaseCacheSize + " entries");
- return;
+ try {
+ mArray = array;
+ mBaseCache = (Object[]) array[0];
+ mHashes = (int[]) array[1];
+ array[0] = array[1] = null;
+ mBaseCacheSize--;
+ if (DEBUG) Log.d(TAG, "Retrieving 1x cache " + mHashes
+ + " now have " + mBaseCacheSize + " entries");
+ return;
+ } catch (ClassCastException e) {
+ }
+ // Whoops! Someone trampled the array (probably due to not protecting
+ // their access with a lock). Our cache is corrupt; report and give up.
+ Slog.wtf(TAG, "Found corrupt ArraySet cache: [0]=" + array[0]
+ + " [1]=" + array[1]);
+ mBaseCache = null;
+ mBaseCacheSize = 0;
}
}
}
diff --git a/core/java/android/util/MemoryIntArray.java b/core/java/android/util/MemoryIntArray.java
index 8f9b36e..83e693c 100644
--- a/core/java/android/util/MemoryIntArray.java
+++ b/core/java/android/util/MemoryIntArray.java
@@ -54,7 +54,7 @@
private final int mOwnerPid;
private final boolean mClientWritable;
private final long mMemoryAddr;
- private ParcelFileDescriptor mFd;
+ private int mFd;
/**
* Creates a new instance.
@@ -71,22 +71,23 @@
mOwnerPid = Process.myPid();
mClientWritable = clientWritable;
final String name = UUID.randomUUID().toString();
- mFd = ParcelFileDescriptor.fromFd(nativeCreate(name, size));
- mMemoryAddr = nativeOpen(mFd.getFd(), true, clientWritable);
+ mFd = nativeCreate(name, size);
+ mMemoryAddr = nativeOpen(mFd, true, clientWritable);
}
private MemoryIntArray(Parcel parcel) throws IOException {
mOwnerPid = parcel.readInt();
mClientWritable = (parcel.readInt() == 1);
- mFd = parcel.readParcelable(null);
- if (mFd == null) {
+ ParcelFileDescriptor pfd = parcel.readParcelable(null);
+ if (pfd == null) {
throw new IOException("No backing file descriptor");
}
+ mFd = pfd.detachFd();
final long memoryAddress = parcel.readLong();
if (isOwner()) {
mMemoryAddr = memoryAddress;
} else {
- mMemoryAddr = nativeOpen(mFd.getFd(), false, mClientWritable);
+ mMemoryAddr = nativeOpen(mFd, false, mClientWritable);
}
}
@@ -108,7 +109,7 @@
public int get(int index) throws IOException {
enforceNotClosed();
enforceValidIndex(index);
- return nativeGet(mFd.getFd(), mMemoryAddr, index, isOwner());
+ return nativeGet(mFd, mMemoryAddr, index, isOwner());
}
/**
@@ -124,7 +125,7 @@
enforceNotClosed();
enforceWritable();
enforceValidIndex(index);
- nativeSet(mFd.getFd(), mMemoryAddr, index, value, isOwner());
+ nativeSet(mFd, mMemoryAddr, index, value, isOwner());
}
/**
@@ -134,7 +135,7 @@
*/
public int size() throws IOException {
enforceNotClosed();
- return nativeSize(mFd.getFd());
+ return nativeSize(mFd);
}
/**
@@ -145,9 +146,8 @@
@Override
public void close() throws IOException {
if (!isClosed()) {
- ParcelFileDescriptor pfd = mFd;
- mFd = null;
- nativeClose(pfd.getFd(), mMemoryAddr, isOwner());
+ nativeClose(mFd, mMemoryAddr, isOwner());
+ mFd = -1;
}
}
@@ -155,7 +155,7 @@
* @return Whether this array is closed and shouldn't be used.
*/
public boolean isClosed() {
- return mFd == null;
+ return mFd == -1;
}
@Override
@@ -171,10 +171,15 @@
@Override
public void writeToParcel(Parcel parcel, int flags) {
- parcel.writeInt(mOwnerPid);
- parcel.writeInt(mClientWritable ? 1 : 0);
- parcel.writeParcelable(mFd, 0);
- parcel.writeLong(mMemoryAddr);
+ ParcelFileDescriptor pfd = ParcelFileDescriptor.adoptFd(mFd);
+ try {
+ parcel.writeInt(mOwnerPid);
+ parcel.writeInt(mClientWritable ? 1 : 0);
+ parcel.writeParcelable(pfd, flags & ~Parcelable.PARCELABLE_WRITE_RETURN_VALUE);
+ parcel.writeLong(mMemoryAddr);
+ } finally {
+ pfd.detachFd();
+ }
}
@Override
@@ -189,19 +194,12 @@
return false;
}
MemoryIntArray other = (MemoryIntArray) obj;
- if (mFd == null) {
- if (other.mFd != null) {
- return false;
- }
- } else if (mFd.getFd() != other.mFd.getFd()) {
- return false;
- }
- return true;
+ return mFd == other.mFd;
}
@Override
public int hashCode() {
- return mFd != null ? mFd.hashCode() : 1;
+ return mFd;
}
private boolean isOwner() {
diff --git a/core/java/android/view/DragEvent.java b/core/java/android/view/DragEvent.java
index b0f15b5..a394f35 100644
--- a/core/java/android/view/DragEvent.java
+++ b/core/java/android/view/DragEvent.java
@@ -377,6 +377,10 @@
* The object is intended to provide local information about the drag and drop operation. For
* example, it can indicate whether the drag and drop operation is a copy or a move.
* <p>
+ * The local state is available only to views in the activity which has started the drag
+ * operation. In all other activities this method will return null
+ * </p>
+ * <p>
* This method returns valid data for all event actions except for {@link #ACTION_DRAG_ENDED}.
* </p>
* @return The local state object sent to the system by startDrag().
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index 0601219..83feb88 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -73,8 +73,8 @@
void clearForcedDisplaySize(int displayId);
int getInitialDisplayDensity(int displayId);
int getBaseDisplayDensity(int displayId);
- void setForcedDisplayDensity(int displayId, int density);
- void clearForcedDisplayDensity(int displayId);
+ void setForcedDisplayDensityForUser(int displayId, int density, int userId);
+ void clearForcedDisplayDensityForUser(int displayId, int userId);
void setForcedDisplayScalingMode(int displayId, int mode); // 0 = auto, 1 = disable
void setOverscan(int displayId, int left, int top, int right, int bottom);
@@ -173,7 +173,7 @@
in CompatibilityInfo compatInfo, CharSequence nonLocalizedLabel, int labelRes,
int icon, int logo, int windowFlags, IBinder transferFrom, boolean createIfNeeded);
void setAppVisibility(IBinder token, boolean visible);
- void notifyAppResumed(IBinder token, boolean wasStopped);
+ void notifyAppResumed(IBinder token, boolean wasStopped, boolean allowSavedSurface);
void notifyAppStopped(IBinder token);
void startAppFreezingScreen(IBinder token, int configChanges);
void stopAppFreezingScreen(IBinder token, boolean force);
diff --git a/core/java/android/view/Surface.java b/core/java/android/view/Surface.java
index 286e097..f92d83a 100644
--- a/core/java/android/view/Surface.java
+++ b/core/java/android/view/Surface.java
@@ -96,6 +96,8 @@
private HwuiContext mHwuiContext;
+ private boolean mIsSingleBuffered;
+
/** @hide */
@Retention(RetentionPolicy.SOURCE)
@IntDef({SCALING_MODE_FREEZE, SCALING_MODE_SCALE_TO_WINDOW,
@@ -158,7 +160,7 @@
if (surfaceTexture == null) {
throw new IllegalArgumentException("surfaceTexture must not be null");
}
-
+ mIsSingleBuffered = surfaceTexture.isSingleBuffered();
synchronized (mLock) {
mName = surfaceTexture.toString();
setNativeObjectLocked(nativeCreateFromSurfaceTexture(surfaceTexture));
@@ -457,7 +459,10 @@
// create a new native Surface and return it after reducing
// the reference count on mNativeObject. Either way, it is
// not necessary to call nativeRelease() here.
+ // NOTE: This must be kept synchronized with the native parceling code
+ // in frameworks/native/libs/Surface.cpp
mName = source.readString();
+ mIsSingleBuffered = source.readInt() != 0;
setNativeObjectLocked(nativeReadFromParcel(mNativeObject, source));
}
}
@@ -468,7 +473,10 @@
throw new IllegalArgumentException("dest must not be null");
}
synchronized (mLock) {
+ // NOTE: This must be kept synchronized with the native parceling code
+ // in frameworks/native/libs/Surface.cpp
dest.writeString(mName);
+ dest.writeInt(mIsSingleBuffered ? 1 : 0);
nativeWriteToParcel(mNativeObject, dest);
}
if ((flags & Parcelable.PARCELABLE_WRITE_RETURN_VALUE) != 0) {
@@ -531,6 +539,14 @@
}
/**
+ * Returns whether or not this Surface is backed by a single-buffered SurfaceTexture
+ * @hide
+ */
+ public boolean isSingleBuffered() {
+ return mIsSingleBuffered;
+ }
+
+ /**
* Exception thrown when a Canvas couldn't be locked with {@link Surface#lockCanvas}, or
* when a SurfaceTexture could not successfully be allocated.
*/
diff --git a/core/java/android/view/SurfaceView.java b/core/java/android/view/SurfaceView.java
index 4818910..8a16d63 100644
--- a/core/java/android/view/SurfaceView.java
+++ b/core/java/android/view/SurfaceView.java
@@ -115,6 +115,7 @@
final Rect mStableInsets = new Rect();
final Rect mOutsets = new Rect();
final Rect mBackdropFrame = new Rect();
+ final Rect mTmpRect = new Rect();
final Configuration mConfiguration = new Configuration();
static final int KEEP_SCREEN_ON_MSG = 1;
@@ -193,26 +194,20 @@
private boolean mGlobalListenersAdded;
public SurfaceView(Context context) {
- super(context);
- init();
+ this(context, null);
}
public SurfaceView(Context context, AttributeSet attrs) {
- super(context, attrs);
- init();
+ this(context, attrs, 0);
}
public SurfaceView(Context context, AttributeSet attrs, int defStyleAttr) {
- super(context, attrs, defStyleAttr);
- init();
+ this(context, attrs, defStyleAttr, 0);
}
public SurfaceView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
- init();
- }
- private void init() {
setWillNotDraw(true);
}
@@ -233,6 +228,7 @@
mSession = getWindowSession();
mLayout.token = getWindowToken();
mLayout.setTitle("SurfaceView - " + getViewRootImpl().getTitle());
+ mLayout.packageName = mContext.getOpPackageName();
mViewVisibility = getVisibility() == VISIBLE;
if (!mGlobalListenersAdded) {
@@ -666,21 +662,21 @@
transformFromViewToWindowSpace(mLocation);
- mWinFrame.set(mWindowSpaceLeft, mWindowSpaceTop,
+ mTmpRect.set(mWindowSpaceLeft, mWindowSpaceTop,
mLocation[0], mLocation[1]);
if (mTranslator != null) {
- mTranslator.translateRectInAppWindowToScreen(mWinFrame);
+ mTranslator.translateRectInAppWindowToScreen(mTmpRect);
}
if (!isHardwareAccelerated() || !mRtHandlingPositionUpdates) {
try {
if (DEBUG) Log.d(TAG, String.format("%d updateWindowPosition UI, " +
"postion = [%d, %d, %d, %d]", System.identityHashCode(this),
- mWinFrame.left, mWinFrame.top,
- mWinFrame.right, mWinFrame.bottom));
- mSession.repositionChild(mWindow, mWinFrame.left, mWinFrame.top,
- mWinFrame.right, mWinFrame.bottom, -1, mWinFrame);
+ mTmpRect.left, mTmpRect.top,
+ mTmpRect.right, mTmpRect.bottom));
+ mSession.repositionChild(mWindow, mTmpRect.left, mTmpRect.top,
+ mTmpRect.right, mTmpRect.bottom, -1, mTmpRect);
} catch (RemoteException ex) {
Log.e(TAG, "Exception from relayout", ex);
}
@@ -692,10 +688,10 @@
private Rect mRTLastReportedPosition = new Rect();
/**
- * Called by native on RenderThread to update the window position
+ * Called by native by a Rendering Worker thread to update the window position
* @hide
*/
- public final void updateWindowPositionRT(long frameNumber,
+ public final void updateWindowPosition_renderWorker(long frameNumber,
int left, int top, int right, int bottom) {
IWindowSession session = mSession;
MyWindow window = mWindow;
@@ -720,7 +716,7 @@
}
try {
if (DEBUG) {
- Log.d(TAG, String.format("%d updateWindowPosition RT, frameNr = %d, " +
+ Log.d(TAG, String.format("%d updateWindowPosition RenderWorker, frameNr = %d, " +
"postion = [%d, %d, %d, %d]", System.identityHashCode(this),
frameNumber, left, top, right, bottom));
}
@@ -737,12 +733,12 @@
/**
* Called by native on RenderThread to notify that the window is no longer in the
- * draw tree
+ * draw tree. UI thread is blocked at this point.
* @hide
*/
- public final void windowPositionLostRT(long frameNumber) {
+ public final void windowPositionLost_uiRtSync(long frameNumber) {
if (DEBUG) {
- Log.d(TAG, String.format("%d windowPositionLostRT RT, frameNr = %d",
+ Log.d(TAG, String.format("%d windowPositionLost, frameNr = %d",
System.identityHashCode(this), frameNumber));
}
IWindowSession session = mSession;
@@ -757,14 +753,18 @@
// safely access other member variables at this time.
// So do what the UI thread would have done if RT wasn't handling position
// updates.
- if (!mWinFrame.isEmpty() && !mWinFrame.equals(mRTLastReportedPosition)) {
+ mTmpRect.set(mLayout.x, mLayout.y,
+ mLayout.x + mLayout.width,
+ mLayout.y + mLayout.height);
+
+ if (!mTmpRect.isEmpty() && !mTmpRect.equals(mRTLastReportedPosition)) {
try {
if (DEBUG) Log.d(TAG, String.format("%d updateWindowPosition, " +
"postion = [%d, %d, %d, %d]", System.identityHashCode(this),
- mWinFrame.left, mWinFrame.top,
- mWinFrame.right, mWinFrame.bottom));
- session.repositionChild(window, mWinFrame.left, mWinFrame.top,
- mWinFrame.right, mWinFrame.bottom, frameNumber, mWinFrame);
+ mTmpRect.left, mTmpRect.top,
+ mTmpRect.right, mTmpRect.bottom));
+ session.repositionChild(window, mTmpRect.left, mTmpRect.top,
+ mTmpRect.right, mTmpRect.bottom, frameNumber, mWinFrame);
} catch (RemoteException ex) {
Log.e(TAG, "Exception from relayout", ex);
}
diff --git a/core/java/android/view/TextureView.java b/core/java/android/view/TextureView.java
index a42da85..645ab5c 100644
--- a/core/java/android/view/TextureView.java
+++ b/core/java/android/view/TextureView.java
@@ -228,8 +228,8 @@
*/
@Override
protected void destroyHardwareResources() {
+ super.destroyHardwareResources();
destroyHardwareLayer();
- mUpdateSurface = mSurface != null;
}
private void destroyHardwareLayer() {
@@ -376,17 +376,17 @@
}
mLayer = mAttachInfo.mHardwareRenderer.createTextureLayer();
- if (!mUpdateSurface) {
+ boolean createNewSurface = (mSurface == null);
+ if (createNewSurface) {
// Create a new SurfaceTexture for the layer.
mSurface = new SurfaceTexture(false);
- mLayer.setSurfaceTexture(mSurface);
nCreateNativeWindow(mSurface);
}
+ mLayer.setSurfaceTexture(mSurface);
mSurface.setDefaultBufferSize(getWidth(), getHeight());
-
mSurface.setOnFrameAvailableListener(mUpdateListener, mAttachInfo.mHandler);
- if (mListener != null && !mUpdateSurface) {
+ if (mListener != null && createNewSurface) {
mListener.onSurfaceTextureAvailable(mSurface, getWidth(), getHeight());
}
mLayer.setLayerPaint(mLayerPaint);
@@ -720,7 +720,7 @@
/**
* Set the {@link SurfaceTexture} for this view to use. If a {@link
* SurfaceTexture} is already being used by this view, it is immediately
- * released and not be usable any more. The {@link
+ * released and not usable any more. The {@link
* SurfaceTextureListener#onSurfaceTextureDestroyed} callback is <b>not</b>
* called for the previous {@link SurfaceTexture}. Similarly, the {@link
* SurfaceTextureListener#onSurfaceTextureAvailable} callback is <b>not</b>
@@ -745,9 +745,11 @@
"released SurfaceTexture");
}
if (mSurface != null) {
+ nDestroyNativeWindow();
mSurface.release();
}
mSurface = surfaceTexture;
+ nCreateNativeWindow(mSurface);
/*
* If the view is visible and we already made a layer, update the
diff --git a/core/java/android/view/View.java b/core/java/android/view/View.java
index fc250f2..7cdade2 100644
--- a/core/java/android/view/View.java
+++ b/core/java/android/view/View.java
@@ -830,7 +830,6 @@
*/
protected static boolean sPreserveMarginParamsInLayoutParamConversion;
-
/**
* This view does not want keystrokes. Use with TAKES_FOCUS_MASK when
* calling setFlags.
@@ -9852,6 +9851,18 @@
}
/**
+ * Tells whether the {@link View} is in the state between {@link #onStartTemporaryDetach()}
+ * and {@link #onFinishTemporaryDetach()}.
+ *
+ * <p>This method always returns {@code true} when called directly or indirectly from
+ * {@link #onStartTemporaryDetach()}. The return value when called directly or indirectly from
+ * {@link #onFinishTemporaryDetach()}, however, depends on the OS version.
+ * <ul>
+ * <li>{@code true} on {@link android.os.Build.VERSION_CODES#N API 24}</li>
+ * <li>{@code false} on {@link android.os.Build.VERSION_CODES#N_MR1 API 25}} and later</li>
+ * </ul>
+ * </p>
+ *
* @return {@code true} when the View is in the state between {@link #onStartTemporaryDetach()}
* and {@link #onFinishTemporaryDetach()}.
*/
@@ -9886,8 +9897,8 @@
*/
@CallSuper
public void dispatchFinishTemporaryDetach() {
- onFinishTemporaryDetach();
mPrivateFlags3 &= ~PFLAG3_TEMPORARY_DETACH;
+ onFinishTemporaryDetach();
if (hasWindowFocus() && hasFocus()) {
InputMethodManager.getInstance().focusIn(this);
}
@@ -10373,7 +10384,7 @@
* ancestors or by window visibility
* @return true if this view is visible to the user, not counting clipping or overlapping
*/
- @Visibility boolean dispatchVisibilityAggregated(boolean isVisible) {
+ boolean dispatchVisibilityAggregated(boolean isVisible) {
final boolean thisVisible = getVisibility() == VISIBLE;
// If we're not visible but something is telling us we are, ignore it.
if (thisVisible || !isVisible) {
@@ -15516,7 +15527,7 @@
if (vis != GONE) {
onWindowVisibilityChanged(vis);
if (isShown()) {
- // Calling onVisibilityChanged directly here since the subtree will also
+ // Calling onVisibilityAggregated directly here since the subtree will also
// receive dispatchAttachedToWindow and this same call
onVisibilityAggregated(vis == VISIBLE);
}
@@ -20269,8 +20280,14 @@
// remove it from the transparent region.
final int[] location = attachInfo.mTransparentLocation;
getLocationInWindow(location);
- region.op(location[0], location[1], location[0] + mRight - mLeft,
- location[1] + mBottom - mTop, Region.Op.DIFFERENCE);
+ // When a view has Z value, then it will be better to leave some area below the view
+ // for drawing shadow. The shadow outset is proportional to the Z value. Note that
+ // the bottom part needs more offset than the left, top and right parts due to the
+ // spot light effects.
+ int shadowOffset = getZ() > 0 ? (int) getZ() : 0;
+ region.op(location[0] - shadowOffset, location[1] - shadowOffset,
+ location[0] + mRight - mLeft + shadowOffset,
+ location[1] + mBottom - mTop + (shadowOffset * 3), Region.Op.DIFFERENCE);
} else {
if (mBackground != null && mBackground.getOpacity() != PixelFormat.TRANSPARENT) {
// The SKIP_DRAW flag IS set and the background drawable exists, we remove
@@ -20638,8 +20655,10 @@
* @param shadowBuilder A {@link android.view.View.DragShadowBuilder} object for building the
* drag shadow.
* @param myLocalState An {@link java.lang.Object} containing local data about the drag and
- * drop operation. This Object is put into every DragEvent object sent by the system during the
- * current drag.
+ * drop operation. When dispatching drag events to views in the same activity this object
+ * will be available through {@link android.view.DragEvent#getLocalState()}. Views in other
+ * activities will not have access to this data ({@link android.view.DragEvent#getLocalState()}
+ * will return null).
* <p>
* myLocalState is a lightweight mechanism for the sending information from the dragged View
* to the target Views. For example, it can contain flags that differentiate between a
@@ -20651,7 +20670,6 @@
* <li>{@link #DRAG_FLAG_GLOBAL}</li>
* <li>{@link #DRAG_FLAG_GLOBAL_PERSISTABLE_URI_PERMISSION}</li>
* <li>{@link #DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION}</li>
- * <li>{@link #DRAG_FLAG_GLOBAL_PREFIX_URI_PERMISSION}</li>
* <li>{@link #DRAG_FLAG_GLOBAL_URI_READ}</li>
* <li>{@link #DRAG_FLAG_GLOBAL_URI_WRITE}</li>
* <li>{@link #DRAG_FLAG_OPAQUE}</li>
@@ -23859,7 +23877,7 @@
* on the screen.
*/
private boolean shouldDrawRoundScrollbar() {
- if (!mResources.getConfiguration().isScreenRound()) {
+ if (!mResources.getConfiguration().isScreenRound() || mAttachInfo == null) {
return false;
}
diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java
index 4d584a3..8b8525f 100644
--- a/core/java/android/view/ViewConfiguration.java
+++ b/core/java/android/view/ViewConfiguration.java
@@ -16,6 +16,7 @@
package android.view;
+import android.annotation.SystemApi;
import android.app.AppGlobals;
import android.content.Context;
import android.content.res.Configuration;
@@ -64,6 +65,12 @@
private static final int DEFAULT_LONG_PRESS_TIMEOUT = 500;
/**
+ * Defines the default duration in milliseconds between the first tap's up event and the second
+ * tap's down event for an interaction to be considered part of the same multi-press.
+ */
+ private static final int DEFAULT_MULTI_PRESS_TIMEOUT = 300;
+
+ /**
* Defines the time between successive key repeats in milliseconds.
*/
private static final int KEY_REPEAT_DELAY = 50;
@@ -213,6 +220,12 @@
private static final int OVERFLING_DISTANCE = 6;
/**
+ * Amount to scroll in response to a {@link MotionEvent#ACTION_SCROLL} event, in dips per
+ * axis value.
+ */
+ private static final int SCROLL_FACTOR = 64;
+
+ /**
* Default duration to hide an action mode for.
*/
private static final long ACTION_MODE_HIDE_DURATION_DEFAULT = 2000;
@@ -240,6 +253,7 @@
private final int mOverflingDistance;
private final boolean mFadingMarqueeEnabled;
private final long mGlobalActionsKeyTimeout;
+ private final int mScrollFactor;
private boolean sHasPermanentMenuKey;
private boolean sHasPermanentMenuKeySet;
@@ -268,6 +282,7 @@
mOverflingDistance = OVERFLING_DISTANCE;
mFadingMarqueeEnabled = true;
mGlobalActionsKeyTimeout = GLOBAL_ACTIONS_KEY_TIMEOUT;
+ mScrollFactor = SCROLL_FACTOR;
}
/**
@@ -351,6 +366,8 @@
com.android.internal.R.dimen.config_viewMaxFlingVelocity);
mGlobalActionsKeyTimeout = res.getInteger(
com.android.internal.R.integer.config_globalActionsKeyTimeout);
+ mScrollFactor = res.getDimensionPixelSize(
+ com.android.internal.R.dimen.config_scrollFactor);
}
/**
@@ -441,6 +458,16 @@
}
/**
+ * @return the duration in milliseconds between the first tap's up event and the second tap's
+ * down event for an interaction to be considered part of the same multi-press.
+ * @hide
+ */
+ public static int getMultiPressTimeout() {
+ return AppGlobals.getIntCoreSetting(Settings.Secure.MULTI_PRESS_TIMEOUT,
+ DEFAULT_MULTI_PRESS_TIMEOUT);
+ }
+
+ /**
* @return the time before the first key repeat in milliseconds.
*/
public static int getKeyRepeatTimeout() {
@@ -653,6 +680,16 @@
}
/**
+ * @return Amount to scroll in response to a {@link MotionEvent#ACTION_SCROLL} event. Multiply
+ * this by the event's axis value to obtain the number of pixels to be scrolled.
+ * @hide
+ * @SystemApi
+ */
+ public int getScaledScrollFactor() {
+ return mScrollFactor;
+ }
+
+ /**
* The maximum drawing cache size expressed in bytes.
*
* @return the maximum size of View's drawing cache expressed in bytes
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 3ff8d4f..6933efc 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -6406,16 +6406,28 @@
return true;
}
super.gatherTransparentRegion(region);
- final View[] children = mChildren;
- final int count = mChildrenCount;
+ // Instead of naively traversing the view tree, we have to traverse according to the Z
+ // order here. We need to go with the same order as dispatchDraw().
+ // One example is that after surfaceView punch a hole, we will still allow other views drawn
+ // on top of that hole. In this case, those other views should be able to cut the
+ // transparent region into smaller area.
+ final int childrenCount = mChildrenCount;
boolean noneOfTheChildrenAreTransparent = true;
- for (int i = 0; i < count; i++) {
- final View child = children[i];
- if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) {
- if (!child.gatherTransparentRegion(region)) {
- noneOfTheChildrenAreTransparent = false;
+ if (childrenCount > 0) {
+ final ArrayList<View> preorderedList = buildOrderedChildList();
+ final boolean customOrder = preorderedList == null
+ && isChildrenDrawingOrderEnabled();
+ final View[] children = mChildren;
+ for (int i = 0; i < childrenCount; i++) {
+ final int childIndex = getAndVerifyPreorderedIndex(childrenCount, i, customOrder);
+ final View child = getAndVerifyPreorderedView(preorderedList, children, childIndex);
+ if ((child.mViewFlags & VISIBILITY_MASK) == VISIBLE || child.getAnimation() != null) {
+ if (!child.gatherTransparentRegion(region)) {
+ noneOfTheChildrenAreTransparent = false;
+ }
}
}
+ if (preorderedList != null) preorderedList.clear();
}
return meOpaque || noneOfTheChildrenAreTransparent;
}
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index 4dc1009..7123d78 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -1467,6 +1467,8 @@
final int viewVisibility = getHostVisibility();
final boolean viewVisibilityChanged = !mFirst
&& (mViewVisibility != viewVisibility || mNewSurfaceNeeded);
+ final boolean viewUserVisibilityChanged = !mFirst &&
+ ((mViewVisibility == View.VISIBLE) != (viewVisibility == View.VISIBLE));
WindowManager.LayoutParams params = null;
if (mWindowAttributesChanged) {
@@ -1540,7 +1542,9 @@
if (viewVisibilityChanged) {
mAttachInfo.mWindowVisibility = viewVisibility;
host.dispatchWindowVisibilityChanged(viewVisibility);
- host.dispatchVisibilityAggregated(viewVisibility == View.VISIBLE);
+ if (viewUserVisibilityChanged) {
+ host.dispatchVisibilityAggregated(viewVisibility == View.VISIBLE);
+ }
if (viewVisibility != View.VISIBLE || mNewSurfaceNeeded) {
endDragResizing();
destroyHardwareResources();
@@ -2163,7 +2167,12 @@
}
if (changedVisibility || regainedFocus) {
- host.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+ // Toasts are presented as notifications - don't present them as windows as well
+ boolean isToast = (mWindowAttributes == null) ? false
+ : (mWindowAttributes.type == WindowManager.LayoutParams.TYPE_TOAST);
+ if (!isToast) {
+ host.sendAccessibilityEvent(AccessibilityEvent.TYPE_WINDOW_STATE_CHANGED);
+ }
}
mFirst = false;
@@ -6039,7 +6048,8 @@
return true;
}
return mEvent instanceof MotionEvent
- && mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER);
+ && (mEvent.isFromSource(InputDevice.SOURCE_CLASS_POINTER)
+ || mEvent.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER));
}
public boolean shouldSendToSynthesizer() {
diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java
index 1b37ed4..395f738 100644
--- a/core/java/android/view/WindowManager.java
+++ b/core/java/android/view/WindowManager.java
@@ -221,6 +221,7 @@
* @see #TYPE_BASE_APPLICATION
* @see #TYPE_APPLICATION
* @see #TYPE_APPLICATION_STARTING
+ * @see #TYPE_DRAWN_APPLICATION
* @see #TYPE_APPLICATION_PANEL
* @see #TYPE_APPLICATION_MEDIA
* @see #TYPE_APPLICATION_SUB_PANEL
@@ -244,6 +245,7 @@
@ViewDebug.IntToString(from = TYPE_BASE_APPLICATION, to = "TYPE_BASE_APPLICATION"),
@ViewDebug.IntToString(from = TYPE_APPLICATION, to = "TYPE_APPLICATION"),
@ViewDebug.IntToString(from = TYPE_APPLICATION_STARTING, to = "TYPE_APPLICATION_STARTING"),
+ @ViewDebug.IntToString(from = TYPE_DRAWN_APPLICATION, to = "TYPE_DRAWN_APPLICATION"),
@ViewDebug.IntToString(from = TYPE_APPLICATION_PANEL, to = "TYPE_APPLICATION_PANEL"),
@ViewDebug.IntToString(from = TYPE_APPLICATION_MEDIA, to = "TYPE_APPLICATION_MEDIA"),
@ViewDebug.IntToString(from = TYPE_APPLICATION_SUB_PANEL, to = "TYPE_APPLICATION_SUB_PANEL"),
@@ -315,6 +317,13 @@
public static final int TYPE_APPLICATION_STARTING = 3;
/**
+ * Window type: a variation on TYPE_APPLICATION that ensures the window
+ * manager will wait for this window to be drawn before the app is shown.
+ * In multiuser systems shows only on the owning user's window.
+ */
+ public static final int TYPE_DRAWN_APPLICATION = 4;
+
+ /**
* End of types of application windows.
*/
public static final int LAST_APPLICATION_WINDOW = 99;
@@ -1581,6 +1590,15 @@
public static final int ROTATION_ANIMATION_JUMPCUT = 2;
/**
+ * Value for {@link #rotationAnimation} to specify seamless rotation mode.
+ * This works like JUMPCUT but will fall back to CROSSFADE if rotation
+ * can't be applied without pausing the screen.
+ *
+ * @hide
+ */
+ public static final int ROTATION_ANIMATION_SEAMLESS = 3;
+
+ /**
* Define the exit and entry animations used on this window when the device is rotated.
* This only has an affect if the incoming and outgoing topmost
* opaque windows have the #FLAG_FULLSCREEN bit set and are not covered
@@ -1734,14 +1752,18 @@
public CharSequence accessibilityTitle;
/**
- * Sets a timeout in milliseconds before which the window will be removed
+ * Sets a timeout in milliseconds before which the window will be hidden
* by the window manager. Useful for transient notifications like toasts
* so we don't have to rely on client cooperation to ensure the window
- * is removed. Must be specified at window creation time.
+ * is hidden. Must be specified at window creation time. Note that apps
+ * are not prepared to handle their windows being removed without their
+ * explicit request and may try to interact with the removed window
+ * resulting in undefined behavior and crashes. Therefore, we do hide
+ * such windows to prevent them from overlaying other apps.
*
* @hide
*/
- public long removeTimeoutMilliseconds = -1;
+ public long hideTimeoutMilliseconds = -1;
public LayoutParams() {
super(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT);
@@ -1877,7 +1899,7 @@
out.writeInt(needsMenuKey);
out.writeInt(accessibilityIdOfAnchor);
TextUtils.writeToParcel(accessibilityTitle, out, parcelableFlags);
- out.writeLong(removeTimeoutMilliseconds);
+ out.writeLong(hideTimeoutMilliseconds);
}
public static final Parcelable.Creator<LayoutParams> CREATOR
@@ -1931,7 +1953,7 @@
needsMenuKey = in.readInt();
accessibilityIdOfAnchor = in.readInt();
accessibilityTitle = TextUtils.CHAR_SEQUENCE_CREATOR.createFromParcel(in);
- removeTimeoutMilliseconds = in.readLong();
+ hideTimeoutMilliseconds = in.readLong();
}
@SuppressWarnings({"PointlessBitwiseExpression"})
@@ -2153,7 +2175,7 @@
}
// This can't change, it's only set at window creation time.
- removeTimeoutMilliseconds = o.removeTimeoutMilliseconds;
+ hideTimeoutMilliseconds = o.hideTimeoutMilliseconds;
return changes;
}
diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/android/view/WindowManagerPolicy.java
index 17d306e..2b3d643 100644
--- a/core/java/android/view/WindowManagerPolicy.java
+++ b/core/java/android/view/WindowManagerPolicy.java
@@ -484,6 +484,7 @@
public void switchInputMethod(boolean forwardDirection);
public void shutdown(boolean confirm);
+ public void reboot(boolean confirm);
public void rebootSafeMode(boolean confirm);
/**
@@ -506,6 +507,11 @@
* Retrieves the {@param outBounds} from the stack with id {@param stackId}.
*/
void getStackBounds(int stackId, Rect outBounds);
+
+ /**
+ * Overrides all currently playing app animations with {@param a}.
+ */
+ void overridePlayingAppAnimationsLw(Animation a);
}
public interface PointerEventListener {
diff --git a/core/java/android/view/inputmethod/InputConnection.java b/core/java/android/view/inputmethod/InputConnection.java
index 07910b6..8023201 100644
--- a/core/java/android/view/inputmethod/InputConnection.java
+++ b/core/java/android/view/inputmethod/InputConnection.java
@@ -43,12 +43,14 @@
* in {@link android.os.Build.VERSION_CODES#HONEYCOMB}.</li>
* <li>{@link #requestCursorUpdates(int)}, which was introduced in
* {@link android.os.Build.VERSION_CODES#LOLLIPOP}.</li>
- * <li>{@link #deleteSurroundingTextInCodePoints(int, int)}}, which
+ * <li>{@link #deleteSurroundingTextInCodePoints(int, int)}, which
* was introduced in {@link android.os.Build.VERSION_CODES#N}.</li>
- * <li>{@link #getHandler()}}, which was introduced in
+ * <li>{@link #getHandler()}, which was introduced in
* {@link android.os.Build.VERSION_CODES#N}.</li>
- * <li>{@link #closeConnection()}}, which was introduced in
+ * <li>{@link #closeConnection()}, which was introduced in
* {@link android.os.Build.VERSION_CODES#N}.</li>
+ * <li>{@link #commitContent(InputContentInfo, int, Bundle)}, which was
+ * introduced in {@link android.os.Build.VERSION_CODES#N_MR1}.</li>
* </ul>
*
* <h3>Implementing an IME or an editor</h3>
diff --git a/core/java/android/widget/AbsListView.java b/core/java/android/widget/AbsListView.java
index 7b45d8c..f1bfade 100644
--- a/core/java/android/widget/AbsListView.java
+++ b/core/java/android/widget/AbsListView.java
@@ -21,6 +21,7 @@
import android.annotation.NonNull;
import android.content.Context;
import android.content.Intent;
+import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -616,6 +617,8 @@
private int mTouchSlop;
private float mDensityScale;
+ private float mScrollFactor;
+
private InputConnection mDefInputConnection;
private InputConnectionWrapper mPublicInputConnection;
@@ -857,6 +860,10 @@
R.styleable.AbsListView_fastScrollAlwaysVisible, false));
a.recycle();
+
+ if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) {
+ setRevealOnFocusHint(false);
+ }
}
private void initAbsListView() {
@@ -869,6 +876,7 @@
final ViewConfiguration configuration = ViewConfiguration.get(mContext);
mTouchSlop = configuration.getScaledTouchSlop();
+ mScrollFactor = configuration.getScaledScrollFactor();
mMinimumVelocity = configuration.getScaledMinimumFlingVelocity();
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
mOverscrollDistance = configuration.getScaledOverscrollDistance();
@@ -4201,21 +4209,26 @@
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
- if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_SCROLL:
- if (mTouchMode == TOUCH_MODE_REST) {
- final float vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
- if (vscroll != 0) {
- final int delta = (int) (vscroll * getVerticalScrollFactor());
- if (!trackMotionScroll(delta, delta)) {
- return true;
- }
- }
- }
- break;
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_SCROLL:
+ final float axisValue;
+ if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+ } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL);
+ } else {
+ axisValue = 0;
+ }
- case MotionEvent.ACTION_BUTTON_PRESS:
+ final int delta = Math.round(axisValue * mScrollFactor);
+ if (delta != 0) {
+ if (!trackMotionScroll(delta, delta)) {
+ return true;
+ }
+ }
+ break;
+ case MotionEvent.ACTION_BUTTON_PRESS:
+ if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
int actionButton = event.getActionButton();
if ((actionButton == MotionEvent.BUTTON_STYLUS_PRIMARY
|| actionButton == MotionEvent.BUTTON_SECONDARY)
@@ -4225,8 +4238,8 @@
removeCallbacks(mPendingCheckForTap);
}
}
- break;
- }
+ }
+ break;
}
return super.onGenericMotionEvent(event);
diff --git a/core/java/android/widget/DatePickerCalendarDelegate.java b/core/java/android/widget/DatePickerCalendarDelegate.java
index 2fd52b5..af22ec7 100755
--- a/core/java/android/widget/DatePickerCalendarDelegate.java
+++ b/core/java/android/widget/DatePickerCalendarDelegate.java
@@ -65,6 +65,8 @@
private SimpleDateFormat mYearFormat;
private SimpleDateFormat mMonthDayFormat;
+ private SimpleDateFormat mAccessibilityEventFormat;
+
// Top-level container.
private ViewGroup mContainer;
@@ -307,6 +309,9 @@
mMonthDayFormat.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
mYearFormat = new SimpleDateFormat("y", locale);
+ // Clear out the lazily-initialized accessibility event formatter.
+ mAccessibilityEventFormat = null;
+
// Update the header text.
onCurrentDateChanged(false);
}
@@ -586,7 +591,12 @@
@Override
public void onPopulateAccessibilityEvent(AccessibilityEvent event) {
- event.getText().add(mCurrentDate.getTime().toString());
+ if (mAccessibilityEventFormat == null) {
+ final String pattern = DateFormat.getBestDateTimePattern(mCurrentLocale, "EMMMMdy");
+ mAccessibilityEventFormat = new SimpleDateFormat(pattern);
+ }
+ final CharSequence text = mAccessibilityEventFormat.format(mCurrentDate.getTime());
+ event.getText().add(text);
}
public CharSequence getAccessibilityClassName() {
diff --git a/core/java/android/widget/HorizontalScrollView.java b/core/java/android/widget/HorizontalScrollView.java
index 00f368e..918b6c0 100644
--- a/core/java/android/widget/HorizontalScrollView.java
+++ b/core/java/android/widget/HorizontalScrollView.java
@@ -18,6 +18,7 @@
import android.annotation.NonNull;
import android.content.Context;
+import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.graphics.Canvas;
import android.graphics.Rect;
@@ -128,6 +129,8 @@
private int mOverscrollDistance;
private int mOverflingDistance;
+ private float mScrollFactor;
+
/**
* ID of the active pointer. This is used to retain consistency during
* drags/flings if multiple pointers are used.
@@ -165,6 +168,10 @@
setFillViewport(a.getBoolean(android.R.styleable.HorizontalScrollView_fillViewport, false));
a.recycle();
+
+ if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) {
+ setRevealOnFocusHint(false);
+ }
}
@Override
@@ -217,6 +224,7 @@
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
mOverscrollDistance = configuration.getScaledOverscrollDistance();
mOverflingDistance = configuration.getScaledOverflingDistance();
+ mScrollFactor = configuration.getScaledScrollFactor();
}
@Override
@@ -719,30 +727,35 @@
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
- if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_SCROLL: {
- if (!mIsBeingDragged) {
- final float hscroll;
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_SCROLL: {
+ if (!mIsBeingDragged) {
+ final float axisValue;
+ if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
if ((event.getMetaState() & KeyEvent.META_SHIFT_ON) != 0) {
- hscroll = -event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+ axisValue = -event.getAxisValue(MotionEvent.AXIS_VSCROLL);
} else {
- hscroll = event.getAxisValue(MotionEvent.AXIS_HSCROLL);
+ axisValue = event.getAxisValue(MotionEvent.AXIS_HSCROLL);
}
- if (hscroll != 0) {
- final int delta = (int) (hscroll * getHorizontalScrollFactor());
- final int range = getScrollRange();
- int oldScrollX = mScrollX;
- int newScrollX = oldScrollX + delta;
- if (newScrollX < 0) {
- newScrollX = 0;
- } else if (newScrollX > range) {
- newScrollX = range;
- }
- if (newScrollX != oldScrollX) {
- super.scrollTo(newScrollX, mScrollY);
- return true;
- }
+ } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL);
+ } else {
+ axisValue = 0;
+ }
+
+ final int delta = Math.round(axisValue * mScrollFactor);
+ if (delta != 0) {
+ final int range = getScrollRange();
+ int oldScrollX = mScrollX;
+ int newScrollX = oldScrollX + delta;
+ if (newScrollX < 0) {
+ newScrollX = 0;
+ } else if (newScrollX > range) {
+ newScrollX = range;
+ }
+ if (newScrollX != oldScrollX) {
+ super.scrollTo(newScrollX, mScrollY);
+ return true;
}
}
}
@@ -1430,11 +1443,13 @@
@Override
public void requestChildFocus(View child, View focused) {
- if (!mIsLayoutDirty) {
- scrollToChild(focused);
- } else {
- // The child may not be laid out yet, we can't compute the scroll yet
- mChildToScrollTo = focused;
+ if (focused.getRevealOnFocusHint()) {
+ if (!mIsLayoutDirty) {
+ scrollToChild(focused);
+ } else {
+ // The child may not be laid out yet, we can't compute the scroll yet
+ mChildToScrollTo = focused;
+ }
}
super.requestChildFocus(child, focused);
}
diff --git a/core/java/android/widget/ImageView.java b/core/java/android/widget/ImageView.java
index 184544d..aa67c82 100644
--- a/core/java/android/widget/ImageView.java
+++ b/core/java/android/widget/ImageView.java
@@ -22,7 +22,6 @@
import android.content.ContentResolver;
import android.content.Context;
import android.content.res.ColorStateList;
-import android.content.res.Resources;
import android.content.res.TypedArray;
import android.graphics.Bitmap;
import android.graphics.Canvas;
@@ -115,11 +114,17 @@
private int mBaseline = -1;
private boolean mBaselineAlignBottom = false;
- // AdjustViewBounds behavior will be in compatibility mode for older apps.
- private boolean mAdjustViewBoundsCompat = false;
+ /** Compatibility modes dependent on targetSdkVersion of the app. */
+ private static boolean sCompatDone;
+
+ /** AdjustViewBounds behavior will be in compatibility mode for older apps. */
+ private static boolean sCompatAdjustViewBounds;
/** Whether to pass Resources when creating the source from a stream. */
- private boolean mUseCorrectStreamDensity;
+ private static boolean sCompatUseCorrectStreamDensity;
+
+ /** Whether to use pre-Nougat drawable visibility dispatching conditions. */
+ private static boolean sCompatDrawableVisibilityDispatch;
private static final ScaleType[] sScaleTypeArray = {
ScaleType.MATRIX,
@@ -206,9 +211,13 @@
mMatrix = new Matrix();
mScaleType = ScaleType.FIT_CENTER;
- final int targetSdkVersion = mContext.getApplicationInfo().targetSdkVersion;
- mAdjustViewBoundsCompat = targetSdkVersion <= Build.VERSION_CODES.JELLY_BEAN_MR1;
- mUseCorrectStreamDensity = targetSdkVersion > Build.VERSION_CODES.M;
+ if (!sCompatDone) {
+ final int targetSdkVersion = mContext.getApplicationInfo().targetSdkVersion;
+ sCompatAdjustViewBounds = targetSdkVersion <= Build.VERSION_CODES.JELLY_BEAN_MR1;
+ sCompatUseCorrectStreamDensity = targetSdkVersion > Build.VERSION_CODES.M;
+ sCompatDrawableVisibilityDispatch = targetSdkVersion < Build.VERSION_CODES.N;
+ sCompatDone = true;
+ }
}
@Override
@@ -881,8 +890,8 @@
InputStream stream = null;
try {
stream = mContext.getContentResolver().openInputStream(uri);
- return Drawable.createFromResourceStream(
- mUseCorrectStreamDensity ? getResources() : null, null, stream, null);
+ return Drawable.createFromResourceStream(sCompatUseCorrectStreamDensity
+ ? getResources() : null, null, stream, null);
} catch (Exception e) {
Log.w(LOG_TAG, "Unable to open content: " + uri, e);
} finally {
@@ -917,10 +926,13 @@
mRecycleableBitmapDrawable.setBitmap(null);
}
+ boolean sameDrawable = false;
+
if (mDrawable != null) {
+ sameDrawable = mDrawable == d;
mDrawable.setCallback(null);
unscheduleDrawable(mDrawable);
- if (isAttachedToWindow()) {
+ if (!sCompatDrawableVisibilityDispatch && !sameDrawable && isAttachedToWindow()) {
mDrawable.setVisible(false, false);
}
}
@@ -933,8 +945,11 @@
if (d.isStateful()) {
d.setState(getDrawableState());
}
- if (isAttachedToWindow()) {
- d.setVisible(getWindowVisibility() == VISIBLE && isShown(), true);
+ if (!sameDrawable || sCompatDrawableVisibilityDispatch) {
+ final boolean visible = sCompatDrawableVisibilityDispatch
+ ? getVisibility() == VISIBLE
+ : isAttachedToWindow() && getWindowVisibility() == VISIBLE && isShown();
+ d.setVisible(visible, true);
}
d.setLevel(mLevel);
mDrawableWidth = d.getIntrinsicWidth();
@@ -1058,7 +1073,7 @@
pleft + pright;
// Allow the width to outgrow its original estimate if height is fixed.
- if (!resizeHeight && !mAdjustViewBoundsCompat) {
+ if (!resizeHeight && !sCompatAdjustViewBounds) {
widthSize = resolveAdjustedSize(newWidth, mMaxWidth, widthMeasureSpec);
}
@@ -1074,7 +1089,7 @@
ptop + pbottom;
// Allow the height to outgrow its original estimate if width is fixed.
- if (!resizeWidth && !mAdjustViewBoundsCompat) {
+ if (!resizeWidth && !sCompatAdjustViewBounds) {
heightSize = resolveAdjustedSize(newHeight, mMaxHeight,
heightMeasureSpec);
}
@@ -1513,11 +1528,40 @@
@Override
public void onVisibilityAggregated(boolean isVisible) {
super.onVisibilityAggregated(isVisible);
- if (mDrawable != null) {
+ // Only do this for new apps post-Nougat
+ if (mDrawable != null && !sCompatDrawableVisibilityDispatch) {
mDrawable.setVisible(isVisible, false);
}
}
+ @RemotableViewMethod
+ @Override
+ public void setVisibility(int visibility) {
+ super.setVisibility(visibility);
+ // Only do this for old apps pre-Nougat; new apps use onVisibilityAggregated
+ if (mDrawable != null && sCompatDrawableVisibilityDispatch) {
+ mDrawable.setVisible(visibility == VISIBLE, false);
+ }
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ // Only do this for old apps pre-Nougat; new apps use onVisibilityAggregated
+ if (mDrawable != null && sCompatDrawableVisibilityDispatch) {
+ mDrawable.setVisible(getVisibility() == VISIBLE, false);
+ }
+ }
+
+ @Override
+ protected void onDetachedFromWindow() {
+ super.onDetachedFromWindow();
+ // Only do this for old apps pre-Nougat; new apps use onVisibilityAggregated
+ if (mDrawable != null && sCompatDrawableVisibilityDispatch) {
+ mDrawable.setVisible(false, false);
+ }
+ }
+
@Override
public CharSequence getAccessibilityClassName() {
return ImageView.class.getName();
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java
index 6432f70..b12c03c 100644
--- a/core/java/android/widget/PopupWindow.java
+++ b/core/java/android/widget/PopupWindow.java
@@ -193,6 +193,8 @@
private int mAnimationStyle = ANIMATION_STYLE_DEFAULT;
+ private int mGravity = Gravity.NO_GRAVITY;
+
private static final int[] ABOVE_ANCHOR_STATE_SET = new int[] {
com.android.internal.R.attr.state_above_anchor
};
@@ -1141,15 +1143,11 @@
mIsShowing = true;
mIsDropdown = false;
+ mGravity = gravity;
final WindowManager.LayoutParams p = createPopupLayoutParams(token);
preparePopup(p);
- // Only override the default if some gravity was specified.
- if (gravity != Gravity.NO_GRAVITY) {
- p.gravity = gravity;
- }
-
p.x = x;
p.y = y;
@@ -1394,8 +1392,8 @@
}
private int computeGravity() {
- int gravity = Gravity.START | Gravity.TOP;
- if (mClipToScreen || mClippingEnabled) {
+ int gravity = mGravity == Gravity.NO_GRAVITY ? Gravity.START | Gravity.TOP : mGravity;
+ if (mIsDropdown && (mClipToScreen || mClippingEnabled)) {
gravity |= Gravity.DISPLAY_CLIP_VERTICAL;
}
return gravity;
@@ -1547,7 +1545,7 @@
}
// Let the window manager know to align the top to y.
- outParams.gravity = Gravity.LEFT | Gravity.TOP;
+ outParams.gravity = computeGravity();
outParams.width = width;
outParams.height = height;
diff --git a/core/java/android/widget/ScrollView.java b/core/java/android/widget/ScrollView.java
index 0555cd4..e696ff7 100644
--- a/core/java/android/widget/ScrollView.java
+++ b/core/java/android/widget/ScrollView.java
@@ -17,6 +17,7 @@
package android.widget;
import android.annotation.NonNull;
+import android.content.res.Configuration;
import android.os.Build;
import android.os.Build.VERSION_CODES;
import android.os.Parcel;
@@ -134,6 +135,8 @@
private int mOverscrollDistance;
private int mOverflingDistance;
+ private int mScrollFactor;
+
/**
* ID of the active pointer. This is used to retain consistency during
* drags/flings if multiple pointers are used.
@@ -186,6 +189,10 @@
setFillViewport(a.getBoolean(R.styleable.ScrollView_fillViewport, false));
a.recycle();
+
+ if (context.getResources().getConfiguration().uiMode == Configuration.UI_MODE_TYPE_WATCH) {
+ setRevealOnFocusHint(false);
+ }
}
@Override
@@ -243,6 +250,7 @@
mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
mOverscrollDistance = configuration.getScaledOverscrollDistance();
mOverflingDistance = configuration.getScaledOverflingDistance();
+ mScrollFactor = configuration.getScaledScrollFactor();
}
@Override
@@ -777,30 +785,35 @@
@Override
public boolean onGenericMotionEvent(MotionEvent event) {
- if ((event.getSource() & InputDevice.SOURCE_CLASS_POINTER) != 0) {
- switch (event.getAction()) {
- case MotionEvent.ACTION_SCROLL: {
- if (!mIsBeingDragged) {
- final float vscroll = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
- if (vscroll != 0) {
- final int delta = (int) (vscroll * getVerticalScrollFactor());
- final int range = getScrollRange();
- int oldScrollY = mScrollY;
- int newScrollY = oldScrollY - delta;
- if (newScrollY < 0) {
- newScrollY = 0;
- } else if (newScrollY > range) {
- newScrollY = range;
- }
- if (newScrollY != oldScrollY) {
- super.scrollTo(mScrollX, newScrollY);
- return true;
- }
- }
+ switch (event.getAction()) {
+ case MotionEvent.ACTION_SCROLL:
+ final float axisValue;
+ if (event.isFromSource(InputDevice.SOURCE_CLASS_POINTER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_VSCROLL);
+ } else if (event.isFromSource(InputDevice.SOURCE_ROTARY_ENCODER)) {
+ axisValue = event.getAxisValue(MotionEvent.AXIS_SCROLL);
+ } else {
+ axisValue = 0;
+ }
+
+ final int delta = Math.round(axisValue * mScrollFactor);
+ if (delta != 0) {
+ final int range = getScrollRange();
+ int oldScrollY = mScrollY;
+ int newScrollY = oldScrollY - delta;
+ if (newScrollY < 0) {
+ newScrollY = 0;
+ } else if (newScrollY > range) {
+ newScrollY = range;
+ }
+ if (newScrollY != oldScrollY) {
+ super.scrollTo(mScrollX, newScrollY);
+ return true;
}
}
- }
+ break;
}
+
return super.onGenericMotionEvent(event);
}
@@ -1455,11 +1468,13 @@
@Override
public void requestChildFocus(View child, View focused) {
- if (!mIsLayoutDirty) {
- scrollToChild(focused);
- } else {
- // The child may not be laid out yet, we can't compute the scroll yet
- mChildToScrollTo = focused;
+ if (focused.getRevealOnFocusHint()) {
+ if (!mIsLayoutDirty) {
+ scrollToChild(focused);
+ } else {
+ // The child may not be laid out yet, we can't compute the scroll yet
+ mChildToScrollTo = focused;
+ }
}
super.requestChildFocus(child, focused);
}
diff --git a/core/java/android/widget/TimePicker.java b/core/java/android/widget/TimePicker.java
index f2fc617..1095978 100644
--- a/core/java/android/widget/TimePicker.java
+++ b/core/java/android/widget/TimePicker.java
@@ -16,19 +16,19 @@
package android.widget;
+import com.android.internal.R;
+
+import android.annotation.IntRange;
import android.annotation.NonNull;
-import android.annotation.Nullable;
import android.annotation.Widget;
import android.content.Context;
-import android.content.res.Configuration;
import android.content.res.TypedArray;
import android.os.Parcel;
import android.os.Parcelable;
-import android.os.Parcelable.Creator;
import android.util.AttributeSet;
+import android.util.MathUtils;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
-import com.android.internal.R;
import java.util.Locale;
@@ -102,8 +102,8 @@
* @param hour the hour to set, in the range (0-23)
* @see #getHour()
*/
- public void setHour(int hour) {
- mDelegate.setHour(hour);
+ public void setHour(@IntRange(from = 0, to = 23) int hour) {
+ mDelegate.setHour(MathUtils.constrain(hour, 0, 23));
}
/**
@@ -117,13 +117,13 @@
}
/**
- * Sets the currently selected minute..
+ * Sets the currently selected minute.
*
* @param minute the minute to set, in the range (0-59)
* @see #getMinute()
*/
- public void setMinute(int minute) {
- mDelegate.setMinute(minute);
+ public void setMinute(@IntRange(from = 0, to = 59) int minute) {
+ mDelegate.setMinute(MathUtils.constrain(minute, 0, 59));
}
/**
@@ -137,8 +137,9 @@
}
/**
- * Sets the current hour.
+ * Sets the currently selected hour using 24-hour time.
*
+ * @param currentHour the hour to set, in the range (0-23)
* @deprecated Use {@link #setHour(int)}
*/
@Deprecated
@@ -147,33 +148,34 @@
}
/**
- * @return the current hour in the range (0-23)
+ * @return the currently selected hour, in the range (0-23)
* @deprecated Use {@link #getHour()}
*/
@NonNull
@Deprecated
public Integer getCurrentHour() {
- return mDelegate.getHour();
+ return getHour();
}
/**
- * Set the current minute (0-59).
+ * Sets the currently selected minute.
*
+ * @param currentMinute the minute to set, in the range (0-59)
* @deprecated Use {@link #setMinute(int)}
*/
@Deprecated
public void setCurrentMinute(@NonNull Integer currentMinute) {
- mDelegate.setMinute(currentMinute);
+ setMinute(currentMinute);
}
/**
- * @return the current minute
+ * @return the currently selected minute, in the range (0-59)
* @deprecated Use {@link #getMinute()}
*/
@NonNull
@Deprecated
public Integer getCurrentMinute() {
- return mDelegate.getMinute();
+ return getMinute();
}
/**
@@ -256,10 +258,10 @@
* for the real behavior.
*/
interface TimePickerDelegate {
- void setHour(int hour);
+ void setHour(@IntRange(from = 0, to = 23) int hour);
int getHour();
- void setMinute(int minute);
+ void setMinute(@IntRange(from = 0, to = 59) int minute);
int getMinute();
void setIs24Hour(boolean is24Hour);
diff --git a/core/java/android/widget/Toast.java b/core/java/android/widget/Toast.java
index 7762675..a400d90 100644
--- a/core/java/android/widget/Toast.java
+++ b/core/java/android/widget/Toast.java
@@ -25,6 +25,8 @@
import android.content.res.Resources;
import android.graphics.PixelFormat;
import android.os.Handler;
+import android.os.IBinder;
+import android.os.Message;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.util.Log;
@@ -326,13 +328,6 @@
}
private static class TN extends ITransientNotification.Stub {
- final Runnable mShow = new Runnable() {
- @Override
- public void run() {
- handleShow();
- }
- };
-
final Runnable mHide = new Runnable() {
@Override
public void run() {
@@ -343,7 +338,13 @@
};
private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams();
- final Handler mHandler = new Handler();
+ final Handler mHandler = new Handler() {
+ @Override
+ public void handleMessage(Message msg) {
+ IBinder token = (IBinder) msg.obj;
+ handleShow(token);
+ }
+ };
int mGravity;
int mX, mY;
@@ -379,9 +380,9 @@
* schedule handleShow into the right thread
*/
@Override
- public void show() {
+ public void show(IBinder windowToken) {
if (localLOGV) Log.v(TAG, "SHOW: " + this);
- mHandler.post(mShow);
+ mHandler.obtainMessage(0, windowToken).sendToTarget();
}
/**
@@ -393,7 +394,7 @@
mHandler.post(mHide);
}
- public void handleShow() {
+ public void handleShow(IBinder windowToken) {
if (localLOGV) Log.v(TAG, "HANDLE SHOW: " + this + " mView=" + mView
+ " mNextView=" + mNextView);
if (mView != mNextView) {
@@ -422,8 +423,9 @@
mParams.verticalMargin = mVerticalMargin;
mParams.horizontalMargin = mHorizontalMargin;
mParams.packageName = packageName;
- mParams.removeTimeoutMilliseconds = mDuration ==
+ mParams.hideTimeoutMilliseconds = mDuration ==
Toast.LENGTH_LONG ? LONG_DURATION_TIMEOUT : SHORT_DURATION_TIMEOUT;
+ mParams.token = windowToken;
if (mView.getParent() != null) {
if (localLOGV) Log.v(TAG, "REMOVE! " + mView + " in " + this);
mWM.removeView(mView);
@@ -458,7 +460,7 @@
// the view isn't yet added, so let's try not to crash.
if (mView.getParent() != null) {
if (localLOGV) Log.v(TAG, "REMOVE! " + mView + " in " + this);
- mWM.removeView(mView);
+ mWM.removeViewImmediate(mView);
}
mView = null;
diff --git a/core/java/android/widget/VideoView.java b/core/java/android/widget/VideoView.java
index f084db2..b973324 100644
--- a/core/java/android/widget/VideoView.java
+++ b/core/java/android/widget/VideoView.java
@@ -70,46 +70,49 @@
*/
public class VideoView extends SurfaceView
implements MediaPlayerControl, SubtitleController.Anchor {
- private String TAG = "VideoView";
- // settable by the client
- private Uri mUri;
- private Map<String, String> mHeaders;
+ private static final String TAG = "VideoView";
// all possible internal states
- private static final int STATE_ERROR = -1;
- private static final int STATE_IDLE = 0;
- private static final int STATE_PREPARING = 1;
- private static final int STATE_PREPARED = 2;
- private static final int STATE_PLAYING = 3;
- private static final int STATE_PAUSED = 4;
+ private static final int STATE_ERROR = -1;
+ private static final int STATE_IDLE = 0;
+ private static final int STATE_PREPARING = 1;
+ private static final int STATE_PREPARED = 2;
+ private static final int STATE_PLAYING = 3;
+ private static final int STATE_PAUSED = 4;
private static final int STATE_PLAYBACK_COMPLETED = 5;
+ private final Vector<Pair<InputStream, MediaFormat>> mPendingSubtitleTracks = new Vector<>();
+
+ // settable by the client
+ private Uri mUri;
+ private Map<String, String> mHeaders;
+
// mCurrentState is a VideoView object's current state.
// mTargetState is the state that a method caller intends to reach.
// For instance, regardless the VideoView object's current state,
// calling pause() intends to bring the object to a target state
// of STATE_PAUSED.
private int mCurrentState = STATE_IDLE;
- private int mTargetState = STATE_IDLE;
+ private int mTargetState = STATE_IDLE;
// All the stuff we need for playing and showing a video
private SurfaceHolder mSurfaceHolder = null;
private MediaPlayer mMediaPlayer = null;
- private int mAudioSession;
- private int mVideoWidth;
- private int mVideoHeight;
- private int mSurfaceWidth;
- private int mSurfaceHeight;
+ private int mAudioSession;
+ private int mVideoWidth;
+ private int mVideoHeight;
+ private int mSurfaceWidth;
+ private int mSurfaceHeight;
private MediaController mMediaController;
private OnCompletionListener mOnCompletionListener;
private MediaPlayer.OnPreparedListener mOnPreparedListener;
- private int mCurrentBufferPercentage;
+ private int mCurrentBufferPercentage;
private OnErrorListener mOnErrorListener;
- private OnInfoListener mOnInfoListener;
- private int mSeekWhenPrepared; // recording the seek position while preparing
- private boolean mCanPause;
- private boolean mCanSeekBack;
- private boolean mCanSeekForward;
+ private OnInfoListener mOnInfoListener;
+ private int mSeekWhenPrepared; // recording the seek position while preparing
+ private boolean mCanPause;
+ private boolean mCanSeekBack;
+ private boolean mCanSeekForward;
/** Subtitle rendering widget overlaid on top of the video. */
private RenderingWidget mSubtitleWidget;
@@ -118,13 +121,11 @@
private RenderingWidget.OnChangedListener mSubtitlesChangedListener;
public VideoView(Context context) {
- super(context);
- initVideoView();
+ this(context, null);
}
public VideoView(Context context, AttributeSet attrs) {
this(context, attrs, 0);
- initVideoView();
}
public VideoView(Context context, AttributeSet attrs, int defStyleAttr) {
@@ -133,7 +134,19 @@
public VideoView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
- initVideoView();
+
+ mVideoWidth = 0;
+ mVideoHeight = 0;
+
+ getHolder().addCallback(mSHCallback);
+ getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
+
+ setFocusable(true);
+ setFocusableInTouchMode(true);
+ requestFocus();
+
+ mCurrentState = STATE_IDLE;
+ mTargetState = STATE_IDLE;
}
@Override
@@ -209,19 +222,6 @@
return getDefaultSize(desiredSize, measureSpec);
}
- private void initVideoView() {
- mVideoWidth = 0;
- mVideoHeight = 0;
- getHolder().addCallback(mSHCallback);
- getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS);
- setFocusable(true);
- setFocusableInTouchMode(true);
- requestFocus();
- mPendingSubtitleTracks = new Vector<Pair<InputStream, MediaFormat>>();
- mCurrentState = STATE_IDLE;
- mTargetState = STATE_IDLE;
- }
-
/**
* Sets video path.
*
@@ -294,8 +294,6 @@
}
}
- private Vector<Pair<InputStream, MediaFormat>> mPendingSubtitleTracks;
-
public void stopPlayback() {
if (mMediaPlayer != null) {
mMediaPlayer.stop();
diff --git a/core/java/com/android/internal/app/AlertController.java b/core/java/com/android/internal/app/AlertController.java
index 5aeb7f9..95c291a 100644
--- a/core/java/com/android/internal/app/AlertController.java
+++ b/core/java/com/android/internal/app/AlertController.java
@@ -888,7 +888,8 @@
final int checkedItem = mCheckedItem;
if (checkedItem > -1) {
listView.setItemChecked(checkedItem, true);
- listView.setSelection(checkedItem);
+ listView.setSelectionFromTop(checkedItem,
+ a.getDimensionPixelSize(R.styleable.AlertDialog_selectionScrollOffset, 0));
}
}
}
diff --git a/core/java/com/android/internal/app/AssistUtils.java b/core/java/com/android/internal/app/AssistUtils.java
index 56c5cc9..2940079 100644
--- a/core/java/com/android/internal/app/AssistUtils.java
+++ b/core/java/com/android/internal/app/AssistUtils.java
@@ -16,10 +16,13 @@
package com.android.internal.app;
+import com.android.internal.R;
+
import android.app.SearchManager;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
@@ -166,4 +169,41 @@
return null;
}
+ public static boolean isPreinstalledAssistant(Context context, ComponentName assistant) {
+ if (assistant == null) {
+ return false;
+ }
+ ApplicationInfo applicationInfo;
+ try {
+ applicationInfo = context.getPackageManager().getApplicationInfo(
+ assistant.getPackageName(), 0);
+ } catch (PackageManager.NameNotFoundException e) {
+ return false;
+ }
+ return applicationInfo.isSystemApp() || applicationInfo.isUpdatedSystemApp();
+ }
+
+ private static boolean isDisclosureEnabled(Context context) {
+ return Settings.Secure.getInt(context.getContentResolver(),
+ Settings.Secure.ASSIST_DISCLOSURE_ENABLED, 0) != 0;
+ }
+
+ /**
+ * @return if the disclosure animation should trigger for the given assistant.
+ *
+ * Third-party assistants will always need to disclose, while the user can configure this for
+ * pre-installed assistants.
+ */
+ public static boolean shouldDisclose(Context context, ComponentName assistant) {
+ if (!allowDisablingAssistDisclosure(context)) {
+ return true;
+ }
+
+ return isDisclosureEnabled(context) || !isPreinstalledAssistant(context, assistant);
+ }
+
+ public static boolean allowDisablingAssistDisclosure(Context context) {
+ return context.getResources().getBoolean(
+ com.android.internal.R.bool.config_allowDisablingAssistDisclosure);
+ }
}
diff --git a/core/java/com/android/internal/app/SuggestedLocaleAdapter.java b/core/java/com/android/internal/app/SuggestedLocaleAdapter.java
index a4b5a8e..cb2b019 100644
--- a/core/java/com/android/internal/app/SuggestedLocaleAdapter.java
+++ b/core/java/com/android/internal/app/SuggestedLocaleAdapter.java
@@ -145,7 +145,11 @@
if (itemType == TYPE_HEADER_SUGGESTED) {
textView.setText(R.string.language_picker_section_suggested);
} else {
- textView.setText(R.string.language_picker_section_all);
+ if (mCountryMode) {
+ textView.setText(R.string.region_picker_section_all);
+ } else {
+ textView.setText(R.string.language_picker_section_all);
+ }
}
textView.setTextLocale(Locale.getDefault());
break;
diff --git a/core/java/com/android/internal/graphics/drawable/AnimationScaleListDrawable.java b/core/java/com/android/internal/graphics/drawable/AnimationScaleListDrawable.java
new file mode 100644
index 0000000..62f18ea
--- /dev/null
+++ b/core/java/com/android/internal/graphics/drawable/AnimationScaleListDrawable.java
@@ -0,0 +1,254 @@
+/*
+ * 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.internal.graphics.drawable;
+
+import android.animation.ValueAnimator;
+import android.annotation.NonNull;
+import android.annotation.Nullable;
+import android.content.res.Resources;
+import android.content.res.Resources.Theme;
+import android.content.res.TypedArray;
+import android.graphics.drawable.Animatable;
+import android.graphics.drawable.Drawable;
+import android.graphics.drawable.DrawableContainer;
+import android.util.AttributeSet;
+
+import com.android.internal.R;
+
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+
+import java.io.IOException;
+
+/**
+ * An internal DrawableContainer class, used to draw different things depending on animation scale.
+ * i.e: animation scale can be 0 in battery saver mode.
+ * This class contains 2 drawable, one is animatable, the other is static. When animation scale is
+ * not 0, the animatable drawable will the drawn. Otherwise, the static drawable will be drawn.
+ * <p>This class implements Animatable since ProgressBar can pick this up similarly as an
+ * AnimatedVectorDrawable.
+ * <p>It can be defined in an XML file with the {@code <AnimationScaleListDrawable>}
+ * element.
+ */
+public class AnimationScaleListDrawable extends DrawableContainer implements Animatable {
+ private static final String TAG = "AnimationScaleListDrawable";
+ private AnimationScaleListState mAnimationScaleListState;
+ private boolean mMutated;
+
+ public AnimationScaleListDrawable() {
+ this(null, null);
+ }
+
+ private AnimationScaleListDrawable(@Nullable AnimationScaleListState state,
+ @Nullable Resources res) {
+ // Every scale list drawable has its own constant state.
+ final AnimationScaleListState newState = new AnimationScaleListState(state, this, res);
+ setConstantState(newState);
+ onStateChange(getState());
+ }
+
+ /**
+ * Set the current drawable according to the animation scale. If scale is 0, then pick the
+ * static drawable, otherwise, pick the animatable drawable.
+ */
+ @Override
+ protected boolean onStateChange(int[] stateSet) {
+ final boolean changed = super.onStateChange(stateSet);
+ int idx = mAnimationScaleListState.getCurrentDrawableIndexBasedOnScale();
+ return selectDrawable(idx) || changed;
+ }
+
+
+ @Override
+ public void inflate(@NonNull Resources r, @NonNull XmlPullParser parser,
+ @NonNull AttributeSet attrs, @Nullable Theme theme)
+ throws XmlPullParserException, IOException {
+ final TypedArray a = obtainAttributes(r, theme, attrs,
+ R.styleable.AnimationScaleListDrawable);
+ updateDensity(r);
+ a.recycle();
+
+ inflateChildElements(r, parser, attrs, theme);
+
+ onStateChange(getState());
+ }
+
+ /**
+ * Inflates child elements from XML.
+ */
+ private void inflateChildElements(@NonNull Resources r, @NonNull XmlPullParser parser,
+ @NonNull AttributeSet attrs, @Nullable Theme theme)
+ throws XmlPullParserException, IOException {
+ final AnimationScaleListState state = mAnimationScaleListState;
+ final int innerDepth = parser.getDepth() + 1;
+ int type;
+ int depth;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && ((depth = parser.getDepth()) >= innerDepth
+ || type != XmlPullParser.END_TAG)) {
+ if (type != XmlPullParser.START_TAG) {
+ continue;
+ }
+
+ if (depth > innerDepth || !parser.getName().equals("item")) {
+ continue;
+ }
+
+ // Either pick up the android:drawable attribute.
+ final TypedArray a = obtainAttributes(r, theme, attrs,
+ R.styleable.AnimationScaleListDrawableItem);
+ Drawable dr = a.getDrawable(R.styleable.AnimationScaleListDrawableItem_drawable);
+ a.recycle();
+
+ // Or parse the child element under <item>.
+ if (dr == null) {
+ while ((type = parser.next()) == XmlPullParser.TEXT) {
+ }
+ if (type != XmlPullParser.START_TAG) {
+ throw new XmlPullParserException(
+ parser.getPositionDescription()
+ + ": <item> tag requires a 'drawable' attribute or "
+ + "child tag defining a drawable");
+ }
+ dr = Drawable.createFromXmlInner(r, parser, attrs, theme);
+ }
+
+ state.addDrawable(dr);
+ }
+ }
+
+ @Override
+ public Drawable mutate() {
+ if (!mMutated && super.mutate() == this) {
+ mAnimationScaleListState.mutate();
+ mMutated = true;
+ }
+ return this;
+ }
+
+ @Override
+ public void clearMutated() {
+ super.clearMutated();
+ mMutated = false;
+ }
+
+ @Override
+ public void start() {
+ Drawable dr = getCurrent();
+ if (dr != null && dr instanceof Animatable) {
+ ((Animatable) dr).start();
+ }
+ }
+
+ @Override
+ public void stop() {
+ Drawable dr = getCurrent();
+ if (dr != null && dr instanceof Animatable) {
+ ((Animatable) dr).stop();
+ }
+ }
+
+ @Override
+ public boolean isRunning() {
+ boolean result = false;
+ Drawable dr = getCurrent();
+ if (dr != null && dr instanceof Animatable) {
+ result = ((Animatable) dr).isRunning();
+ }
+ return result;
+ }
+
+ static class AnimationScaleListState extends DrawableContainerState {
+ int[] mThemeAttrs = null;
+ // The index of the last static drawable.
+ int mStaticDrawableIndex = -1;
+ // The index of the last animatable drawable.
+ int mAnimatableDrawableIndex = -1;
+
+ AnimationScaleListState(AnimationScaleListState orig, AnimationScaleListDrawable owner,
+ Resources res) {
+ super(orig, owner, res);
+
+ if (orig != null) {
+ // Perform a shallow copy and rely on mutate() to deep-copy.
+ mThemeAttrs = orig.mThemeAttrs;
+
+ mStaticDrawableIndex = orig.mStaticDrawableIndex;
+ mAnimatableDrawableIndex = orig.mAnimatableDrawableIndex;
+ }
+
+ }
+
+ void mutate() {
+ mThemeAttrs = mThemeAttrs != null ? mThemeAttrs.clone() : null;
+ }
+
+ /**
+ * Add the drawable into the container.
+ * This class only keep track one animatable drawable, and one static. If there are multiple
+ * defined in the XML, then pick the last one.
+ */
+ int addDrawable(Drawable drawable) {
+ final int pos = addChild(drawable);
+ if (drawable instanceof Animatable) {
+ mAnimatableDrawableIndex = pos;
+ } else {
+ mStaticDrawableIndex = pos;
+ }
+ return pos;
+ }
+
+ @Override
+ public Drawable newDrawable() {
+ return new AnimationScaleListDrawable(this, null);
+ }
+
+ @Override
+ public Drawable newDrawable(Resources res) {
+ return new AnimationScaleListDrawable(this, res);
+ }
+
+ @Override
+ public boolean canApplyTheme() {
+ return mThemeAttrs != null || super.canApplyTheme();
+ }
+
+ public int getCurrentDrawableIndexBasedOnScale() {
+ if (ValueAnimator.getDurationScale() == 0) {
+ return mStaticDrawableIndex;
+ }
+ return mAnimatableDrawableIndex;
+ }
+ }
+
+ @Override
+ public void applyTheme(@NonNull Theme theme) {
+ super.applyTheme(theme);
+
+ onStateChange(getState());
+ }
+
+ @Override
+ protected void setConstantState(@NonNull DrawableContainerState state) {
+ super.setConstantState(state);
+
+ if (state instanceof AnimationScaleListState) {
+ mAnimationScaleListState = (AnimationScaleListState) state;
+ }
+ }
+}
+
diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java
index 7fb92ae..2538d60 100644
--- a/core/java/com/android/internal/os/BatteryStatsImpl.java
+++ b/core/java/com/android/internal/os/BatteryStatsImpl.java
@@ -108,7 +108,7 @@
private static final int MAGIC = 0xBA757475; // 'BATSTATS'
// Current on-disk Parcel version
- private static final int VERSION = 149 + (USE_OLD_HISTORY ? 1000 : 0);
+ private static final int VERSION = 150 + (USE_OLD_HISTORY ? 1000 : 0);
// Maximum number of items we will record in the history.
private static final int MAX_HISTORY_ITEMS = 2000;
@@ -1415,22 +1415,6 @@
mUnpluggedReportedCount = 0;
return true;
}
-
- @Override
- public void writeSummaryFromParcelLocked(Parcel out, long batteryRealtime) {
- super.writeSummaryFromParcelLocked(out, batteryRealtime);
- out.writeLong(mCurrentReportedTotalTime);
- out.writeInt(mCurrentReportedCount);
- out.writeInt(mTrackingReportedValues ? 1 : 0);
- }
-
- @Override
- public void readSummaryFromParcelLocked(Parcel in) {
- super.readSummaryFromParcelLocked(in);
- mUnpluggedReportedTotalTime = mCurrentReportedTotalTime = in.readLong();
- mUnpluggedReportedCount = mCurrentReportedCount = in.readInt();
- mTrackingReportedValues = in.readInt() == 1;
- }
}
/**
diff --git a/core/java/com/android/internal/os/ProcessCpuTracker.java b/core/java/com/android/internal/os/ProcessCpuTracker.java
index b7e5718..e46dfc4 100644
--- a/core/java/com/android/internal/os/ProcessCpuTracker.java
+++ b/core/java/com/android/internal/os/ProcessCpuTracker.java
@@ -39,6 +39,7 @@
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
+import java.util.List;
import java.util.StringTokenizer;
public class ProcessCpuTracker {
@@ -177,6 +178,11 @@
private byte[] mBuffer = new byte[4096];
+ public interface FilterStats {
+ /** Which stats to pick when filtering */
+ boolean needed(Stats stats);
+ }
+
public static class Stats {
public final int pid;
public final int uid;
@@ -695,6 +701,18 @@
return mProcStats.get(index);
}
+ final public List<Stats> getStats(FilterStats filter) {
+ final ArrayList<Stats> statses = new ArrayList<>(mProcStats.size());
+ final int N = mProcStats.size();
+ for (int p = 0; p < N; p++) {
+ Stats stats = mProcStats.get(p);
+ if (filter.needed(stats)) {
+ statses.add(stats);
+ }
+ }
+ return statses;
+ }
+
final public int countWorkingStats() {
buildWorkingProcs();
return mWorkingProcs.size();
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java
index 366fc1a..92ab324 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -101,6 +101,7 @@
import static android.view.WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
import static com.android.internal.policy.PhoneWindow.FEATURE_OPTIONS_PANEL;
/** @hide */
@@ -1860,7 +1861,7 @@
}
final WindowManager.LayoutParams attrs = mWindow.getAttributes();
final boolean isApplication = attrs.type == TYPE_BASE_APPLICATION ||
- attrs.type == TYPE_APPLICATION;
+ attrs.type == TYPE_APPLICATION || attrs.type == TYPE_DRAWN_APPLICATION;
// Only a non floating application window on one of the allowed workspaces can get a caption
if (!mWindow.isFloating() && isApplication && StackId.hasWindowDecor(mStackId)) {
// Dependent on the brightness of the used title we either use the
diff --git a/core/java/com/android/internal/policy/IKeyguardService.aidl b/core/java/com/android/internal/policy/IKeyguardService.aidl
index 83d75fb..e51ad3f 100644
--- a/core/java/com/android/internal/policy/IKeyguardService.aidl
+++ b/core/java/com/android/internal/policy/IKeyguardService.aidl
@@ -28,8 +28,9 @@
* FLAG_SHOW_ON_LOCK_SCREEN.
*
* @param isOccluded Whether the Keyguard is occluded by another window.
+ * @param animate Whether to play an animation for the state change.
*/
- void setOccluded(boolean isOccluded);
+ void setOccluded(boolean isOccluded, boolean animate);
void addStateMonitorCallback(IKeyguardStateCallback callback);
void verifyUnlock(IKeyguardExitCallback callback);
diff --git a/core/java/com/android/internal/policy/IKeyguardStateCallback.aidl b/core/java/com/android/internal/policy/IKeyguardStateCallback.aidl
index 419b1f8..8e454db 100644
--- a/core/java/com/android/internal/policy/IKeyguardStateCallback.aidl
+++ b/core/java/com/android/internal/policy/IKeyguardStateCallback.aidl
@@ -20,4 +20,5 @@
void onSimSecureStateChanged(boolean simSecure);
void onInputRestrictedStateChanged(boolean inputRestricted);
void onTrustedChanged(boolean trusted);
+ void onHasLockscreenWallpaperChanged(boolean hasLockscreenWallpaper);
}
\ No newline at end of file
diff --git a/core/java/com/android/internal/policy/PhoneWindow.java b/core/java/com/android/internal/policy/PhoneWindow.java
index 9ad750d..878f3a6 100644
--- a/core/java/com/android/internal/policy/PhoneWindow.java
+++ b/core/java/com/android/internal/policy/PhoneWindow.java
@@ -92,8 +92,6 @@
import android.util.Log;
import android.util.SparseArray;
import android.util.TypedValue;
-import android.view.accessibility.AccessibilityNodeInfo;
-import android.view.accessibility.AccessibilityNodeProvider;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.FrameLayout;
@@ -2057,9 +2055,6 @@
}
static private final String FOCUSED_ID_TAG = "android:focusedViewId";
- static private final String ACCESSIBILITY_FOCUSED_ID_TAG = "android:accessibilityFocusedViewId";
- static private final String ACCESSIBILITY_FOCUSED_VIRTUAL_ID_TAG =
- "android:accessibilityFocusedVirtualViewId";
static private final String VIEWS_TAG = "android:views";
static private final String PANELS_TAG = "android:Panels";
static private final String ACTION_BAR_TAG = "android:ActionBar";
@@ -2082,26 +2077,6 @@
outState.putInt(FOCUSED_ID_TAG, focusedView.getId());
}
- // Save the accessibility focused view ID.
- if (mDecor != null) {
- final ViewRootImpl viewRootImpl = mDecor.getViewRootImpl();
- if (viewRootImpl != null) {
- final View accessFocusHost = viewRootImpl.getAccessibilityFocusedHost();
- if (accessFocusHost != null && accessFocusHost.getId() != View.NO_ID) {
- outState.putInt(ACCESSIBILITY_FOCUSED_ID_TAG, accessFocusHost.getId());
-
- // If we have a focused virtual node ID, save that too.
- final AccessibilityNodeInfo accessFocusedNode =
- viewRootImpl.getAccessibilityFocusedVirtualView();
- if (accessFocusedNode != null) {
- final int virtualNodeId = AccessibilityNodeInfo.getVirtualDescendantId(
- accessFocusedNode.getSourceNodeId());
- outState.putInt(ACCESSIBILITY_FOCUSED_VIRTUAL_ID_TAG, virtualNodeId);
- }
- }
- }
- }
-
// save the panels
SparseArray<Parcelable> panelStates = new SparseArray<Parcelable>();
savePanelState(panelStates);
@@ -2144,13 +2119,6 @@
}
}
- // Restore the accessibility focused view.
- final int accessFocusHostViewId = savedInstanceState.getInt(
- ACCESSIBILITY_FOCUSED_ID_TAG, View.NO_ID);
- final int accessFocusVirtualViewId = savedInstanceState.getInt(
- ACCESSIBILITY_FOCUSED_VIRTUAL_ID_TAG, AccessibilityNodeInfo.UNDEFINED_ITEM_ID);
- tryRestoreAccessibilityFocus(accessFocusHostViewId, accessFocusVirtualViewId);
-
// Restore the panels.
SparseArray<Parcelable> panelStates = savedInstanceState.getSparseParcelableArray(PANELS_TAG);
if (panelStates != null) {
@@ -2170,33 +2138,6 @@
}
}
- private void tryRestoreAccessibilityFocus(int hostViewId, int virtualViewId) {
- if (hostViewId != View.NO_ID && mDecor != null) {
- final View needsAccessFocus = mDecor.findViewById(hostViewId);
- if (needsAccessFocus != null) {
- if (!tryFocusingVirtualView(needsAccessFocus, virtualViewId)
- && !needsAccessFocus.requestAccessibilityFocus()) {
- Log.w(TAG, "Failed to restore focus to previously accessibility"
- + " focused view with id " + hostViewId);
- }
- } else {
- Log.w(TAG, "Previously accessibility focused view reported id " + hostViewId
- + " during save, but can't be found during restore.");
- }
- }
- }
-
- private boolean tryFocusingVirtualView(View host, int virtualViewId) {
- if (virtualViewId != AccessibilityNodeInfo.UNDEFINED_ITEM_ID) {
- final AccessibilityNodeProvider nodeProvider = host.getAccessibilityNodeProvider();
- if (nodeProvider != null) {
- return nodeProvider.performAction(virtualViewId,
- AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
- }
- }
- return false;
- }
-
/**
* Invoked when the panels should freeze their state.
*
diff --git a/core/java/com/android/internal/widget/AlertDialogLayout.java b/core/java/com/android/internal/widget/AlertDialogLayout.java
index 891c920..9bf0948 100644
--- a/core/java/com/android/internal/widget/AlertDialogLayout.java
+++ b/core/java/com/android/internal/widget/AlertDialogLayout.java
@@ -20,7 +20,9 @@
import android.annotation.Nullable;
import android.annotation.StyleRes;
import android.content.Context;
+import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
+import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
import android.widget.LinearLayout;
@@ -265,4 +267,92 @@
return 0;
}
+
+ @Override
+ protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
+ final int paddingLeft = mPaddingLeft;
+
+ // Where right end of child should go
+ final int width = right - left;
+ final int childRight = width - mPaddingRight;
+
+ // Space available for child
+ final int childSpace = width - paddingLeft - mPaddingRight;
+
+ final int totalLength = getMeasuredHeight();
+ final int count = getChildCount();
+ final int gravity = getGravity();
+ final int majorGravity = gravity & Gravity.VERTICAL_GRAVITY_MASK;
+ final int minorGravity = gravity & Gravity.RELATIVE_HORIZONTAL_GRAVITY_MASK;
+
+ int childTop;
+ switch (majorGravity) {
+ case Gravity.BOTTOM:
+ // totalLength contains the padding already
+ childTop = mPaddingTop + bottom - top - totalLength;
+ break;
+
+ // totalLength contains the padding already
+ case Gravity.CENTER_VERTICAL:
+ childTop = mPaddingTop + (bottom - top - totalLength) / 2;
+ break;
+
+ case Gravity.TOP:
+ default:
+ childTop = mPaddingTop;
+ break;
+ }
+
+ final Drawable dividerDrawable = getDividerDrawable();
+ final int dividerHeight = dividerDrawable == null ?
+ 0 : dividerDrawable.getIntrinsicHeight();
+
+ for (int i = 0; i < count; i++) {
+ final View child = getChildAt(i);
+ if (child != null && child.getVisibility() != GONE) {
+ final int childWidth = child.getMeasuredWidth();
+ final int childHeight = child.getMeasuredHeight();
+
+ final LinearLayout.LayoutParams lp =
+ (LinearLayout.LayoutParams) child.getLayoutParams();
+
+ int layoutGravity = lp.gravity;
+ if (layoutGravity < 0) {
+ layoutGravity = minorGravity;
+ }
+ final int layoutDirection = getLayoutDirection();
+ final int absoluteGravity = Gravity.getAbsoluteGravity(
+ layoutGravity, layoutDirection);
+
+ final int childLeft;
+ switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
+ case Gravity.CENTER_HORIZONTAL:
+ childLeft = paddingLeft + ((childSpace - childWidth) / 2)
+ + lp.leftMargin - lp.rightMargin;
+ break;
+
+ case Gravity.RIGHT:
+ childLeft = childRight - childWidth - lp.rightMargin;
+ break;
+
+ case Gravity.LEFT:
+ default:
+ childLeft = paddingLeft + lp.leftMargin;
+ break;
+ }
+
+ if (hasDividerBeforeChildAt(i)) {
+ childTop += dividerHeight;
+ }
+
+ childTop += lp.topMargin;
+ setChildFrame(child, childLeft, childTop, childWidth, childHeight);
+ childTop += childHeight + lp.bottomMargin;
+ }
+ }
+ }
+
+ private void setChildFrame(View child, int left, int top, int width, int height) {
+ child.layout(left, top, left + width, top + height);
+ }
}
diff --git a/core/java/com/android/internal/widget/WatchHeaderListView.java b/core/java/com/android/internal/widget/WatchHeaderListView.java
index 3d32d86..4fd19c3 100644
--- a/core/java/com/android/internal/widget/WatchHeaderListView.java
+++ b/core/java/com/android/internal/widget/WatchHeaderListView.java
@@ -103,7 +103,8 @@
@Override
public int getHeaderViewsCount() {
- return mTopPanel == null ? super.getHeaderViewsCount() : super.getHeaderViewsCount() + 1;
+ return mTopPanel == null ? super.getHeaderViewsCount()
+ : super.getHeaderViewsCount() + (mTopPanel.getVisibility() == GONE ? 0 : 1);
}
private void wrapAdapterIfNecessary() {
@@ -133,7 +134,7 @@
}
private int getTopPanelCount() {
- return mTopPanel == null ? 0 : 1;
+ return (mTopPanel == null || mTopPanel.getVisibility() == GONE) ? 0 : 1;
}
@Override
@@ -143,33 +144,19 @@
@Override
public boolean areAllItemsEnabled() {
- return mTopPanel == null && super.areAllItemsEnabled();
+ return getTopPanelCount() == 0 && super.areAllItemsEnabled();
}
@Override
public boolean isEnabled(int position) {
- if (mTopPanel != null) {
- if (position == 0) {
- return false;
- } else {
- return super.isEnabled(position - 1);
- }
- }
-
- return super.isEnabled(position);
+ int topPanelCount = getTopPanelCount();
+ return position < topPanelCount ? false : super.isEnabled(position - topPanelCount);
}
@Override
public Object getItem(int position) {
- if (mTopPanel != null) {
- if (position == 0) {
- return null;
- } else {
- return super.getItem(position - 1);
- }
- }
-
- return super.getItem(position);
+ int topPanelCount = getTopPanelCount();
+ return position < topPanelCount ? null : super.getItem(position - topPanelCount);
}
@Override
@@ -187,15 +174,9 @@
@Override
public View getView(int position, View convertView, ViewGroup parent) {
- if (mTopPanel != null) {
- if (position == 0) {
- return mTopPanel;
- } else {
- return super.getView(position - 1, convertView, parent);
- }
- }
-
- return super.getView(position, convertView, parent);
+ int topPanelCount = getTopPanelCount();
+ return position < topPanelCount
+ ? mTopPanel : super.getView(position - topPanelCount, convertView, parent);
}
@Override
diff --git a/core/java/com/android/server/BootReceiver.java b/core/java/com/android/server/BootReceiver.java
index fbc51cd..5a50fbf 100644
--- a/core/java/com/android/server/BootReceiver.java
+++ b/core/java/com/android/server/BootReceiver.java
@@ -79,6 +79,9 @@
private static final String LOG_FILES_FILE = "log-files.xml";
private static final AtomicFile sFile = new AtomicFile(new File(
Environment.getDataSystemDirectory(), LOG_FILES_FILE));
+ private static final String LAST_HEADER_FILE = "last-header.txt";
+ private static final File lastHeaderFile = new File(
+ Environment.getDataSystemDirectory(), LAST_HEADER_FILE);
@Override
public void onReceive(final Context context, Intent intent) {
@@ -113,9 +116,17 @@
Downloads.removeAllDownloadsByPackage(context, OLD_UPDATER_PACKAGE, OLD_UPDATER_CLASS);
}
- private void logBootEvents(Context ctx) throws IOException {
- final DropBoxManager db = (DropBoxManager) ctx.getSystemService(Context.DROPBOX_SERVICE);
- final String headers = new StringBuilder(512)
+ private String getPreviousBootHeaders() {
+ try {
+ return FileUtils.readTextFile(lastHeaderFile, 0, null);
+ } catch (IOException e) {
+ Slog.e(TAG, "Error reading " + lastHeaderFile, e);
+ return null;
+ }
+ }
+
+ private String getCurrentBootHeaders() throws IOException {
+ return new StringBuilder(512)
.append("Build: ").append(Build.FINGERPRINT).append("\n")
.append("Hardware: ").append(Build.BOARD).append("\n")
.append("Revision: ")
@@ -125,6 +136,31 @@
.append("Kernel: ")
.append(FileUtils.readTextFile(new File("/proc/version"), 1024, "...\n"))
.append("\n").toString();
+ }
+
+
+ private String getBootHeadersToLogAndUpdate() throws IOException {
+ final String oldHeaders = getPreviousBootHeaders();
+ final String newHeaders = getCurrentBootHeaders();
+
+ try {
+ FileUtils.stringToFile(lastHeaderFile, newHeaders);
+ } catch (IOException e) {
+ Slog.e(TAG, "Error writing " + lastHeaderFile, e);
+ }
+
+ if (oldHeaders == null) {
+ // If we failed to read the old headers, use the current headers
+ // but note this in the headers so we know
+ return "isPrevious: false\n" + newHeaders;
+ }
+
+ return "isPrevious: true\n" + oldHeaders;
+ }
+
+ private void logBootEvents(Context ctx) throws IOException {
+ final DropBoxManager db = (DropBoxManager) ctx.getSystemService(Context.DROPBOX_SERVICE);
+ final String headers = getBootHeadersToLogAndUpdate();
final String bootReason = SystemProperties.get("ro.boot.bootreason", null);
String recovery = RecoverySystem.handleAftermath(ctx);
diff --git a/core/jni/android/graphics/pdf/PdfEditor.cpp b/core/jni/android/graphics/pdf/PdfEditor.cpp
index d2d39cd..0468b64 100644
--- a/core/jni/android/graphics/pdf/PdfEditor.cpp
+++ b/core/jni/android/graphics/pdf/PdfEditor.cpp
@@ -52,11 +52,9 @@
} gRectClassInfo;
// Also used in PdfRenderer.cpp
-Mutex sPdfiumLock;
int sUnmatchedPdfiumInitRequestCount = 0;
static void initializeLibraryIfNeeded() {
- Mutex::Autolock _l(sPdfiumLock);
if (sUnmatchedPdfiumInitRequestCount == 0) {
FPDF_InitLibrary();
}
@@ -64,7 +62,6 @@
}
static void destroyLibraryIfNeeded() {
- Mutex::Autolock _l(sPdfiumLock);
sUnmatchedPdfiumInitRequestCount--;
if (sUnmatchedPdfiumInitRequestCount == 0) {
FPDF_DestroyLibrary();
diff --git a/core/jni/android/graphics/pdf/PdfRenderer.cpp b/core/jni/android/graphics/pdf/PdfRenderer.cpp
index 71bec78..43550ac 100644
--- a/core/jni/android/graphics/pdf/PdfRenderer.cpp
+++ b/core/jni/android/graphics/pdf/PdfRenderer.cpp
@@ -44,11 +44,9 @@
} gPointClassInfo;
// See PdfEditor.cpp
-extern Mutex sPdfiumLock;
extern int sUnmatchedPdfiumInitRequestCount;
static void initializeLibraryIfNeeded() {
- Mutex::Autolock _l(sPdfiumLock);
if (sUnmatchedPdfiumInitRequestCount == 0) {
FPDF_InitLibrary();
}
@@ -56,7 +54,6 @@
}
static void destroyLibraryIfNeeded() {
- Mutex::Autolock _l(sPdfiumLock);
sUnmatchedPdfiumInitRequestCount--;
if (sUnmatchedPdfiumInitRequestCount == 0) {
FPDF_DestroyLibrary();
diff --git a/core/jni/android_database_CursorWindow.cpp b/core/jni/android_database_CursorWindow.cpp
index bb09d00..e96613b 100644
--- a/core/jni/android_database_CursorWindow.cpp
+++ b/core/jni/android_database_CursorWindow.cpp
@@ -16,6 +16,7 @@
#undef LOG_TAG
#define LOG_TAG "CursorWindow"
+#define LOG_NDEBUG 0
#include <inttypes.h>
#include <jni.h>
@@ -30,6 +31,11 @@
#include <stdio.h>
#include <string.h>
#include <unistd.h>
+#include <sys/types.h>
+#include <dirent.h>
+
+#undef LOG_NDEBUG
+#define LOG_NDEBUG 1
#include <androidfw/CursorWindow.h>
#include "android_os_Parcel.h"
@@ -61,6 +67,22 @@
jniThrowException(env, "java/lang/IllegalStateException", msg.string());
}
+static int getFdCount() {
+ char fdpath[PATH_MAX];
+ int count = 0;
+ snprintf(fdpath, PATH_MAX, "/proc/%d/fd", getpid());
+ DIR *dir = opendir(fdpath);
+ if (dir != NULL) {
+ struct dirent *dirent;
+ while ((dirent = readdir(dir))) {
+ count++;
+ }
+ count -= 2; // discount "." and ".."
+ closedir(dir);
+ }
+ return count;
+}
+
static jlong nativeCreate(JNIEnv* env, jclass clazz, jstring nameObj, jint cursorWindowSize) {
String8 name;
const char* nameStr = env->GetStringUTFChars(nameObj, NULL);
@@ -85,7 +107,8 @@
CursorWindow* window;
status_t status = CursorWindow::createFromParcel(parcel, &window);
if (status || !window) {
- ALOGE("Could not create CursorWindow from Parcel due to error %d.", status);
+ ALOGE("Could not create CursorWindow from Parcel due to error %d, process fd count=%d",
+ status, getFdCount());
return 0;
}
diff --git a/core/jni/android_hardware_location_ContextHubService.cpp b/core/jni/android_hardware_location_ContextHubService.cpp
index 9515a0e..8eb39e1 100644
--- a/core/jni/android_hardware_location_ContextHubService.cpp
+++ b/core/jni/android_hardware_location_ContextHubService.cpp
@@ -26,6 +26,10 @@
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
+
+// TOOD: On master, alphabetize these and move <mutex> into this
+// grouping.
+#include <chrono>
#include <unordered_map>
#include <queue>
@@ -34,11 +38,12 @@
#include "JNIHelp.h"
#include "core_jni_helpers.h"
-static constexpr int OS_APP_ID = -1;
+static constexpr jint OS_APP_ID = -1;
+static constexpr jint INVALID_APP_ID = -2;
static constexpr uint64_t ALL_APPS = UINT64_C(0xFFFFFFFFFFFFFFFF);
-static constexpr int MIN_APP_ID = 1;
-static constexpr int MAX_APP_ID = 128;
+static constexpr jint MIN_APP_ID = 1;
+static constexpr jint MAX_APP_ID = 128;
static constexpr size_t MSG_HEADER_SIZE = 4;
static constexpr size_t HEADER_FIELD_MSG_TYPE = 0;
@@ -50,6 +55,10 @@
static constexpr size_t HEADER_FIELD_LOAD_APP_ID_HI = MSG_HEADER_SIZE + 1;
static constexpr size_t MSG_HEADER_SIZE_LOAD_APP = MSG_HEADER_SIZE + 2;
+// Monotonically increasing clock we use to determine if we can cancel
+// a transaction.
+using std::chrono::steady_clock;
+
namespace android {
namespace {
@@ -102,10 +111,21 @@
struct app_instance_info_s {
uint64_t truncName; // Possibly truncated name for logging
uint32_t hubHandle; // Id of the hub this app is on
- int instanceId; // system wide unique instance id - assigned
+ jint instanceId; // system wide unique instance id - assigned
struct hub_app_info appInfo; // returned from the HAL
};
+
+// If a transaction takes longer than this, we'll allow it to be
+// canceled by a new transaction. Note we do _not_ automatically
+// cancel a transaction after this much time. We can have a
+// legal transaction which takes longer than this amount of time,
+// as long as no other new transactions are attempted after this
+// time has expired.
+// TODO(b/31105001): Establish a clean timing approach for all
+// of our HAL interactions.
+constexpr auto kMinTransactionCancelTime = std::chrono::seconds(29);
+
/*
* TODO(ashutoshj): From original code review:
*
@@ -147,14 +167,15 @@
std::mutex m; // mutex for manager
hub_messages_e txnIdentifier; // What are we doing
void *txnData; // Details
+ steady_clock::time_point firstTimeTxnCanBeCanceled;
};
struct contextHubServiceDb_s {
int initialized;
context_hub_info_s hubInfo;
jniInfo_s jniInfo;
- std::queue<int> freeIds;
- std::unordered_map<int, app_instance_info_s> appInstances;
+ std::queue<jint> freeIds;
+ std::unordered_map<jint, app_instance_info_s> appInstances;
txnManager_s txnManager;
};
@@ -176,25 +197,40 @@
std::lock_guard<std::mutex>lock(mgr->m);
mgr->txnPending = true;
+ mgr->firstTimeTxnCanBeCanceled = steady_clock::now() +
+ kMinTransactionCancelTime;
mgr->txnData = txnData;
mgr->txnIdentifier = txnIdentifier;
return 0;
}
-static int closeTxn() {
+// Only call this if you hold the db.txnManager.m lock.
+static void closeTxnUnlocked() {
txnManager_s *mgr = &db.txnManager;
- std::lock_guard<std::mutex>lock(mgr->m);
mgr->txnPending = false;
free(mgr->txnData);
mgr->txnData = nullptr;
+}
+static int closeTxn() {
+ std::lock_guard<std::mutex>lock(db.txnManager.m);
+ closeTxnUnlocked();
return 0;
}
+// If a transaction has been pending for longer than
+// kMinTransactionCancelTime, this call will "cancel" that
+// transaction and return that there are none pending.
static bool isTxnPending() {
txnManager_s *mgr = &db.txnManager;
std::lock_guard<std::mutex>lock(mgr->m);
+ if (mgr->txnPending) {
+ if (steady_clock::now() >= mgr->firstTimeTxnCanBeCanceled) {
+ ALOGW("Transaction canceled");
+ closeTxnUnlocked();
+ }
+ }
return mgr->txnPending;
}
@@ -259,16 +295,17 @@
}
}
-static int get_hub_handle_for_app_instance(int id) {
+static int get_hub_handle_for_app_instance(jint id) {
if (!db.appInstances.count(id)) {
- ALOGD("%s: Cannot find app for app instance %d", __FUNCTION__, id);
+ ALOGD("%s: Cannot find app for app instance %" PRId32,
+ __FUNCTION__, id);
return -1;
}
return db.appInstances[id].hubHandle;
}
-static int get_hub_id_for_app_instance(int id) {
+static int get_hub_id_for_app_instance(jint id) {
int hubHandle = get_hub_handle_for_app_instance(id);
if (hubHandle < 0) {
@@ -278,7 +315,7 @@
return db.hubInfo.hubs[hubHandle].hub_id;
}
-static int get_app_instance_for_app_id(uint64_t app_id) {
+static jint get_app_instance_for_app_id(uint64_t app_id) {
auto end = db.appInstances.end();
for (auto current = db.appInstances.begin(); current != end; ++current) {
if (current->second.appInfo.app_name.id == app_id) {
@@ -289,9 +326,10 @@
return -1;
}
-static int set_dest_app(hub_message_t *msg, int id) {
+static int set_dest_app(hub_message_t *msg, jint id) {
if (!db.appInstances.count(id)) {
- ALOGD("%s: Cannot find app for app instance %d", __FUNCTION__, id);
+ ALOGD("%s: Cannot find app for app instance %" PRId32,
+ __FUNCTION__, id);
return -1;
}
@@ -299,11 +337,15 @@
return 0;
}
-static void query_hub_for_apps(uint64_t appId, uint32_t hubHandle) {
+static void query_hub_for_apps(uint32_t hubHandle) {
hub_message_t msg;
query_apps_request_t queryMsg;
- queryMsg.app_name.id = NANOAPP_VENDOR_ALL_APPS;
+ // TODO(b/30835598): When we're able to tell which request our
+ // response matches, then we should allow this to be more
+ // targetted, instead of always being every app in the
+ // system.
+ queryMsg.app_name.id = ALL_APPS;
msg.message_type = CONTEXT_HUB_QUERY_APPS;
msg.message_len = sizeof(queryMsg);
@@ -316,13 +358,13 @@
}
}
-static void sendQueryForApps(uint64_t appId) {
+static void sendQueryForApps() {
for (int i = 0; i < db.hubInfo.numHubs; i++ ) {
- query_hub_for_apps(appId, i);
+ query_hub_for_apps(i);
}
}
-static int return_id(int id) {
+static int return_id(jint id) {
// Note : This method is not thread safe.
// id returned is guaranteed to be in use
if (id >= 0) {
@@ -333,9 +375,9 @@
return -1;
}
-static int generate_id() {
+static jint generate_id() {
// Note : This method is not thread safe.
- int retVal = -1;
+ jint retVal = -1;
if (!db.freeIds.empty()) {
retVal = db.freeIds.front();
@@ -346,23 +388,14 @@
}
-static int add_app_instance(const hub_app_info *appInfo, uint32_t hubHandle,
- int appInstanceHandle, JNIEnv *env) {
-
- ALOGI("Loading App");
-
+static jint add_app_instance(const hub_app_info *appInfo, uint32_t hubHandle,
+ jint appInstanceHandle, JNIEnv *env) {
// Not checking if the apps are indeed distinct
app_instance_info_s entry;
assert(appInfo);
- if (db.appInstances.count(appInstanceHandle) == 0) {
- appInstanceHandle = generate_id();
- if (appInstanceHandle < 0) {
- ALOGE("Cannot find resources to add app instance %d",
- appInstanceHandle);
- return -1;
- }
- }
+ const char *action =
+ (db.appInstances.count(appInstanceHandle) == 0) ? "Added" : "Updated";
entry.appInfo = *appInfo;
@@ -372,42 +405,49 @@
db.appInstances[appInstanceHandle] = entry;
- // Finally - let the service know of this app instance
+ // Finally - let the service know of this app instance, to populate
+ // the Java cache.
env->CallIntMethod(db.jniInfo.jContextHubService,
db.jniInfo.contextHubServiceAddAppInstance,
hubHandle, entry.instanceId, entry.truncName,
entry.appInfo.version);
- ALOGW("Added App 0x%" PRIx64 " on hub Handle %" PRId32
- " as appInstance %d", entry.truncName,
+ ALOGI("%s App 0x%" PRIx64 " on hub Handle %" PRId32
+ " as appInstance %" PRId32, action, entry.truncName,
entry.hubHandle, appInstanceHandle);
return appInstanceHandle;
}
-int delete_app_instance(int id, JNIEnv *env) {
- if (!db.appInstances.count(id)) {
- ALOGW("Cannot find App id : %d", id);
- return -1;
- }
+int delete_app_instance(jint id, JNIEnv *env) {
+ bool fullyDeleted = true;
+ if (db.appInstances.count(id)) {
+ db.appInstances.erase(id);
+ } else {
+ ALOGW("Cannot delete App id (%" PRId32 ") from the JNI C++ cache", id);
+ fullyDeleted = false;
+ }
return_id(id);
- db.appInstances.erase(id);
- if (env->CallIntMethod(db.jniInfo.jContextHubService,
+
+ if ((env == nullptr) ||
+ (env->CallIntMethod(db.jniInfo.jContextHubService,
db.jniInfo.contextHubServiceDeleteAppInstance,
- id) != 0) {
- ALOGW("Could not delete App id : %d", id);
- return -1;
+ id) != 0)) {
+ ALOGW("Cannot delete App id (%" PRId32 ") from Java cache", id);
+ fullyDeleted = false;
}
- ALOGI("Deleted App id : %d", id);
-
- return 0;
+ if (fullyDeleted) {
+ ALOGI("Deleted App id : %" PRId32, id);
+ return 0;
+ }
+ return -1;
}
static int startLoadAppTxn(uint64_t appId, int hubHandle) {
app_instance_info_s *txnInfo = (app_instance_info_s *)malloc(sizeof(app_instance_info_s));
- int instanceId = generate_id();
+ jint instanceId = generate_id();
if (!txnInfo || instanceId < 0) {
return_id(instanceId);
@@ -432,8 +472,8 @@
return 0;
}
-static int startUnloadAppTxn(uint32_t appInstanceHandle) {
- uint32_t *txnData = (uint32_t *) malloc(sizeof(uint32_t));
+static int startUnloadAppTxn(jint appInstanceHandle) {
+ jint *txnData = (jint *) malloc(sizeof(jint));
if (!txnData) {
ALOGW("Cannot allocate memory to start unload transaction");
return -1;
@@ -454,7 +494,6 @@
int err = 0;
db.hubInfo.hubs = nullptr;
db.hubInfo.numHubs = 0;
- int i;
err = hw_get_module(CONTEXT_HUB_MODULE_ID,
(hw_module_t const**)(&db.hubInfo.contextHubModule));
@@ -465,7 +504,7 @@
}
// Prep for storing app info
- for(i = MIN_APP_ID; i <= MAX_APP_ID; i++) {
+ for (jint i = MIN_APP_ID; i <= MAX_APP_ID; i++) {
db.freeIds.push(i);
}
@@ -485,7 +524,7 @@
return;
}
- for (i = 0; i < db.hubInfo.numHubs; i++) {
+ for (int i = 0; i < db.hubInfo.numHubs; i++) {
db.hubInfo.cookies[i] = db.hubInfo.hubs[i].hub_id;
ALOGI("Subscribing to hubHandle %d with OS App name %" PRIu64, i, db.hubInfo.hubs[i].os_app_name.id);
if (db.hubInfo.contextHubModule->subscribe_messages(db.hubInfo.hubs[i].hub_id,
@@ -495,7 +534,7 @@
}
}
- sendQueryForApps(ALL_APPS);
+ sendQueryForApps();
} else {
ALOGW("No Context Hub Module present");
}
@@ -539,21 +578,70 @@
return -1;
}
- int numApps = msgLen/sizeof(hub_app_info);
- hub_app_info info;
+ int numApps = msgLen / sizeof(hub_app_info);
const hub_app_info *unalignedInfoAddr = (const hub_app_info*)msg;
- for (int i = 0; i < numApps; i++, unalignedInfoAddr++) {
- memcpy(&info, unalignedInfoAddr, sizeof(info));
+ // We use this information to sync our JNI and Java caches of nanoapp info.
+ // We want to accomplish two things here:
+ // 1) Remove entries from our caches which are stale, and pertained to
+ // apps no longer running on Context Hub.
+ // 2) Populate our caches with the latest information of all these apps.
+
+ // We make a couple of assumptions here:
+ // A) The JNI and Java caches are in sync with each other (this isn't
+ // necessarily true; any failure of a single call into Java land to
+ // update its cache will leave that cache in a bad state. For NYC,
+ // we're willing to tolerate this for now).
+ // B) The total number of apps is relatively small, so horribly inefficent
+ // algorithms aren't too painful.
+ // C) We're going to call this relatively infrequently, so its inefficency
+ // isn't a big impact.
+
+
+ // (1). Looking for stale cache entries. Yes, this is O(N^2). See
+ // assumption (B). Per assumption (A), it is sufficient to iterate
+ // over just the JNI cache.
+ auto end = db.appInstances.end();
+ for (auto current = db.appInstances.begin(); current != end; ) {
+ app_instance_info_s cache_entry = current->second;
+ // We perform our iteration here because if we call
+ // delete_app_instance() below, it will erase() this entry.
+ current++;
+ bool entryIsStale = true;
+ for (int i = 0; i < numApps; i++) {
+ // We use memcmp since this could be unaligned.
+ if (memcmp(&unalignedInfoAddr[i].app_name.id,
+ &cache_entry.appInfo.app_name.id,
+ sizeof(cache_entry.appInfo.app_name.id)) == 0) {
+ // We found a match; this entry is current.
+ entryIsStale = false;
+ break;
+ }
+ }
+ if (entryIsStale) {
+ delete_app_instance(cache_entry.instanceId, env);
+ }
+ }
+
+ // (2). Update our caches with the latest.
+ for (int i = 0; i < numApps; i++) {
+ hub_app_info query_info;
+ memcpy(&query_info, &unalignedInfoAddr[i], sizeof(query_info));
// We will only have one instance of the app
// TODO : Change this logic once we support multiple instances of the same app
- int appInstance = get_app_instance_for_app_id(info.app_name.id);
- add_app_instance(&info, hubHandle, appInstance, env);
+ jint appInstance = get_app_instance_for_app_id(query_info.app_name.id);
+ if (appInstance == -1) {
+ // This is a previously unknown app, let's allocate an "id" for it.
+ appInstance = generate_id();
+ }
+ add_app_instance(&query_info, hubHandle, appInstance, env);
}
return 0;
}
+// TODO(b/30807327): Do not use raw bytes for additional data. Use the
+// JNI interfaces for the appropriate types.
static void passOnOsResponse(uint32_t hubHandle, uint32_t msgType,
status_response_t *rsp, int8_t *additionalData,
size_t additionalDataLen) {
@@ -584,7 +672,32 @@
header[HEADER_FIELD_HUB_HANDLE] = hubHandle;
header[HEADER_FIELD_APP_INSTANCE] = OS_APP_ID;
- msg[0] = rsp->result;
+ // Due to API constraints, at the moment we can't change the fact that
+ // we're changing our 4-byte response to a 1-byte value. But we can prevent
+ // the possible change in sign (and thus meaning) that would happen from
+ // a naive cast. Further, we can log when we're losing part of the value.
+ // TODO(b/30918279): Don't truncate this result.
+ int8_t truncatedResult;
+ bool neededToTruncate;
+ if (rsp->result < INT8_MIN) {
+ neededToTruncate = true;
+ truncatedResult = INT8_MIN;
+ } else if (rsp->result > INT8_MAX) {
+ neededToTruncate = true;
+ truncatedResult = INT8_MAX;
+ } else {
+ neededToTruncate = false;
+ // Since this value fits within an int8_t, this is a safe cast which
+ // won't change the value or sign.
+ truncatedResult = static_cast<int8_t>(rsp->result);
+ }
+ if (neededToTruncate) {
+ ALOGW("Response from Context Hub truncated. Value was %" PRId32
+ ", but giving Java layer %" PRId8,
+ rsp->result, (int)truncatedResult);
+ }
+
+ msg[0] = truncatedResult;
if (additionalData) {
memcpy(&msg[1], additionalData, additionalDataLen);
@@ -603,6 +716,8 @@
env->CallIntMethod(db.jniInfo.jContextHubService,
db.jniInfo.contextHubServiceMsgReceiptCallback,
jheader, jmsg);
+ env->DeleteLocalRef(jmsg);
+ env->DeleteLocalRef(jheader);
delete[] msg;
}
@@ -613,7 +728,13 @@
if (success && fetchTxnData(&txnId, &txnData) == 0 &&
txnId == CONTEXT_HUB_UNLOAD_APP) {
- db.appInstances.erase(*(uint32_t *)txnData);
+ JNIEnv *env;
+ if ((db.jniInfo.vm)->AttachCurrentThread(&env, nullptr) != JNI_OK) {
+ ALOGW("Could not attach to JVM !");
+ env = nullptr;
+ }
+ jint handle = *reinterpret_cast<jint *>(txnData);
+ delete_app_instance(handle, env);
} else {
ALOGW("Could not unload the app successfully ! success %d, txnData %p", success, txnData);
}
@@ -621,7 +742,7 @@
closeTxn();
}
-void closeLoadTxn(bool success, int *appInstanceHandle) {
+static bool closeLoadTxn(bool success, jint *appInstanceHandle) {
void *txnData;
hub_messages_e txnId;
@@ -635,13 +756,22 @@
add_app_instance(&info->appInfo, info->hubHandle, info->instanceId, env);
} else {
ALOGW("Could not attach to JVM !");
+ success = false;
}
- sendQueryForApps(info->appInfo.app_name.id);
+ // While we just called add_app_instance above, our info->appInfo was
+ // incomplete (for example, the 'version' is hardcoded to -1). So we
+ // trigger an additional query to the CHRE, so we'll be able to get
+ // all the app "info", and have our JNI and Java caches with the
+ // full information.
+ sendQueryForApps();
} else {
ALOGW("Could not load the app successfully ! Unexpected failure");
+ *appInstanceHandle = INVALID_APP_ID;
+ success = false;
}
closeTxn();
+ return success;
}
static bool isValidOsStatus(const uint8_t *msg, size_t msgLen,
@@ -663,23 +793,6 @@
return true;
}
-static void invalidateNanoApps(uint32_t hubHandle) {
- JNIEnv *env;
-
- if ((db.jniInfo.vm)->AttachCurrentThread(&env, nullptr) != JNI_OK) {
- ALOGW("Could not attach to JVM !");
- }
-
- auto end = db.appInstances.end();
- for (auto current = db.appInstances.begin(); current != end; ) {
- app_instance_info_s info = current->second;
- current++;
- if (info.hubHandle == hubHandle) {
- delete_app_instance(info.instanceId, env);
- }
- }
-}
-
static int handle_os_message(uint32_t msgType, uint32_t hubHandle,
const uint8_t *msg, int msgLen) {
int retVal = -1;
@@ -697,8 +810,27 @@
case CONTEXT_HUB_UNLOAD_APP:
if (isValidOsStatus(msg, msgLen, &rsp)) {
if (msgType == CONTEXT_HUB_LOAD_APP) {
- int appInstanceHandle;
- closeLoadTxn(rsp.result == 0, &appInstanceHandle);
+ jint appInstanceHandle = INVALID_APP_ID;
+ bool appRunningOnHub = (rsp.result == 0);
+ if (!(closeLoadTxn(appRunningOnHub, &appInstanceHandle))) {
+ if (appRunningOnHub) {
+ // Now we're in an odd situation. Our nanoapp
+ // is up and running on the Context Hub. However,
+ // something went wrong in our Service code so that
+ // we're not able to properly track this nanoapp
+ // in our Service code. If we tell the Java layer
+ // things are good, it's a lie because the handle
+ // we give them will fail when used with the Service.
+ // If we tell the Java layer this failed, it's kind
+ // of a lie as well, since this nanoapp is running.
+ //
+ // We leave a more robust fix for later, and for
+ // now just tell the user things have failed.
+ //
+ // TODO(b/30835981): Make this situation better.
+ rsp.result = -1;
+ }
+ }
passOnOsResponse(hubHandle, msgType, &rsp, (int8_t *)(&appInstanceHandle),
sizeof(appInstanceHandle));
} else if (msgType == CONTEXT_HUB_UNLOAD_APP) {
@@ -728,8 +860,7 @@
ALOGW("Context Hub handle %d restarted", hubHandle);
closeTxn();
passOnOsResponse(hubHandle, msgType, &rsp, nullptr, 0);
- invalidateNanoApps(hubHandle);
- query_hub_for_apps(ALL_APPS, hubHandle);
+ query_hub_for_apps(hubHandle);
retVal = 0;
}
break;
@@ -778,7 +909,7 @@
if (messageType < CONTEXT_HUB_TYPE_PRIVATE_MSG_BASE) {
handle_os_message(messageType, hubHandle, (uint8_t*) msg->message, msg->message_len);
} else {
- int appHandle = get_app_instance_for_app_id(msg->app_name.id);
+ jint appHandle = get_app_instance_for_app_id(msg->app_name.id);
if (appHandle < 0) {
ALOGE("Filtering out message due to invalid App Instance.");
} else {
@@ -1051,7 +1182,8 @@
ALOGD("Asking HAL to remove app");
retVal = db.hubInfo.contextHubModule->send_message(hubId, &msg);
} else {
- ALOGD("Could not find app instance %d on hubHandle %d, setAddress %d",
+ ALOGD("Could not find app instance %" PRId32 " on hubHandle %" PRId32
+ ", setAddress %d",
header[HEADER_FIELD_APP_INSTANCE],
header[HEADER_FIELD_HUB_HANDLE],
(int)setAddressSuccess);
@@ -1060,7 +1192,8 @@
if (retVal != 0) {
ALOGD("Send Message failure - %d", retVal);
if (msgType == CONTEXT_HUB_LOAD_APP) {
- closeLoadTxn(false, nullptr);
+ jint ignored;
+ closeLoadTxn(false, &ignored);
} else if (msgType == CONTEXT_HUB_UNLOAD_APP) {
closeUnloadTxn(false);
}
diff --git a/core/jni/android_media_AudioSystem.cpp b/core/jni/android_media_AudioSystem.cpp
index ef16ef50..49760021 100644
--- a/core/jni/android_media_AudioSystem.cpp
+++ b/core/jni/android_media_AudioSystem.cpp
@@ -20,13 +20,14 @@
#define LOG_TAG "AudioSystem-JNI"
#include <utils/Log.h>
+#include <sstream>
#include <jni.h>
#include <JNIHelp.h>
#include "core_jni_helpers.h"
#include <media/AudioSystem.h>
#include <media/AudioPolicy.h>
-
+#include <nativehelper/ScopedLocalRef.h>
#include <system/audio.h>
#include <system/audio_policy.h>
#include "android_media_AudioFormat.h"
@@ -903,6 +904,12 @@
return false; // not found
}
+// TODO: pull out to separate file
+template <typename T, size_t N>
+static constexpr size_t array_size(const T (&)[N]) {
+ return N;
+}
+
static jint convertAudioPortFromNative(JNIEnv *env,
jobject *jAudioPort, const struct audio_port *nAudioPort)
{
@@ -923,6 +930,38 @@
ALOGV("convertAudioPortFromNative id %d role %d type %d name %s",
nAudioPort->id, nAudioPort->role, nAudioPort->type, nAudioPort->name);
+ // Verify audio port array count info.
+ if (nAudioPort->num_sample_rates > array_size(nAudioPort->sample_rates)
+ || nAudioPort->num_channel_masks > array_size(nAudioPort->channel_masks)
+ || nAudioPort->num_formats > array_size(nAudioPort->formats)
+ || nAudioPort->num_gains > array_size(nAudioPort->gains)) {
+
+ std::stringstream ss;
+ ss << "convertAudioPortFromNative array count out of bounds:"
+ << " num_sample_rates " << nAudioPort->num_sample_rates
+ << " num_channel_masks " << nAudioPort->num_channel_masks
+ << " num_formats " << nAudioPort->num_formats
+ << " num_gains " << nAudioPort->num_gains
+ ;
+ std::string s = ss.str();
+
+ // Prefer to log through Java wtf instead of native ALOGE.
+ ScopedLocalRef<jclass> jLogClass(env, env->FindClass("android/util/Log"));
+ jmethodID jWtfId = (jLogClass.get() == nullptr)
+ ? nullptr
+ : env->GetStaticMethodID(jLogClass.get(), "wtf",
+ "(Ljava/lang/String;Ljava/lang/String;)I");
+ if (jWtfId != nullptr) {
+ ScopedLocalRef<jstring> jMessage(env, env->NewStringUTF(s.c_str()));
+ ScopedLocalRef<jstring> jTag(env, env->NewStringUTF(LOG_TAG));
+ (void)env->CallStaticIntMethod(jLogClass.get(), jWtfId, jTag.get(), jMessage.get());
+ } else {
+ ALOGE("%s", s.c_str());
+ }
+ jStatus = (jint)AUDIO_JAVA_ERROR;
+ goto exit;
+ }
+
jSamplingRates = env->NewIntArray(nAudioPort->num_sample_rates);
if (jSamplingRates == NULL) {
jStatus = (jint)AUDIO_JAVA_ERROR;
@@ -1066,7 +1105,7 @@
&jAudioPortConfig,
&nAudioPort->active_config);
if (jStatus != AUDIO_JAVA_SUCCESS) {
- return jStatus;
+ goto exit;
}
env->SetObjectField(*jAudioPort, gAudioPortFields.mActiveConfig, jAudioPortConfig);
diff --git a/core/jni/android_util_MemoryIntArray.cpp b/core/jni/android_util_MemoryIntArray.cpp
index f45be12..d0c0f2f 100644
--- a/core/jni/android_util_MemoryIntArray.cpp
+++ b/core/jni/android_util_MemoryIntArray.cpp
@@ -160,16 +160,8 @@
return -1;
}
- // Use ASHMEM_GET_SIZE to find out if the fd refers to an ashmem region.
- // ASHMEM_GET_SIZE should succeed for all ashmem regions, and the kernel
- // should return ENOTTY for all other valid file descriptors
int ashmemSize = ashmem_get_size_region(fd);
if (ashmemSize < 0) {
- if (errno == ENOTTY) {
- // ENOTTY means that the ioctl does not apply to this object,
- // i.e., it is not an ashmem region.
- return -1;
- }
// Some other error, throw exception
jniThrowIOException(env, errno);
return -1;
diff --git a/core/jni/android_util_Process.cpp b/core/jni/android_util_Process.cpp
index a693f29..3c72274 100644
--- a/core/jni/android_util_Process.cpp
+++ b/core/jni/android_util_Process.cpp
@@ -58,21 +58,19 @@
#endif
// For both of these, err should be in the errno range (positive), not a status_t (negative)
-
-static void signalExceptionForPriorityError(JNIEnv* env, int err)
-{
+static void signalExceptionForError(JNIEnv* env, int err, int tid) {
switch (err) {
case EINVAL:
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
+ jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
+ "Invalid argument: %d", tid);
break;
case ESRCH:
- jniThrowException(env, "java/lang/IllegalArgumentException", "Given thread does not exist");
+ jniThrowExceptionFmt(env, "java/lang/IllegalArgumentException",
+ "Given thread %d does not exist", tid);
break;
case EPERM:
- jniThrowException(env, "java/lang/SecurityException", "No permission to modify given thread");
- break;
- case EACCES:
- jniThrowException(env, "java/lang/SecurityException", "No permission to set to given priority");
+ jniThrowExceptionFmt(env, "java/lang/SecurityException",
+ "No permission to modify given thread %d", tid);
break;
default:
jniThrowException(env, "java/lang/RuntimeException", "Unknown error");
@@ -80,23 +78,27 @@
}
}
-static void signalExceptionForGroupError(JNIEnv* env, int err)
-{
+static void signalExceptionForPriorityError(JNIEnv* env, int err, int tid) {
switch (err) {
- case EINVAL:
- jniThrowException(env, "java/lang/IllegalArgumentException", NULL);
- break;
- case ESRCH:
- jniThrowException(env, "java/lang/IllegalArgumentException", "Given thread does not exist");
- break;
- case EPERM:
- jniThrowException(env, "java/lang/SecurityException", "No permission to modify given thread");
- break;
case EACCES:
- jniThrowException(env, "java/lang/SecurityException", "No permission to set to given group");
+ jniThrowExceptionFmt(env, "java/lang/SecurityException",
+ "No permission to set the priority of %d", tid);
break;
default:
- jniThrowException(env, "java/lang/RuntimeException", "Unknown error");
+ signalExceptionForError(env, err, tid);
+ break;
+ }
+
+}
+
+static void signalExceptionForGroupError(JNIEnv* env, int err, int tid) {
+ switch (err) {
+ case EACCES:
+ jniThrowExceptionFmt(env, "java/lang/SecurityException",
+ "No permission to set the group of %d", tid);
+ break;
+ default:
+ signalExceptionForError(env, err, tid);
break;
}
}
@@ -171,7 +173,7 @@
SchedPolicy sp = (SchedPolicy) grp;
int res = set_sched_policy(tid, sp);
if (res != NO_ERROR) {
- signalExceptionForGroupError(env, -res);
+ signalExceptionForGroupError(env, -res, tid);
}
}
@@ -183,7 +185,7 @@
struct dirent *de;
if ((grp == SP_FOREGROUND) || (grp > SP_MAX)) {
- signalExceptionForGroupError(env, EINVAL);
+ signalExceptionForGroupError(env, EINVAL, pid);
return;
}
@@ -219,7 +221,7 @@
if (!(d = opendir(proc_path))) {
// If the process exited on us, don't generate an exception
if (errno != ENOENT)
- signalExceptionForGroupError(env, errno);
+ signalExceptionForGroupError(env, errno, pid);
return;
}
@@ -254,7 +256,7 @@
#ifdef ENABLE_CPUSETS
int err = set_cpuset_policy(t_pid, sp);
if (err != NO_ERROR) {
- signalExceptionForGroupError(env, -err);
+ signalExceptionForGroupError(env, -err, t_pid);
break;
}
#endif
@@ -266,14 +268,14 @@
// set both cpuset and cgroup for general threads
err = set_cpuset_policy(t_pid, sp);
if (err != NO_ERROR) {
- signalExceptionForGroupError(env, -err);
+ signalExceptionForGroupError(env, -err, t_pid);
break;
}
#endif
err = set_sched_policy(t_pid, sp);
if (err != NO_ERROR) {
- signalExceptionForGroupError(env, -err);
+ signalExceptionForGroupError(env, -err, t_pid);
break;
}
@@ -285,7 +287,7 @@
{
SchedPolicy sp;
if (get_sched_policy(pid, &sp) != 0) {
- signalExceptionForGroupError(env, errno);
+ signalExceptionForGroupError(env, errno, pid);
}
return (int) sp;
}
@@ -400,7 +402,7 @@
jintArray cpus;
int pid = getpid();
if (get_sched_policy(pid, &sp) != 0) {
- signalExceptionForGroupError(env, errno);
+ signalExceptionForGroupError(env, errno, pid);
return NULL;
}
get_exclusive_cpuset_cores(sp, &cpu_set);
@@ -449,10 +451,10 @@
errno = 0;
policy = sched_getscheduler(tid);
if (errno != 0) {
- signalExceptionForPriorityError(env, errno);
+ signalExceptionForPriorityError(env, errno, tid);
}
#else
- signalExceptionForPriorityError(env, ENOSYS);
+ signalExceptionForPriorityError(env, ENOSYS, tid);
#endif
return policy;
}
@@ -466,10 +468,10 @@
param.sched_priority = pri;
int rc = sched_setscheduler(tid, policy, ¶m);
if (rc) {
- signalExceptionForPriorityError(env, errno);
+ signalExceptionForPriorityError(env, errno, tid);
}
#else
- signalExceptionForPriorityError(env, ENOSYS);
+ signalExceptionForPriorityError(env, ENOSYS, tid);
#endif
}
@@ -494,9 +496,9 @@
int rc = androidSetThreadPriority(pid, pri);
if (rc != 0) {
if (rc == INVALID_OPERATION) {
- signalExceptionForPriorityError(env, errno);
+ signalExceptionForPriorityError(env, errno, pid);
} else {
- signalExceptionForGroupError(env, errno);
+ signalExceptionForGroupError(env, errno, pid);
}
}
@@ -516,7 +518,7 @@
errno = 0;
jint pri = getpriority(PRIO_PROCESS, pid);
if (errno != 0) {
- signalExceptionForPriorityError(env, errno);
+ signalExceptionForPriorityError(env, errno, pid);
}
//ALOGI("Returning priority of %" PRId32 ": %" PRId32 "\n", pid, pri);
return pri;
diff --git a/core/jni/android_view_RenderNode.cpp b/core/jni/android_view_RenderNode.cpp
index b0028e1..1bad5f8 100644
--- a/core/jni/android_view_RenderNode.cpp
+++ b/core/jni/android_view_RenderNode.cpp
@@ -721,9 +721,9 @@
int register_android_view_RenderNode(JNIEnv* env) {
jclass clazz = FindClassOrDie(env, "android/view/SurfaceView");
gSurfaceViewPositionUpdateMethod = GetMethodIDOrDie(env, clazz,
- "updateWindowPositionRT", "(JIIII)V");
+ "updateWindowPosition_renderWorker", "(JIIII)V");
gSurfaceViewPositionLostMethod = GetMethodIDOrDie(env, clazz,
- "windowPositionLostRT", "(J)V");
+ "windowPositionLost_uiRtSync", "(J)V");
clazz = FindClassOrDie(env, "android/view/RenderNode");
gOnRenderNodeDetached = GetMethodIDOrDie(env, clazz,
"onRenderNodeDetached", "()V");
diff --git a/core/jni/android_view_SurfaceControl.cpp b/core/jni/android_view_SurfaceControl.cpp
index 0d8a95c..73b3f52 100644
--- a/core/jni/android_view_SurfaceControl.cpp
+++ b/core/jni/android_view_SurfaceControl.cpp
@@ -371,7 +371,12 @@
if (sur != NULL) {
bufferProducer = sur->getIGraphicBufferProducer();
}
- SurfaceComposerClient::setDisplaySurface(token, bufferProducer);
+ status_t err = SurfaceComposerClient::setDisplaySurface(token,
+ bufferProducer);
+ if (err != NO_ERROR) {
+ doThrowIAE(env, "Illegal Surface, could not enable async mode. Was this"
+ " Surface created with singleBufferMode?");
+ }
}
static void nativeSetDisplayLayerStack(JNIEnv* env, jclass clazz,
diff --git a/core/jni/com_android_internal_os_Zygote.cpp b/core/jni/com_android_internal_os_Zygote.cpp
index a04fc2a..d1fe07b 100644
--- a/core/jni/com_android_internal_os_Zygote.cpp
+++ b/core/jni/com_android_internal_os_Zygote.cpp
@@ -54,6 +54,7 @@
#include "ScopedLocalRef.h"
#include "ScopedPrimitiveArray.h"
#include "ScopedUtfChars.h"
+#include "fd_utils-inl.h"
#include "nativebridge/native_bridge.h"
@@ -436,6 +437,9 @@
}
#endif
+// The list of open zygote file descriptors.
+static FileDescriptorTable* gOpenFdTable = NULL;
+
// Utility routine to fork zygote and specialize the child process.
static pid_t ForkAndSpecializeCommon(JNIEnv* env, uid_t uid, gid_t gid, jintArray javaGids,
jint debug_flags, jobjectArray javaRlimits,
@@ -450,6 +454,22 @@
SetForkLoad(true);
#endif
+ // Close any logging related FDs before we start evaluating the list of
+ // file descriptors.
+ __android_log_close();
+
+ // If this is the first fork for this zygote, create the open FD table.
+ // If it isn't, we just need to check whether the list of open files has
+ // changed (and it shouldn't in the normal case).
+ if (gOpenFdTable == NULL) {
+ gOpenFdTable = FileDescriptorTable::Create();
+ if (gOpenFdTable == NULL) {
+ RuntimeAbort(env, __LINE__, "Unable to construct file descriptor table.");
+ }
+ } else if (!gOpenFdTable->Restat()) {
+ RuntimeAbort(env, __LINE__, "Unable to restat file descriptor table.");
+ }
+
pid_t pid = fork();
if (pid == 0) {
@@ -459,6 +479,12 @@
// Clean up any descriptors which must be closed immediately
DetachDescriptors(env, fdsToClose);
+ // Re-open all remaining open file descriptors so that they aren't shared
+ // with the zygote across a fork.
+ if (!gOpenFdTable->ReopenOrDetach()) {
+ RuntimeAbort(env, __LINE__, "Unable to reopen whitelisted descriptors.");
+ }
+
// Keep capabilities across UID change, unless we're staying root.
if (uid != 0) {
EnableKeepCapabilities(env);
diff --git a/core/jni/fd_utils-inl.h b/core/jni/fd_utils-inl.h
new file mode 100644
index 0000000..c67662b
--- /dev/null
+++ b/core/jni/fd_utils-inl.h
@@ -0,0 +1,539 @@
+/*
+ * 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 <string>
+#include <unordered_map>
+#include <set>
+#include <vector>
+#include <algorithm>
+
+#include <dirent.h>
+#include <fcntl.h>
+#include <grp.h>
+#include <inttypes.h>
+#include <stdlib.h>
+#include <sys/socket.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <sys/un.h>
+#include <unistd.h>
+
+#include <cutils/log.h>
+#include "JNIHelp.h"
+#include "ScopedPrimitiveArray.h"
+
+// Whitelist of open paths that the zygote is allowed to keep open.
+//
+// In addition to the paths listed here, all files ending with
+// ".jar" under /system/framework" are whitelisted. See
+// FileDescriptorInfo::IsWhitelisted for the canonical definition.
+//
+// If the whitelisted path is associated with a regular file or a
+// character device, the file is reopened after a fork with the same
+// offset and mode. If the whilelisted path is associated with a
+// AF_UNIX socket, the socket will refer to /dev/null after each
+// fork, and all operations on it will fail.
+static const char* kPathWhitelist[] = {
+ "/dev/null",
+ "/dev/socket/zygote",
+ "/dev/socket/zygote_secondary",
+ "/sys/kernel/debug/tracing/trace_marker",
+ "/system/framework/framework-res.apk",
+ "/dev/urandom",
+ "/dev/ion",
+ "/dev/dri/renderD129", // Fixes b/31172436
+};
+
+static const char* kFdPath = "/proc/self/fd";
+
+// Keeps track of all relevant information (flags, offset etc.) of an
+// open zygote file descriptor.
+class FileDescriptorInfo {
+ public:
+ // Create a FileDescriptorInfo for a given file descriptor. Returns
+ // |NULL| if an error occurred.
+ static FileDescriptorInfo* createFromFd(int fd) {
+ struct stat f_stat;
+ // This should never happen; the zygote should always have the right set
+ // of permissions required to stat all its open files.
+ if (TEMP_FAILURE_RETRY(fstat(fd, &f_stat)) == -1) {
+ ALOGE("Unable to stat fd %d : %s", fd, strerror(errno));
+ return NULL;
+ }
+
+ if (S_ISSOCK(f_stat.st_mode)) {
+ std::string socket_name;
+ if (!GetSocketName(fd, &socket_name)) {
+ return NULL;
+ }
+
+ if (!IsWhitelisted(socket_name)) {
+ ALOGE("Socket name not whitelisted : %s (fd=%d)", socket_name.c_str(), fd);
+ return NULL;
+ }
+
+ return new FileDescriptorInfo(fd);
+ }
+
+ // We only handle whitelisted regular files and character devices. Whitelisted
+ // character devices must provide a guarantee of sensible behaviour when
+ // reopened.
+ //
+ // S_ISDIR : Not supported. (We could if we wanted to, but it's unused).
+ // S_ISLINK : Not supported.
+ // S_ISBLK : Not supported.
+ // S_ISFIFO : Not supported. Note that the zygote uses pipes to communicate
+ // with the child process across forks but those should have been closed
+ // before we got to this point.
+ if (!S_ISCHR(f_stat.st_mode) && !S_ISREG(f_stat.st_mode)) {
+ ALOGE("Unsupported st_mode %d", f_stat.st_mode);
+ return NULL;
+ }
+
+ std::string file_path;
+ if (!Readlink(fd, &file_path)) {
+ return NULL;
+ }
+
+ if (!IsWhitelisted(file_path)) {
+ ALOGE("Not whitelisted : %s", file_path.c_str());
+ return NULL;
+ }
+
+ // File descriptor flags : currently on FD_CLOEXEC. We can set these
+ // using F_SETFD - we're single threaded at this point of execution so
+ // there won't be any races.
+ const int fd_flags = TEMP_FAILURE_RETRY(fcntl(fd, F_GETFD));
+ if (fd_flags == -1) {
+ ALOGE("Failed fcntl(%d, F_GETFD) : %s", fd, strerror(errno));
+ return NULL;
+ }
+
+ // File status flags :
+ // - File access mode : (O_RDONLY, O_WRONLY...) we'll pass these through
+ // to the open() call.
+ //
+ // - File creation flags : (O_CREAT, O_EXCL...) - there's not much we can
+ // do about these, since the file has already been created. We shall ignore
+ // them here.
+ //
+ // - Other flags : We'll have to set these via F_SETFL. On linux, F_SETFL
+ // can only set O_APPEND, O_ASYNC, O_DIRECT, O_NOATIME, and O_NONBLOCK.
+ // In particular, it can't set O_SYNC and O_DSYNC. We'll have to test for
+ // their presence and pass them in to open().
+ int fs_flags = TEMP_FAILURE_RETRY(fcntl(fd, F_GETFL));
+ if (fs_flags == -1) {
+ ALOGE("Failed fcntl(%d, F_GETFL) : %s", fd, strerror(errno));
+ return NULL;
+ }
+
+ // File offset : Ignore the offset for non seekable files.
+ const off_t offset = TEMP_FAILURE_RETRY(lseek64(fd, 0, SEEK_CUR));
+
+ // We pass the flags that open accepts to open, and use F_SETFL for
+ // the rest of them.
+ static const int kOpenFlags = (O_RDONLY | O_WRONLY | O_RDWR | O_DSYNC | O_SYNC);
+ int open_flags = fs_flags & (kOpenFlags);
+ fs_flags = fs_flags & (~(kOpenFlags));
+
+ return new FileDescriptorInfo(f_stat, file_path, fd, open_flags, fd_flags, fs_flags, offset);
+ }
+
+ // Checks whether the file descriptor associated with this object
+ // refers to the same description.
+ bool Restat() const {
+ struct stat f_stat;
+ if (TEMP_FAILURE_RETRY(fstat(fd, &f_stat)) == -1) {
+ return false;
+ }
+
+ return f_stat.st_ino == stat.st_ino && f_stat.st_dev == stat.st_dev;
+ }
+
+ bool ReopenOrDetach() const {
+ if (is_sock) {
+ return DetachSocket();
+ }
+
+ // NOTE: This might happen if the file was unlinked after being opened.
+ // It's a common pattern in the case of temporary files and the like but
+ // we should not allow such usage from the zygote.
+ const int new_fd = TEMP_FAILURE_RETRY(open(file_path.c_str(), open_flags));
+
+ if (new_fd == -1) {
+ ALOGE("Failed open(%s, %d) : %s", file_path.c_str(), open_flags, strerror(errno));
+ return false;
+ }
+
+ if (TEMP_FAILURE_RETRY(fcntl(new_fd, F_SETFD, fd_flags)) == -1) {
+ close(new_fd);
+ ALOGE("Failed fcntl(%d, F_SETFD, %x) : %s", new_fd, fd_flags, strerror(errno));
+ return false;
+ }
+
+ if (TEMP_FAILURE_RETRY(fcntl(new_fd, F_SETFL, fs_flags)) == -1) {
+ close(new_fd);
+ ALOGE("Failed fcntl(%d, F_SETFL, %x) : %s", new_fd, fs_flags, strerror(errno));
+ return false;
+ }
+
+ if (offset != -1 && TEMP_FAILURE_RETRY(lseek64(new_fd, offset, SEEK_SET)) == -1) {
+ close(new_fd);
+ ALOGE("Failed lseek64(%d, SEEK_SET) : %s", new_fd, strerror(errno));
+ return false;
+ }
+
+ if (TEMP_FAILURE_RETRY(dup2(new_fd, fd)) == -1) {
+ close(new_fd);
+ ALOGE("Failed dup2(%d, %d) : %s", fd, new_fd, strerror(errno));
+ return false;
+ }
+
+ close(new_fd);
+
+ return true;
+ }
+
+ const int fd;
+ const struct stat stat;
+ const std::string file_path;
+ const int open_flags;
+ const int fd_flags;
+ const int fs_flags;
+ const off_t offset;
+ const bool is_sock;
+
+ private:
+ FileDescriptorInfo(int fd) :
+ fd(fd),
+ stat(),
+ open_flags(0),
+ fd_flags(0),
+ fs_flags(0),
+ offset(0),
+ is_sock(true) {
+ }
+
+ FileDescriptorInfo(struct stat stat, const std::string& file_path, int fd, int open_flags,
+ int fd_flags, int fs_flags, off_t offset) :
+ fd(fd),
+ stat(stat),
+ file_path(file_path),
+ open_flags(open_flags),
+ fd_flags(fd_flags),
+ fs_flags(fs_flags),
+ offset(offset),
+ is_sock(false) {
+ }
+
+ // Returns true iff. a given path is whitelisted. A path is whitelisted
+ // if it belongs to the whitelist (see kPathWhitelist) or if it's a path
+ // under /system/framework that ends with ".jar".
+ static bool IsWhitelisted(const std::string& path) {
+ for (size_t i = 0; i < (sizeof(kPathWhitelist) / sizeof(kPathWhitelist[0])); ++i) {
+ if (kPathWhitelist[i] == path) {
+ return true;
+ }
+ }
+
+ static const std::string kFrameworksPrefix = "/system/framework/";
+ static const std::string kJarSuffix = ".jar";
+ if (path.compare(0, kFrameworksPrefix.size(), kFrameworksPrefix) == 0 &&
+ path.compare(path.size() - kJarSuffix.size(), kJarSuffix.size(), kJarSuffix) == 0) {
+ return true;
+ }
+ return false;
+ }
+
+ // TODO: Call android::base::Readlink instead of copying the code here.
+ static bool Readlink(const int fd, std::string* result) {
+ char path[64];
+ snprintf(path, sizeof(path), "/proc/self/fd/%d", fd);
+
+ // Code copied from android::base::Readlink starts here :
+
+ // Annoyingly, the readlink system call returns EINVAL for a zero-sized buffer,
+ // and truncates to whatever size you do supply, so it can't be used to query.
+ // We could call lstat first, but that would introduce a race condition that
+ // we couldn't detect.
+ // ext2 and ext4 both have PAGE_SIZE limitations, so we assume that here.
+ char buf[4096];
+ ssize_t len = readlink(path, buf, sizeof(buf));
+ if (len == -1) return false;
+
+ result->assign(buf, len);
+ return true;
+ }
+
+ // Returns the locally-bound name of the socket |fd|. Returns true
+ // iff. all of the following hold :
+ //
+ // - the socket's sa_family is AF_UNIX.
+ // - the length of the path is greater than zero (i.e, not an unnamed socket).
+ // - the first byte of the path isn't zero (i.e, not a socket with an abstract
+ // address).
+ static bool GetSocketName(const int fd, std::string* result) {
+ sockaddr_storage ss;
+ sockaddr* addr = reinterpret_cast<sockaddr*>(&ss);
+ socklen_t addr_len = sizeof(ss);
+
+ if (TEMP_FAILURE_RETRY(getsockname(fd, addr, &addr_len)) == -1) {
+ ALOGE("Failed getsockname(%d) : %s", fd, strerror(errno));
+ return false;
+ }
+
+ if (addr->sa_family != AF_UNIX) {
+ ALOGE("Unsupported socket (fd=%d) with family %d", fd, addr->sa_family);
+ return false;
+ }
+
+ const sockaddr_un* unix_addr = reinterpret_cast<const sockaddr_un*>(&ss);
+
+ size_t path_len = addr_len - offsetof(struct sockaddr_un, sun_path);
+ // This is an unnamed local socket, we do not accept it.
+ if (path_len == 0) {
+ ALOGE("Unsupported AF_UNIX socket (fd=%d) with empty path.", fd);
+ return false;
+ }
+
+ // This is a local socket with an abstract address, we do not accept it.
+ if (unix_addr->sun_path[0] == '\0') {
+ ALOGE("Unsupported AF_UNIX socket (fd=%d) with abstract address.", fd);
+ return false;
+ }
+
+ // If we're here, sun_path must refer to a null terminated filesystem
+ // pathname (man 7 unix). Remove the terminator before assigning it to an
+ // std::string.
+ if (unix_addr->sun_path[path_len - 1] == '\0') {
+ --path_len;
+ }
+
+ result->assign(unix_addr->sun_path, path_len);
+ return true;
+ }
+
+ bool DetachSocket() const {
+ const int dev_null_fd = open("/dev/null", O_RDWR);
+ if (dev_null_fd < 0) {
+ ALOGE("Failed to open /dev/null : %s", strerror(errno));
+ return false;
+ }
+
+ if (dup2(dev_null_fd, fd) == -1) {
+ ALOGE("Failed dup2 on socket descriptor %d : %s", fd, strerror(errno));
+ return false;
+ }
+
+ if (close(dev_null_fd) == -1) {
+ ALOGE("Failed close(%d) : %s", dev_null_fd, strerror(errno));
+ return false;
+ }
+
+ return true;
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(FileDescriptorInfo);
+};
+
+// A FileDescriptorTable is a collection of FileDescriptorInfo objects
+// keyed by their FDs.
+class FileDescriptorTable {
+ public:
+ // Creates a new FileDescriptorTable. This function scans
+ // /proc/self/fd for the list of open file descriptors and collects
+ // information about them. Returns NULL if an error occurs.
+ static FileDescriptorTable* Create() {
+ DIR* d = opendir(kFdPath);
+ if (d == NULL) {
+ ALOGE("Unable to open directory %s: %s", kFdPath, strerror(errno));
+ return NULL;
+ }
+ int dir_fd = dirfd(d);
+ dirent* e;
+
+ std::unordered_map<int, FileDescriptorInfo*> open_fd_map;
+ while ((e = readdir(d)) != NULL) {
+ const int fd = ParseFd(e, dir_fd);
+ if (fd == -1) {
+ continue;
+ }
+
+ FileDescriptorInfo* info = FileDescriptorInfo::createFromFd(fd);
+ if (info == NULL) {
+ if (closedir(d) == -1) {
+ ALOGE("Unable to close directory : %s", strerror(errno));
+ }
+ return NULL;
+ }
+ open_fd_map[fd] = info;
+ }
+
+ if (closedir(d) == -1) {
+ ALOGE("Unable to close directory : %s", strerror(errno));
+ return NULL;
+ }
+ return new FileDescriptorTable(open_fd_map);
+ }
+
+ bool Restat() {
+ std::set<int> open_fds;
+
+ // First get the list of open descriptors.
+ DIR* d = opendir(kFdPath);
+ if (d == NULL) {
+ ALOGE("Unable to open directory %s: %s", kFdPath, strerror(errno));
+ return false;
+ }
+
+ int dir_fd = dirfd(d);
+ dirent* e;
+ while ((e = readdir(d)) != NULL) {
+ const int fd = ParseFd(e, dir_fd);
+ if (fd == -1) {
+ continue;
+ }
+
+ open_fds.insert(fd);
+ }
+
+ if (closedir(d) == -1) {
+ ALOGE("Unable to close directory : %s", strerror(errno));
+ return false;
+ }
+
+ return RestatInternal(open_fds);
+ }
+
+ // Reopens all file descriptors that are contained in the table. Returns true
+ // if all descriptors were successfully re-opened or detached, and false if an
+ // error occurred.
+ bool ReopenOrDetach() {
+ std::unordered_map<int, FileDescriptorInfo*>::const_iterator it;
+ for (it = open_fd_map_.begin(); it != open_fd_map_.end(); ++it) {
+ const FileDescriptorInfo* info = it->second;
+ if (info == NULL || !info->ReopenOrDetach()) {
+ return false;
+ }
+ }
+
+ return true;
+ }
+
+ private:
+ FileDescriptorTable(const std::unordered_map<int, FileDescriptorInfo*>& map)
+ : open_fd_map_(map) {
+ }
+
+ bool RestatInternal(std::set<int>& open_fds) {
+ bool error = false;
+
+ // Iterate through the list of file descriptors we've already recorded
+ // and check whether :
+ //
+ // (a) they continue to be open.
+ // (b) they refer to the same file.
+ std::unordered_map<int, FileDescriptorInfo*>::iterator it = open_fd_map_.begin();
+ while (it != open_fd_map_.end()) {
+ std::set<int>::const_iterator element = open_fds.find(it->first);
+ if (element == open_fds.end()) {
+ // The entry from the file descriptor table is no longer in the list
+ // of open files. We warn about this condition and remove it from
+ // the list of FDs under consideration.
+ //
+ // TODO(narayan): This will be an error in a future android release.
+ // error = true;
+ // ALOGW("Zygote closed file descriptor %d.", it->first);
+ it = open_fd_map_.erase(it);
+ } else {
+ // The entry from the file descriptor table is still open. Restat
+ // it and check whether it refers to the same file.
+ const bool same_file = it->second->Restat();
+ if (!same_file) {
+ // The file descriptor refers to a different description. We must
+ // update our entry in the table.
+ delete it->second;
+ it->second = FileDescriptorInfo::createFromFd(*element);
+ if (it->second == NULL) {
+ // The descriptor no longer no longer refers to a whitelisted file.
+ // We flag an error and remove it from the list of files we're
+ // tracking.
+ error = true;
+ it = open_fd_map_.erase(it);
+ } else {
+ // Successfully restatted the file, move on to the next open FD.
+ ++it;
+ }
+ } else {
+ // It's the same file. Nothing to do here. Move on to the next open
+ // FD.
+ ++it;
+ }
+
+ // Finally, remove the FD from the set of open_fds. We do this last because
+ // |element| will not remain valid after a call to erase.
+ open_fds.erase(element);
+ }
+ }
+
+ if (open_fds.size() > 0) {
+ // The zygote has opened new file descriptors since our last inspection.
+ // We warn about this condition and add them to our table.
+ //
+ // TODO(narayan): This will be an error in a future android release.
+ // error = true;
+ // ALOGW("Zygote opened %zd new file descriptor(s).", open_fds.size());
+
+ // TODO(narayan): This code will be removed in a future android release.
+ std::set<int>::const_iterator it;
+ for (it = open_fds.begin(); it != open_fds.end(); ++it) {
+ const int fd = (*it);
+ FileDescriptorInfo* info = FileDescriptorInfo::createFromFd(fd);
+ if (info == NULL) {
+ // A newly opened file is not on the whitelist. Flag an error and
+ // continue.
+ error = true;
+ } else {
+ // Track the newly opened file.
+ open_fd_map_[fd] = info;
+ }
+ }
+ }
+
+ return !error;
+ }
+
+ static int ParseFd(dirent* e, int dir_fd) {
+ char* end;
+ const int fd = strtol(e->d_name, &end, 10);
+ if ((*end) != '\0') {
+ return -1;
+ }
+
+ // Don't bother with the standard input/output/error, they're handled
+ // specially post-fork anyway.
+ if (fd <= STDERR_FILENO || fd == dir_fd) {
+ return -1;
+ }
+
+ return fd;
+ }
+
+ // Invariant: All values in this unordered_map are non-NULL.
+ std::unordered_map<int, FileDescriptorInfo*> open_fd_map_;
+
+ DISALLOW_COPY_AND_ASSIGN(FileDescriptorTable);
+};
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index ed71fc2f..6c6fd90 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -183,6 +183,7 @@
<protected-broadcast
android:name="android.bluetooth.pan.profile.action.CONNECTION_STATE_CHANGED" />
<protected-broadcast android:name="android.bluetooth.pbap.intent.action.PBAP_STATE_CHANGED" />
+ <protected-broadcast android:name="android.bluetooth.sap.profile.action.CONNECTION_STATE_CHANGED" />
<protected-broadcast android:name="android.btopp.intent.action.INCOMING_FILE_NOTIFICATION" />
<protected-broadcast android:name="android.btopp.intent.action.USER_CONFIRMATION_TIMEOUT" />
<protected-broadcast android:name="android.btopp.intent.action.LIST" />
@@ -199,6 +200,8 @@
<protected-broadcast android:name="com.android.bluetooth.pbap.userconfirmtimeout" />
<protected-broadcast android:name="com.android.bluetooth.pbap.authresponse" />
<protected-broadcast android:name="com.android.bluetooth.pbap.authcancelled" />
+ <protected-broadcast android:name="com.android.bluetooth.sap.USER_CONFIRM_TIMEOUT" />
+ <protected-broadcast android:name="com.android.bluetooth.sap.action.DISCONNECT_ACTION" />
<protected-broadcast android:name="android.hardware.display.action.WIFI_DISPLAY_STATUS_CHANGED" />
@@ -394,6 +397,8 @@
<protected-broadcast android:name="android.bluetooth.adapter.action.BLE_STATE_CHANGED" />
<protected-broadcast android:name="com.android.bluetooth.map.USER_CONFIRM_TIMEOUT" />
+ <protected-broadcast android:name="com.android.bluetooth.BluetoothMapContentObserver.action.MESSAGE_SENT" />
+ <protected-broadcast android:name="com.android.bluetooth.BluetoothMapContentObserver.action.MESSAGE_DELIVERY" />
<protected-broadcast android:name="android.content.jobscheduler.JOB_DELAY_EXPIRED" />
<protected-broadcast android:name="android.content.syncmanager.SYNC_ALARM" />
<protected-broadcast android:name="android.media.INTERNAL_RINGER_MODE_CHANGED_ACTION" />
@@ -1308,6 +1313,7 @@
android:protectionLevel="dangerous"
android:description="@string/permdesc_getAccounts"
android:label="@string/permlab_getAccounts" />
+ <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<!-- @SystemApi Allows applications to call into AccountAuthenticators.
<p>Not for use by third-party applications. -->
@@ -1628,7 +1634,7 @@
<!-- @hide Allows an application to create, remove users and get the list of
users on the device. Applications holding this permission can only create restricted,
- guest, managed, and ephemeral users. For creating other kind of users,
+ guest, managed, demo, and ephemeral users. For creating other kind of users,
{@link android.Manifest.permission#MANAGE_USERS} is needed.
This permission is not available to third party applications. -->
<permission android:name="android.permission.CREATE_USERS"
diff --git a/core/res/assets/images/android-logo-mask.png b/core/res/assets/images/android-logo-mask.png
index ad40645..5512c0ad 100644
--- a/core/res/assets/images/android-logo-mask.png
+++ b/core/res/assets/images/android-logo-mask.png
Binary files differ
diff --git a/core/res/assets/images/android-logo-shine.png b/core/res/assets/images/android-logo-shine.png
index cb65f22..c5d1263 100644
--- a/core/res/assets/images/android-logo-shine.png
+++ b/core/res/assets/images/android-logo-shine.png
Binary files differ
diff --git a/core/res/assets/images/clock64.png b/core/res/assets/images/clock64.png
deleted file mode 100644
index 493a1ea..0000000
--- a/core/res/assets/images/clock64.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/images/clock_font.png b/core/res/assets/images/clock_font.png
new file mode 100644
index 0000000..be927ae
--- /dev/null
+++ b/core/res/assets/images/clock_font.png
Binary files differ
diff --git a/core/res/assets/sounds/bootanim0.raw b/core/res/assets/sounds/bootanim0.raw
deleted file mode 100644
index 46b8c0f..0000000
--- a/core/res/assets/sounds/bootanim0.raw
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/sounds/bootanim1.raw b/core/res/assets/sounds/bootanim1.raw
deleted file mode 100644
index ce69944..0000000
--- a/core/res/assets/sounds/bootanim1.raw
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/hyph_en_US.dic b/core/res/assets/webkit/hyph_en_US.dic
deleted file mode 100644
index d91204b..0000000
--- a/core/res/assets/webkit/hyph_en_US.dic
+++ /dev/null
@@ -1,9784 +0,0 @@
-ISO8859-1
-LEFTHYPHENMIN 2
-RIGHTHYPHENMIN 3
-.a2ch4
-.ad4der
-.a2d
-.ad1d4
-.a2f1t
-.a2f
-.a4l3t
-.am5at
-.4a1ma
-.an5c
-.a2n
-.2ang4
-.an1i5m
-.an1t4
-.an3te
-.anti5s
-.ant2i
-.a4r5s2
-.2a2r
-.ar4t2ie4
-.ar1ti
-.ar4ty
-.as3c
-.as1p
-.a2s1s
-.aster5
-.a2tom5
-.a1to
-.au1d
-.av4i
-.awn4
-.ba4g
-.ba5na
-.ba2n
-.bas4e
-.ber4
-.be5r1a
-.be3s1m
-.4bes4
-.b4e5s2to
-.bri2
-.but4ti
-.bu4t3t2
-.cam4pe
-.1ca
-.ca4m1p
-.can5c
-.ca2n
-.capa5b
-.ca1pa
-.car5ol
-.c2a2r
-.ca4t
-.ce4la
-.2ch4
-.chill5i
-.ch4il2
-.chil1l
-.1ci2
-.cit5r
-.2c1it
-.co3e2
-.1co
-.co4r
-.cor5n1er
-.corn2e
-.de4moi2
-.d4em
-.de1mo
-.de3o
-.de3r1a
-.de3r1i
-.de1s4c
-.des2
-.dic1t2io5
-.3di2c1t
-.do4t
-.1do
-.du4c
-.1du
-.du4m1b5
-.earth5
-.ear2t
-.e2a2r
-.eas3i
-.2e1b4
-.eer4
-.eg2
-.e2l5d
-.el3em
-.enam3
-.e1na
-.en3g
-.e2n3s2
-.eq5ui5t
-.e1q
-.equ2
-.eq2ui2
-.er4ri
-.er1r4
-.es3
-.4eu3
-.eye5
-.fes3
-.for5mer
-.1fo
-.fo2r
-.for1m
-.for2me
-.1ga2
-.ge2
-.gen3t4
-.1gen
-.ge5o2g
-.1geo
-.1g2i5a
-.gi4b
-.go4r
-.1go
-.hand5i
-.ha2n
-.h4and
-.ha4n5k2
-.he2
-.hero5i2
-.h2ero
-.h1es3
-.he4t3
-.hi3b
-.hi3er
-.h2ie4
-.hon5ey
-.ho2n
-.hon3o
-.hov5
-.id4l
-.2id
-.idol3
-.i1do
-.im3m
-.im5p1i2n
-.i4m1p
-.im2pi
-.in1
-.in3ci
-.2ine2
-.4i4n2k2
-.2i2n3s2
-.ir5r4
-.4ir
-.is4i
-.ju3r
-.la4cy
-.la4m
-.lat5er
-.l4ath5
-.le2
-.leg5e
-.len4
-.lep5
-.lev1
-.l2i4g
-.li1g5a
-.li2n
-.l2i3o
-.l1i4t
-.ma1g5a5
-.1ma
-.mal5o
-.ma1n5a
-.ma2n
-.mar5ti
-.m2a2r
-.me2
-.mer3c
-.me5ter
-.me1te
-.m2is1
-.mis4t5i
-.mon3e
-.1mo
-.mo2n
-.mo3ro
-.mo2r
-.mu5ta
-.1mu
-.mu2ta5b
-.ni4c
-.od2
-.od1d5
-.of5te
-.o2ft
-.or5a1to
-.o1ra
-.or3c
-.or1d
-.or3t
-.os3
-.os4tl
-.4oth3
-.out3
-.ou2
-.ped5al
-.2p2ed
-.p2e2d2a
-.pe5te
-.pe2t
-.pe5tit
-.p2i4e4
-.pio5n4
-.3p2i1o
-.pi2t
-.pre3m
-.pr2
-.ra4c
-.ran4t
-.ra2n
-.ratio5n1a
-.ratio2n4
-.ra1t2io
-.ree2
-.re5mit
-.res2
-.re5stat
-.res2t
-.res1ta
-.r2i4g
-.ri2t5u
-.ro4q
-.ros5t
-.row5d
-.ru4d
-.3s4c2i3e4
-.s1ci
-.5se2l2f5
-.sel1l5
-.se2n
-.se5r2ie4
-.ser1i
-.s2h2
-.si2
-.s3ing4
-.2s1in
-.st4
-.sta5b2l2
-.s1ta
-.s2tab
-.s4y2
-.1ta4
-.te4
-.3ten5a2n
-.te1na
-.th2
-.ti2
-.til4
-.ti1m5o5
-.1tim
-.ting4
-.2t1in
-.t4i4n5k2
-.to1n4a
-.1to
-.to2n
-.to4p
-.top5i
-.to2u5s
-.tou2
-.trib5ut
-.tr4ib
-.u1n1a
-.un3ce
-.under5
-.un1de
-.u2n1e
-.u4n5k2
-.un5o
-.un3u4
-.up3
-.ure3
-.us5a2
-.2us
-.ven4de
-.ve5r1a
-.wil5i
-.wi2
-.wil2
-.ye4
-4ab.
-a5bal
-a5ba2n
-abe2
-ab5erd
-ab2i5a
-ab5i2t5ab
-abi2t
-abi1ta
-ab5lat
-ab2l2
-ab5o5l1iz
-abol2i
-4abr
-ab5rog
-ab3ul
-a4c2a2r
-a1ca
-ac5ard
-ac5aro
-a5ceou2
-ac1er
-a5che4t
-a2ch
-ache2
-4a2ci
-a3c2ie4
-a2c1in
-a3c2io
-ac5rob
-act5if2
-a2c1t
-ac3ul
-ac4um
-a2d
-ad4d1in
-ad1d4
-ad5er.
-2adi
-a3d4i3a
-ad3i1ca
-adi4er
-ad2ie4
-a3d2io
-a3dit
-a5di1u
-ad4le
-ad3ow
-a1do
-ad5ra2n
-a1dr
-ad4su
-a2d1s2
-4a1du
-a3du2c
-ad5um
-ae4r
-aer2i4e4
-aer1i
-a2f
-a4f1f4
-a4gab
-a1ga
-aga4n
-ag5el1l
-a1ge4o
-4ag4eu
-ag1i
-4ag4l2
-ag1n
-a2go
-3a3g4o4g
-ag3o3ni
-ago2n2
-a5guer
-a2gue
-ag5ul
-a4gy
-a3ha
-a3he
-a4h4l4
-a3ho
-ai2
-a5i1a
-a3ic.
-ai5ly
-a4i4n
-ain5in
-a2ini
-a2i1n5o
-ait5en
-a2ite
-a1j
-ak1en
-al5ab
-al3a2d
-a4l2a2r
-4aldi4
-a2ld
-2ale
-al3end
-a4lent2i
-a1len1t
-a5le5o
-al1i
-al4ia.
-al2i1a
-al2i4e4
-al5lev
-al1l
-al2le
-4allic
-all2i
-4a2lm
-a5log.
-a4ly.
-a1ly
-4a2lys4
-5a5lys1t
-5alyt
-3alyz
-4a1ma
-a2m5ab
-am3ag
-ama5ra
-am2a2r
-am5asc
-a4ma3tis
-a4m5a1to
-am5er1a
-am3ic
-am5if
-am5i1ly
-am1in
-am2i4no
-a2mo
-a5mo2n
-amor5i
-amo2r
-amp5en
-a4m1p
-a2n
-an3age
-a1na
-3ana1ly
-a3n2a2r
-an3ar3c
-anar4i
-a3nati
-an2at
-4and
-ande4s2
-an1de
-an3dis1
-an1dl
-an4dow
-an1do
-a5nee
-a3nen
-an5e2st.
-a1nes
-a2nest
-a3n4eu
-2ang
-ang5ie4
-an1gl2
-a4n1ic
-a3nies
-an2ie4
-an3i3f
-an4ime
-an1im
-a5nim1i
-a5n2ine
-an1in
-an3i4o
-a3n2ip
-an3is2h
-an3it
-a3ni1u
-an4kli
-a4nk2
-an1k1l
-5anniz
-a4n1n2
-ano4
-an5ot
-an4oth5
-an2sa2
-a2n1s2
-an4s1co
-ans4c
-an4s1n4
-an2sp
-ans3po
-an4st
-an4su2r
-an1su
-anta2l4
-an1t
-an1ta
-an4t2ie4
-ant2i
-4an1to
-an2tr
-an4tw4
-an3u1a
-an3ul
-a5nur
-4ao
-ap2a2r4
-a1pa
-ap5at
-ap5er3o
-a3ph4er
-4aphi
-a4pilla
-apil1l
-ap5ill2a2r
-ap3i2n
-ap3i1ta
-a3pi2tu
-a2p2l2
-apo4c5
-ap5o1la
-apor5i
-a1p4or
-apos3t
-a1pos
-aps5e4s
-a2p1s2
-ap2se
-a3pu
-aque5
-aqu2
-2a2r
-ar3a2c1t
-a5rade
-ara2d
-ar5adis1
-ar2adi
-ar3al
-a5rame1te
-aram3et
-ar2an4g
-ara2n
-ara3p
-ar4at
-a5ra1t2io
-ar5a1t2iv
-a5rau
-ar5av4
-araw4
-arbal4
-ar1b
-ar4cha2n
-ar1c
-ar3cha
-ar2ch
-ar5d2ine
-ard2i
-ard1in4
-ar4dr
-ar5eas
-a3ree
-ar3en1t
-a5r2e2ss
-ar4fi
-ar1f
-ar4f4l2
-ar1i
-ar5i2al
-ar2i3a
-ar3i2a2n
-a3ri5et
-ar2ie4
-ar4im
-ar5in2at
-ar2i1na
-ar3i1o
-ar2iz
-ar2mi
-ar1m
-ar5o5d
-a5roni
-aro2n
-a3roo2
-ar2p
-ar3q
-arre4
-ar1r4
-ar4sa2
-a4rs2
-ar2s2h
-4as.
-a2s4ab
-asa2
-as3an1t
-asa2n
-ashi4
-as2h
-a5sia.
-as2i1a
-a3si1b
-a3sic
-5a5si4t
-ask3i
-ask2
-as4l2
-a4soc
-a1so
-as5ph
-as4s2h
-a2ss
-as3ten
-as1t4r
-asu1r5a
-a1su
-asu2r
-a2ta
-at3ab2l2
-a2tab
-at5ac
-at3alo
-ata2l
-at5ap
-ate5c
-at5e2ch
-at3e1go
-ateg4
-at3en.
-at3er1a
-ater5n
-a5ter1na
-at3est
-at5ev
-4ath
-ath5em
-ath2e
-a5the2n
-at4ho
-ath5om
-4ati.
-a5t2i1a
-a2t5i5b
-at1ic
-at3if2
-ation5a2r
-a1t2io
-atio2n
-atio1n1a
-at3i1tu
-a4tog
-a1to
-a2tom
-at5om2iz
-a4top
-a4tos2
-a1tr
-at5rop
-at4sk2
-a4t1s2
-at4tag
-a4t3t2
-at1ta
-at5te
-at4th
-a2tu
-at5u1a
-a4t5ue
-at3ul
-at3u1ra
-a2ty
-au4b
-augh3
-au3gu
-au4l2
-aun5d
-au3r
-au5si1b
-a2us
-a4ut5en
-au1th
-a2va
-av3ag4
-a5va2n
-av4e4no
-av3er1a
-av5ern
-av5ery
-av1i
-avi4er
-av2ie4
-av3ig
-av5oc
-a1vor
-3away
-aw3i2
-aw4ly
-aws4
-ax4i5c
-ax3i
-ax4id
-ay5al
-aye4
-ays4
-azi4er
-a2z1i
-az2ie4
-az2z5i
-a4z1z2
-5ba.
-bad5ger
-ba2d
-ba4ge
-bal1a
-ban5dag
-ba2n
-b4and
-ban1d2a
-ban4e
-ban3i
-barbi5
-b2a2r
-bar1b
-bar2i4a
-bar1i
-bas4si
-ba2ss
-1bat
-ba4z
-2b1b
-b2be
-b3ber
-bbi4na
-4b1d
-4be.
-beak4
-bea2t3
-4be2d
-b2e3d2a
-be3de
-b4e3di
-be3gi
-be5gu
-1bel
-be1l2i
-be3lo
-4be5m
-be5n2ig
-be5nu
-4bes4
-be3sp
-b2e5st4r
-3bet
-be1t5iz
-be5tr
-be3tw4
-be3w
-be5y1o4
-2bf
-4b3h
-bi2b
-b2i4d
-3b2ie4
-bi5en
-bi4er
-2b3if
-1bil
-bi3l2iz
-bil1i
-bin2a5r4
-bi1na
-b4in4d
-bi5net
-b2ine
-bi3o2gr
-b2io
-bi5ou2
-bi2t
-3b2i3t2io
-bi1ti
-bi3tr
-3bit5u1a
-bi1tu
-b5i4tz
-b1j
-bk4
-b2l2
-bl4ath5
-b4le.
-blen4
-5ble1sp
-bles2
-b3lis
-b4lo
-blun4t
-4b1m
-4b3n
-bne5g
-3bod
-bod3i
-bo4e
-bol3ic
-bol2i
-bom4bi
-bo4m1b
-bo1n4a
-bo2n
-bon5at
-3boo2
-5bor.
-4b1o1ra
-bor5d
-5bore
-5bori
-5bos4
-b5o1ta
-b4oth5
-bo4to
-boun2d3
-bou2
-4bp
-4brit
-br4oth3
-2b5s2
-bsor4
-b1so
-2bt
-b2t4l
-b4to
-b3tr
-buf4fer1
-bu4f1f
-bu4ga
-bu3l2i
-bu1mi4
-bu4n
-bunt4i
-bun1t
-bu3re
-bus5ie4
-b2us
-buss4e
-bu2ss
-5bust
-4bu1ta
-3bu1t2io
-b4u1t2i
-b5u1to
-b1v
-4b5w
-5by.
-bys4
-1ca
-cab3in
-ca1b2l2
-ca2ch4
-ca5den
-ca2d
-4cag4
-2c5ah
-ca3lat
-cal4la
-cal1l
-cal2l5in4
-call2i
-4calo
-c4an5d
-ca2n
-can4e
-ca4n4ic
-can5is
-can3iz
-can4ty
-can1t
-cany4
-ca5per
-car5om
-c2a2r
-cast5er
-cas5t2ig
-cast2i
-4cas4y
-c4a4th
-4ca1t2iv
-cav5al
-ca2va
-c3c
-ccha5
-c2ch
-c3c2i4a
-c1ci
-ccom1pa5
-c1co
-cco4m1p
-cco2n4
-ccou3t
-ccou2
-2ce.
-4ced.
-4ce1den
-3cei2
-5cel.
-3cel1l
-1cen
-3cenc
-2cen4e
-4ceni
-3cen1t
-3cep
-ce5ram
-cer1a
-4ce1s4a2
-3ces1si
-c2e2ss
-ces5si5b
-ces5t
-cet4
-c5e4ta
-cew4
-2ch
-4ch.
-4ch3ab
-5cha4n1ic
-cha2n
-ch5a5nis
-che2
-cheap3
-4ch4ed
-ch5e5lo
-3chemi
-ch5ene
-che2n
-ch3er.
-ch3e4r1s2
-4ch1in
-5chi2ne.
-ch2ine
-ch5i5n2e2ss
-chi1nes
-5ch2ini
-5ch2io
-3chit
-chi2z
-3cho2
-ch4ti
-1ci
-3c2i1a
-ci2a5b
-ci2a5r
-ci5c
-4cier
-c2ie4
-5c4i2f3ic.
-ci1fi
-4c4i5i4
-ci4la
-3cil1i
-2cim
-2cin
-c4i1na
-3cin2at
-cin3em
-c2ine
-c1ing
-c5ing.
-5c2i1no
-cio2n4
-c2io
-4cipe4
-c2ip
-ci3ph
-4cip4ic
-cip3i
-4cis1ta
-4cis1t2i
-2c1it
-ci1t3iz
-ci1ti
-5ciz
-ck1
-ck3i
-1c4l4
-4cl2a2r
-c5la5ra1t2io
-clar4at
-5clare
-cle4m
-4clic
-clim4
-c1ly4
-c5n
-1co
-co5ag
-c4oa
-coe2
-2cog
-co4gr
-coi4
-co3inc
-col5i
-5colo
-col3o4r
-com5er
-co2me
-co1n4a
-co2n
-c4one
-con3g
-con5t
-co3pa
-cop3ic
-co4p2l2
-4cor1b
-coro3n
-cos4e
-cov1
-cove4
-cow5a
-co2z5e
-co5z1i
-c1q
-cras5t
-cr2as
-5crat.
-5crat1ic
-cre3a2t
-5c2r2ed
-4c3re1ta
-cre4v2
-cri2
-cri5f
-c4rin
-cr2is4
-5cri1ti
-cro4p2l2
-crop5o
-cros4e
-cru4d
-4c3s2
-2c1t
-c2ta4b
-c1ta
-ct5ang
-cta2n
-c5tan1t
-c2te
-c3ter
-c4t4ic1u
-ctim3i
-c1tim
-ctu4r
-c1tu
-c4tw4
-cud5
-c4uf
-c4ui2
-cu5i1ty
-5cul2i
-cul4tis4
-cul1ti
-cu4lt
-3c4ul1tu2
-cu2ma
-c3ume
-cu4mi
-3cun
-cu3pi
-cu5py
-cu2r5a4b
-cu1ra
-cu5r2i3a
-1c2us
-cus1s4i
-cu2ss
-3c4ut
-cu4t2ie4
-c4u1t2i
-4c5u1t2iv
-4cutr
-1cy
-c2ze4
-1d2a
-5da.
-2d3a4b
-da2ch4
-4da2f
-2dag
-da2m2
-d2an3g
-da2n
-dard5
-d2a2r
-dark5
-4dary
-3dat
-4da1t2iv
-4da1to
-5dav4
-dav5e
-5day
-d1b
-d5c
-d1d4
-2de.
-dea2f5
-de4b5i2t
-d2e1b
-de4bo2n
-deca2n4
-de1ca
-de4cil
-de1c2i
-de5com
-de1co
-2d1ed
-4dee.
-de5if
-dei2
-del2i4e4
-del2i
-de4l5i5q
-de5lo
-d4em
-5dem.
-3demic
-dem5ic.
-de5mil
-de4mo2n3s2
-de1mo
-demo2n
-demo2r5
-1den
-de4n2a2r
-de1na
-d4e3no
-denti5f2
-den1t
-dent2i
-de3nu
-de1p
-de3pa
-depi4
-de2pu
-d3e1q
-d4er1h4
-5der3m4
-d5ern5iz
-de4r5s2
-des2
-d2es.
-de1s2c
-de2s5o
-des3t2i
-d2e3st4r
-de4su
-de1t
-de2to
-de1v
-de2v3i4l
-de1vi
-4dey
-4d1f
-d4ga
-d3ge4t
-dg1i
-d2gy
-d1h2
-5di.
-1d4i3a
-dia5b
-d4i4cam
-di1ca
-d4ice
-3di2c1t
-3d2id
-5di3en
-d2ie4
-d1if
-di3ge
-d2ig
-di4la1to
-di1la
-d1in
-1di1na
-3di2ne.
-d2ine
-5d2ini
-di5niz
-1d2io
-dio5g
-di4p2l2
-d2ip
-d4ir2
-di1re
-dir1t5i
-dis1
-5disi
-d4is3t
-d2i1ti
-1d2i1v
-d1j
-d5k2
-4d5la
-3dle.
-3dled
-3dles.
-dles2
-4d3l2e2ss
-2d3lo
-4d5lu
-2d1ly
-d1m
-4d1n4
-1do
-3do.
-do5de
-5doe
-2d5of
-d4og
-do4la
-dol2i4
-do5lo4r
-dom5iz
-do3n2at
-do2n
-do1n1a
-doni4
-doo3d
-doo2
-do4p4p
-d4or
-3dos
-4d5out
-dou2
-do4v
-3dox
-d1p
-1dr
-drag5o2n2
-dra2go
-4dr2ai2
-dre4
-dre2a5r
-5dren
-dr4i4b
-dril4
-dro4p
-4drow
-5drupli
-dru3p2l2
-4dry
-2d1s2
-ds4p
-d4sw2
-d4s4y
-d2th
-1du
-d1u1a
-du2c
-d1u3ca
-duc5er
-4duct.
-du2c1t
-4duc4t1s2
-du5el
-du4g
-d3ul4e
-dum4be
-du4m1b
-du4n
-4dup
-du4pe
-d1v
-d1w
-d2y
-5dyn
-dy4s2e
-dys5p
-e1a4b
-e3a2c1t
-ea2d1
-ead5ie4
-e2adi
-ea4ge
-ea5ger
-ea4l
-eal5er
-e2ale
-eal3ou2
-eam3er
-e5and
-ea2n
-ear3a
-e2a2r
-ear4c
-ear5es
-ear4ic
-ear1i
-ear4il
-ear5k
-ear2t
-eart3e
-ea5sp
-e3a2ss
-east3
-ea2t
-eat5en
-eath3i
-e4ath
-e5at3if2
-e4a3tu
-ea2v
-eav3en
-eav5i
-eav5o
-2e1b
-e4bel.
-e1bel
-e4be2l1s2
-e4ben
-e4bi2t
-e3br
-e4ca2d
-e1ca
-ecan5c
-eca2n
-ec1ca5
-ec3c
-e1ce
-ec5es1sa2
-ec2e2ss
-e1c2i
-e4cib
-ec5ificat
-eci1fi
-ecifi1ca
-ec5i3f2ie4
-ec5i1fy
-e2c3im
-e2c1i4t
-e5c2ite
-e4clam
-e1c4l4
-e4cl2us
-e2col
-e1co
-e4com1m
-e4compe
-eco4m1p
-e4con1c
-eco2n
-e2cor
-ec3o1ra
-eco5ro
-e1cr
-e4crem
-ec4ta2n
-e2c1t
-ec1ta
-ec4te
-e1cu
-e4cul
-ec3u1la
-2e2d2a
-4ed3d4
-e4d1er
-ede4s2
-4edi
-e3d4i3a
-ed3ib
-ed3i1ca
-ed3im
-ed1it
-edi5z
-4e1do
-e4dol
-edo2n2
-e4dri
-e1dr
-e4dul
-e1du
-ed5u1l4o
-ee2c
-e4ed3i
-ee2f
-eel3i
-ee4ly
-ee2m
-ee4na
-ee4p1
-ee2s4
-eest4
-ee4ty
-e5ex
-e1f
-e4f3ere
-efer1
-1e4f1f
-e4fic
-e1fi
-5ef2i1c4i
-efil4
-e3f2i2ne
-e2fin
-ef5i5n2ite
-ef2ini
-efin2it
-3efit
-efor5es
-e1fo
-efo2r
-e4fu4se.
-e3fu
-ef2us
-4egal
-e1ga
-eger4
-eg5ib
-eg4ic
-eg5ing
-e5git5
-eg5n
-e4go.
-e1go
-e4gos
-eg1ul
-e5gur
-5e1gy
-e1h4
-eher4
-ei2
-e5ic
-e2i5d
-e2ig2
-ei5g4l2
-e3i4m1b
-e3in3f
-e1ing
-e5inst
-e2i2n1s2
-eir4d
-e4ir
-e2it3e
-e2i3th
-e5i1ty
-e1j
-e4jud
-ej5udi
-eki4n
-ek1i
-ek4la
-ek1l
-e1la
-e4la.
-e4lac
-e3l4an4d
-ela2n
-e4l5a1t2iv
-e4law
-elax1a4
-e3le2a
-el5ebra
-el2e1b
-ele3br
-5elec
-e4led
-el3e1ga
-e5len
-e4l1er
-e1les2
-e2l2f
-el2i
-e3libe4
-e4l5ic.
-el3i1ca
-e3lier
-el2ie4
-el5i3gib
-el2ig
-el4igi
-e5lim
-e4l3ing
-e3l2io
-e2lis
-el5is2h
-e3l2iv3
-4ella
-el1l
-el4lab
-ell4o4
-e5loc
-el5og
-el3op.
-el2s2h
-e2l1s2
-el4ta
-e4lt
-e5lud
-el5ug
-e4mac
-e1ma
-e4mag
-e5ma2n
-em5a1na
-e4m5b
-e1me
-e2mel
-e4met
-em3i1ca
-em2i4e4
-em5igra
-em2ig4
-emi1gr
-em1in2
-em5ine
-em3i3ni
-e4m2is
-em5is2h
-e5m4i2s1s
-em3iz
-5emniz
-e4m1n
-emo4g
-e1mo
-emo3n2i5o
-emo2n
-em3pi
-e4m1p
-e4mul
-e1mu
-em5u1la
-emu3n2
-e3my
-en5a2mo
-e1na
-e4nan1t
-en2a2n
-ench4er
-en2ch
-enche2
-en3dic
-e5nea
-e5nee
-en3em
-en5ero
-en1er
-en5e1si
-e1nes
-e2n5est
-en3etr
-e3ne4w
-en5i4c3s2
-e5n2ie4
-e5nil
-e3n2i4o
-en3is2h
-en3it
-e5ni1u
-5eniz
-4e4n1n2
-4eno
-e4no4g
-e4nos
-en3ov
-en4sw2
-e2n1s2
-ent5age
-en1t
-en1ta
-4enth1es
-enth2e
-en3u1a
-en5uf
-e3ny.
-4e4n3z
-e5of
-eo2g
-e4oi4
-e3ol
-eop3a2r
-eo2pa
-e1or
-eo3re
-eo5rol
-eos4
-e4ot
-eo4to
-e5out
-eou2
-e5ow
-e2pa
-e3p4ai2
-ep5anc
-epa2n
-e5pel
-e3pen1t
-ep5e5t2i1t2io
-epe2t
-epeti1ti
-ephe4
-e4pli
-e1p2l2
-e1po
-e4prec
-epr2
-ep5re1ca
-e4p2r2ed
-ep3re1h4
-e3pro
-e4prob
-ep4s4h
-e2p1s2
-ep5ti5b
-e2p1t
-e4pu2t
-ep5u1ta
-e1q
-equi3l
-equ2
-eq2ui2
-e4q3ui3s
-er1a
-e2ra4b
-4er4and
-era2n
-er3a2r
-4er4ati.
-2er1b
-er4b2l2
-er3ch
-er1c
-er4che2
-2e2re.
-e3re1a4l
-ere5co
-ere3in
-erei2
-er5el.
-er3e1mo
-er5e1na
-er5ence
-4erene
-er3en1t
-ere4q
-er5e2ss
-er3es2t
-eret4
-er1h4
-er1i
-e1r2i3a4
-5erick1
-e3rien
-er2ie4
-eri4er
-er3in4e
-e1r2i1o
-4erit
-er4i1u
-er2i4v
-e4ri1va
-er3m4
-er4nis4
-4er3n2it
-5erniz
-er3no4
-2ero
-er5ob
-e5r2oc
-ero4r
-er1ou2
-e4r1s2
-er3set
-er2se
-ert3er
-4er2tl
-er3tw4
-4eru
-eru4t
-5erwau
-er1w
-e1s4a2
-e4sa2ge.
-e4sages
-es2c
-e2s1ca
-es5ca2n
-e3scr
-es5cu
-e1s2e
-e2sec
-es5e1cr
-e4s5enc
-e4sert.
-e4ser4t1s2
-e4ser1va
-4es2h
-e3sha
-esh5e2n
-e1si
-e2sic
-e2s2id
-es5i1den
-e4s5ig1n4a
-es2ig
-e2s5im
-e2s4i4n
-esis4te
-e1sis
-e5si4u
-e5skin
-esk2
-esk1i
-es4mi
-e2s1m
-e2sol
-e1so
-es3olu
-e2so2n
-es5o1n1a4
-e1sp
-e2s3per
-es5pi1ra
-esp4ir
-es4pre
-espr2
-2e2ss
-es4si4b
-es1si
-esta2n4
-es1ta
-es3t2ig
-est2i
-es5tim
-4es2to
-e3sto2n
-2est4r
-e5stro
-estruc5
-e2su2r
-e1su
-es5ur1r4
-es4w2
-e2ta4b
-e1ta
-e3ten4d
-e3teo
-ethod3
-et1ic
-e5tide
-et2id
-e2t1in4
-et2i4no
-e5t4ir
-e5t2i1t2io
-eti1ti
-et5i1t2iv
-4e2t1n2
-et5o1n1a
-e1to
-eto2n
-e3tra
-e3tre
-et3ric
-et5rif
-et3rog
-et5ros
-et3u1a
-e1tu
-et5ym
-e1ty
-e4t5z
-4eu
-e5un
-e3up
-eu3ro
-e2us4
-eute4
-euti5l
-e4u1t2i
-eu5tr
-eva2p5
-e1va
-e2vas
-ev5ast
-e5vea
-ev3el1l
-eve4l3o
-e5veng
-even4i
-ev1er
-e5v2er1b
-e1vi
-ev3id
-e2vi4l
-e4v1in
-e3v2i4v
-e5voc
-e5vu
-e1wa
-e4wag
-e5wee
-e3wh
-ewil5
-ewi2
-ew3in4g
-e3wit
-1ex3p
-5ey1c
-5eye.
-eys4
-1fa
-fa3b2l2
-f4ab3r
-fa4ce
-4fag
-fa4i4n4
-fai2
-fal2l5e
-fal1l
-4f4a4ma
-fam5is
-5f2a2r
-far5th
-fa3ta
-fa3th2e
-f4ath
-4fa1to
-fau4lt5
-fau4l2
-4f5b
-4fd
-4fe.
-feas4
-fe4ath3
-fea2t
-f2e4b
-4fe1ca
-5fe2c1t
-2fed
-fe3l2i
-fe4mo
-fen2d
-fen1d5e
-fer1
-5fer1r4
-fev4
-4f1f
-f4fes
-f4f2ie4
-f1fi
-f5f2in.
-f2fin
-f2f5is
-f4f2ly5
-ff4l2
-f2fy
-4fh
-1fi
-f2i3a
-2f3ic.
-4f3ical
-fi1ca
-f3ica2n
-4ficate
-f3i1cen
-fi3cer
-f2i1c4i
-5fi3c2i1a
-5fic2ie4
-4fi4c3s2
-fi3cu
-fi5del
-f2id
-fight5
-f2ig
-fil5i
-fil2l5in4
-fil1l
-fill2i
-4fi1ly
-2fin
-5fi1na
-f4in2d5
-f2i2ne
-f1in3g
-f2i4n4n2
-fis4t2i
-f4l2
-f5l2e2ss
-fles2
-flin4
-flo3re
-f2ly5
-4fm
-4fn
-1fo
-5fo2n
-fon4de
-f2ond
-fon4t
-fo2r
-fo5rat
-fo1ra
-for5ay
-fore5t
-for4i
-for1t5a
-fos5
-4f5p
-fra4t
-f5rea
-fres5c
-fri2
-fril4
-frol5
-2f3s
-2ft
-f4to
-f2ty
-3fu
-fu5el
-4fug
-fu4min
-fu1mi
-fu5ne
-fu3ri
-fusi4
-f2us
-fu2s4s
-4fu1ta
-1fy
-1ga
-ga2f4
-5gal.
-3gal1i
-ga3lo
-2gam
-ga5met
-g5a2mo
-gan5is
-ga2n
-ga3niz
-gani5za1
-4gano4
-gar5n4
-g2a2r
-ga2ss4
-g4ath3
-4ga1t2iv
-4gaz
-g3b
-gd4
-2ge.
-2ged
-geez4
-gel4in
-gel2i
-ge5lis
-ge5l1iz
-4ge1ly
-1gen
-ge4n2at
-ge1na
-g5e5niz
-4g4eno
-4geny
-1geo
-ge3om
-g4ery
-5ge1si
-geth5
-4ge1to
-ge4ty
-ge4v
-4g1g2
-g2ge
-g3ger
-gglu5
-ggl2
-g1go4
-gh3in
-gh5out
-ghou2
-gh4to
-5gi.
-1g2i4a
-gi2a5r
-g1ic
-5gi3c2i1a
-g2i1ci
-g4i1co
-gien5
-g2ie4
-5gies.
-gil4
-g3i1men
-3g4in.
-g4in5ge
-5g4i2n1s2
-5g2io
-3g4ir
-gir4l
-g3is1l2
-gi4u
-5g2iv
-3giz
-gl2
-gla4
-gl2ad5i
-gla2d
-5glas
-1gle
-gli4b
-g3l2ig
-3glo
-glo3r
-g1m
-g4my
-g1n4a
-g4na.
-gne4t4t2
-g1ni
-g2n1in
-g4n2i4o
-g1no
-g4no4n
-1go
-3go.
-gob5
-5goe
-3g4o4g
-go3is
-goi2
-go2n2
-4g3o3n1a
-gon5do5
-g2ond
-go3ni
-5goo2
-go5riz
-gor5ou2
-5gos.
-gov1
-g3p
-1gr
-4gra1d2a
-gra2d
-g4r2ai2
-gra2n2
-5gra4ph.
-g5ra3ph4er
-5graph1ic
-gr4aphi
-4g3ra1phy
-4gray
-gre4n
-4gress.
-gr2e2ss
-4grit
-g4ro
-gruf4
-gs2
-g5ste
-gth3
-gu4a
-3guar2d
-gu2a2r
-2gue
-5gui5t
-g2ui2
-3gun
-3g2us
-4gu4t
-g3w
-1gy
-2g5y3n
-gy5ra
-h3ab4l2
-ha2ch4
-hae4m
-hae4t
-h5agu
-ha3la
-hala3m
-ha4m
-han4ci
-ha2n
-han4cy
-5hand.
-h4and
-h2an4g
-hang5er
-han1g5o
-h5a5niz
-ha4n4k2
-han4te
-han1t
-ha2p3l2
-ha2p5t
-ha3ra2n
-h2a2r
-ha5r2as
-har2d
-hard3e
-har4le4
-har1l
-harp5en
-har2p
-har5ter
-ha2s5s
-haun4
-5haz
-haz3a1
-h1b
-1hea2d1
-3he2a2r
-he4ca2n
-he1ca
-h5ecat
-h4ed
-h4e5do5
-he3l4i
-hel4lis
-hel1l
-hell2i
-hel4ly
-h5elo
-he4m4p
-he2n
-he1na4
-hen5at
-he1o5r
-hep5
-h4er1a
-hera3p
-her4ba
-h2er1b
-here5a
-h3ern
-h5er1ou2
-h2ero
-h3ery
-h1es
-he2s5p
-he4t
-he2t4ed
-h4eu4
-h1f
-h1h
-hi5a2n
-h2i1a
-hi4co
-high5
-h2ig
-h4il2
-himer4
-h4i1na
-hion4e
-h2io
-hio2n
-h2i4p
-hir4l
-h4ir
-hi3ro
-hir4p
-hir4r4
-his3el
-h4ise
-h4i2s4s
-hith5er
-h2ith
-hith2e
-h2i2v
-4hk
-4h1l4
-hla2n4
-h2lo
-hlo3ri
-4h1m
-hmet4
-2h1n
-h5odiz
-h5o2d1s2
-ho4g
-ho1ge4
-hol5a2r
-ho1la
-3hol4e
-ho4ma
-ho2me3
-ho1n4a
-ho2n
-ho5ny
-3hood
-hoo2
-hoo2n4
-hor5at
-ho1ra
-ho5r2is
-hort3e
-ho5ru
-hos4e
-ho5sen
-hos1p
-1ho2us
-hou2
-house3
-hov5el
-4h5p
-4hr4
-hree5
-hro5niz
-hro2n
-hro3po
-4h1s2
-h4s2h
-h4t2a2r
-h1ta
-ht1en
-ht5es
-h4ty
-hu4g
-hu4min
-hu1mi
-hun5ke
-hu4nk2
-hun4t
-hus3t4
-h2us
-hu4t
-h1w
-h4war4t
-hw2a2r
-hy3pe
-hy3ph
-hy2s
-2i1a
-i2al
-iam4
-iam5e1te
-i2a2n
-4ianc
-ian3i
-4ian4t
-ia5pe
-ia2ss4
-i4a1t2iv
-ia4tric
-ia1tr
-i4a2tu
-ibe4
-ib3er1a
-ib5ert
-ib5i1a
-ib3in
-ib5it.
-ibi2t
-ib5ite
-i1b2l2
-ib3li
-i5bo
-i1br
-i2b5ri
-i5bu4n
-4icam
-i1ca
-5icap
-4ic2a2r
-i4car.
-i4cara
-icas5
-i4cay
-iccu4
-ic3c
-4iceo
-4i2ch
-2i1ci
-i5c2id
-ic5i1na
-i2cin
-i2c2ip
-ic3i1pa
-i4c1ly4
-i1c4l4
-i2c5oc
-i1co
-4i1cr
-5icra
-i4cry
-ic4te
-i2c1t
-ic1tu2
-ic4t3u1a
-ic3u1la
-ic4um
-ic5uo
-i3cur
-2id
-i4dai2
-i1d2a
-id5anc
-ida2n
-id5d4
-ide3a4l
-ide4s2
-i2di
-id5i2a2n
-i1d4i3a
-idi4a2r
-i5d2ie4
-i1d3io
-idi5ou2
-id1it
-id5i1u
-i3dle
-i4dom
-i1do
-id3ow
-i4dr
-i2du
-id5uo
-2ie4
-ied4e
-5ie5ga
-ie2ld3
-ie1n5a4
-ien4e
-i5e4n1n2
-i3ent2i
-ien1t
-i1er.
-i3es2c
-i1est
-i3et
-4if.
-if5ero
-ifer1
-iff5en
-i4f1f
-if4fr
-4i2f3ic.
-i1fi
-i3f2ie4
-i3f4l2
-4i2ft
-2ig
-iga5b
-i1ga
-ig3er1a
-ight3i
-4igi
-i3gib
-ig3il4
-ig3in
-ig3it
-i4g4l2
-i2go
-ig3or
-ig5ot
-i5gre
-i1gr
-ig2u5i2
-ig1ur
-i3h
-4i5i4
-i3j
-4ik
-i1la
-il3a4b
-i4l4ade
-ila2d
-i2l5am
-ila5ra
-il2a2r
-i3leg
-il1er
-ilev4
-i2l5f
-il1i
-il3i1a
-il2ib
-il3io
-il4ist
-2il1it
-il2iz
-ill5ab
-il1l
-4i2l1n2
-il3o1q
-il4ty
-i4lt
-il5ur
-il3v
-i4mag
-i1ma
-im3age
-ima5ry
-im2a2r
-iment2a5r
-i1men
-i3men1t
-imen1ta
-4imet
-im1i
-im5i1d4a
-im2id
-imi5le
-i5m2ini
-4imit
-im4ni
-i4m1n
-i3mo2n
-i1mo
-i2mu
-im3u1la
-2in.
-i4n3au
-i1na
-4inav
-incel4
-in3cer
-4ind
-in5dling
-2ine
-i3nee
-in4er4a2r
-in1er
-iner1a
-i5n2e2ss
-i1nes
-4in1ga
-4inge
-in5gen
-4ingi
-in5gling
-ingl2
-4in1go
-4in1gu
-2ini
-i5ni.
-i4n4i1a
-in3i4o
-in1is
-i5ni4te.
-in2it
-in2ite
-5i3n2i1t2io
-ini1ti
-in3i1ty
-4i4nk2
-4i4n1l
-2i4n1n2
-2i1no
-i4no4c
-ino4s
-i4not
-2i2n1s2
-in3se
-insu1r5a
-in1su
-insu2r
-2int.
-in1t
-2in4th
-in1u
-i5n2us
-4iny
-2io
-4io.
-io1ge4
-io2gr
-i1ol
-io4m
-ion3at
-io2n
-io1n1a
-ion4ery
-ion1er
-ion3i
-i2o5ph
-ior3i
-i4os
-i4o5th
-i5oti
-io4to
-i4our
-iou2
-2ip
-ipe4
-iphr2as4
-ip4hr4
-ip3i
-ip4ic
-ip4re4
-ipr2
-ip3ul
-i3qua
-iqu2
-iq5ue1f
-iq3u2id
-iq2ui2
-iq3ui3t
-4ir
-i1ra
-i2ra4b
-i4rac
-ird5e
-ire4de
-i2r2ed
-i4re1f
-i4rel4
-i4res
-ir5gi
-irg2
-ir1i
-iri5de
-ir2id
-ir4is
-iri3tu
-5i5r2iz
-ir4min
-ir1m
-iro4g
-5iron.
-iro2n
-ir5ul
-2is.
-is5ag
-isa2
-is3a2r
-isas5
-2is1c
-is3ch2
-4ise
-is3er
-3i4s3f
-is5ha2n
-is2h
-is3ho2n3
-isho4
-ish5op
-is3i1b
-is2i4d
-i5sis
-is5i1t2iv
-isi1ti
-4is4k2
-isla2n4
-is1l2
-4is4m1s2
-i2s1m
-i2so
-iso5mer
-i3som
-iso2me
-is1p
-is2pi
-is4py
-4i2s1s
-is4sal
-is1sa2
-issen4
-is4s1e4s
-is4ta.
-is1ta
-is1te
-is1t2i
-ist4ly
-is2tl
-4istral
-ist4r
-is1tra
-i2su
-is5us
-4i3ta.
-i1ta
-ita4bi
-i2tab
-i4tag
-4ita5m
-i3ta2n
-i3tat
-2ite
-it3er1a
-i5ter1i
-it4es
-2ith
-i1ti
-4i1t2i1a
-4i2tic
-it3i1ca
-5i5tick1
-i2t3ig
-it5il1l
-i2tim
-2i1t2io
-4itis
-i4ti2s4m
-i2t5o5m
-i1to
-4ito2n
-i4tram
-i1tra
-it5ry
-4i4t3t2
-it3u1at
-i1tu
-itu1a
-i5tud2
-it3ul
-4itz.
-i4tz
-i1u
-2iv
-iv3el1l
-iv3en.
-i4v3er.
-i4vers.
-ive4r1s2
-iv5il.
-i2vil
-iv5io
-iv1it
-i5vore
-iv3o3ro
-i4v3ot
-4i5w
-ix4o
-4iy
-4iz2a2r2
-iza1
-i2z1i4
-5izon1t
-i1zo
-izo2n
-5ja
-jac4q
-ja4p
-1je
-je4r5s2
-4jes4t2ie4
-jest2i
-4jes2ty
-jew3
-jo4p
-5judg
-3ka.
-k3ab
-k5ag
-kais4
-kai2
-kal4
-k1b
-k2ed
-1kee
-ke4g
-ke5l2i
-k3en4d
-k1er
-kes4
-k3e2st.
-ke4ty
-k3f
-kh4
-k1i
-5ki.
-5k2ic
-k4il1l
-kilo5
-k4im
-k4in.
-kin4de
-k4ind
-k5i5n2e2ss
-k2ine
-ki1nes
-kin4g
-k2i4p
-kis4
-k5is2h
-kk4
-k1l
-4k3ley
-4k1ly
-k1m
-k5nes
-1k2no
-ko5r
-kos2h4
-k3ou2
-kro5n
-4k1s2
-k4sc
-ks4l2
-k4s4y
-k5t
-k1w
-lab3ic
-l4abo
-l4a2ci4
-l4ade
-la2d
-la3d2y
-lag4n
-la2m3o
-3l4and
-la2n
-lan4dl
-lan5et
-lan4te
-lan1t
-lar4g2
-l2a2r
-lar3i
-las4e
-la5ta2n
-la2ta
-4latel2i4
-4la1t2iv
-4lav
-la4v4a
-2l1b
-lbin4
-4l1c2
-lce4
-l3ci
-2ld
-l2de
-ld4ere
-ld4er1i
-ldi4
-ld5is1
-l3dr
-l4dri
-le2a
-le4bi
-l2e1b
-le2ft5
-le1f
-5leg.
-5le4g1g2
-le4mat
-le1ma
-lem5at1ic
-4len.
-3lenc
-5le2ne.
-1len1t
-le3ph
-le4pr2
-le2ra5b
-ler1a
-ler4e
-3lerg2
-3l4er1i
-l4ero
-les2
-le5s1co
-les2c
-5lesq
-3l2e2ss
-5less.
-l3e1va
-lev4er.
-lev1er
-lev4er1a
-lev4e4r1s2
-3ley
-4leye
-2lf
-l5fr
-4l1g4
-l5ga
-lg2a2r3
-l4ges
-l1go3
-2l3h
-li4ag
-l2i1a
-li2am4
-liar5iz
-li2a2r
-liar1i
-li4as
-li4a1to
-li5bi
-5lic2io
-l2i1ci
-li4cor
-li1co
-4li4c3s2
-4lict.
-li2c1t
-l4icu
-l3i1cy
-l3i1d2a
-l2id
-lid5er
-3li2di
-lif3er1
-l4i4f1f
-li4f4l2
-5ligate
-l2ig
-li1ga
-3ligh
-li4gra
-li1gr
-3l4ik
-4l4i4l
-lim4b2l2
-li4m1b
-lim3i
-li4mo
-l4i4m4p
-l4i1na
-1l4ine
-lin3ea
-l2in3i
-link5er
-l4i4nk2
-li5og
-l2io
-4l4iq
-lis4p
-l1it
-l2it.
-5lit3i1ca
-li1ti
-l4i2tic
-l5i5ti4c3s2
-liv3er
-l2iv
-l1iz
-4lj
-lka3
-l3kal4
-lka4t
-l1l
-l4law
-l2le
-l5le2a
-l3lec
-l3leg
-l3lel
-l3le4n
-l3le4t
-ll2i
-l2lin4
-l5l4i1na
-ll4o
-lloq2ui5
-llo1q
-lloqu2
-l2l5out
-llou2
-l5low
-2lm
-l5met
-lm3ing
-l4mo2d1
-l1mo
-lmo2n4
-2l1n2
-3lo.
-lob5al
-lo4ci
-4lof
-3log1ic
-l5o1go
-3logu
-lom3er
-lo2me
-5long
-lo2n
-lon4i
-l3o3niz
-lood5
-loo2
-5lo4pe.
-lop3i
-l3o4p1m
-lo1ra4
-lo4ra1to
-lo5r2ie4
-lor5ou2
-5los.
-los5et
-5los5o3phiz
-lo2so
-los4op
-los2oph
-5los5o1phy
-los4t
-lo4ta
-loun5d
-lou2
-2lout
-4lov
-2lp
-lpa5b
-l1pa
-l3pha
-l5phi
-lp5ing
-lpi2n
-l3pit
-l4p2l2
-l5pr2
-4l1r
-2l1s2
-l4sc
-l2se
-l4s2ie4
-4lt
-lt5ag
-l1ta
-ltane5
-lta2n
-l1te
-lten4
-lter1a4
-lth3i
-l5ties.
-lt2ie4
-ltis4
-l1tr
-l1tu2
-ltu1r3a
-lu5a
-lu3br
-lu2ch4
-lu3ci
-lu3en
-luf4
-lu5id
-l2ui2
-lu4ma
-5lu1mi
-l5umn.
-lu4m1n
-5lum3n4i1a
-lu3o
-luo3r
-4lup
-lu2ss4
-l2us
-lus3te
-1lut
-l5ven
-l5vet4
-2l1w
-1ly
-4lya
-4ly1b
-ly5me4
-ly3no
-2lys4
-l5y3s2e
-1ma
-2mab
-ma2ca
-ma5ch2ine
-ma2ch
-ma4ch1in
-ma4c4l4
-mag5in
-mag1i
-5mag1n
-2mah
-ma2id5
-mai2
-4ma2ld
-ma3l2ig
-mal1i
-ma5lin
-mal4l2i
-mal1l
-mal4ty
-ma4lt
-5ma3n4i1a
-ma2n
-man5is
-man3iz
-4map
-ma5ri2ne.
-m2a2r
-mar1i
-mar2in4e
-ma5r2iz
-mar4ly
-mar1l
-mar3v
-ma5sce
-mas4e
-mas1t
-5mate
-m4ath3
-ma3tis
-4mati3za1
-ma1tiz
-4m1b
-m1ba4t5
-m5bil
-m4b3ing
-mb2i4v
-4m5c
-4me.
-2med
-4med.
-5me3d4i3a
-m4edi
-me3d2ie4
-m5e5d2y
-me2g
-mel5o2n
-me4l4t
-me2m
-me1m1o3
-1men
-me1n4a
-men5ac
-men4de
-4mene
-men4i
-me2n1s4
-men1su5
-3men1t
-men4te
-me5o2n
-m5er1sa2
-me4r1s2
-2mes
-3mest2i
-me4ta
-met3a2l
-me1te
-me5thi
-m4etr
-5met3ric
-me5tr2ie4
-me3try
-me4v
-4m1f
-2mh
-5mi.
-m2i3a
-mi1d4a
-m2id
-mid4g
-m2ig4
-3mil3i1a
-mil1i
-m5i5l2ie4
-m4il1l
-mi1n4a
-3m4ind
-m5i3nee
-m2ine
-m4ingl2
-min5gli
-m5ing1ly
-min4t
-m4in1u
-miot4
-m2io
-m2is
-mi4s4er.
-m4ise
-mis3er
-mis5l2
-mis4t2i
-m5i4stry
-mist4r
-4m2ith
-m2iz
-4mk
-4m1l
-m1m
-mma5ry
-m1ma
-mm2a2r
-4m1n
-m1n4a
-m4n1in
-mn4o
-1mo
-4mocr
-5moc5ra1tiz
-mo2d1
-mo4go
-mois2
-moi2
-mo4i5se
-4m2ok
-mo5lest
-moles2
-mo3me
-mon5et
-mo2n
-mon5ge
-mo3n4i3a
-mon4i2s1m
-mon1is
-mon4ist
-mo3niz
-monol4
-mo3ny.
-mo2r
-4mo5ra.
-mo1ra
-mos2
-mo5sey
-mo3sp
-m4oth3
-m5ouf
-mou2
-3mo2us
-mo2v
-4m1p
-mpara5
-m1pa
-mp2a2r
-mpa5rab
-mp4a4r5i
-m3pe2t
-mphas4
-m2pi
-mp2i4a
-mp5ies
-mp2ie4
-m4p1i2n
-m5p4ir
-mp5is
-mpo3ri
-m1p4or
-mpos5ite
-m1pos
-m4po2us
-mpou2
-mpov5
-mp4tr
-m2p1t
-m2py
-4m3r
-4m1s2
-m4s2h
-m5si
-4mt
-1mu
-mul2a5r4
-mu1la
-5mu4lt
-mul1ti3
-3mum
-mun2
-4mup
-mu4u
-4mw
-1na
-2n1a2b
-n4abu
-4nac.
-na4ca
-n5a2c1t
-nag5er.
-nak4
-na4l1i
-na5l2i1a
-4na4lt
-na5mit
-n2a2n
-nan1ci4
-nan4it
-na4nk4
-nar3c
-n2a2r
-4nare
-nar3i
-nar4l
-n5ar1m
-n4as
-nas4c
-nas5t2i
-n2at
-na3ta2l
-na2ta
-nat5o5m2iz
-na2tom
-na1to
-n2au
-nau3se
-na2us
-3naut
-nav4e
-4n1b4
-nc2a2r5
-n1ca
-n4ces.
-n3cha
-n2ch
-n5cheo
-nche2
-n5ch4il2
-n3chis
-n2c1in
-n1ci
-n2c4it
-ncou1r5a
-n1co
-ncou2
-n1cr
-n1cu
-n4dai2
-n1d2a
-n5da2n
-n1de
-nd5e2st.
-ndes2
-ndi4b
-n5d2if
-n1dit
-n3diz
-n5du2c
-n1du
-ndu4r
-nd2we
-nd1w
-2ne.
-n3e2a2r
-n2e2b
-neb3u
-ne2c
-5neck1
-2ned
-ne4gat
-ne1ga
-ne4g5a1t2iv
-5nege
-ne4la
-nel5iz
-nel2i
-ne5mi
-ne4mo
-1nen
-4nene
-3neo
-ne4po
-ne2q
-n1er
-ne2ra5b
-ner1a
-n4er3a2r
-n2ere
-n4er5i
-ner4r4
-1nes
-2nes.
-4ne1sp
-2nest
-4nes4w2
-3net1ic
-ne4v
-n5eve
-ne4w
-n3f
-n4gab
-n1ga
-n3gel
-nge4n4e
-n1gen
-n5gere
-n3ger1i
-ng5ha
-n3gib
-ng1in
-n5git
-n4gla4
-ngl2
-ngov4
-n1go
-ng5s2h
-ngs2
-n1gu
-n4gum
-n2gy
-4n1h4
-nha4
-nhab3
-nhe4
-3n4i1a
-ni3a2n
-ni4ap
-ni3ba
-ni4b2l2
-n2i4d
-ni5di
-ni4er
-n2ie4
-ni2fi
-ni5ficat
-nifi1ca
-n5i1gr
-n2ig
-n4ik4
-n1im
-ni3m2iz
-nim1i
-n1in
-5ni2ne.
-n2ine
-nin4g
-n2i4o
-5n2is.
-nis4ta
-n2it
-n4ith
-3n2i1t2io
-ni1ti
-n3itor
-ni1to
-ni3tr
-n1j
-4nk2
-n5k2ero
-nk1er
-n3ket
-nk3in
-nk1i
-n1k1l
-4n1l
-n5m
-nme4
-nmet4
-4n1n2
-nne4
-nni3al
-n3n4i1a
-nn2i4v
-nob4l2
-no3ble
-n5o1c4l4
-4n3o2d
-3noe
-4nog
-no1ge4
-nois5i
-noi2
-no5l4i
-5nol1o1gis
-3nomic
-n5o5m2iz
-no4mo
-no3my
-no4n
-non4ag
-no1n1a
-non5i
-n5oniz
-4nop
-5nop5o5l2i
-no2r5ab
-no1ra
-no4rary
-nor2a2r
-4nos2c
-nos4e
-nos5t
-no5ta
-1nou2
-3noun
-nov3el3
-nowl3
-n1p4
-npi4
-npre4c
-npr2
-n1q
-n1r
-nru4
-2n1s2
-n2s5ab
-nsa2
-nsati4
-ns4c
-n2se
-n4s3e4s
-ns2id1
-ns2ig4
-n2s1l2
-n2s3m
-n4soc
-n1so
-ns4pe
-n5spi
-nsta5b2l2
-ns1ta
-ns2tab
-n1t
-n2ta4b
-n1ta
-nte4r3s2
-nt2i
-n5ti2b
-nti4er
-nt2ie4
-nti2f2
-n3t2ine
-n2t1in
-n4t3ing
-nt2i4p
-ntrol5l2i
-ntrol1l
-n4t4s2
-ntu3me
-n1tu
-n3tum
-nu1a
-nu4d
-nu5en
-nuf4fe
-nu4f1f
-n3ui4n
-n2ui2
-3nu3it
-n4um
-nu1me
-n5u1mi
-3nu4n
-n3uo
-nu3tr
-n1v2
-n1w4
-nym4
-nyp4
-4nz
-n3za1
-4oa
-oa2d3
-o5a5les2
-o2ale
-oard3
-o2a2r
-oas4e
-oast5e
-oat5i
-ob3a3b
-o5b2a2r
-o1be4l
-o1bi
-o2bin
-ob5ing
-o3br
-ob3ul
-o1ce
-o2ch4
-o3che4t
-oche2
-ocif3
-o1ci
-o4cil
-o4clam
-o1c4l4
-o4cod
-o1co
-oc3rac
-oc5ra1tiz
-ocre3
-5ocrit
-ocri2
-octo2r5a
-o2c1t
-oc1to
-oc3u1la
-o5cure
-od5d1ed
-od1d4
-od3ic
-o1d2i3o
-o2do4
-od4or3
-o4d5uct.
-o1du
-odu2c
-odu2c1t
-o4d5uc4t1s2
-o4el
-o5eng
-o3er
-oe4ta
-o3ev
-o2fi
-of5ite
-of4i4t4t2
-o2g5a5r
-o1ga
-o4g5a1t2iv
-o4ga1to
-o1ge
-o5gene
-o1gen
-o5geo
-o4ger
-o3g2ie4
-1o1gis
-og3it
-o4gl2
-o5g2ly
-3ogniz
-og1ni
-o4g4ro
-o1gr
-og2u5i2
-1o1gy
-2o2g5y3n
-o1h2
-ohab5
-oi2
-oic3es
-oi3der
-o2id
-oi4f1f4
-o2ig4
-oi5let
-o3ing
-oint5er
-oin1t
-o5i2s1m
-oi5so2n
-oi2so
-oist5en
-ois1te
-oi3ter
-o2ite
-o5j
-2ok
-o3ken
-ok5ie4
-ok1i
-o1la
-o4la2n
-ola2ss4
-o2l2d
-ol2d1e
-ol3er
-o3les2c
-oles2
-o3let
-ol4fi
-o2lf
-ol2i
-o3l2i1a
-o3lice
-ol5id.
-ol2id
-o3li4f
-o5l4i4l
-ol3ing
-o5l2io
-o5l2is.
-ol3is2h
-o5l2ite
-ol1it
-o5l2i1t2io
-oli1ti
-o5l2iv
-oll2i4e4
-ol1l
-oll2i
-ol5o3giz
-olo4r
-ol5p2l2
-o2lp
-o4l2t
-ol3ub
-ol3ume
-ol3un
-o5l2us
-ol2v
-o2ly
-o2m5ah
-o1ma
-oma5l
-om5a1tiz
-om2be
-o4m1b
-om4b2l2
-o2me
-om3e1n4a
-o1men
-om5er2se
-ome4r1s2
-o4met
-om5e3try
-om4etr
-o3m2i3a
-om3ic.
-om3i1ca
-o5m2id
-om1in
-o5m2ini
-5ommend
-om1m
-om1men
-omo4ge
-o1mo
-o4mo2n
-om3pi
-o4m1p
-ompro5
-ompr2
-o2n
-o1n1a
-on4ac
-o3n2a2n
-on1c
-3oncil
-on1ci
-2ond
-on5do
-o3nen
-o2n5est
-o1nes
-on4gu
-on1ic
-o3n2i4o
-on1is
-o5ni1u
-on3key
-o4nk2
-on4odi
-o4n3o2d
-on3o3my
-o2n3s2
-on5spi4
-onspi1r5a
-onsp4ir
-on1su4
-onten4
-on1t
-on3t4i
-onti2f5
-on5um
-on1va5
-on1v2
-oo2
-ood5e
-ood5i
-o2o4k
-oop3i
-o3ord
-oost5
-o2pa
-o2p2e5d
-op1er
-3oper1a
-4op4erag
-2oph
-o5pha2n
-o5ph4er
-op3ing
-opi2n
-o3pit
-o5po2n
-o4posi
-o1pos
-o1pr2
-op1u
-opy5
-o1q
-o1ra
-o5ra.
-o4r3ag
-or5al1iz
-oral1i
-or5an4ge
-ora2n
-or2ang
-ore5a
-o5re1a4l
-or3ei2
-or4e5s2h
-or5e2st.
-ores2t
-orew4
-or4gu
-org2
-4o5r2i3a
-or3i1ca
-o5ril
-or1in
-o1r2i1o
-or3i1ty
-o3ri1u
-or2mi
-or1m
-orn2e
-o5rof
-or3oug
-orou2
-or5pe
-or1p
-3orrh4
-or1r4
-or4se
-o4rs2
-ors5en
-orst4
-or3thi
-or3thy
-or4ty
-o5rum
-o1ry
-os3al
-osa2
-os2c
-os4ce
-o3scop
-os1co
-4oscopi
-o5scr
-os4i4e4
-os5i1t2iv
-osi1ti
-os3i1to
-os3i1ty
-o5si4u
-os4l2
-o2so
-o2s4pa
-os4po
-os2ta
-o5stati
-os5til
-ost2i
-os5tit
-o4ta2n
-o1ta
-otele4g
-ot3er.
-ot5e4r1s2
-o4tes
-4oth
-oth5e1si
-oth2e
-oth1es
-oth3i4
-ot3ic.
-ot5i1ca
-o3tice
-o3tif2
-o3tis
-oto5s2
-o1to
-ou2
-ou3b2l2
-ouch5i
-ou2ch
-ou5et
-ou4l
-ounc5er
-oun2d
-ou5v2
-ov4en
-over4ne
-ove4r3s2
-ov4ert
-o3vis
-o4vi1ti4
-o5v4ol
-ow3der
-ow3el
-ow5est3
-ow1i2
-own5i
-o4wo2
-oy1a
-1pa
-pa4ca
-pa4ce
-pa2c4t
-p4a2d
-5paga4n
-pa1ga
-p3agat
-p4ai2
-pa4i4n4
-p4al
-pa1n4a
-pa2n
-pan3el
-pan4ty
-pan1t
-pa3ny
-pa1p
-pa4pu
-para5b2l2
-p2a2r
-pa2rab
-par5age
-par5d2i
-3pare
-par5el
-p4a4r1i
-par4is
-pa2te
-pa5ter
-5pathic
-p4ath
-pa5thy
-pa4tric
-pa1tr
-pav4
-3pay
-4p1b
-pd4
-4pe.
-3pe4a
-pear4l
-pe2a2r
-pe2c
-2p2ed
-3pede
-3p4edi
-pe3d4i3a4
-ped4ic
-p4ee
-pee4d
-pek4
-pe4la
-pel2i4e4
-pel2i
-pe4n2a2n
-pe1na
-p4enc
-pen4th
-pen1t
-pe5o2n
-p4era.
-per1a
-pera5b2l2
-pe2ra4b
-p4erag
-p4er1i
-peri5st
-per2is
-per4mal
-per3m4
-per1ma
-per2me5
-p4ern
-p2er3o
-per3ti
-p4e5ru
-per1v
-pe2t
-pe5ten
-pe5tiz
-4pf
-4pg
-4ph.
-phar5i
-ph2a2r
-ph4e3no
-phe2n
-ph4er
-ph4es.
-ph1es
-ph1ic
-5ph2ie4
-ph5ing
-5phis1t2i
-3phiz
-p4h2l4
-3phob
-3phone
-pho2n
-5phoni
-pho4r
-4p4h1s2
-ph3t
-5phu
-1phy
-p2i3a
-pi2a2n4
-pi4c2ie4
-p2i1ci
-pi4cy
-p4id
-p5i1d2a
-pi3de
-5pi2di
-3piec
-p2ie4
-pi3en
-pi4grap
-p2ig
-pi1gr
-pi3lo
-pi2n
-p4in.
-p4ind4
-p4i1no
-3p2i1o
-pio2n4
-p3ith
-pi5tha
-pi2tu
-2p3k2
-1p2l2
-3pla2n
-plas5t
-pl2i3a
-pli5er
-pl2ie4
-4pl2ig
-pli4n
-ploi4
-plu4m
-plu4m4b
-4p1m
-2p3n
-po4c
-5pod.
-po5em
-po3et5
-5po4g
-poin2
-poi2
-5poin1t
-poly5t
-po2ly
-po4ni
-po2n
-po4p
-1p4or
-po4ry
-1pos
-po2s1s
-p4ot
-po4ta
-5poun
-pou2
-4p1p
-ppa5ra
-p1pa
-pp2a2r
-p2pe
-p4p2ed
-p5pel
-p3pen
-p3per
-p3pe2t
-ppo5s2ite
-p1pos
-pr2
-pray4e4
-5pre1c2i
-pre5co
-pre3e2m
-pre4f5ac
-pre1f
-pre1fa
-pre4la
-pr1e3r4
-p3re1s2e
-3pr2e2ss
-pre5ten
-pre3v2
-5pr2i4e4
-prin4t3
-pr2i4s
-pri2s3o
-p3ro1ca
-pr2oc
-prof5it
-pro2fi
-pro3l
-pros3e
-pro1t
-2p1s2
-p2se
-ps4h
-p4si1b
-2p1t
-p2t5a4b
-p1ta
-p2te
-p2th
-p1ti3m
-ptu4r
-p1tu
-p4tw4
-pub3
-pue4
-puf4
-pu4l3c2
-pu4m
-pu2n
-pur4r4
-5p2us
-pu2t
-5pute
-put3er
-pu3tr
-put4t1ed
-pu4t3t2
-put4t1in
-p3w
-qu2
-qua5v4
-2que.
-3quer
-3quet
-2rab
-ra3bi
-rach4e2
-ra2ch
-r5a1c4l4
-raf5fi
-ra2f
-ra4f1f4
-ra2f4t
-r2ai2
-ra4lo
-ram3et
-r2ami
-ra3ne5o
-ra2n
-ran4ge
-r2ang
-r4ani
-ra5no4
-rap3er
-3ra1phy
-rar5c
-r2a2r
-rare4
-rar5e1f
-4raril
-rar1i
-r2as
-ratio2n4
-ra1t2io
-rau4t
-ra5vai2
-ra2va
-rav3el
-ra5z2ie4
-ra2z1i
-r1b
-r4bab
-r4bag
-rbi2
-r2b3i4f
-r2bin
-r5b2ine
-rb5ing.
-rb4o
-r1c
-r2ce
-r1cen4
-r3cha
-r2ch
-rch4er
-rche2
-r4ci4b
-r1ci
-r2c4it
-rcum3
-r4dal
-r1d2a
-rd2i
-r1d4i4a
-rdi4er
-rd2ie4
-rd1in4
-rd3ing
-2re.
-re1a4l
-re3a2n
-re5ar1r4
-re2a2r
-5rea2v
-re4aw
-r5ebrat
-r2e1b
-re3br
-rec5ol1l
-re2col
-re1co
-re4c5ompe
-reco4m1p
-re4cre
-re1cr
-2r2ed
-re1de
-re3dis1
-r4edi
-red5it
-re4fac
-re1f
-re1fa
-re2fe
-re5fer.
-refer1
-re3fi
-re4fy
-reg3is
-re5it
-rei2
-re1l2i
-re5lu
-r4en4ta
-ren1t
-ren4te
-re1o
-re5pi2n
-re4posi
-re1po
-re1pos
-re1pu
-r1er4
-r4er1i
-r2ero4
-r4e5ru
-r4es.
-re4spi
-re1sp
-res4s5i4b
-r2e2ss
-res1si
-res2t
-re5s2ta2l
-res1ta
-r2e3st4r
-re4ter
-re4ti4z
-re3tri
-r4eu2
-re5u1t2i
-rev2
-re4val
-re1va
-rev3el
-r5ev5er.
-rev1er
-re5ve4r1s2
-re5vert
-re5vi4l
-re1vi
-rev5olu
-re4wh
-r1f
-r3fu4
-r4fy
-rg2
-rg3er
-r3get
-r3g1ic
-rgi4n
-rg3ing
-r5gis
-r5git
-r1gl2
-rgo4n2
-r1go
-r3gu
-rh4
-4rh.
-4rhal
-r2i3a
-ria4b
-ri4ag
-r4ib
-rib3a
-ric5as5
-ri1ca
-r4ice
-4r2i1ci
-5ri5c2id
-ri4c2ie4
-r4i1co
-rid5er
-r2id
-ri3enc
-r2ie4
-ri3en1t
-ri1er
-ri5et
-rig5a2n
-r2ig
-ri1ga
-5r4igi
-ril3iz
-ril1i
-5rima2n
-ri1ma
-rim5i
-3ri1mo
-rim4pe
-ri4m1p
-r2i1na
-5rina.
-r4in4d
-r2in4e
-rin4g
-r2i1o
-5riph
-r2ip
-riph5e
-ri2p2l2
-rip5lic
-r4iq
-r2is
-r4is.
-r2is4c
-r3is2h
-ris4p
-ri3ta3b
-ri1ta
-r5ited.
-r2ite
-ri2t1ed
-rit5er.
-rit5e4r1s2
-r4i2t3ic
-ri1ti
-ri2tu
-rit5ur
-riv5el
-r2iv
-riv3et
-riv3i
-r3j
-r3ket
-rk4le
-rk1l
-rk4lin
-r1l
-rle4
-r2led
-r4l2ig
-r4lis
-rl5is2h
-r3lo4
-r1m
-rma5c
-r1ma
-r2me
-r3men
-rm5e4r1s2
-rm3ing
-r4ming.
-r4m2io
-r3mit
-r4my
-r4n2a2r
-r1na
-r3nel
-r4n1er
-r5net
-r3ney
-r5nic
-r1nis4
-r3n2it
-r3n2iv
-rno4
-r4nou2
-r3nu
-rob3l2
-r2oc
-ro3cr
-ro4e
-ro1fe
-ro5fil
-ro2fi
-r2ok2
-ro5k1er
-5role.
-rom5e1te
-ro2me
-ro4met
-rom4i
-ro4m4p
-ron4al
-ro2n
-ro1n1a
-ron4e
-ro5n4is
-ron4ta
-ron1t
-1room
-roo2
-5root
-ro3pel
-rop3ic
-ror3i
-ro5ro
-ro2s5per
-ro2s4s
-ro4th2e
-r4oth
-ro4ty
-ro4va
-rov5el
-rox5
-r1p
-r4pe4a
-r5pen1t
-rp5er.
-r3pe2t
-rp4h4
-rp3ing
-rpi2n
-r3po
-r1r4
-rre4c
-rre4f
-r4re1o
-rre4s2t
-rr2i4o
-rr2i4v
-rro2n4
-rros4
-rrys4
-4rs2
-r1sa2
-rsa5ti
-rs4c
-r2se
-r3sec
-rse4cr
-r4s5er.
-rs3e4s
-r5se5v2
-r1s2h
-r5sha
-r1si
-r4si4b
-rso2n3
-r1so
-r1sp
-r5sw2
-rta2ch4
-r1ta
-r4tag
-r3t2e1b
-r3ten4d
-r1te5o
-r1ti
-r2t5i2b
-rt2i4d
-r4tier
-rt2ie4
-r3t2ig
-rtil3i
-rtil4l
-r4ti1ly
-r4tist
-r4t2iv
-r3tri
-rtr2oph4
-rt4s2h4
-r4t1s2
-ru3a
-ru3e4l
-ru3en
-ru4gl2
-ru3i4n
-r2ui2
-rum3p2l2
-ru4m2p
-ru2n
-ru4nk5
-run4ty
-run1t
-r5usc2
-r2us
-ru2t1i5n
-r4u1t2i
-rv4e
-rvel4i
-r3ven
-rv5er.
-r5vest
-rv4e2s
-r3vey
-r3vic
-r3v2i4v
-r3vo
-r1w
-ry4c
-5rynge
-ryn5g
-ry3t
-sa2
-2s1ab
-5sack1
-sac3ri2
-s3a2c1t
-5sai2
-sa4l2a2r4
-s4a2l4m
-sa5lo
-sa4l4t
-3sanc
-sa2n
-san4de
-s4and
-s1ap
-sa5ta
-5sa3t2io
-sa2t3u
-sau4
-sa5vor
-5saw
-4s5b
-scan4t5
-s1ca
-sca2n
-sca4p
-scav5
-s4ced
-4s3cei2
-s4ces
-s2ch2
-s4cho2
-3s4c2ie4
-s1ci
-5sc4in4d
-s2cin
-scle5
-s1c4l4
-s4cli
-scof4
-s1co
-4scopy5
-scou1r5a
-scou2
-s1cu
-4s5d
-4se.
-se4a
-seas4
-sea5w
-se2c3o
-3se2c1t
-4s4ed
-se4d4e
-s5edl
-se2g
-se1g3r
-5sei2
-se1le
-5se2l2f
-5selv
-4se1me
-se4mol
-se1mo
-sen5at
-se1na
-4senc
-sen4d
-s5e2ned
-sen5g
-s5en1in
-4sen4t1d
-sen1t
-4sen2tl
-se2p3a3
-4s1er.
-s4er1l
-s2er4o
-4ser3vo
-s1e4s
-s4e5s2h
-ses5t
-5se5um
-s4eu
-5sev
-sev3en
-sew4i2
-5sex
-4s3f
-2s3g
-s2h
-2sh.
-sh1er
-5shev
-sh1in
-sh3io
-3sh2i4p
-sh2i2v5
-sho4
-sh5o2l2d
-sho2n3
-shor4
-short5
-4sh1w
-si1b
-s5ic3c
-3si2de.
-s2id
-5side4s2
-5si2di
-si5diz
-4sig1n4a
-s2ig
-sil4e
-4si1ly
-2s1in
-s2i1na
-5si2ne.
-s2ine
-s3ing
-1s2io
-5sio2n
-sio1n5a
-s4i2r
-si1r5a
-1sis
-3s2i1t2io
-si1ti
-5si1u
-1s2iv
-5siz
-sk2
-4ske
-s3ket
-sk5ine
-sk1i
-sk5in4g
-s1l2
-s3lat
-s2le
-sl2ith5
-sl1it
-2s1m
-s3ma
-smal1l3
-sma2n3
-smel4
-s5men
-5s4m2ith
-smo2l5d4
-s1mo
-s1n4
-1so
-so4ce
-so2ft3
-so4lab
-so1la
-so2l3d2
-so3lic
-sol2i
-5sol2v
-3som
-3s4on.
-so2n
-so1n1a4
-son4g
-s4op
-5soph1ic
-s2oph
-s5o3phiz
-s5o1phy
-sor5c
-sor5d
-4sov
-so5vi
-2s1pa
-5sp4ai2
-spa4n
-spen4d
-2s5peo
-2sper
-s2phe
-3sph4er
-spho5
-spil4
-sp5ing
-spi2n
-4s3p2i1o
-s4p1ly
-s1p2l2
-s4po2n
-s1p4or4
-4sp4ot
-squal4l
-squ2
-s1r
-2ss
-s1sa2
-ssas3
-s2s5c
-s3sel
-s5sen5g
-s4ses.
-ss1e4s
-s5set
-s1si
-s4s2ie4
-ssi4er
-s4s5i1ly
-s4s1l2
-ss4li
-s4s1n4
-sspen4d4
-ss2t
-ssu1r5a
-s1su
-ssu2r
-ss5w2
-2st.
-s2tag
-s1ta
-s2ta2l
-stam4i
-5st4and
-sta2n
-s4ta4p
-5stat.
-s4t1ed
-stern5i
-s5t2ero
-ste2w
-ste1w5a
-s3th2e
-st2i
-s4ti.
-s5t2i1a
-s1tic
-5s4tick1
-s4t2ie4
-s3tif2
-st3ing
-s2t1in
-5st4ir
-s1tle
-s2tl
-5stock1
-s1to
-sto2m3a
-5stone
-sto2n
-s4top
-3store
-st4r
-s4tra2d
-s1tra
-5stra2tu
-s4tray
-s4tr2id
-4stry
-4st3w4
-s2ty
-1su
-su1al
-su4b3
-su2g3
-su5is
-s2ui2
-suit3
-s4ul
-su2m
-su1m3i
-su2n
-su2r
-4sv
-sw2
-4s1wo2
-s4y
-4sy1c
-3syl
-syn5o
-sy5rin
-1ta
-3ta.
-2tab
-ta5bles2
-tab2l2
-5tab5o5l1iz
-tabol2i
-4t4a2ci
-ta5do
-ta2d
-4ta2f4
-tai5lo
-tai2
-ta2l
-ta5la
-tal5en
-t2ale
-tal3i
-4talk
-tal4lis
-tal1l
-tall2i
-ta5log
-ta5mo
-tan4de
-ta2n
-t4and
-1tan1ta3
-tan1t
-ta5per
-ta5p2l2
-tar4a
-t2a2r
-4tar1c
-4tare
-ta3r2iz
-tar1i
-tas4e
-ta5s4y
-4tat1ic
-ta4tur
-ta2tu
-taun4
-tav4
-2taw
-tax4is
-tax3i
-2t1b
-4tc
-t4ch
-tch5e4t
-tche2
-4t1d
-4te.
-te2ad4i
-tea2d1
-4tea2t
-te1ce4
-5te2c1t
-2t1ed
-t4e5di
-1tee
-teg4
-te5ger4
-te5gi
-3tel.
-tel2i4
-5te2l1s2
-te2ma2
-tem3at
-3ten2a2n
-te1na
-3tenc
-3tend
-4te1nes
-1ten1t
-ten4tag
-ten1ta
-1teo
-te4p
-te5pe
-ter3c
-5ter3d
-1ter1i
-ter5ies
-ter2ie4
-ter3is
-teri5za1
-5t4er3n2it
-ter5v
-4tes.
-4t2e2ss
-t3ess.
-teth5e
-3t4eu
-3tex
-4tey
-2t1f
-4t1g
-2th.
-tha2n4
-th2e
-4thea
-th3eas
-the5a2t
-the3is
-thei2
-3the4t
-th5ic.
-th5i1ca
-4th4il2
-5th4i4nk2
-4t4h1l4
-th5ode
-5thod3ic
-4thoo2
-thor5it
-tho5riz
-2t4h1s2
-1t2i1a
-ti4ab
-ti4a1to
-2ti2b
-4tick1
-t4i1co
-t4ic1u
-5ti2di
-t2id
-3tien
-t2ie4
-tif2
-ti5fy
-2t2ig
-5tigu
-til2l5in4
-til1l
-till2i
-1tim
-4ti4m1p
-tim5ul
-ti2mu
-2t1in
-t2i1na
-3ti2ne.
-t2ine
-3t2ini
-1t2io
-ti5oc
-tion5ee
-tio2n
-5tiq
-ti3sa2
-3t4ise
-ti2s4m
-ti5so
-tis4p
-5tisti1ca
-tis1t2i
-tis1tic
-ti3tl
-ti4u
-1t2iv
-ti1v4a
-1tiz
-ti3za1
-ti3ze4n
-ti2ze
-2tl
-t5la
-tla2n4
-3tle.
-3tled
-3tles.
-tles2
-t5let.
-t5lo
-4t1m
-tme4
-2t1n2
-1to
-to3b
-to5crat
-4to2do4
-2tof
-to2gr
-to5ic
-toi2
-to2ma
-to4m4b
-to3my
-ton4a4l1i
-to2n
-to1n1a
-to3n2at
-4tono
-4tony
-to2ra
-to3r2ie4
-tor5iz
-tos2
-5tour
-tou2
-4tout
-to3w2a2r
-4t1p
-1tra
-t2ra3b
-tra5ch
-tr4a2ci4
-tra2c4it
-trac4te
-tra2c1t
-tr2as4
-tra5ven
-trav5e2s5
-tre5f
-tre4m
-trem5i
-5tr2i3a
-tri5ces
-tr4ice
-5tri3c2i1a
-t4r2i1ci
-4tri4c3s2
-2trim
-tr2i4v
-tro5m4i
-tron5i
-tro2n
-4trony
-tro5phe
-tr2oph
-tro3sp
-tro3v
-tr2u5i2
-tr2us4
-4t1s2
-t4sc
-ts2h4
-t4sw2
-4t3t2
-t4tes
-t5to
-t1tu4
-1tu
-tu1a
-tu3a2r
-tu4b4i
-tud2
-4tue
-4tuf4
-5t2u3i2
-3tum
-tu4nis
-tu1ni
-2t3up.
-3ture
-5turi
-tur3is
-tur5o
-tu5ry
-3t2us
-4tv
-tw4
-4t1wa
-twis4
-twi2
-4t1wo2
-1ty
-4tya
-2tyl
-type3
-ty5ph
-4tz
-t2z4e
-4uab
-uac4
-ua5na
-ua2n
-uan4i
-uar5an1t
-u2a2r
-uara2n
-uar2d
-uar3i
-uar3t
-u1at
-uav4
-ub4e
-u4bel
-u3ber
-u4b2ero
-u1b4i
-u4b5ing
-u3b4le.
-ub2l2
-u3ca
-uci4b
-u1ci
-u2c4it
-ucle3
-u1c4l4
-u3cr
-u3cu
-u4cy
-ud5d4
-ud3er
-ud5est
-udes2
-ude1v4
-u1dic
-ud3ied
-ud2ie4
-ud3ies
-ud5is1
-u5dit
-u4do2n
-u1do
-ud4si
-u2d1s2
-u4du
-u4ene
-ue2n1s4
-uen4te
-uen1t
-uer4il
-uer1i
-3u1fa
-u3f4l2
-ugh3e2n
-ug5in
-2ui2
-uil5iz
-uil1i
-ui4n
-u1ing
-uir4m
-u4ir
-ui1ta4
-u2iv3
-ui4v4er.
-u5j
-4uk
-u1la
-ula5b
-u5lati
-ul2ch4
-u4l1c2
-5ulche2
-ul3der
-u2ld
-ul2de
-ul4e
-u1len
-ul4gi
-u4l1g4
-ul2i
-u5l2i1a
-ul3ing
-ul5is2h
-ul4l2a2r
-ul1l
-ul4li4b
-ull2i
-ul4lis
-4u2l3m
-u1l4o
-4u2l1s2
-uls5e4s
-ul2se
-ul1ti
-u4lt
-ul1tra3
-ul1tr
-4ul1tu2
-u3lu
-ul5ul
-ul5v
-u2m5ab
-u1ma
-um4bi
-u4m1b
-um4b1ly
-umb2l2
-u1mi
-u4m3ing
-umor5o
-u1mo
-umo2r
-u4m2p
-un2at4
-u1na
-u2ne
-un4er
-u1ni
-un4im
-u2n1in
-un5is2h
-un2i3v
-u2n3s4
-un4sw2
-un2t3a4b
-un1t
-un1ta
-un4ter.
-un4tes
-unu4
-un5y
-u4n5z
-u4o4rs2
-u5os
-u1ou2
-u1pe
-upe4r5s2
-u5p2i3a
-up3ing
-upi2n
-u3p2l2
-u4p3p
-upport5
-up1p4or
-up2t5i2b
-u2p1t
-up1tu4
-u1ra
-4ura.
-u4rag
-u4r2as
-ur4be
-ur1b
-ur1c4
-ur1d
-ure5a2t
-ur4fer1
-ur1f
-ur4fr
-u3rif
-uri4fic
-uri1fi
-ur1in
-u3r2i1o
-u1rit
-ur3iz
-ur2l
-url5ing.
-ur4no4
-uros4
-ur4pe
-ur1p
-ur4pi
-urs5er
-u4rs2
-ur2se
-ur5tes
-ur3th2e
-ur1ti4
-ur4t2ie4
-u3ru
-2us
-u5sa2d
-usa2
-u5sa2n
-us4ap
-usc2
-us3ci
-use5a
-u5s2i1a
-u3sic
-us4lin
-us1l2
-us1p
-us5s1l2
-u2ss
-us5tere
-us1t4r
-u2su
-usu2r4
-u2ta4b
-u1ta
-u3tat
-4u4te.
-4utel
-4uten
-uten4i
-4u1t2i
-uti5l2iz
-util1i
-u3t2ine
-u2t1in
-ut3ing
-utio1n5a
-u1t2io
-utio2n
-u4tis
-5u5tiz
-u4t1l
-u2t5of
-u1to
-uto5g
-uto5mat1ic
-uto2ma
-u5to2n
-u4tou2
-u4t1s4
-u3u
-uu4m
-u1v2
-ux1u3
-u2z4e
-1va
-5va.
-2v1a4b
-vac5il
-v4a2ci
-vac3u
-vag4
-va4ge
-va5l2i4e4
-val1i
-val5o
-val1u
-va5mo
-va5niz
-va2n
-va5pi
-var5ied
-v2a2r
-var1i
-var2ie4
-3vat
-4ve.
-4ved
-veg3
-v3el.
-vel3l2i
-vel1l
-ve4lo
-v4e1ly
-ven3om
-v4eno
-v5enue
-v4erd
-5v2e2re.
-v4erel
-v3eren
-ver5enc
-v4eres
-ver3ie4
-ver1i
-vermi4n
-ver3m4
-3ver2se
-ve4r1s2
-ver3th
-v4e2s
-4ves.
-ves4te
-ve4te
-vet3er
-ve4ty
-vi5al1i
-v2i1a
-vi2al
-5vi2a2n
-5vi2de.
-v2id
-5vi2d1ed
-4v3i1den
-5vide4s2
-5vi2di
-v3if
-vi5gn
-v2ig
-v4ik4
-2vil
-5v2il1it
-vil1i
-v3i3l2iz
-v1in
-4vi4na
-v2inc
-v4in5d
-4ving
-vi1o3l
-v2io
-v3io4r
-vi1ou2
-v2i4p
-vi5ro
-v4ir
-vis3it
-vi3so
-vi3su
-4vi1ti
-vit3r
-4vi1ty
-3v2iv
-5vo.
-voi4
-3v2ok
-vo4la
-v5ole
-5vo4l2t
-3vol2v
-vom5i
-vo2r5ab
-vo1ra
-vori4
-vo4ry
-vo4ta
-4vo1tee
-4vv4
-v4y
-w5ab2l2
-2wac
-wa5ger
-wa2g5o
-wait5
-wai2
-w5al.
-wam4
-war4t
-w2a2r
-was4t
-wa1te
-wa5ver
-w1b
-wea5r2ie4
-we2a2r
-wear1i
-we4ath3
-wea2t
-we4d4n4
-weet3
-wee5v
-wel4l
-w1er
-west3
-w3ev
-whi4
-wi2
-wil2
-wil2l5in4
-wil1l
-will2i
-win4de
-w4ind
-win4g
-w4ir4
-3w4ise
-w2ith3
-wiz5
-w4k
-wl4es2
-wl3in
-w4no
-1wo2
-wom1
-wo5v4en
-w5p
-wra4
-wri4
-wri1ta4
-w3s2h
-ws4l2
-ws4pe
-w5s4t
-4wt
-wy4
-x1a
-xac5e
-x4a2go
-xam3
-x4ap
-xas5
-x3c2
-x1e
-xe4cu1to
-xe1cu
-xe3c4ut
-x2ed
-xer4i
-x2e5ro
-x1h
-xhi2
-xh4il5
-xhu4
-x3i
-x2i5a
-xi5c
-xi5di
-x2id
-x4ime
-xi5m2iz
-xim1i
-x3o
-x4ob
-x3p
-xp4an4d
-x1pa
-xpa2n
-xpec1to5
-xpe2c
-xpe2c1t
-x2p2e3d
-x1t2
-x3ti
-x1u
-xu3a
-xx4
-y5ac
-3y2a2r4
-y5at
-y1b
-y1c
-y2ce
-yc5er
-y3ch
-ych4e2
-ycom4
-y1co
-ycot4
-y1d
-y5ee
-y1er
-y4er1f
-yes4
-ye4t
-y5gi
-4y3h
-y1i
-y3la
-ylla5b2l2
-yl1l
-y3lo
-y5lu
-ymbol5
-y4m1b
-yme4
-ym1pa3
-y4m1p
-yn3c4hr4
-yn2ch
-yn5d
-yn5g
-yn5ic
-5ynx
-y1o4
-yo5d
-y4o5g
-yom4
-yo5net
-yo2n
-y4o2n3s2
-y4os
-y4p2ed
-yper5
-yp3i
-y3po
-y4po4c
-yp2ta
-y2p1t
-y5pu
-yra5m
-yr5i3a
-y3ro
-yr4r4
-ys4c
-y3s2e
-ys3i1ca
-y1s3io
-3y1sis
-y4so
-y2ss4
-ys1t
-ys3ta
-ysu2r4
-y1su
-y3thin
-yt3ic
-y1w
-za1
-z5a2b
-z2a2r2
-4zb
-2ze
-ze4n
-ze4p
-z1er
-z2e3ro
-zet4
-2z1i
-z4il
-z4is
-5zl
-4zm
-1zo
-zo4m
-zo5ol
-zoo2
-zte4
-4z1z2
-z4zy
-.as9s8o9c8i8a8te.
-.as1so
-.asso1ci
-.asso3c2i1a
-.as9s8o9c8i8a8t8es.
-.de8c9l8i9n8a9t8i8on.
-.de1c4l4
-.decl4i1na
-.declin2at
-.declina1t2io
-.declinatio2n
-.ob8l8i8g9a9t8o8ry.
-.ob2l2
-.obl2ig
-.obli1ga
-.obliga1to
-.obligato1ry
-.ph8i8l9a8n9t8h8r8o8p8ic.
-.ph4il2
-.phi1la
-.phila2n
-.philan1t
-.philant4hr4
-.philanthrop3ic
-.pr8e8s8e8nt.
-.p3re1s2e
-.presen1t
-.pr8e8s8e8n8ts.
-.presen4t4s2
-.pr8o8j8e8ct.
-.pro5j
-.pro1je
-.proje2c1t
-.pr8o8j8e8c8ts.
-.projec4t1s2
-.re8c9i9p8r8o8c9i9t8y.
-.re1c2i
-.rec2ip
-.recipr2
-.recipr2oc
-.re1cipro1ci
-.recipro2c1it
-.reciproci1ty
-.re9c8o8g9n8i9z8a8n8ce.
-.re1co
-.re2cog
-.rec3ogniz
-.recog1ni
-.recogniza1
-.recogniza2n
-.re8f9o8r9m8a9t8i8on.
-.re1f
-.re1fo
-.refo2r
-.refor1m
-.refor1ma
-.reforma1t2io
-.reformatio2n
-.re8t9r8i9b8u9t8i8on.
-.re3tri
-.retr4ib
-.retri3bu1t2io
-.retrib4u1t2i
-.retributio2n
-.ta9b8le.
-.2tab
-.tab2l2
-.ac8a8d9e9m8y.
-.a1ca
-.aca2d
-.acad4em
-.acade3my
-.ac8a8d9e9m8i8e8s.
-.academ2i4e4
-.ac9c8u9s8a9t8i8v8e.
-.ac3c
-.ac1c2us
-.accusa2
-.accusa1t2iv
-.ac8r8o9n8y8m.
-.acro2n
-.acronym4
-.ac8r8y8l9a8m8i8d8e.
-.acry3la
-.acrylam2id
-.ac8r8y8l9a8m8i8d8e8s.
-.acrylamide4s2
-.ac8r8y8l9a8l8d8e9h8y8d8e.
-.acryla2ld
-.acrylal2de
-.acrylalde1h4
-.acrylaldehy1d
-.ad8d9a9b8l8e.
-.ad1d2a
-.ad2d3a4b
-.addab2l2
-.ad8d9i9b8l8e.
-.addi1b2l2
-.ad8r8e8n9a9l8i8n8e.
-.a1dr
-.adre4
-.a5dren
-.adre1na
-.adrena4l1i
-.adrena1l4ine
-.ae8r8o9s8p8a8c8e.
-.ae4r
-.a2ero
-.aero2s4pa
-.aerospa4ce
-.af9t8e8r9t8h8o8u8g8h8t.
-.afterthou2
-.af9t8e8r9t8h8o8u8g8h8t8s.
-.afterthough4t1s2
-.ag8r8o8n9o9m8i8s8t.
-.a1gr
-.ag4ro
-.agro2n
-.agronom2is
-.ag8r8o8n9o9m8i8s8t8s.
-.agronomis4t1s2
-.al9g8e9b8r8a9i9c8a8l9l8y.
-.a4l1g4
-.alg2e1b
-.alge3br
-.algebr2ai2
-.algebrai1ca
-.algebraical1l
-.algebraical1ly
-.am9p8h8e8t9a9m8i8n8e.
-.a4m1p
-.amphe4t
-.amphe1ta
-.amphetam1in
-.amphetam2ine
-.am9p8h8e8t9a9m8i8n8e8s.
-.amphetami1nes
-.an9a9l8y8s8e.
-.3ana1ly
-.a1na
-.an4a2lys4
-.anal5y3s2e
-.an9a9l8y8s8e8d.
-.analy4s4ed
-.an8a8l8y9s8e8s.
-.analys1e4s
-.an9i8s8o9t8r8o8p9i8c.
-.ani2so
-.anisotrop3ic
-.an9i8s8o9t8r8o8p9i9c8a8l9l8y.
-.anisotropi1ca
-.anisotropical1l
-.anisotropical1ly
-.an9i8s8o8t9r8o9p8i8s8m.
-.anisotropi2s1m
-.an9i8s8o8t9r8o8p8y.
-.anisotropy5
-.an8o8m9a8l8y.
-.ano4
-.anoma5l
-.ano1ma
-.anoma1ly
-.an8o8m9a8l8i8e8s.
-.anomal1i
-.anomal2i4e4
-.an8t8i9d8e8r8i8v9a9t8i8v8e.
-.ant2id
-.antider1i
-.antider2i4v
-.antide4ri1va
-.antideri3vat
-.antider2iva1t2iv
-.an8t8i9d8e8r8i8v9a9t8i8v8e8s.
-.antiderivativ4e2s
-.an8t8i9h8o8l8o9m8o8r9p8h8i8c.
-.anti3h
-.antiholo1mo
-.antiholomo2r
-.antiholomor1p
-.antiholomorp4h4
-.antiholomorph1ic
-.an9t8i8n9o9m8y.
-.an2t1in
-.ant2i1no
-.antino3my
-.an9t8i8n9o9m8i8e8s.
-.antinom2ie4
-.an9t8i9n8u9c8l8e8a8r.
-.antin1u
-.antinucle3
-.antinu1c4l4
-.antinucle2a
-.antinucle2a2r
-.an9t8i9n8u9c8l8e9o8n.
-.antinucleo2n
-.an9t8i9r8e8v9o9l8u9t8i8o8n9a8r8y.
-.ant4ir
-.antirev2
-.antirev5olu
-.antirevo1lut
-.antirevol4u1t2i
-.antirevolutio1n5a
-.antirevolu1t2io
-.antirevolutio2n
-.antirevolution2a2r
-.ap8o8t8h9e9o9s8e8s.
-.ap4ot
-.ap4oth
-.apoth2e
-.apotheos4
-.apotheos1e4s
-.ap8o8t8h9e9o9s8i8s.
-.apotheo1sis
-.ap9p8e8n9d8i8x.
-.a4p1p
-.ap2pe
-.ap3pen
-.ar9c8h8i9m8e9d8e8a8n.
-.ar1c
-.ar2ch
-.archi2med
-.archimedea2n
-.ar9c8h8i9p8e8l9a8g8o.
-.arch2i4p
-.archipe4
-.archipe4la
-.archipela2go
-.ar9c8h8i9p8e8l9a9g8o8s.
-.ar9c8h8i8v8e.
-.arch2i2v
-.ar9c8h8i8v8e8s.
-.archiv4e2s
-.ar9c8h8i8v9i8n8g.
-.archiv1in
-.archi4ving
-.ar9c8h8i8v9i8s8t.
-.ar9c8h8i8v9i8s8t8s.
-.archivis4t1s2
-.ar9c8h8e9t8y8p9a8l.
-.arche2
-.arche4t
-.arche1ty
-.archety1pa
-.archetyp4al
-.ar9c8h8e9t8y8p9i9c8a8l.
-.archetyp3i
-.archetypi1ca
-.ar8c9t8a8n9g8e8n8t.
-.ar2c1t
-.arct5ang
-.arc1ta
-.arcta2n
-.arctan1gen
-.arctangen1t
-.ar8c9t8a8n9g8e8n8t8s.
-.arctangen4t4s2
-.as9s8i8g8n9a9b8l8e.
-.as1si
-.as4sig1n4a
-.ass2ig
-.assig2n1a2b
-.assignab2l2
-.as9s8i8g8n9o8r.
-.assig1no
-.as9s8i8g8n9o8r8s.
-.assigno4rs2
-.as9s8i8s8t9a8n8t9s8h8i8p.
-.as1sis
-.assis1ta
-.assista2n
-.assistan1t
-.assistan4t4s2
-.assistants2h4
-.assistant3sh2i4p
-.as9s8i8s8t9a8n8t9s8h8i8p8s.
-.assistantshi2p1s2
-.as8y8m8p9t8o9m8a8t8i8c.
-.as4y
-.asy4m1p
-.asym2p1t
-.asymp1to
-.asympto2ma
-.asymptomat1ic
-.as9y8m8p9t8o8t9i8c.
-.as8y8n9c8h8r8o9n8o8u8s.
-.asyn3c4hr4
-.asyn2ch
-.asynchro2n
-.asynchro1nou2
-.asynchrono2us
-.at8h9e8r9o9s8c8l8e9r8o9s8i8s.
-.4ath
-.ath2e
-.ath2ero
-.atheros2c
-.atheroscle5
-.atheros1c4l4
-.ath2eroscl4ero
-.atherosclero1sis
-.at9m8o8s9p8h8e8r8e.
-.a4t1m
-.at1mo
-.atmos2
-.atmo3sp
-.atmos2phe
-.atmo3sph4er
-.at9m8o8s9p8h8e8r8e8s.
-.at9t8r8i8b9u8t8e8d.
-.a4t3t2
-.attr4ib
-.attribu2t1ed
-.at9t8r8i8b9u8t9a8b8l8e.
-.attri4bu1ta
-.attribu2ta4b
-.attributab2l2
-.au9t8o9m8a9t8i8o8n.
-.au1to
-.auto2ma
-.automa1t2io
-.automatio2n
-.au9t8o8m9a9t8o8n.
-.automa1to
-.automato2n
-.au9t8o8m9a9t8a.
-.automa2ta
-.au9t8o9n8u8m9b8e8r9i8n8g.
-.au5to2n
-.auton5um
-.autonu4m1b
-.autonumber1i
-.autonumberin4g
-.au9t8o8n9o9m8o8u8s.
-.au4tono
-.autono4mo
-.autono3mo2us
-.autonomou2
-.au8t8o9r8o8u8n8d9i8n8g.
-.autorou2
-.autoroun2d
-.autoround1in
-.av9o8i8r9d8u9p8o8i8s.
-.avoi4
-.avo4ir
-.avoir1du
-.avoir4dup
-.avoirdupoi2
-.ba8n8d9l8e8a8d8e8r.
-.b4and
-.ban1dl
-.bandle2a
-.bandlea2d1
-.ba8n8d9l8e8a8d8e8r8s.
-.bandleade4r5s2
-.ba8n8k9r8u8p8t.
-.ba4nk2
-.bankru2p1t
-.ba8n8k9r8u8p8t9c8y.
-.bankrup4tc
-.bankrupt1cy
-.ba8n8k9r8u8p8t9c8i8e8s.
-.bankrupt1ci
-.bankruptc2ie4
-.ba8r9o8n8i8e8s.
-.b2a2r
-.ba5roni
-.baro2n
-.baron2ie4
-.ba8s8e9l8i8n8e9s8k8i8p.
-.basel2i
-.base1l4ine
-.baseli1nes
-.baselinesk2
-.baselinesk1i
-.baselinesk2i4p
-.ba9t8h8y8m9e9t8r8y.
-.1bat
-.b4ath
-.bathyme4
-.bathym4etr
-.bathyme3try
-.ba8t8h8y9s8c8a8p8h8e.
-.bathy2s
-.bathys4c
-.bathysca4p
-.bathys1ca
-.be8a8n9i8e8s.
-.bea2n
-.bea3nies
-.bean2ie4
-.be9h8a8v9i8o8u8r.
-.be1h4
-.behav1i
-.behavi1ou2
-.behav2io
-.behavi4our
-.be9h8a8v9i8o8u8r8s.
-.behaviou4rs2
-.be8v8i8e8s.
-.be1vi
-.bev2ie4
-.bi8b9l8i9o8g9r8a9p8h8y9s8t8y8l8e.
-.bi2b
-.bi1b2l2
-.bib3li
-.bibli5og
-.bibl2io
-.biblio2gr
-.biblio4g3ra1phy
-.bibliography2s
-.bibliographys1t
-.bibliographys2ty
-.bibliographys2tyl
-.bi9d8i8f9f8e8r9e8n9t8i8a8l.
-.b2i4d
-.bi2di
-.bid1if
-.bidi4f1f
-.bidiffer1
-.bidiffer3en1t
-.bidifferent2i
-.bidifferen1t2i1a
-.bidifferenti2al
-.bi8g9g8e8s8t.
-.b2ig
-.bi4g1g2
-.big2ge
-.bi8l8l9a8b8l8e.
-.1bil
-.bill5ab
-.bil1l
-.billab2l2
-.bi8o9m8a8t8h9e9m8a8t9i8c8s.
-.b2io
-.bio4m
-.bio1ma
-.biom4ath3
-.biomath5em
-.biomath2e
-.biomathe1ma
-.biomathemat1ic
-.biomathemati4c3s2
-.bi8o9m8e8d9i9c8a8l.
-.bio2me
-.bio2med
-.biom4edi
-.biomed3i1ca
-.bi8o9m8e8d9i9c8i8n8e.
-.biomed2i1ci
-.biomedi2cin
-.biomedic2ine
-.bi8o9r8h8y8t8h8m8s.
-.biorh4
-.biorhyt4h1m
-.biorhyth4m1s2
-.bi8t9m8a8p.
-.bi2t
-.bi4t1m
-.bit1ma
-.bit4map
-.bi8t9m8a8p8s.
-.bitma2p1s2
-.bl8a8n8d9e8r.
-.b2l2
-.b3l4and
-.bla2n
-.blan1de
-.bl8a8n8d9e8s8t.
-.blande4s2
-.bl8i8n8d9e8r.
-.bl4ind
-.blin1de
-.bl8o8n8d8e8s.
-.b4lo
-.blo2n
-.bl2ond
-.blon1de
-.blondes2
-.bl8u8e9p8r8i8n8t.
-.bluepr2
-.blueprin4t3
-.bl8u8e9p8r8i8n8t8s.
-.blueprin4t4s2
-.bo9l8o8m9e9t8e8r.
-.bolo2me
-.bolo4met
-.bolome1te
-.bo8o8k9s8e8l8l9e8r.
-.3boo2
-.bo2o4k
-.boo4k1s2
-.booksel1l
-.booksel2le
-.bo8o8k9s8e8l8l9e8r8s.
-.bookselle4r1s2
-.bo8o8l9e8a8n.
-.boole2a
-.boolea2n
-.bo8o8l9e8a8n8s.
-.boolea2n1s2
-.bo8r9n8o9l8o8g9i9c8a8l.
-.borno4
-.borno3log1ic
-.bornologi1ca
-.bo8t9u9l8i8s8m.
-.bo1tu
-.botul2i
-.botuli2s1m
-.br8u8s8q8u8e8r.
-.br2us
-.brusqu2
-.brus3quer
-.bu8f9f8e8r.
-.buf4fer1
-.bu4f1f
-.bu8f9f8e8r8s.
-.buffe4r1s2
-.bu8s8i8e8r.
-.bus5ie4
-.b2us
-.bu8s8i8e8s8t.
-.busi1est
-.bu8s8s8i8n8g.
-.bu2ss
-.bus1si
-.bus2s1in
-.buss3ing
-.bu8t8t8e8d.
-.but2t1ed
-.bu8z8z9w8o8r8d.
-.bu4z1z2
-.buzz1wo2
-.bu8z8z9w8o8r8d8s.
-.buzzwor2d1s2
-.ca9c8o8p8h9o9n8y.
-.ca1co
-.cac2oph
-.cacopho5ny
-.cacopho2n
-.ca9c8o8p8h9o9n8i8e8s.
-.caco5phoni
-.cacophon2ie4
-.ca8l8l9e8r.
-.cal1l
-.cal2le
-.ca8l8l9e8r8s.
-.calle4r1s2
-.ca8m9e8r8a9m8e8n.
-.cam5er1a
-.camera1men
-.ca8r8t9w8h8e8e8l.
-.cartw4
-.ca8r8t9w8h8e8e8l8s.
-.cartwhee2l1s2
-.ca9t8a8r8r8h8s.
-.ca2ta
-.cat2a2r
-.catar1r4
-.catarrh4
-.catarr4h1s2
-.ca8t9a9s8t8r8o8p8h9i8c.
-.catas1t4r
-.catastr2oph
-.catastroph1ic
-.ca8t9a9s8t8r8o8p8h9i9c8a8l8l8y.
-.catastrophi1ca
-.catastrophical1l
-.catastrophical1ly
-.ca8t9e9n8o8i8d.
-.cat4eno
-.catenoi2
-.cateno2id
-.ca8t9e9n8o8i8d8s.
-.catenoi2d1s2
-.ca8u9l8i9f8l8o8w9e8r.
-.cau4l2
-.caul2i
-.cauli4f4l2
-.cauliflow1er
-.ch8a8p9a8r9r8a8l.
-.chap2a2r4
-.cha1pa
-.chapar1r4
-.ch8a8r9t8r8e8u8s8e.
-.ch2a2r
-.chartr4eu2
-.chartre2us4
-.ch8e8m8o9t8h8e8r9a8p8y.
-.che2
-.che1mo
-.chem4oth3
-.chemoth2e
-.chemoth4er1a
-.chemothera3p
-.ch8e8m8o9t8h8e8r9a9p8i8e8s.
-.chemotherap2ie4
-.ch8l8o8r8o9m8e8t8h9a8n8e.
-.c4h1l4
-.ch2lo
-.chloro2me
-.chloro4met
-.chlorometha2n4
-.ch8l8o8r8o9m8e8t8h9a8n8e8s.
-.chlorometha1nes
-.ch8o9l8e8s9t8e8r8i8c.
-.3cho2
-.c3hol4e
-.choles2
-.choles1ter1i
-.ci8g9a9r8e8t8t8e.
-.c2ig
-.ci1ga
-.cig2a2r
-.cigare4t3t2
-.ci8g9a9r8e8t8t8e8s.
-.cigaret4tes
-.ci8n8q8u8e9f8o8i8l.
-.2cin
-.cin1q
-.cinqu2
-.cinque1f
-.cinque1fo
-.cinquefoi2
-.co9a8s8s8o9c8i8a9t8i8v8e.
-.c4oa
-.coa2ss
-.coas1so
-.coasso1ci
-.coasso3c2i1a
-.coassoci4a1t2iv
-.co9g8n8a8c.
-.2cog
-.cog1n4a
-.co9g8n8a8c8s.
-.cogna4c3s2
-.co9k8e8r9n8e8l.
-.c2ok
-.cok1er
-.coker3nel
-.co9k8e8r9n8e8l8s.
-.cokerne2l1s2
-.co8l9l8i8n9e8a9t8i8o8n.
-.col1l
-.coll2i
-.col2lin4
-.col1l4ine
-.collin3ea
-.collinea2t
-.collinea1t2io
-.collineatio2n
-.co8l9u8m8n8s.
-.colu4m1n
-.colum2n1s2
-.co8m9p8a8r9a8n8d.
-.co4m1p
-.compara5
-.com1pa
-.comp2a2r
-.compara2n
-.compar4and
-.co8m9p8a8r9a8n8d8s.
-.comparan2d1s2
-.co8m9p8e8n9d8i8u8m.
-.compendi1u
-.co8m9p8o9n8e8n8t9w8i8s8e.
-.compo2n
-.compo3nen
-.componen1t
-.componentw4
-.componentwis4
-.componentwi2
-.component3w4ise
-.co8m8p9t8r8o8l9l8e8r.
-.comp4tr
-.com2p1t
-.comptrol1l
-.comptrol2le
-.co8m8p9t8r8o8l9l8e8r8s.
-.comptrolle4r1s2
-.co8n9f8o8r8m9a8b8l8e.
-.co2n
-.con3f
-.con1fo
-.confo2r
-.confor1m
-.confor1ma
-.confor2mab
-.conformab2l2
-.co8n9f8o8r8m9i8s8t.
-.confor2mi
-.conform2is
-.co8n9f8o8r8m9i8s8t8s.
-.conformis4t1s2
-.co8n9f8o8r8m9i8t8y.
-.confor3mit
-.conformi1ty
-.co8n9g8r8e8s8s.
-.con3g
-.con1gr
-.congr2e2ss
-.co8n9g8r8e8s8s8e8s.
-.congress1e4s
-.co8n9t8r8i8b9u8t8e.
-.con5t
-.contr4ib
-.co8n9t8r8i8b9u8t8e8s.
-.co8n9t8r8i8b9u8t8e8d.
-.contribu2t1ed
-.co9r8e9l8a9t8i8o8n.
-.core1la
-.corela1t2io
-.corelatio2n
-.co9r8e9l8a9t8i8o8n8s.
-.corelatio2n3s2
-.co9r8e9l8i9g8i8o8n9i8s8t.
-.core1l2i
-.corel2ig
-.corel4igi
-.coreli5g2io
-.coreligion3i
-.coreligio2n
-.coreligion1is
-.co9r8e9l8i9g8i8o8n9i8s8t8s.
-.coreligionis4t1s2
-.co9r8e9o8p9s8i8s.
-.core1o
-.coreo2p1s2
-.coreop1sis
-.co9r8e9s8p8o8n9d8e8n8t.
-.core1sp
-.cores4po2n
-.coresp2ond
-.corespon1de
-.corespon1den
-.coresponden1t
-.co9r8e9s8p8o8n9d8e8n8t8s.
-.coresponden4t4s2
-.co9s8e9c8a8n8t.
-.cos4e
-.cose1ca
-.coseca2n
-.cosecan1t
-.co9t8a8n9g8e8n8t.
-.co4ta2n
-.co1ta
-.cot2ang
-.cotan1gen
-.cotangen1t
-.co8u8r9s8e8s.
-.cou2
-.cou4rs2
-.cour2se
-.cours3e4s
-.co9w8o8r8k9e8r.
-.co4wo2
-.cowork1er
-.co9w8o8r8k9e8r8s.
-.coworke4r1s2
-.cr8a8n8k9c8a8s8e.
-.cra2n
-.cra4nk2
-.crank1ca
-.cr8a8n8k9s8h8a8f8t.
-.cran4k1s2
-.cranks2h
-.cranksha2f
-.cranksha2ft
-.cr8o8c9o9d8i8l8e.
-.cr2oc
-.cro4cod
-.cro1co
-.cr8o8c9o9d8i8l8e8s.
-.crocodiles2
-.cr8o8s8s9h8a8t8c8h.
-.cro2s4s
-.cross2h
-.crossha4tc
-.crosshat4ch
-.cr8o8s8s9h8a8t8c8h8e8d.
-.crosshatche2
-.crosshat4ch4ed
-.cr8o8s8s9o8v8e8r.
-.cros1so
-.cros4sov
-.cr8y8p9t8o9g8r8a8m.
-.cry2p1t
-.cryp1to
-.crypto2gr
-.cr8y8p9t8o9g8r8a8m8s.
-.cryptogra4m1s2
-.cu8f8f9l8i8n8k.
-.c4uf
-.cu4f1f
-.cuff4l2
-.cufflin4
-.cuffl4i4nk2
-.cu8f8f9l8i8n8k8s.
-.cufflin4k1s2
-.cu9n8e8i9f8o8r8m.
-.3cun
-.cu2ne
-.cunei2
-.cunei1fo
-.cuneifo2r
-.cuneifor1m
-.cu8s9t8o8m9i8z9a9b8l8e.
-.1c2us
-.cus1to
-.custom2iz
-.customiza1
-.customiz5a2b
-.customizab2l2
-.cu8s9t8o8m9i8z8e.
-.customi2ze
-.cu8s9t8o8m9i8z8e8s.
-.cu8s9t8o8m9i8z8e8d.
-.da8c8h8s9h8u8n8d.
-.1d2a
-.da2ch4
-.dac4h1s2
-.dach4s2h
-.da8m9s8e8l9f8l8y.
-.da2m2
-.da4m1s2
-.dam5se2l2f
-.damself4l2
-.damself2ly5
-.da8m9s8e8l9f8l8i8e8s.
-.damselfl2ie4
-.da8c8t8y8l9o9g8r8a8m.
-.da2c1t
-.dac1ty
-.dac2tyl
-.dacty3lo
-.dactylo1gr
-.da8c8t8y8l9o9g8r8a8p8h.
-.da8t8a9b8a8s8e.
-.3dat
-.da2ta
-.da2tab
-.da8t8a9b8a8s8e8s.
-.databas1e4s
-.da8t8a9p8a8t8h.
-.dat5ap
-.datap5at
-.data1pa
-.datap4ath
-.da8t8a9p8a8t8h8s.
-.datapa2t4h1s2
-.da8t8e9s8t8a8m8p.
-.dat3est
-.dates1ta
-.datesta4m1p
-.da8t8e9s8t8a8m8p8s.
-.datestam2p1s2
-.de9c8l8a8r9a8b8l8e.
-.de4cl2a2r
-.decla2rab
-.declarab2l2
-.de9f8i8n9i9t8i8v8e.
-.de1f
-.de1fi
-.de2fin
-.def2ini
-.defin2it
-.defini1ti
-.defini1t2iv
-.de9l8e8c9t8a9b8l8e.
-.d5elec
-.dele2c1t
-.delec2ta4b
-.delec1ta
-.delectab2l2
-.de8m8i9s8e8m8i9q8u8a9v8e8r.
-.de4m2is
-.dem4ise
-.demisemi3qua
-.demisemiqu2
-.demisemiqua5v4
-.de8m8i9s8e8m8i9q8u8a9v8e8r8s.
-.demisemiquave4r1s2
-.de9m8o8c9r8a9t8i8s8m.
-.de4mocr
-.democrati2s4m
-.de8m8o8s.
-.demos2
-.de9r8i8v9a9t8i8v8e.
-.der2i4v
-.de4ri1va
-.deri3vat
-.der2iva1t2iv
-.de9r8i8v9a9t8i8v8e8s.
-.derivativ4e2s
-.di8a9l8e8c9t8i8c.
-.1d4i3a
-.di2al
-.di2ale
-.diale2c1t
-.di8a9l8e8c9t8i8c8s.
-.dialecti4c3s2
-.di8a9l8e8c9t8i9c8i8a8n.
-.dialect2i1ci
-.d2i1alecti3c2i1a
-.dialectici2a2n
-.di8a9l8e8c9t8i9c8i8a8n8s.
-.dialecticia2n1s2
-.di9c8h8l8o8r8o9m8e8t8h9a8n8e.
-.d4i2ch
-.dic4h1l4
-.dich2lo
-.dichloro2me
-.dichloro4met
-.dichlorometha2n4
-.di8f9f8r8a8c8t.
-.d1if
-.dif4fr
-.di4f1f
-.diffra2c1t
-.di8f9f8r8a8c8t8s.
-.diffrac4t1s2
-.di8f9f8r8a8c9t8i8o8n.
-.diffrac1t2io
-.diffractio2n
-.di8f9f8r8a8c9t8i8o8n8s.
-.diffractio2n3s2
-.di8r8e8r.
-.d4ir2
-.di1re
-.dir1er4
-.di8r8e9n8e8s8s.
-.dire1nes
-.diren2e2ss
-.di8s9p8a8r9a8n8d.
-.dis1
-.dis1p
-.di2s1pa
-.disp2a2r
-.dispara2n
-.dispar4and
-.di8s9p8a8r9a8n8d8s.
-.disparan2d1s2
-.di8s9t8r8a8u8g8h8t9l8y.
-.d4is3t
-.dist4r
-.dis1tra
-.distraugh3
-.distraugh2tl
-.distraught1ly
-.di8s9t8r8i8b9u8t8e.
-.distr4ib
-.di8s9t8r8i8b9u8t8e8s.
-.di8s9t8r8i8b9u8t8e8d.
-.distribu2t1ed
-.do8u9b8l8e9s8p8a8c8e.
-.dou2
-.dou3b2l2
-.dou5ble1sp
-.doubles2
-.double2s1pa
-.doublespa4ce
-.do8u9b8l8e9s8p8a8c9i8n8g.
-.doublesp4a2ci
-.doublespa2c1in
-.doublespac1ing
-.do8l8l9i8s8h.
-.dol1l
-.doll2i
-.dollis2h
-.dr8i8f8t9a8g8e.
-.1dr
-.dr4i2ft
-.drif1ta
-.dr8i8v9e8r8s.
-.dr2iv
-.drive4r1s2
-.dr8o8m9e9d8a8r8y.
-.dro2me
-.dro2med
-.drom2e2d2a
-.drome4dary
-.dromed2a2r
-.dr8o8m9e9d8a8r8i8e8s.
-.dromedar1i
-.dromedar2ie4
-.du9o8p9o9l8i8s8t.
-.duopol2i
-.du9o8p9o9l8i8s8t8s.
-.duopolis4t1s2
-.du9o8p9o8l8y.
-.duopo2ly
-.dy8s9l8e8x8i8a.
-.d2y
-.dys1l2
-.dys2le
-.dyslex3i
-.dyslex2i5a
-.dy8s9l8e8c9t8i8c.
-.dysle2c1t
-.ea8s8t9e8n8d9e8r8s.
-.east3
-.eas3ten
-.eas3tend
-.easten1de
-.eastende4r5s2
-.ec8o9n8o8m9i8c8s.
-.e1co
-.eco2n
-.eco3nomic
-.economi4c3s2
-.ec8o8n9o9m8i8s8t.
-.econom2is
-.ec8o8n9o9m8i8s8t8s.
-.economis4t1s2
-.ei9g8e8n9c8l8a8s8s.
-.ei2
-.e2ig2
-.ei1gen
-.eigen1c4l4
-.eigencla2ss
-.ei9g8e8n9c8l8a8s8s8e8s.
-.eigenclass1e4s
-.ei9g8e8n9v8a8l9u8e.
-.eigen1v2
-.eigen1va
-.eigenval1u
-.ei9g8e8n9v8a8l9u8e8s.
-.el8e8c8t8r8o9m8e8c8h8a8n9i9c8a8l.
-.5elec
-.ele2c1t
-.electro2me
-.electrome2ch
-.electrome5cha4n1ic
-.electromecha2n
-.electromechani1ca
-.el8e8c8t8r8o9m8e8c8h8a8n8o9a8c8o8u8s8t8i8c.
-.electromechano4
-.electromechan4oa
-.electromechanoa1co
-.electromechanoacou2
-.electromechanoaco2us
-.electromechanoacoust2i
-.electromechanoacous1tic
-.el8i8t9i8s8t.
-.el2i
-.el1it
-.eli1ti
-.el4itis
-.el8i8t9i8s8t8s.
-.elitis4t1s2
-.en9t8r8e9p8r8e9n8e8u8r.
-.en1t
-.entrepr2
-.entrepren4eu
-.en9t8r8e9p8r8e9n8e8u8r9i8a8l.
-.entrepreneur2i3a
-.entrepreneuri2al
-.ep9i9n8e8p8h9r8i8n8e.
-.epi2n
-.ep2ine
-.epinep4hr4
-.ep2inephr2in4e
-.eq8u8i9v8a8r8i9a8n8t.
-.equ2iv3
-.equi1va
-.equiv2a2r
-.equivar1i
-.equivar3i2a2n
-.equivar2i3a
-.equivar4ian4t
-.eq8u8i9v8a8r8i9a8n8c8e.
-.equivar4ianc
-.et8h9a8n8e.
-.etha2n4
-.et8h9y8l9e8n8e.
-.ev8e8r9s8i9b8l8e.
-.ev1er
-.eve4r1s2
-.ever1si
-.ever4si4b
-.eversi1b2l2
-.ev8e8r8t.
-.ev8e8r8t8s.
-.ever4t1s2
-.ev8e8r8t9e8d.
-.ever2t1ed
-.ev8e8r8t9i8n8g.
-.ever1ti
-.ever2t1in
-.ex9q8u8i8s9i8t8e.
-.exqu2
-.exq2ui2
-.exquis2ite
-.ex9t8r8a9o8r9d8i9n8a8r8y.
-.ex1t2
-.ex1tra
-.extr4ao
-.extraord2i
-.extraord1in4
-.extraor1di1na
-.extraordin2a2r
-.fa8l8l9i8n8g.
-.1fa
-.fal1l
-.fall2i
-.fal2lin4
-.fe8r8m8i9o8n8s.
-.fer1
-.fer3m4
-.fer4m2io
-.fermio2n
-.fermio2n3s2
-.fi9n8i8t8e9l8y.
-.1fi
-.2fin
-.f2ini
-.fin2it
-.fin2ite
-.finite1ly
-.fl8a9g8e8l9l8u8m.
-.f4l2
-.flag5el1l
-.fl8a9g8e8l9l8a.
-.flag4ella
-.fl8a8m9m8a9b8l8e8s.
-.flam1m
-.flam1ma
-.flam2mab
-.flammab2l2
-.flammables2
-.fl8e8d8g9l8i8n8g.
-.fledgl2
-.fl8o8w9c8h8a8r8t.
-.flow2ch
-.flowch2a2r
-.fl8o8w9c8h8a8r8t8s.
-.flowchar4t1s2
-.fl8u8o8r8o9c8a8r9b8o8n.
-.flu3o
-.fluo3r
-.fluor2oc
-.fluoro1ca
-.fluoroc2a2r
-.fluorocar1b
-.fluorocarb4o
-.fluorocarbo2n
-.fo8r9m8i9d8a9b8l8e.
-.for2mi
-.formi1d4a
-.form2id
-.formi2d3a4b
-.formidab2l2
-.fo8r9m8i9d8a9b8l8y.
-.formidab1ly
-.fo8r9s8y8t8h9i8a.
-.fo4rs2
-.fors4y
-.forsyth2i1a
-.fo8r8t8h9r8i8g8h8t.
-.fort4hr4
-.forthr2ig
-.fr8e8e9l8o8a8d8e8r.
-.freel4oa
-.freeloa2d3
-.fr8e8e9l8o8a8d8e8r8s.
-.freeloade4r5s2
-.fr8i8e8n8d9l8i8e8r.
-.fri2
-.fr2ie4
-.friendl2ie4
-.fr8i9v8o8l9i8t8y.
-.fr2iv
-.frivol2i
-.frivol1it
-.frivoli1ty
-.fr8i9v8o8l9i9t8i8e8s.
-.frivoli1ti
-.frivolit2ie4
-.fr8i8v9o9l8o8u8s.
-.frivolou2
-.frivolo2us
-.ga9l8a8c9t8i8c.
-.gala2c1t
-.ga8l9a8x8y.
-.ga8l9a8x9i8e8s.
-.galax3i
-.galax2ie4
-.ga8s9o8m9e9t8e8r.
-.ga1so
-.ga3som
-.gaso2me
-.gaso4met
-.gasome1te
-.ge9o9d8e8s9i8c.
-.geodes2
-.geode1si
-.geode2sic
-.ge9o9d8e8t9i8c.
-.geode1t
-.geodet1ic
-.ge8o9m8e8t9r8i8c.
-.ge3om
-.geo2me
-.geo4met
-.geom4etr
-.geo5met3ric
-.ge8o9m8e8t9r8i8c8s.
-.geome4tri4c3s2
-.ge9o9s8t8r8o8p8h8i8c.
-.geos4
-.geost4r
-.geostr2oph
-.geostroph1ic
-.ge8o9t8h8e8r9m8a8l.
-.ge4ot
-.ge4oth
-.geoth2e
-.geother3m4
-.geother1ma
-.ge9o8t9r8o9p8i8s8m.
-.geotropi2s1m
-.gn8o9m8o8n.
-.g1no
-.gno4mo
-.gno4mo2n
-.gn8o9m8o8n8s.
-.gnomo2n3s2
-.gr8a8n8d9u8n8c8l8e.
-.1gr
-.gra2n2
-.gr4and
-.gran1du
-.grandu4n
-.grandun1c4l4
-.gr8a8n8d9u8n8c8l8e8s.
-.granduncles2
-.gr8i8e8v9a8n8c8e.
-.gr2ie4
-.grie1va
-.grieva2n
-.gr8i8e8v9a8n8c8e8s.
-.gr8i8e8v9o8u8s.
-.grievou2
-.grievo2us
-.gr8i8e8v9o8u8s9l8y.
-.grievous1l2
-.grievous1ly
-.ha8i8r9s8t8y8l8e.
-.hai2
-.ha4ir
-.hai4rs2
-.hairs2ty
-.hairs2tyl
-.ha8i8r9s8t8y8l8e8s.
-.hairstyles2
-.ha8i8r9s8t8y8l9i8s8t.
-.ha8i8r9s8t8y8l9i8s8t8s.
-.hairstylis4t1s2
-.ha8l8f9s8p8a8c8e.
-.ha2lf
-.hal2f3s
-.half2s1pa
-.halfspa4ce
-.ha8l8f9s8p8a8c8e8s.
-.ha8l8f9w8a8y.
-.ha8r9b8i8n9g8e8r.
-.h2a2r
-.har1b
-.harbi2
-.har2bin
-.harb4inge
-.ha8r9b8i8n9g8e8r8s.
-.harbinge4r1s2
-.ha8r9l8e9q8u8i8n.
-.har4le4
-.har1l
-.harle1q
-.harlequ2
-.harleq2ui2
-.harlequi4n
-.ha8r9l8e9q8u8i8n8s.
-.harlequ2i2n1s2
-.ha8t8c8h9e8r8i8e8s.
-.ha4tc
-.hat4ch
-.hatche2
-.hatcher1i
-.hatcher2ie4
-.he8m8i9d8e8m8i9s8e8m8i9q8u8a9v8e8r.
-.hem2id
-.hemid4em
-.hemide4m2is
-.hemidem4ise
-.hemidemisemi3qua
-.hemidemisemiqu2
-.hemidemisemiqua5v4
-.he8m8i9d8e8m8i9s8e8m8i9q8u8a9v8e8r8s.
-.hemidemisemiquave4r1s2
-.he9m8o9g8l8o9b8i8n.
-.hemo4g
-.he1mo
-.hemo4gl2
-.hemo3glo
-.hemoglo1bi
-.hemoglo2bin
-.he9m8o9p8h8i8l9i8a.
-.hem2oph
-.hemoph4il2
-.hemophil1i
-.hemophil3i1a
-.he9m8o9p8h8i8l9i8a8c.
-.he9m8o9p8h8i8l9i8a8c8s.
-.hemophilia4c3s2
-.he8m8o9r8h8e9o8l9o8g8y.
-.hemo2r
-.hemorh4
-.hemorhe3ol
-.hemorheol1o1gy
-.he9p8a8t9i8c.
-.hep5
-.he2pa
-.hepat1ic
-.he8r9m8a8p8h9r8o9d8i8t8e.
-.her3m4
-.her1ma
-.her4map
-.hermap4hr4
-.hermaphrod2ite
-.he8r9m8a8p8h9r8o9d8i8t9i8c.
-.hermaphrod2i1ti
-.hermaphrod4i2tic
-.he9r8o8e8s.
-.hero4e
-.he8x8a9d8e8c9i9m8a8l.
-.hex1a
-.hexa2d
-.hexade1c2i
-.hexade2c3im
-.hexadeci1ma
-.ho9l8o9n8o9m8y.
-.holo2n
-.holon3o3my
-.ho9m8e8o9m8o8r9p8h8i8c.
-.ho2me3
-.homeo1mo
-.homeomo2r
-.homeomor1p
-.homeomorp4h4
-.homeomorph1ic
-.ho9m8e8o9m8o8r9p8h8i8s8m.
-.homeomorphi2s1m
-.ho9m8o9t8h8e8t8i8c.
-.ho1mo
-.hom4oth3
-.homoth2e
-.homo3the4t
-.homothet1ic
-.ho8r8s8e9r8a8d9i8s8h.
-.hor4se
-.ho4rs2
-.horser1a
-.horsera2d
-.horser2adi
-.horseradis1
-.horseradis2h
-.ho8t9b8e8d.
-.ho2t1b
-.hot4be2d
-.ho8t9b8e8d8s.
-.hotbe2d1s2
-.hy9d8r8o9t8h8e8r9m8a8l.
-.hy1d
-.hy1dr
-.hydro4th2e
-.hydr4oth
-.hydrother3m4
-.hydrother1ma
-.hy9p8o9t8h8a8l9a9m8u8s.
-.hy3po
-.hyp4ot
-.hyp4oth
-.hypotha3la
-.hypothala3m
-.hypothala1mu
-.hypothalam2us
-.id8e8a8l8s.
-.ide3a4l
-.idea2l1s2
-.id8e8o9g8r8a8p8h8s.
-.ideo2g
-.ideo1gr
-.ideogra4p4h1s2
-.id8i8o9s8y8n9c8r8a8s8y.
-.i2di
-.i1d3io
-.idi4os
-.idios4y
-.idiosyn1cr
-.idiosyncr2as
-.idiosyncras4y
-.id8i8o9s8y8n9c8r8a9s8i8e8s.
-.idiosyncras2ie4
-.id8i8o9s8y8n9c8r8a8t8i8c.
-.idiosyn5crat1ic
-.id8i8o9s8y8n9c8r8a8t9i9c8a8l9l8y.
-.idiosyncrati1ca
-.idiosyncratical1l
-.idiosyncratical1ly
-.ig9n8i8t9e8r.
-.2ig
-.ig1ni
-.ign2it
-.ign2ite
-.ig9n8i8t9e8r8s.
-.ignite4r1s2
-.ig9n8i9t8o8r.
-.ign3itor
-.igni1to
-.ig8n8o8r8e9s8p8a8c8e8s.
-.ig1no
-.ignore1sp
-.ignore2s1pa
-.ignorespa4ce
-.im9p8e8d9a8n8c8e.
-.im2p2ed
-.imp2e2d2a
-.impeda2n
-.im9p8e8d9a8n8c8e8s.
-.in9d8u9b8i9t8a9b8l8e.
-.4ind
-.in1du
-.indu1b4i
-.indubi2t
-.indubi1ta
-.indubi2tab
-.indubitab2l2
-.in9f8i8n9i8t8e9l8y.
-.in3f
-.in1fi
-.in2fin
-.inf2ini
-.infin2it
-.infin2ite
-.infinite1ly
-.in9f8i8n9i9t8e8s9i9m8a8l.
-.infinit4es
-.infinite1si
-.infinite2s5im
-.infinitesi1ma
-.in9f8r8a9s8t8r8u8c9t8u8r8e.
-.infr2as
-.infras1t4r
-.infrastru2c1t
-.infrastructu4r
-.infrastruc1tu
-.infrastruc3ture
-.in9f8r8a9s8t8r8u8c9t8u8r8e8s.
-.in9s8t8a8l8l9e8r.
-.ins2ta2l
-.ins1ta
-.instal1l
-.instal2le
-.in9s8t8a8l8l9e8r8s.
-.installe4r1s2
-.in9t8e8r9d8i8s9c8i9p8l8i9n8a8r8y.
-.in1t
-.in5ter3d
-.interd2i
-.interdis1
-.interd2is1c
-.interdis1ci
-.interdisc2ip
-.interdisci1p2l2
-.interdiscipli4n
-.interdiscipl4i1na
-.interdisciplin2a2r
-.in9t8e8r9g8a9l8a8c9t8i8c.
-.interg2
-.inter1ga
-.intergala2c1t
-.in9u8t8i8l8e.
-.in1u
-.in4u1t2i
-.in9u8t8i8l9i9t8y.
-.inutil1i
-.inut2il1it
-.inutili1ty
-.ir9r8e9d8u8c9i8b8l8e.
-.ir2r2ed
-.irre1du
-.irredu2c
-.irreduci4b
-.irredu1ci
-.irreduci1b2l2
-.ir9r8e9d8u8c9i8b8l8y.
-.irreducib1ly
-.ir9r8e8v9o9c8a9b8l8e.
-.irrev2
-.irre5voc
-.irrevo1ca
-.irrevoca1b2l2
-.is8o8t9r8o8p8y.
-.i2so
-.isotropy5
-.is8o9t8r8o8p9i8c.
-.isotrop3ic
-.it8i8n9e8r9a8r8y.
-.i1ti
-.i2t1in
-.it2ine
-.itin4er4a2r
-.itin1er
-.itiner1a
-.it8i8n9e8r9a8r9i8e8s.
-.itinerar1i
-.itinerar2ie4
-.je9r8e9m8i9a8d8s.
-.1je
-.jerem2i3a
-.jeremia2d
-.jeremia2d1s2
-.ke8y9n8o8t8e.
-.ke8y9n8o8t8e8s.
-.keyno4tes
-.ke8y9s8t8r8o8k8e.
-.keys4
-.keys1t
-.keyst4r
-.keystr2ok2
-.ke8y9s8t8r8o8k8e8s.
-.keystrokes4
-.ki8l8n9i8n8g.
-.k1i
-.k4i2l1n2
-.kiln1in
-.kilnin4g
-.la8c9i9e8s8t.
-.l4a2ci4
-.la3c2ie4
-.laci1est
-.la8m9e8n9t8a9b8l8e.
-.la1men
-.la3men1t
-.lamen2ta4b
-.lamen1ta
-.lamentab2l2
-.la8n8d9s8c8a8p9e8r.
-.3l4and
-.la2n
-.lan2d1s2
-.landsca4p
-.lands1ca
-.landsca5per
-.la8n8d9s8c8a8p9e8r8s.
-.landscape4r1s2
-.la8r9c8e9n8y.
-.l2a2r
-.lar1c
-.lar2ce
-.lar1cen4
-.la8r9c8e9n9i8s8t.
-.lar4ceni
-.le8a8f9h8o8p9p8e8r.
-.le2a
-.lea2f
-.lea4fh
-.leafho4p1p
-.leafhop2pe
-.leafhop3per
-.le8a8f9h8o8p9p8e8r8s.
-.leafhoppe4r1s2
-.le8t9t8e8r9s8p8a8c9i8n8g.
-.le4t3t2
-.lette4r1s2
-.letter1sp
-.letter2s1pa
-.lettersp4a2ci
-.letterspa2c1in
-.letterspac1ing
-.li8f8e9s8p8a8n.
-.life1sp
-.life2s1pa
-.lifespa4n
-.li8f8e9s8p8a8n8s.
-.lifespa2n1s2
-.li8f8e9s8t8y8l8e.
-.lifes2ty
-.lifes2tyl
-.li8f8e9s8t8y8l8e8s.
-.lifestyles2
-.li8g8h8t9w8e8i8g8h8t.
-.3ligh
-.lightw4
-.lightwei2
-.l2ightwe2ig2
-.li8m9o8u9s8i8n8e8s.
-.li4mo
-.li3mo2us
-.limou2
-.limou2s1in
-.limous2ine
-.limousi1nes
-.li8n8e9b8a8c8k8e8r.
-.1l4ine
-.lin2e2b
-.lineback1
-.lineback1er
-.li8n8e9s8p8a8c8i8n8g.
-.li1nes
-.li4ne1sp
-.line2s1pa
-.linesp4a2ci
-.linespa2c1in
-.linespac1ing
-.li9o8n9e8s8s.
-.lio2n
-.lio1nes
-.lion2e2ss
-.li8t8h9o9g8r8a8p8h8e8d.
-.l2ith
-.litho4g
-.litho1gr
-.lithograph4ed
-.li8t8h9o9g8r8a8p8h8s.
-.lithogra4p4h1s2
-.lo9b8o8t9o8m8y.
-.lobo4to
-.loboto3my
-.lo9b8o8t9o8m9i8z8e.
-.lobotom2iz
-.lobotomi2ze
-.lo8g8e8s.
-.lo1ge
-.lo8n8g9e8s8t.
-.5long
-.lo2n
-.lo9q8u8a8c9i8t8y.
-.lo1q
-.loqu2
-.loquac4
-.loqu4a2ci
-.loqua2c1it
-.loquaci1ty
-.lo8v8e9s8t8r8u8c8k.
-.4lov
-.lov4e2s
-.lov2est4r
-.lovestruc5
-.lovestruck1
-.ma8c8r8o9e8c8o9n8o8m8i8c8s.
-.macro4e
-.macroe1co
-.macroeco2n
-.macroeco3nomic
-.macroeconomi4c3s2
-.ma8l9a9p8r8o8p9i8s8m.
-.malapr2
-.malapropi2s1m
-.ma8l9a9p8r8o8p9i8s8m8s.
-.malaprop4is4m1s2
-.ma8n9s8l8a8u8g8h9t8e8r.
-.ma2n1s2
-.man2s1l2
-.manslaugh3
-.ma8n9u9s8c8r8i8p8t.
-.man2us
-.manusc2
-.manuscri2
-.manuscr2ip
-.manuscri2p1t
-.ma8r9g8i8n9a8l.
-.marg2
-.margi4n
-.margi1na
-.ma8t8h9e9m8a9t8i9c8i8a8n.
-.m4ath3
-.math5em
-.math2e
-.1mathe1ma
-.mathemat1ic
-.mathemat2i1ci
-.mathemati3c2i1a
-.mathematici2a2n
-.ma8t8h9e9m8a9t8i9c8i8a8n8s.
-.mathematicia2n1s2
-.ma8t8t8e8s.
-.mat5te
-.ma4t3t2
-.mat4tes
-.me8d9i8c9a8i8d.
-.2med
-.m4edi
-.med3i1ca
-.medicai2
-.medica2id
-.me8d8i9o8c8r8e.
-.me1d2io
-.mediocre3
-.me8d8i9o8c9r8i9t8i8e8s.
-.medi5ocrit
-.mediocri2
-.medio5cri1ti
-.mediocrit2ie4
-.me8g8a9l8i8t8h.
-.me2g
-.m4egal
-.me1ga
-.me3gal1i
-.megal1it
-.megal2ith
-.me8g8a9l8i8t8h8s.
-.megali2t4h1s2
-.me8t8a9b8o8l9i8c.
-.me4ta
-.me2ta4b
-.metabol3ic
-.metabol2i
-.me9t8a8b9o9l8i8s8m.
-.metaboli2s1m
-.me9t8a8b9o9l8i8s8m8s.
-.metabol4is4m1s2
-.me9t8a8b9o9l8i8t8e.
-.metabo5l2ite
-.metabol1it
-.me9t8a8b9o9l8i8t8e8s.
-.metabolit4es
-.me8t8a9l8a8n9g8u8a8g8e.
-.met3a2l
-.meta5la
-.metala2n
-.metal2ang
-.metalan1gu
-.metalangu4a
-.me8t8a9l8a8n9g8u8a8g8e8s.
-.me8t8a9p8h8o8r9i8c.
-.metapho4r
-.me8t8h9a8n8e.
-.metha2n4
-.me9t8r8o8p9o9l8i8s.
-.m4etr
-.metropol2i
-.me9t8r8o8p9o9l8i8s8e8s.
-.metropol4ise
-.metropolis1e4s
-.me8t9r8o9p8o8l9i9t8a8n.
-.metropol1it
-.metropoli3ta2n
-.metropoli1ta
-.me8t9r8o9p8o8l9i9t8a8n8s.
-.metropolita2n1s2
-.mi8c8r8o9e8c8o9n8o8m8i8c8s.
-.m4i1cr
-.micro4e
-.microe1co
-.microeco2n
-.microeco3nomic
-.microeconomi4c3s2
-.mi9c8r8o9f8i8c8h8e.
-.micro2fi
-.microf4i2ch
-.microfiche2
-.mi9c8r8o9f8i8c8h8e8s.
-.microfich1es
-.mi8c8r8o9o8r8g8a8n9i8s8m.
-.microo2
-.microorg2
-.microor1ga
-.microorgan5is
-.microorga2n
-.microorgani2s1m
-.mi8c8r8o9o8r8g8a8n9i8s8m8s.
-.microorgan4is4m1s2
-.mi8l8l9a8g8e.
-.m4il1l
-.mi8l9l8i9l8i8t8e8r.
-.mill2i
-.mil4l4i4l
-.millil1i
-.mill2il1it
-.millil2ite
-.mi8m8e8o9g8r8a8p8h8e8d.
-.mimeo2g
-.mimeo1gr
-.mimeograph4ed
-.mi8m8e8o9g8r8a8p8h8s.
-.mimeogra4p4h1s2
-.mi8m9i8c9r8i8e8s.
-.mim1i
-.mim4i1cr
-.mimicri2
-.mimicr2ie4
-.mi8n9i8s.
-.m2ini
-.min1is
-.mi8n8i9s8y8m9p8o9s8i8u8m.
-.minis4y
-.minisy4m1p
-.minisym1pos
-.minisympo5si4u
-.mi8n8i9s8y8m9p8o9s8i8a.
-.minisympos2i1a
-.mi9n8u8t9e8r.
-.m4in1u
-.mi9n8u8t9e8s8t.
-.mi8s9c8h8i8e9v8o8u8s9l8y.
-.m2is1c
-.mis3ch2
-.misch2ie4
-.mischievou2
-.mischievo2us
-.mischievous1l2
-.mischievous1ly
-.mi9s8e8r8s.
-.m4ise
-.mis3er
-.mise4r1s2
-.mi9s8o8g9a9m8y.
-.mi2so
-.miso1ga
-.miso2gam
-.mo8d9e8l9l8i8n8g.
-.mo2d1
-.model1l
-.modell2i
-.model2lin4
-.mo8l9e9c8u8l8e.
-.mole1cu
-.mole4cul
-.molecul4e
-.mo8l9e9c8u8l8e8s.
-.molecules2
-.mo8n9a8r8c8h8s.
-.mo1n1a
-.monar3c
-.mon2a2r
-.monar2ch
-.monarc4h1s2
-.mo8n8e8y9l8e8n9d8e8r.
-.moneylen1de
-.mo8n8e8y9l8e8n9d8e8r8s.
-.moneylende4r5s2
-.mo8n8o9c8h8r8o8m8e.
-.mono2ch4
-.monoc4hr4
-.monochro2me
-.mo8n8o9e8n9e8r9g8e8t8i8c.
-.mo3noe
-.monoen1er
-.monoenerg2
-.monoener3get
-.monoenerget1ic
-.mo8n9o8i8d.
-.monoi2
-.mono2id
-.mo8n8o9p8o8l8e.
-.mo4nop
-.mo8n8o9p8o8l8e8s.
-.monopoles2
-.mo9n8o8p9o8l8y.
-.monopo2ly
-.mo8n8o9s8p8l8i8n8e.
-.monos1p2l2
-.monospli4n
-.monosp1l4ine
-.mo8n8o9s8p8l8i8n8e8s.
-.monospli1nes
-.mo8n8o9s8t8r8o8f8i8c.
-.monos5t
-.monost4r
-.monostro2fi
-.mo9n8o8t9o9n8i8e8s.
-.mono1to
-.mo2noto2n
-.monoton2ie4
-.mo9n8o8t9o9n8o8u8s.
-.mono4tono
-.monoto1nou2
-.monotono2us
-.mo9r8o8n9i8s8m.
-.moro5n4is
-.moro2n
-.moroni2s1m
-.mo8s9q8u8i9t8o.
-.mos2
-.mosqu2
-.mosq2ui2
-.mosqui1to
-.mo8s9q8u8i9t8o8s.
-.mosquitos2
-.mo8s9q8u8i9t8o8e8s.
-.mu8d9r8o8o8m.
-.mu1dr
-.mud1room
-.mudroo2
-.mu8d9r8o8o8m8s.
-.mudroo4m1s2
-.mu8l9t8i9f8a8c9e8t8e8d.
-.5mu4lt
-.mul1ti3
-.multif2
-.multi1fa
-.multifa4ce
-.multifacet4
-.multiface2t1ed
-.mu8l9t8i9p8l8i8c9a8b8l8e.
-.mult2ip
-.multi1p2l2
-.multipli1ca
-.multiplica1b2l2
-.mu8l8t8i9u8s8e8r.
-.multi4u
-.multi2us
-.ne8o9f8i8e8l8d8s.
-.3neo
-.ne5of
-.neo2fi
-.neof2ie4
-.neofie2ld3
-.neofiel2d1s2
-.ne8o9n8a8z8i.
-.neo2n
-.neo1n1a
-.neona2z1i
-.ne8o9n8a8z8i8s.
-.neonaz4is
-.ne8p8h9e8w8s.
-.nephe4
-.ne8p8h9r8i8t8e.
-.nep4hr4
-.nephr2ite
-.ne8p8h9r8i8t8i8c.
-.nephr4i2t3ic
-.nephri1ti
-.ne8w9e8s8t.
-.ne4w
-.newest3
-.ne8w8s9l8e8t9t8e8r.
-.news4l2
-.news2le
-.newsle4t3t2
-.ne8w8s9l8e8t9t8e8r8s.
-.newslette4r1s2
-.ni8t8r8o9m8e8t8h9a8n8e.
-.n2it
-.ni3tr
-.nitro2me
-.nitro4met
-.nitrometha2n4
-.no9n8a8m8e.
-.no4n
-.no1n1a
-.no8n9a8r9i8t8h9m8e8t9i8c.
-.nonar3i
-.non2a2r
-.nonar2ith
-.nonarit4h1m
-.nonarithmet4
-.nonarithmet1ic
-.no8n9e8m8e8r9g8e8n8c8y.
-.none1me
-.nonemerg2
-.nonemer1gen
-.nonemergen1cy
-.no8n9e8q8u8i9v8a8r8i9a8n8c8e.
-.none2q
-.nonequ2
-.noneq2ui2
-.nonequ2iv3
-.nonequi1va
-.nonequiv2a2r
-.nonequivar1i
-.nonequivar3i2a2n
-.nonequivar2i3a
-.nonequivar4ianc
-.no8n8e9t8h8e9l8e8s8s.
-.noneth2e
-.nonethe1les2
-.nonethe3l2e2ss
-.no8n9e8u8c8l8i8d9e8a8n.
-.non4eu
-.noneu1c4l4
-.noneucl2id
-.noneuclidea2n
-.no8n9i8s8o9m8o8r9p8h8i8c.
-.non5i
-.non1is
-.noni2so
-.noni3som
-.noniso1mo
-.nonisomo2r
-.nonisomor1p
-.nonisomorp4h4
-.nonisomorph1ic
-.no8n9p8s8e8u8d8o9c8o8m9p8a8c8t.
-.non1p4
-.non2p1s2
-.nonp2se
-.nonps4eu
-.nonpseu1do
-.nonpseudo1co
-.nonpseudoco4m1p
-.nonpseudocom1pa
-.nonpseudocompa2c4t
-.no8n9s8m8o8o8t8h.
-.no2n3s2
-.non2s3m
-.nons1mo
-.nonsmoo2
-.nonsmo4oth
-.no8n9u8n8i9f8o8r8m.
-.no3nu4n
-.nonu1ni
-.nonuni1fo
-.nonunifo2r
-.nonunifor1m
-.no8n9u8n8i9f8o8r8m9l8y.
-.nonunifor4m1l
-.nonuniform1ly
-.no8r9e8p9i9n8e8p8h9r8i8n8e.
-.nore5pi2n
-.norep2ine
-.norepinep4hr4
-.norep2inephr2in4e
-.no8t9w8i8t8h9s8t8a8n8d9i8n8g.
-.notw4
-.notwi2
-.notw2ith3
-.notwi2t4h1s2
-.notwith5st4and
-.notwiths1ta
-.notwithsta2n
-.notwithstand1in
-.nu9c8l8e8o9t8i8d8e.
-.nucle3
-.nu1c4l4
-.nucle4ot
-.nucleot2id
-.nu9c8l8e8o9t8i8d8e8s.
-.nucleotide4s2
-.nu8t9c8r8a8c8k9e8r.
-.nu4tc
-.nutcrack1
-.nutcrack1er
-.nu8t9c8r8a8c8k9e8r8s.
-.nutcracke4r1s2
-.oe8r9s8t8e8d8s.
-.o3er
-.oe4r1s2
-.oers4t1ed
-.oerste2d1s2
-.of8f9l8i8n8e.
-.o4f1f
-.off4l2
-.offlin4
-.off1l4ine
-.of8f9l8o8a8d.
-.offl4oa
-.offloa2d3
-.of8f9l8o8a8d8s.
-.offloa2d1s2
-.of8f9l8o8a8d8e8d.
-.offloa2d1ed
-.ol8i9g8o8p9o9l8i8s8t.
-.ol2i
-.ol2ig
-.oli2go
-.ol2igopol2i
-.ol8i9g8o8p9o9l8i8s8t8s.
-.oligopolis4t1s2
-.ol8i9g8o8p9o8l8y.
-.oligopo2ly
-.ol8i9g8o8p9o8l9i8e8s.
-.oligopol2ie4
-.op9e8r9a8n8d.
-.op1er
-.3oper1a
-.op4er4and
-.opera2n
-.op9e8r9a8n8d8s.
-.operan2d1s2
-.or8a8n8g9u8t8a8n.
-.ora2n
-.or2ang
-.oran1gu
-.oran4gu4t
-.orangu1ta
-.ora2nguta2n
-.or8a8n8g9u8t8a8n8s.
-.oranguta2n1s2
-.or9t8h8o9d8o8n9t8i8s8t.
-.ortho2do4
-.orthodo2n
-.orthodon3t4i
-.orthodon1t
-.or9t8h8o9d8o8n9t8i8s8t8s.
-.orthodontis4t1s2
-.or9t8h8o9k8e8r9a9t8o8l9o8g8y.
-.orth2ok
-.orthok1er
-.orthoker1a
-.orthokera1to
-.orthokeratol1o1gy
-.or8t8h8o9n8i8t8r8o9t8o8l8u8e8n8e.
-.ortho2n
-.orthon2it
-.orthoni3tr
-.orthonitro1to
-.orthonitrotolu3en
-.orthonitrotolu4ene
-.ov8e8r9v8i8e8w.
-.overv2ie4
-.ov8e8r9v8i8e8w8s.
-.ox9i8d9i8c.
-.ox3i
-.oxi5di
-.ox2id
-.pa8d9d8i8n8g.
-.1pa
-.p4a2d
-.pad4d1in
-.pad1d4
-.pa8i8n9l8e8s8s9l8y.
-.p4ai2
-.pa4i4n4
-.pa4i4n1l
-.painles2
-.pain3l2e2ss
-.painles4s1l2
-.painless1ly
-.pa8l9e8t8t8e.
-.p4al
-.p2ale
-.pale4t3t2
-.pa8l9e8t8t8e8s.
-.palet4tes
-.pa8r9a9b8o8l8a.
-.p2a2r
-.pa2rab
-.parabo1la
-.pa8r9a9b8o8l9i8c.
-.parabol3ic
-.parabol2i
-.pa9r8a8b9o9l8o8i8d.
-.paraboloi2
-.parabolo2id
-.pa8r9a9d8i8g8m.
-.para2d
-.par2adi
-.parad2ig
-.paradig1m
-.pa8r9a9d8i8g8m8s.
-.paradig4m1s2
-.pa8r8a9c8h8u8t8e.
-.para2ch
-.parachu4t
-.pa8r8a9c8h8u8t8e8s.
-.pa8r8a9d8i9m8e8t8h8y8l9b8e8n8z8e8n8e.
-.parad4imet
-.paradimethy2l1b
-.paradimethylb4e4n3z
-.paradimethylben2ze
-.paradimethylbenze4n
-.pa8r8a9f8l8u8o8r8o9t8o8l8u8e8n8e.
-.para2f
-.paraf4l2
-.paraflu3o
-.parafluo3r
-.parafluoro1to
-.parafluorotolu3en
-.parafluorotolu4ene
-.pa8r8a9g8r8a8p8h9e8r.
-.para1gr
-.parag5ra3ph4er
-.pa8r8a9l8e9g8a8l.
-.par3al
-.par2ale
-.paral4egal
-.parale1ga
-.pa8r9a8l9l8e8l9i8s8m.
-.paral1l
-.paral2le
-.paral3lel
-.parallel2i
-.paralle2lis
-.paralleli2s1m
-.pa8r8a9m8a8g9n8e8t9i8s8m.
-.par4a1ma
-.param3ag
-.para5mag1n
-.paramagneti2s4m
-.pa8r8a9m8e8d8i8c.
-.para2med
-.param4edi
-.pa8r8a9m8e8t8h8y8l9a8n8i8s8o8l8e.
-.param3et
-.paramethy3la
-.paramethyla2n
-.paramethylani2so
-.pa9r8a8m9e9t8r8i8z8e.
-.param4etr
-.parametri2ze
-.pa8r8a9m8i8l9i9t8a8r8y.
-.par2ami
-.paramil1i
-.param2il1it
-.paramili1ta
-.paramilit2a2r
-.pa8r8a9m8o8u8n8t.
-.para2mo
-.paramou2
-.paramoun1t
-.pa8t8h9o9g8e8n9i8c.
-.p4ath
-.pat4ho
-.patho4g
-.patho1ge4
-.patho1gen
-.pe8e8v9i8s8h.
-.p4ee
-.pee1vi
-.peevis2h
-.pe8e8v9i8s8h9n8e8s8s.
-.peevis2h1n
-.peevish1nes
-.peevishn2e2ss
-.pe8n9t8a9g8o8n.
-.pen1t
-.pen1ta
-.penta2go
-.pentago2n2
-.pe8n9t8a9g8o8n8s.
-.pentago2n3s2
-.pe9t8r8o9l8e9u8m.
-.petrol4eu
-.ph8e9n8o8m9e9n8o8n.
-.ph4e3no
-.phe2n
-.pheno2me
-.pheno1men
-.phenom4eno
-.phenomeno4n
-.ph8e8n8y8l9a8l8a9n8i8n8e.
-.pheny3la
-.phenylala2n
-.phenylala5n2ine
-.phenylalan1in
-.ph8i9l8a8t9e9l8i8s8t.
-.phi4latel2i4
-.philate2lis
-.ph8i9l8a8t9e9l8i8s8t8s.
-.philatelis4t1s2
-.ph8o9n8e8m8e.
-.3phone
-.pho2n
-.phone1me
-.ph8o9n8e8m8e8s.
-.phone2mes
-.ph8o9n8e9m8i8c.
-.phone5mi
-.ph8o8s9p8h8o8r9i8c.
-.phos1p
-.phospho5
-.phospho4r
-.ph8o9t8o9g8r8a8p8h8s.
-.pho1to
-.photo2gr
-.photogra4p4h1s2
-.ph8o9t8o9o8f8f9s8e8t.
-.photoo2
-.photoo4f1f
-.photoof2f3s
-.pi8c9a9d8o8r.
-.pi1ca
-.pica2d
-.pica1do
-.picad4or
-.pi8c9a9d8o8r8s.
-.picado4rs2
-.pi8p8e9l8i8n8e.
-.p2ip
-.pipe4
-.pipel2i
-.pipe1l4ine
-.pi8p8e9l8i8n8e8s.
-.pipeli1nes
-.pi8p8e9l8i8n9i8n8g.
-.pipel2in3i
-.pipelin1in
-.pipelinin4g
-.pi9r8a9n8h8a8s.
-.p4ir
-.pi1ra
-.pira2n
-.pira4n1h4
-.piranha4
-.pl8a8c8a9b8l8e.
-.1p2l2
-.pla1ca
-.placa1b2l2
-.pl8a8n8t9h8o8p9p8e8r.
-.3pla2n
-.plan1t
-.plantho4p1p
-.planthop2pe
-.planthop3per
-.pl8a8n8t9h8o8p9p8e8r8s.
-.planthoppe4r1s2
-.pl8e8a8s9a8n8c8e.
-.ple2a
-.pleasa2
-.plea3sanc
-.pleasa2n
-.pl8u8g9i8n.
-.plug5in
-.pl8u8g9i8n8s.
-.plu5g4i2n1s2
-.po8l9t8e8r9g8e8i8s8t.
-.po4l2t
-.pol1te
-.polterg2
-.poltergei2
-.po8l8y9e8n8e.
-.po2ly
-.po8l8y9e8t8h9y8l9e8n8e.
-.polye4t
-.po9l8y8g9a9m8i8s8t.
-.poly1ga
-.poly2gam
-.polygam2is
-.po9l8y8g9a9m8i8s8t8s.
-.polygamis4t1s2
-.po8l8y8g9o8n9i9z8a9t8i8o8n.
-.poly1go
-.polygo2n2
-.polygo3ni
-.polygoniza1
-.polygoniza1t2io
-.polygonizatio2n
-.po9l8y8p8h9o9n8o8u8s.
-.polypho2n
-.polypho1nou2
-.polyphono2us
-.po8l8y9s8t8y8r8e8n8e.
-.po2lys4
-.polys1t
-.polys2ty
-.po8m8e9g8r8a8n9a8t8e.
-.po2me
-.pome2g
-.pome1gr
-.pomegra2n2
-.pomegra1na
-.pomegran2at
-.po8r8o9e8l8a8s9t8i8c.
-.1p4or
-.poro4e
-.poro4el
-.poroe1la
-.poroelast2i
-.poroelas1tic
-.po8r9o8u8s.
-.porou2
-.poro2us
-.po8r9t8a9b8l8e.
-.por1ta
-.por2tab
-.portab2l2
-.po8s8t9a8m9b8l8e.
-.1pos
-.pos2ta
-.posta4m1b
-.postamb2l2
-.po8s8t9a8m9b8l8e8s.
-.postambles2
-.po8s8t9h8u9m8o8u8s.
-.posthu1mo
-.posthu3mo2us
-.posthumou2
-.po8s8t9s8c8r8i8p8t.
-.pos4t1s2
-.post4sc
-.postscri2
-.postscr2ip
-.postscri2p1t
-.po8s8t9s8c8r8i8p8t8s.
-.postscrip4t1s2
-.po8s9t8u8r9a8l.
-.pos1tu
-.postu1ra
-.pr8e9a8m9b8l8e.
-.prea4m1b
-.preamb2l2
-.pr8e9a8m9b8l8e8s.
-.preambles2
-.pr8e9l8o8a8d8e8d.
-.prel4oa
-.preloa2d3
-.preloa2d1ed
-.pr8e9p8a8r9i8n8g.
-.pre2pa
-.prep4a4r1i
-.prep2a2r
-.preparin4g
-.pr8e9p8r8i8n8t.
-.pr2epr2
-.preprin4t3
-.pr8e9p8r8i8n8t8s.
-.preprin4t4s2
-.pr8e9p8r8o8c8e8s9s8o8r.
-.pre3pro
-.prepr2oc
-.prepro1ce
-.preproc2e2ss
-.preproces1so
-.pr8e9p8r8o8c8e8s9s8o8r8s.
-.preprocesso4rs2
-.pr8e9s8p8l8i8t9t8i8n8g.
-.pre1sp
-.pres1p2l2
-.prespl1it
-.prespl4i4t3t2
-.presplit2t1in
-.pr8e9w8r8a8p.
-.prewra4
-.pr8e9w8r8a8p8p8e8d.
-.prewra4p1p
-.prewrap2pe
-.prewrap4p2ed
-.pr8i8e8s8t9e8s8s8e8s.
-.5pr2i4e4
-.pri1est
-.pries4t2e2ss
-.priestess1e4s
-.pr8e8t9t8y9p8r8i8n9t8e8r.
-.pre4t3t2
-.pret1ty
-.pr2ettypr2
-.prettyprin4t3
-.pr8e8t9t8y9p8r8i8n9t8i8n8g.
-.prettyprint2i
-.prettyprin4t3ing
-.prettyprin2t1in
-.pr8o9c8e9d8u8r9a8l.
-.pr2oc
-.pro1ce
-.proce1du
-.procedu1ra
-.pr8o8c8e8s8s.
-.proc2e2ss
-.pr8o9c8u8r9a8n8c8e.
-.procu1ra
-.procura2n
-.pr8o8g9e9n8i8e8s.
-.pro1ge
-.pro1gen
-.proge5n2ie4
-.pr8o8g9e9n8y.
-.pro4geny
-.pr8o9g8r8a8m9m8a8b8l8e.
-.pro1gr
-.program1m
-.program1ma
-.program2mab
-.programmab2l2
-.pr8o8m9i9n8e8n8t.
-.prom4i
-.prom1in
-.prom2ine
-.promi1nen
-.prominen1t
-.pr8o9m8i8s9c8u9o8u8s.
-.prom2is
-.prom2is1c
-.promis1cu
-.promiscu1ou2
-.promiscuo2us
-.pr8o8m9i8s9s8o8r8y.
-.prom4i2s1s
-.promis1so
-.promisso1ry
-.pr8o8m9i8s8e.
-.prom4ise
-.pr8o8m9i8s8e8s.
-.promis1e4s
-.pr8o9p8e8l9l8e8r.
-.pro3pel
-.propel1l
-.propel2le
-.pr8o9p8e8l9l8e8r8s.
-.propelle4r1s2
-.pr8o9p8e8l9l8i8n8g.
-.propell2i
-.propel2lin4
-.pr8o9h8i8b9i9t8i8v8e.
-.pro1h2
-.prohibi2t
-.prohibi1ti
-.prohibi1t2iv
-.pr8o9h8i8b9i9t8i8v8e9l8y.
-.prohibitiv4e1ly
-.pr8o9s8c8i8u8t9t8o.
-.pros2c
-.pros1ci
-.prosci1u
-.prosciu4t3t2
-.prosciut5to
-.pr8o9t8e8s8t9e8r.
-.pro1t
-.pro4tes
-.pr8o9t8e8s8t9e8r8s.
-.proteste4r1s2
-.pr8o9t8e8s9t8o8r.
-.prot4es2to
-.pr8o9t8e8s9t8o8r8s.
-.protesto4rs2
-.pr8o9t8o9l8a8n9g8u8a8g8e.
-.pro1to
-.proto1la
-.proto4la2n
-.protol2ang
-.protolan1gu
-.protolangu4a
-.pr8o9t8o9t8y8p9a8l.
-.proto1ty
-.prototy1pa
-.prototyp4al
-.pr8o8v9i8n8c8e.
-.prov1in
-.prov2inc
-.pr8o8v9i8n8c8e8s.
-.pr8o9v8i8n9c8i8a8l.
-.provin1ci
-.provin3c2i1a
-.provinci2al
-.pr8o8w9e8s8s.
-.prow2e2ss
-.ps8e8u9d8o9d8i8f9f8e8r9e8n9t8i8a8l.
-.2p1s2
-.p2se
-.ps4eu
-.pseu1do
-.pseudod1if
-.pseudodi4f1f
-.pseudodiffer1
-.pseudodiffer3en1t
-.pseudodifferent2i
-.pseudodifferen1t2i1a
-.pseudodifferenti2al
-.ps8e8u9d8o9f8i9n8i8t8e.
-.pseu2d5of
-.pseudo2fi
-.pseudo2fin
-.pseudof2ini
-.pseudofin2it
-.pseudofin2ite
-.ps8e8u9d8o9f8i9n8i8t8e9l8y.
-.pseudofinite1ly
-.ps8e8u9d8o9f8o8r8c8e8s.
-.pseudo1fo
-.pseudofo2r
-.pseudofor1c
-.pseudofor2ce
-.ps8e8u9d8o8g9r8a9p8h8e8r.
-.pseud4og
-.pseudo1gr
-.pseudog5ra3ph4er
-.ps8e8u9d8o9g8r8o8u8p.
-.pseudo4g4ro
-.pseudogrou2
-.ps8e8u9d8o9g8r8o8u8p8s.
-.pseudogrou2p1s2
-.ps8e8u9d8o9n8y8m.
-.pseu4do2n
-.pseudonym4
-.ps8e8u9d8o9n8y8m8s.
-.pseudony4m1s2
-.ps8e8u9d8o9w8o8r8d.
-.pseudo4wo2
-.ps8e8u9d8o9w8o8r8d8s.
-.pseudowor2d1s2
-.ps8y9c8h8e9d8e8l9i8c.
-.ps4y
-.p4sy1c
-.psy3ch
-.psych4e2
-.psy4ch4ed
-.psychedel2i
-.ps8y8c8h8s.
-.psyc4h1s2
-.pu9b8e8s9c8e8n8c8e.
-.pub3
-.pub4e
-.pu4bes4
-.pubes2c
-.pubes1cen
-.pubes3cenc
-.qu8a8d9d8i8n8g.
-.qu2
-.qua2d
-.quad4d1in
-.quad1d4
-.qu8a9d8r8a8t9i8c.
-.qua1dr
-.quadrat1ic
-.qu8a9d8r8a8t9i8c8s.
-.quadrati4c3s2
-.qu8a8d9r8a9t8u8r8e.
-.quadra2tu
-.quadra3ture
-.qu8a8d9r8i9p8l8e8g9i8c.
-.quadri2p2l2
-.quadr2ip
-.quadripleg4ic
-.qu8a8i8n8t9e8r.
-.quai2
-.qua4i4n
-.quain1t
-.qu8a8i8n8t9e8s8t.
-.qu8a9s8i9e8q8u8i8v9a9l8e8n8c8e.
-.quas2ie4
-.quasie1q
-.qu2asiequ2
-.quasieq2ui2
-.quasiequ2iv3
-.quasiequi1va
-.quasiequiv2ale
-.quasiequiva3lenc
-.qu8a9s8i9e8q8u8i8v9a9l8e8n8c8e8s.
-.qu8a9s8i9e8q8u8i8v9a9l8e8n8t.
-.quasiequiva1len1t
-.qu8a9s8i9h8y9p8o9n8o8r9m8a8l.
-.quasi3h
-.quasihy3po
-.quasihypo2n
-.quasihyponor1m
-.quasihyponor1ma
-.qu8a9s8i9r8a8d9i9c8a8l.
-.quas4i2r
-.quasi1r5a
-.quasira2d
-.quasir2adi
-.quasirad3i1ca
-.qu8a9s8i9r8e8s8i8d9u8a8l.
-.quasi4res
-.quasire1si
-.quasire2s2id
-.quasiresi2du
-.quasiresid1u1a
-.qu8a9s8i9s8m8o8o8t8h.
-.qua1sis
-.quasi2s1m
-.quasis1mo
-.quasismoo2
-.quasismo4oth
-.qu8a9s8i9s8t8a9t8i8o8n9a8r8y.
-.quasis1ta
-.quasistation5a2r
-.quasista1t2io
-.quasistatio2n
-.quasistatio1n1a
-.qu8a9s8i9t8o8p8o8s.
-.qu5a5si4t
-.quasi1to
-.quasito1pos
-.qu8a9s8i9t8r8i9a8n9g8u9l8a8r.
-.quasi5tr2i3a
-.quasitri2a2n
-.quasitri2ang
-.quasitrian1gu
-.quasitriangu1la
-.quasitriangul2a2r
-.qu8a9s8i9t8r8i8v9i8a8l.
-.quasitr2i4v
-.quasitriv3i
-.quasitriv2i1a
-.quasitrivi2al
-.qu8i8n9t8e8s9s8e8n8c8e.
-.q2ui2
-.qui4n
-.quin1t
-.quin4t2e2ss
-.quintes4senc
-.qu8i8n9t8e8s9s8e8n8c8e8s.
-.qu8i8n9t8e8s9s8e8n9t8i8a8l.
-.quintessen1t
-.quintessent2i
-.quintessen1t2i1a
-.quintessenti2al
-.ra8b9b8i8t9r8y.
-.2rab
-.ra2b1b
-.rabbi2t
-.rabbi3tr
-.rabbit5ry
-.ra9d8i9o8g9r8a9p8h8y.
-.ra2d
-.r2adi
-.ra3d2io
-.radio5g
-.radio2gr
-.radio4g3ra1phy
-.ra8f8f9i8s8h.
-.raf5fi
-.ra2f
-.ra4f1f4
-.raf2f5is
-.raffis2h
-.ra8f8f9i8s8h9l8y.
-.raffis4h1l4
-.raffish1ly
-.ra8m9s8h8a8c8k8l8e.
-.ra4m1s2
-.ram4s2h
-.ramshack1
-.ramshack1l
-.ra8v9e8n9o8u8s.
-.rav4e4no
-.rave1nou2
-.raveno2us
-.re9a8r8r8a8n8g8e9m8e8n8t.
-.re5ar1r4
-.re2a2r
-.rearran4ge
-.rearra2n
-.rearr2ang
-.rearrange1me
-.rearrange1men
-.rearrange3men1t
-.re9a8r8r8a8n8g8e9m8e8n8t8s.
-.rearrangemen4t4s2
-.re8c9i9p8r8o8c9i9t8i8e8s.
-.reciproci1ti
-.reciprocit2ie4
-.re8c9t8a8n9g8l8e.
-.rec4ta2n
-.re2c1t
-.rect5ang
-.rec1ta
-.rectan1gl2
-.rectan1gle
-.re8c9t8a8n9g8l8e8s.
-.rectangles2
-.re8c9t8a8n9g8u9l8a8r.
-.rectan1gu
-.rectangu1la
-.rectangul2a2r
-.re9d8i9r8e8c8t.
-.2r2ed
-.r4edi
-.red4ir2
-.redi1re
-.redire2c1t
-.re9d8i9r8e8c8t9i8o8n.
-.redirec1t2io
-.redirectio2n
-.re9d8u8c9i8b8l8e.
-.re1du
-.redu2c
-.reduci4b
-.redu1ci
-.reduci1b2l2
-.re9e8c8h8o.
-.ree2c
-.ree2ch
-.ree3cho2
-.re9p8h8r8a8s8e.
-.rep4hr4
-.rephr2as
-.re9p8h8r8a8s8e8s.
-.rephras1e4s
-.re9p8h8r8a8s8e8d.
-.rephra4s4ed
-.re9p8o9s8i9t8i8o8n.
-.re4posi
-.re1po
-.re1pos
-.repo3s2i1t2io
-.reposi1ti
-.repositio2n
-.re9p8o9s8i9t8i8o8n8s.
-.repositio2n3s2
-.re9p8r8i8n8t.
-.repr2
-.reprin4t3
-.re9p8r8i8n8t8s.
-.reprin4t4s2
-.re9s8t8o8r9a8b8l8e.
-.r4es2to
-.resto2ra
-.resto2rab
-.restorab2l2
-.re8t8r8o9f8i8t.
-.retro2fi
-.re8t8r8o9f8i8t9t8e8d.
-.retrof4i4t4t2
-.retrofit2t1ed
-.re9u8s9a8b8l8e.
-.r4eu2
-.re2us4
-.reusa2
-.reu2s1ab
-.reusab2l2
-.re9u8s8e.
-.re9w8i8r8e.
-.rewi2
-.rew4ir4
-.re9w8r8a8p.
-.rewra4
-.re9w8r8a8p8p8e8d.
-.rewra4p1p
-.rewrap2pe
-.rewrap4p2ed
-.re9w8r8i8t8e.
-.rewri4
-.rewr2ite
-.rh8i9n8o8c9e8r9o8s.
-.rh4
-.rh2i1no
-.rhi4no4c
-.rhino1ce
-.rhinoc2ero
-.ri8g8h8t9e8o8u8s.
-.righ1teo
-.righteou2
-.righteo2us
-.ri8g8h8t9e8o8u8s9n8e8s8s.
-.righteous1n4
-.righteous1nes
-.righteousn2e2ss
-.ri8n8g9l8e8a8d8e8r.
-.rin4g
-.ringl2
-.rin1gle
-.ringle2a
-.ringlea2d1
-.ri8n8g9l8e8a8d8e8r8s.
-.ringleade4r5s2
-.ro9b8o8t.
-.ro9b8o8t8s.
-.robo4t1s2
-.ro9b8o8t8i8c.
-.ro9b8o8t9i8c8s.
-.roboti4c3s2
-.ro8u8n8d9t8a8b8l8e.
-.rou2
-.roun2d
-.round1ta
-.round2tab
-.roundtab2l2
-.ro8u8n8d9t8a8b8l8e8s.
-.roundta5bles2
-.sa8l8e8s9c8l8e8r8k.
-.sa2
-.s2ale
-.sales2
-.sales2c
-.salescle5
-.sales1c4l4
-.sa8l8e8s9c8l8e8r8k8s.
-.salescler4k1s2
-.sa8l8e8s9w8o8m8a8n.
-.sales4w2
-.sale4s1wo2
-.saleswom1
-.saleswo1ma
-.saleswoma2n
-.sa8l8e8s9w8o8m8e8n.
-.saleswo2me
-.saleswo1men
-.sa8l9m8o9n8e8l9l8a.
-.s4a2l4m
-.salmo2n4
-.sal1mo
-.salmon4ella
-.salmonel1l
-.sa8l9t8a9t8i8o8n.
-.sa4l4t
-.sal1ta
-.salta1t2io
-.saltatio2n
-.sa8r9s8a9p8a8r9i8l9l8a.
-.s2a2r
-.sa2r4sa2
-.sa4rs2
-.sars1ap
-.s2a2rsap2a2r4
-.sarsa1pa
-.sarsap4a4r1i
-.sarsaparil1l
-.sa8u8e8r9k8r8a8u8t.
-.sau4
-.sauerkrau4t
-.sc8a8t9o9l8o8g9i9c8a8l.
-.s1ca
-.sca1to
-.scato3log1ic
-.scatologi1ca
-.sc8h8e8d9u8l9i8n8g.
-.s2ch2
-.sche2
-.s4ch4ed
-.sche4dul
-.sche1du
-.schedul2i
-.schedul3ing
-.sc8h8i8z9o9p8h8r8e8n8i8c.
-.schi2z
-.schi1zo
-.schiz2oph
-.schizop4hr4
-.sc8h8n8a8u9z8e8r.
-.sc2h1n
-.sch1na
-.schn2au
-.schnau2z4e
-.schnauz1er
-.sc8h8o8o8l9c8h8i8l8d.
-.s4cho2
-.schoo2
-.schoo4l1c2
-.s2chool2ch
-.schoolch4il2
-.schoolchi2ld
-.sc8h8o8o8l9c8h8i8l8d9r8e8n.
-.schoolchil3dr
-.schoolchildre4
-.schoolchil5dren
-.sc8h8o8o8l9t8e8a8c8h8e8r.
-.schoo4l2t
-.school1te
-.s2chooltea2ch
-.schoolteache2
-.sc8h8o8o8l9t8e8a8c8h9e8r8s.
-.schoolteach3e4r1s2
-.sc8r8u9t8i9n8y.
-.scru2t1i5n
-.scr4u1t2i
-.scrut4iny
-.sc8y8t8h9i8n8g.
-.s1cy
-.scy3thin
-.se8l8l9e8r.
-.sel2le
-.se8l8l9e8r8s.
-.selle4r1s2
-.se8c9r8e9t8a8r9i8a8t.
-.se1cr
-.se4c3re1ta
-.secret2a2r
-.secretar1i
-.secretar2i3a
-.se8c9r8e9t8a8r9i8a8t8s.
-.secretaria4t1s2
-.se8m9a9p8h8o8r8e.
-.se1ma
-.se4map
-.semapho4r
-.se8m9a9p8h8o8r8e8s.
-.se9m8e8s9t8e8r.
-.4se1me
-.se2mes
-.se8m8i9d8e8f9i9n8i8t8e.
-.sem2id
-.semide1f
-.semidef5i5n2ite
-.semide1fi
-.semide2fin
-.semidef2ini
-.semidefin2it
-.se8m8i9d8i9r8e8c8t.
-.semi2di
-.semid4ir2
-.semidi1re
-.semidire2c1t
-.se8m8i9h8o9m8o9t8h8e8t9i8c.
-.semi3h
-.semiho1mo
-.semihom4oth3
-.semihomoth2e
-.semihomo3the4t
-.semihomothet1ic
-.se8m8i9r8i8n8g.
-.sem4ir
-.semir1i
-.semirin4g
-.se8m8i9r8i8n8g8s.
-.semirings2
-.se8m8i9s8i8m9p8l8e.
-.se4m2is
-.semisi4m1p
-.semisim1p2l2
-.se8m8i9s8k8i8l8l8e8d.
-.sem4is4k2
-.semisk1i
-.semisk4il1l
-.semiskil2le
-.se8r8o9e8p8i9d8e9m8i9o9l8o8g9i9c8a8l.
-.s2er4o
-.sero4e
-.seroep4id
-.seroepi3de
-.seroepid4em
-.seroepidem2io
-.seroepidemi1ol
-.seroepidemio3log1ic
-.seroepidemiologi1ca
-.se8r9v8o9m8e8c8h9a8n8i8s8m.
-.4ser3vo
-.servo2me
-.servome2ch
-.servomech5a5nis
-.servomecha2n
-.servomechani2s1m
-.se8r9v8o9m8e8c8h9a8n8i8s8m8s.
-.servomechan4is4m1s2
-.se8s9q8u8i9p8e9d8a9l8i8a8n.
-.s1e4s
-.sesqu2
-.sesq2ui2
-.sesqu2ip
-.sesquipe4
-.sesqui2p2ed
-.sesquip2e2d2a
-.sesquipedal1i
-.sesquipedal2i1a
-.sesquipedali2a2n
-.se8t9u8p.
-.se1tu
-.se8t9u8p8s.
-.setu2p1s2
-.se9v8e8r8e9l8y.
-.5sev
-.sev1er
-.sev4erel
-.severe1ly
-.sh8a8p8e9a8b8l8e.
-.sha3pe4a
-.shape1a4b
-.shapeab2l2
-.sh8o8e9s8t8r8i8n8g.
-.sho4
-.sho2est4r
-.shoestrin4g
-.sh8o8e9s8t8r8i8n8g8s.
-.shoestrings2
-.si8d8e9s8t8e8p.
-.5side4s2
-.s2id
-.sideste4p
-.si8d8e9s8t8e8p8s.
-.sideste2p1s2
-.si8d8e9s8w8i8p8e.
-.sides4w2
-.sideswi2
-.sidesw2ip
-.sideswipe4
-.sk8y9s8c8r8a8p8e8r.
-.sk2
-.skys4c
-.skyscrap3er
-.sk8y9s8c8r8a8p8e8r8s.
-.skyscrape4r1s2
-.sm8o8k8e9s8t8a8c8k.
-.2s1m
-.s1mo
-.s4m2ok
-.smokes4
-.smokes1ta
-.smokestack1
-.sm8o8k8e9s8t8a8c8k8s.
-.smokestac4k1s2
-.sn8o8r9k8e8l9i8n8g.
-.s1n4
-.snorke5l2i
-.snorke4l3ing
-.so9l8e9n8o8i8d.
-.1so
-.sol4eno
-.solenoi2
-.soleno2id
-.so9l8e9n8o8i8d8s.
-.solenoi2d1s2
-.so8l8u8t8e.
-.so1lut
-.so8l8u8t8e8s.
-.so8v9e8r9e8i8g8n.
-.4sov
-.soverei2
-.sovere2ig2
-.so8v9e8r9e8i8g8n8s.
-.sovereig2n1s2
-.sp8a9c8e8s.
-.2s1pa
-.spa4ce
-.sp8e9c8i8o8u8s.
-.spe2c
-.spe1c2i
-.spec2io
-.speciou2
-.specio2us
-.sp8e8l8l9e8r.
-.spel1l
-.spel2le
-.sp8e8l8l9e8r8s.
-.spelle4r1s2
-.sp8e8l8l9i8n8g.
-.spell2i
-.spel2lin4
-.sp8e9l8u8n8k9e8r.
-.spelu4nk2
-.spelunk1er
-.sp8e8n8d9t8h8r8i8f8t.
-.spen4d
-.spend2th
-.spendt4hr4
-.spendthr4i2ft
-.sp8h8e8r9o8i8d.
-.s2phe
-.3sph4er
-.sph2ero
-.spheroi2
-.sphero2id
-.sp8h8e8r9o8i8d9a8l.
-.spheroi1d2a
-.sp8h8i8n9g8e8s.
-.sph5ing
-.sph4inge
-.sp8i8c9i9l8y.
-.sp2i1ci
-.spici1ly
-.sp8i8n9o8r8s.
-.spi2n
-.sp4i1no
-.spino4rs2
-.sp8o8k8e8s9w8o8m8a8n.
-.sp2ok
-.spokes4
-.spokes4w2
-.spoke4s1wo2
-.spokeswom1
-.spokeswo1ma
-.spokeswoma2n
-.sp8o8k8e8s9w8o8m8e8n.
-.spokeswo2me
-.spokeswo1men
-.sp8o8r8t8s9c8a8s8t.
-.s1p4or4
-.spor4t1s2
-.sport4sc
-.sports1ca
-.sp8o8r8t8s9c8a8s8t9e8r.
-.sportscast5er
-.sp8o8r9t8i8v8e9l8y.
-.spor1ti
-.spor4t2iv
-.sportiv4e1ly
-.sp8o8r8t8s9w8e8a8r.
-.sport4sw2
-.sportswe2a2r
-.sp8o8r8t8s9w8r8i8t8e8r.
-.sportswri4
-.sportswr2ite
-.sp8o8r8t8s9w8r8i8t8e8r8s.
-.sportswrit5e4r1s2
-.sp8r8i8g8h8t9l8i8e8r.
-.spr2
-.spr2ig
-.sprigh2tl
-.sprightl2ie4
-.sq8u8e8a9m8i8s8h.
-.squ2
-.squeam2is
-.squeamis2h
-.st8a8n8d9a8l8o8n8e.
-.5st4and
-.sta2n
-.stan1d2a
-.standalo2n
-.st8a8r9t8l8i8n8g.
-.st2a2r
-.star2tl
-.st8a8r9t8l8i8n8g9l8y.
-.startlingl2
-.startling1ly
-.st8a9t8i8s9t8i8c8s.
-.statis1t2i
-.statis1tic
-.statisti4c3s2
-.st8e8a8l8t8h9i8l8y.
-.stea4l
-.stea4lt
-.stealth3i
-.steal4th4il2
-.stealthi1ly
-.st8e8e8p8l8e9c8h8a8s8e.
-.s1tee
-.stee4p1
-.stee1p2l2
-.steeple2ch
-.st8e8r8e8o9g8r8a8p8h9i8c.
-.stere1o
-.stereo2g
-.stereo1gr
-.stereo5graph1ic
-.stereogr4aphi
-.st8o9c8h8a8s9t8i8c.
-.s1to
-.sto2ch4
-.stochast2i
-.stochas1tic
-.st8r8a8n8g8e9n8e8s8s.
-.st4r
-.s1tra
-.stran4ge
-.stra2n
-.str2ang
-.strange4n4e
-.stran1gen
-.strange1nes
-.strangen2e2ss
-.st8r8a8p9h8a8n8g8e8r.
-.straph2an4g
-.straphang5er
-.strapha2n
-.st8r8a8t9a9g8e8m.
-.stra2ta
-.st8r8a8t9a9g8e8m8s.
-.stratage4m1s2
-.st8r8e8t8c8h9i9e8r.
-.stre4tc
-.stret4ch
-.stretch2ie4
-.st8r8i8p9t8e8a8s8e.
-.str2ip
-.stri2p1t
-.strip2te
-.st8r8o8n8g9h8o8l8d.
-.stro2n
-.strongho2l2d
-.st8r8o8n8g9e8s8t.
-.st8u9p8i8d9e8r.
-.s1tu
-.stup4id
-.stupi3de
-.st8u9p8i8d9e8s8t.
-.stupide4s2
-.su8b9d8i8f9f8e8r9e8n9t8i8a8l.
-.1su
-.su4b3
-.su4b1d
-.subd1if
-.subdi4f1f
-.subdiffer1
-.subdiffer3en1t
-.subdifferent2i
-.subdifferen1t2i1a
-.subdifferenti2al
-.su8b9e8x9p8r8e8s9s8i8o8n.
-.sub4e
-.sub1ex3p
-.subexpr2
-.subex3pr2e2ss
-.subexpres1si
-.subexpres1s2io
-.subexpres5sio2n
-.su8b9e8x9p8r8e8s9s8i8o8n8s.
-.subexpressio2n3s2
-.su8m9m8a9b8l8e.
-.su2m
-.sum1m
-.sum1ma
-.sum2mab
-.summab2l2
-.su8p8e8r9e8g8o.
-.su1pe
-.supere1go
-.su8p8e8r9e8g8o8s.
-.supere4gos
-.su9p8r8e8m9a9c8i8s8t.
-.supr2
-.supre4mac
-.supre1ma
-.suprem4a2ci
-.su9p8r8e8m9a9c8i8s8t8s.
-.supremacis4t1s2
-.su8r9v8e8i8l9l8a8n8c8e.
-.su2r
-.surv4e
-.survei2
-.surveil1l
-.surveilla2n
-.sw8i8m9m8i8n8g9l8y.
-.sw2
-.swi2
-.swim1m
-.swimm4ingl2
-.swimm5ing1ly
-.sy8m8p9t8o9m8a8t8i8c.
-.sy4m1p
-.sym2p1t
-.symp1to
-.sympto2ma
-.symptomat1ic
-.sy8n9c8h8r8o9m8e8s8h.
-.syn3c4hr4
-.syn2ch
-.synchro2me
-.synchro2mes
-.synchrom4es2h
-.sy8n9c8h8r8o9n8o8u8s.
-.synchro2n
-.synchro1nou2
-.synchrono2us
-.sy8n9c8h8r8o9t8r8o8n.
-.synchrotro2n
-.ta8f8f9r8a8i8l.
-.4ta2f4
-.ta4f1f4
-.taffr2ai2
-.ta8l8k9a9t8i8v8e.
-.ta2l
-.4talk
-.talka3
-.talka4t
-.talka1t2iv
-.ta9p8e8s9t8r8y.
-.tap2est4r
-.tape4stry
-.ta9p8e8s9t8r8i8e8s.
-.tapestr2ie4
-.ta8r9p8a8u9l8i8n.
-.t2a2r
-.tar2p
-.tar1pa
-.tarpau4l2
-.tarpaul2i
-.ta8r9p8a8u9l8i8n8s.
-.tarpaul2i2n1s2
-.te9l8e8g9r8a9p8h8e8r.
-.tele1gr
-.teleg5ra3ph4er
-.te9l8e8g9r8a9p8h8e8r8s.
-.telegraphe4r1s2
-.te8l8e9k8i9n8e8t9i8c.
-.teleki4n
-.telek1i
-.telek2ine
-.teleki3net1ic
-.te8l8e9k8i9n8e8t9i8c8s.
-.telekineti4c3s2
-.te8l8e9r8o9b8o8t9i8c8s.
-.te4l1er
-.tel4ero
-.teler5ob
-.teleroboti4c3s2
-.te8l8l9e8r.
-.tel1l
-.tel2le
-.te8l8l9e8r8s.
-.telle4r1s2
-.te8m9p8o9r8a8r9i8l8y.
-.te4m1p
-.tem1p4or
-.tempo1ra
-.tempo4raril
-.tempor2a2r
-.temporar1i
-.temporari1ly
-.te8n9u8r8e.
-.te8s8t9b8e8d.
-.tes2t1b
-.test4be2d
-.te8x8t9w8i8d8t8h.
-.3tex
-.tex1t2
-.textw4
-.textwi2
-.textw2id
-.textwid2th
-.th8a8l9a9m8u8s.
-.tha3la
-.thala3m
-.thala1mu
-.thalam2us
-.th8e8r9m8o9e8l8a8s9t8i8c.
-.th2e
-.ther3m4
-.ther1mo
-.thermo4el
-.thermoe1la
-.thermoelast2i
-.thermoelas1tic
-.ti8m8e9s8t8a8m8p.
-.ti2mes
-.times1ta
-.timesta4m1p
-.ti8m8e9s8t8a8m8p8s.
-.timestam2p1s2
-.to8o8l9k8i8t.
-.too2
-.toolk1i
-.to8o8l9k8i8t8s.
-.toolki4t1s2
-.to8p8o9g8r8a8p8h9i9c8a8l.
-.to5po4g
-.topo1gr
-.topo5graph1ic
-.topogr4aphi
-.topographi1ca
-.to8q8u8e8s.
-.to1q
-.toqu2
-.tr8a8i9t8o8r9o8u8s.
-.1tra
-.tr2ai2
-.trai1to
-.traitorou2
-.traitoro2us
-.tr8a8n8s9c8e8i8v8e8r.
-.tra2n
-.tra2n1s2
-.trans4c
-.tran4s3cei2
-.transce2iv
-.tr8a8n8s9c8e8i8v8e8r8s.
-.transceive4r1s2
-.tr8a8n8s9g8r8e8s8s.
-.tran2s3g
-.trans1gr
-.transgr2e2ss
-.tr8a8n8s9v8e8r9s8a8l.
-.tran4sv
-.transve4r1s2
-.transver1sa2
-.tr8a8n8s9v8e8r9s8a8l8s.
-.transversa2l1s2
-.tr8a8n8s9v8e8s9t8i8t8e.
-.transv4e2s
-.transvest2i
-.transvest2ite
-.tr8a8n8s9v8e8s9t8i8t8e8s.
-.transvestit4es
-.tr8a9v8e8r8s9a9b8l8e.
-.trave4r1s2
-.traver1sa2
-.traver2s1ab
-.traversab2l2
-.tr8a9v8e8r9s8a8l.
-.tr8a9v8e8r9s8a8l8s.
-.traversa2l1s2
-.tr8i9e8t8h8y8l9a8m8i8n8e.
-.tri5et
-.tr2ie4
-.triethy3la
-.triethylam1in
-.triethylam2ine
-.tr8e8a8c8h9e8r8i8e8s.
-.trea2ch
-.treache2
-.treacher1i
-.treacher2ie4
-.tr8o8u9b8a9d8o8u8r.
-.trou2
-.trouba2d
-.trouba1do
-.troubadou2
-.tu8r9k8e8y.
-.1tu
-.tu8r9k8e8y8s.
-.turkeys4
-.tu8r8n9a8r8o8u8n8d.
-.tur4n2a2r
-.tur1na
-.turnarou2
-.turnaroun2d
-.tu8r8n9a8r8o8u8n8d8s.
-.turnaroun2d1s2
-.ty8p9a8l.
-.1ty
-.ty1pa
-.typ4al
-.un9a8t9t8a8c8h8e8d.
-.un2at4
-.una4t3t2
-.unat1ta
-.unatta2ch
-.unattache2
-.unatta4ch4ed
-.un9e8r8r9i8n8g9l8y.
-.un4er
-.uner4r4
-.unerrin4g
-.unerringl2
-.unerring1ly
-.un9f8r8i8e8n8d9l8y.
-.un3f
-.unfri2
-.unfr2ie4
-.unfrien2d1ly
-.un9f8r8i8e8n8d9l8i9e8r.
-.unfriendl2ie4
-.va8g8u8e8r.
-.1va
-.vag4
-.va5guer
-.va2gue
-.va8u8d8e9v8i8l8l8e.
-.vaude1v4
-.vaude2v3i4l
-.vaude1vi
-.vaudevil1l
-.vaudevil2le
-.vi8c9a8r8s.
-.v4ic2a2r
-.vi1ca
-.vica4rs2
-.vi8l9l8a8i8n9e8s8s.
-.2vil
-.vil1l
-.villai2
-.villa4i4n
-.villa2ine
-.villai5n2e2ss
-.villai1nes
-.vi8s9u8a8l.
-.vi3su
-.visu1al
-.vi8s9u8a8l9l8y.
-.visual1l
-.visual1ly
-.vi9v8i8p9a9r8o8u8s.
-.3v2iv
-.viv2i4p
-.vivi1pa
-.vivip2a2r
-.viviparou2
-.viviparo2us
-.vo8i8c8e9p8r8i8n8t.
-.voi4
-.voi3cep
-.voicepr2
-.voiceprin4t3
-.vs8p8a8c8e.
-.v2s1pa
-.vspa4ce
-.wa8d9d8i8n8g.
-.wa2d
-.wad4d1in
-.wad1d4
-.wa8l8l9f8l8o8w8e8r.
-.wal1l
-.wal2lf
-.wallf4l2
-.wallflow1er
-.wa8l8l9f8l8o8w9e8r8s.
-.wallflowe4r1s2
-.wa8r8m9e8s8t.
-.w2a2r
-.war1m
-.war2me
-.war2mes
-.wa8s8t8e9w8a8t8e8r.
-.was4t
-.waste2w
-.waste1w5a
-.wastewa1te
-.wa8v8e9g8u8i8d8e.
-.waveg3
-.waveg2ui2
-.wavegu2id
-.wa8v8e9g8u8i8d8e8s.
-.waveguide4s2
-.wa8v8e9l8e8t.
-.wa8v8e9l8e8t8s.
-.wavele4t1s2
-.we8b9l8i8k8e.
-.w2e1b
-.web2l2
-.web3l4ik
-.we8e8k9n8i8g8h8t.
-.weekn2ig
-.we8e8k9n8i8g8h8t8s.
-.weeknigh4t1s2
-.wh8e8e8l9c8h8a8i8r.
-.whee4l1c2
-.wheel2ch
-.wheelchai2
-.wheelcha4ir
-.wh8e8e8l9c8h8a8i8r8s.
-.wheelchai4rs2
-.wh8i8c8h9e8v8e8r.
-.whi4
-.wh4i2ch
-.whiche2
-.whichev1er
-.wh8i8t8e9s8i8d8e8d.
-.wh2ite
-.whit4es
-.white1si
-.white2s2id
-.whitesi2d1ed
-.wh8i8t8e9s8p8a8c8e.
-.white1sp
-.white2s1pa
-.whitespa4ce
-.wh8i8t8e9s8p8a8c8e8s.
-.wi8d8e9s8p8r8e8a8d.
-.w2id
-.wide4s2
-.wide1sp
-.wides4pre
-.widespr2
-.widesprea2d1
-.wi8n8g9s8p8a8n.
-.win4g
-.wings2
-.wing2s1pa
-.wingspa4n
-.wi8n8g9s8p8a8n8s.
-.wingspa2n1s2
-.wi8n8g9s8p8r8e8a8d.
-.wingspr2
-.wingsprea2d1
-.wi8t8c8h9c8r8a8f8t.
-.wi4tc
-.wit4ch
-.witchcra2f4t
-.witchcra2f
-.wo8r8d9s8p8a8c9i8n8g.
-.1wo2
-.wor2d1s2
-.words4p
-.word2s1pa
-.wordsp4a2ci
-.wordspa2c1in
-.wordspac1ing
-.wo8r8k9a8r8o8u8n8d.
-.work2a2r
-.workarou2
-.workaroun2d
-.wo8r8k9a8r8o8u8n8d8s.
-.workaroun2d1s2
-.wo8r8k9h8o8r8s8e.
-.workh4
-.workhor4se
-.workho4rs2
-.wo8r8k9h8o8r8s8e8s.
-.workhors3e4s
-.wr8a8p9a8r8o8u8n8d.
-.wra4
-.wrap2a2r4
-.wra1pa
-.wraparou2
-.wraparoun2d
-.wr8e8t8c8h9e8d.
-.wre4tc
-.wret4ch
-.wretche2
-.wret4ch4ed
-.wr8e8t8c8h9e8d9l8y.
-.wretche2d1ly
-.ye8s9t8e8r9y8e8a8r.
-.yes4
-.yesterye2a2r
-.al9g8e9b8r8a8i9s8c8h8e.
-.algebra2is1c
-.algebrais3ch2
-.algebraische2
-.al9l8e9g8h8e9n8y.
-.al1l
-.al2le
-.al3leg
-.alleghe2n
-.ar9k8a8n9s8a8s.
-.arka2n
-.arkan2sa2
-.arka2n1s2
-.at8p9a8s8e.
-.a4t1p
-.at1pa
-.at8p9a8s8e8s.
-.atpas1e4s
-.au8s9t8r8a8l9a8s8i8a8n.
-.a2us
-.aus1t4r
-.aus1tra
-.australas2i1a
-.australasi2a2n
-.au8t8o9m8a8t8i9s8i8e8r9t8e8r.
-.automa3tis
-.automatis2ie4
-.automatisiert3er
-.be9d8i8e9n8u8n8g.
-.4be2d
-.b4e3di
-.be5di3en
-.bed2ie4
-.bedie3nu4n
-.be8m8b8o.
-.4be5m
-.be4m5b
-.bi8b9l8i9o9g8r8a9p8h8i9s8c8h8e.
-.bibliogr4aphi
-.bibliograph2is1c
-.bibliographis3ch2
-.bibliographische2
-.bo8s9t8o8n.
-.5bos4
-.bos1to
-.bosto2n
-.br8o8w8n9i8a8n.
-.brown5i
-.brow3n4i1a
-.browni3a2n
-.br8u8n8s9w8i8c8k.
-.bru2n
-.bru2n3s4
-.brun4sw2
-.brunswi2
-.brunswick1
-.bu9d8a9p8e8s8t.
-.bu1d2a
-.ca8r9i8b9b8e8a8n.
-.car1i
-.car4ib
-.cari2b1b
-.carib2be
-.caribbea2n
-.ch8a8r8l8e8s9t8o8n.
-.char4le4
-.char1l
-.charles2
-.charl4es2to
-.charle3sto2n
-.ch8a8r9l8o8t8t8e8s9v8i8l8l8e.
-.char3lo4
-.charlo4t3t2
-.charlot4tes
-.charlotte4sv
-.charlottes2vil
-.charlottesvil1l
-.charlottesvil2le
-.co9l8u8m9b8i8a.
-.colum4bi
-.colu4m1b
-.columb2i1a
-.cz8e8c8h8o9s8l8o9v8a9k8i8a.
-.c2ze4
-.cze2ch
-.cze3cho2
-.czechos4l2
-.czechos4lov
-.czechoslo1va
-.czechoslovak1i
-.czechoslovak2i1a
-.de8l9a9w8a8r8e.
-.de1la
-.de4law
-.delaw2a2r
-.di8j8k9s8t8r8a.
-.di3j
-.dij4k1s2
-.dijkst4r
-.dijks1tra
-.du8a8n8e.
-.d1u1a
-.dua2n
-.dy9n8a9m8i9s8c8h8e.
-.5dyn
-.dy1na
-.dynam2is
-.dynam2is1c
-.dynamis3ch2
-.dynamische2
-.en8g9l8i8s8h.
-.engl2
-.englis2h
-.eu8l8e8r9i8a8n.
-.eul4e
-.eu3l4er1i
-.eule1r2i3a4
-.euleri2a2n
-.ev8a8n9s8t8o8n.
-.e1va
-.eva2n
-.evan4st
-.eva2n1s2
-.evans1to
-.evansto2n
-.fe8b9r8u9a8r8y.
-.f2e4b
-.fe3br
-.febru3a
-.febru2a2r
-.fe8s8t9s8c8h8r8i8f8t.
-.fes4t1s2
-.fest4sc
-.fests2ch2
-.festsc4hr4
-.festschr4i2ft
-.fl8o8r9i9d8a.
-.flor2id
-.flori1d2a
-.fl8o8r9i9d9i8a8n.
-.flori2di
-.florid5i2a2n
-.flori1d4i3a
-.fo8r9s8c8h8u8n8g8s9i8n9s8t8i9t8u8t.
-.fors4c
-.fors2ch2
-.forschungs2
-.forschung2s1in
-.forschungs2i2n1s2
-.forschungsinst2i
-.forschungsinsti1tu
-.fr8e8e9b8s8d.
-.fre2e1b
-.free2b5s2
-.freeb4s5d
-.fu8n8k9t8s8i8o8n8a8l.
-.3fu
-.fu4nk2
-.funk5t
-.funk4t1s2
-.funkt1s2io
-.funkt5sio2n
-.funktsio1n5a
-.ga8u8s8s9i8a8n.
-.ga2us
-.gau2ss
-.gaus1si
-.gauss2i1a
-.gaussi2a2n
-.gh8o8s8t9s8c8r8i8p8t.
-.ghos4t1s2
-.ghost4sc
-.ghostscri2
-.ghostscr2ip
-.ghostscri2p1t
-.gh8o8s8t9v8i8e8w.
-.ghos4tv
-.ghostv2ie4
-.gr8a8s8s9m8a8n8n9i8a8n.
-.gr2as
-.gra2ss
-.gras2s1m
-.grass3ma
-.grassma2n3
-.grassma4n1n2
-.grassman3n4i1a
-.grassma2nni3a2n
-.gr8e8i8f8s9w8a8l8d.
-.grei2
-.grei2f3s
-.greifsw2
-.greifswa2ld
-.gr8o8t8h8e8n9d8i8e8c8k.
-.g4ro
-.gro4th2e
-.gr4oth
-.grothe2n
-.grothend2ie4
-.grothendieck1
-.gr8u8n8d9l8e8h9r8e8n.
-.gru2n
-.grundle1h4
-.grundle4hr4
-.ha9d8a9m8a8r8d.
-.ha2d
-.ha1d2a
-.hada2m2
-.had4a1ma
-.hadam2a2r
-.ha8i9f8a.
-.hai1fa
-.ha8m8i8l9t8o8n9i8a8n.
-.ha4m
-.hami4lt
-.hamil1to
-.hamilto2n
-.hamilto3n4i1a
-.hamiltoni3a2n
-.he8l9s8i8n8k8i.
-.he2l1s2
-.hel2s1in
-.hels4i4nk2
-.helsink1i
-.he8r9m8i8t9i8a8n.
-.her3mit
-.hermi1ti
-.herm4i1t2i1a
-.hermiti2a2n
-.hi8b8b8s.
-.hi2b1b
-.hib2b5s2
-.ho8k9k8a8i9d8o.
-.h2ok
-.hokk4
-.hokkai2
-.hokka2id
-.hokkai1do
-.ja8c9k8o8w9s8k8i.
-.5ja
-.jack1
-.jackowsk2
-.jackowsk1i
-.ja8n9u9a8r8y.
-.ja2n
-.jan3u1a
-.janu2a2r
-.ja9p8a9n8e8s8e.
-.ja4p
-.ja1pa
-.japa2n
-.japa1nes
-.japane1s2e
-.ka8d9o8m9t8s8e8v.
-.ka2d
-.ka1do
-.kado4mt
-.kadom4t1s2
-.kadomt5sev
-.ka8n9s8a8s.
-.ka2n
-.kan2sa2
-.ka2n1s2
-.ka8r8l8s9r8u8h8e.
-.k2a2r
-.kar1l
-.kar2l1s2
-.karls1r
-.ko8r9t8e9w8e8g.
-.ko5r
-.kr8i8s8h8n8a.
-.kr2is
-.kr3is2h
-.kris2h1n
-.krish1na
-.kr8i8s8h9n8a9i8s8m.
-.krishnai2
-.krishnai2s1m
-.kr8i8s8h9n8a8n.
-.krishn2a2n
-.la8n9c8a8s9t8e8r.
-.lan1ca
-.lancast5er
-.le9g8e8n8d8r8e.
-.le1gen
-.legen1dr
-.legendre4
-.le8i8c8e8s9t8e8r.
-.lei2
-.le5ic
-.leices5t
-.li8p9s8c8h8i8t8z.
-.l2ip
-.li2p1s2
-.lips2ch2
-.lips3chit
-.lipschi4tz
-.li8p9s8c8h8i8t8z9i8a8n.
-.lipschit2z1i
-.lipschitz2i1a
-.lipschitzi2a2n
-.lo8j9b8a8n.
-.lo5j
-.lojba2n
-.lo8u9i9s8i9a8n8a.
-.lou2
-.lo2ui2
-.louis2i1a
-.louisi2a2n
-.louisia1na
-.ma8c9o8s.
-.ma1co
-.ma8n9c8h8e8s9t8e8r.
-.man2ch
-.manche2
-.manch1es
-.ma8r9k8o8v9i8a8n.
-.marko5vi2a2n
-.markov2i1a
-.ma8r8k8t9o8b8e8r9d8o8r8f.
-.mark5t
-.mark1to
-.markto3b
-.marktober1do
-.marktoberd4or
-.marktoberdor1f
-.ma8s8s9a9c8h8u9s8e8t8t8s.
-.ma2ss
-.mas1sa2
-.massa2ch
-.massach2us
-.massachuse4t3t2
-.massachuset4t1s2
-.ma8x9w8e8l8l.
-.maxwel4l
-.mi9c8r8o9s8o8f8t.
-.micro2so
-.microso2ft3
-.mi8n9n8e9a8p9o9l8i8s.
-.m2i4n1n2
-.minne4
-.minneapol2i
-.mi8n9n8e9s8o8t8a.
-.min1nes
-.minne1so
-.minneso1ta
-.mo8s9c8o8w.
-.mos2c
-.mos1co
-.na8c8h9r8i8c8h8t8e8n.
-.1na
-.na2ch
-.nac4hr4
-.na2chr4i2ch
-.nachricht1en
-.na8s8h9v8i8l8l8e.
-.n4as
-.nas2h
-.nash2vil
-.nashvil1l
-.nashvil2le
-.ne8t9b8s8d.
-.ne2t1b
-.net2b5s2
-.netb4s5d
-.ne8t9s8c8a8p8e.
-.ne4t1s2
-.net4sc
-.netsca4p
-.nets1ca
-.ni8j9m8e9g8e8n.
-.ni3j
-.nijme2g
-.nijme1gen
-.no8e9t8h8e8r9i8a8n.
-.3noe
-.noeth2e
-.noether1i
-.noethe1r2i3a4
-.noetheri2a2n
-.no8o8r8d9w8i8j8k8e8r9h8o8u8t.
-.noo2
-.no3ord
-.noord1w
-.noordwi2
-.noordwi3j
-.noordwijk1er
-.noordwijker1h4
-.noordwijkerhou2
-.no9v8e8m9b8e8r.
-.nove4m5b
-.op8e8n9b8s8d.
-.ope4n1b4
-.open2b5s2
-.openb4s5d
-.op8e8n9o8f8f8i8c8e.
-.op4eno
-.openo4f1f
-.openof1fi
-.pa8l8a9t8i8n8o.
-.pala2t1in
-.palat2i1no
-.pa9l8e8r9m8o.
-.paler3m4
-.paler1mo
-.pe9t8r8o8v9s8k8i.
-.petro3v
-.petrovsk2
-.petrovsk1i
-.pf8a8f8f9i8a8n.
-.4pf
-.p1fa
-.pfa2f
-.pfa4f1f4
-.pfaf1fi
-.pfaff2i3a
-.pfaffi2a2n
-.ph8i8l9a9d8e8l9p8h8i8a.
-.phi4l4ade
-.phila2d
-.philade2lp
-.philadel5phi
-.philadelph2i1a
-.ph8i8l9o9s8o8p8h9i9s8c8h8e.
-.philo2so
-.philos4op
-.philos2oph
-.philosoph2is1c
-.philosophis3ch2
-.philosophische2
-.po8i8n9c8a8r8e.
-.poin2
-.poi2
-.poinc2a2r5
-.poin1ca
-.po9t8e8n9t8i8a8l9g8l8e8i9c8h8u8n8g.
-.p4ot
-.po1ten1t
-.potent2i
-.poten1t2i1a
-.potenti2al
-.potentia4l1g4
-.potentialgl2
-.potential1gle
-.potentialglei2
-.potentialgle5ic
-.potentialgle4i2ch
-.ra9d8h8a9k8r8i8s8h9n8a8n.
-.rad1h2
-.radhakr2is
-.radhakr3is2h
-.radhakris2h1n
-.radhakrish1na
-.radhakrishn2a2n
-.ra8t8h8s9k8e8l9l8e8r.
-.r4ath
-.ra2t4h1s2
-.rathsk2
-.rath4ske
-.rathskel1l
-.rathskel2le
-.ri8e9m8a8n8n9i8a8n.
-.r2ie4
-.rie5ma2n
-.rie1ma
-.riema4n1n2
-.rieman3n4i1a
-.riema2nni3a2n
-.ry8d9b8e8r8g.
-.ry1d
-.ryd1b
-.rydberg2
-.sc8h8o8t9t8i8s8c8h8e.
-.scho4t3t2
-.schott2is1c
-.s2ch2ottis3ch2
-.schottische2
-.sc8h8r8o9d8i8n8g9e8r.
-.sc4hr4
-.schrod1in
-.schrod4inge
-.sc8h8w8a9b8a9c8h8e8r.
-.sch1w
-.schwaba2ch
-.schwabache2
-.sc8h8w8a8r8z9s8c8h8i8l8d.
-.schw2a2r
-.s2chwarzs2ch2
-.schwarzsch4il2
-.schwarzschi2ld
-.se8p9t8e8m9b8e8r.
-.se2p1t
-.sep2te
-.septe4m5b
-.st8o8k8e8s9s8c8h8e.
-.st2ok
-.stokes4
-.stok2e2ss
-.stokes2s5c
-.stokess2ch2
-.stokessche2
-.st8u8t8t9g8a8r8t.
-.stu4t3t2
-.stut4t1g
-.stutt1ga
-.stuttg2a2r
-.su8s9q8u8e9h8a8n9n8a.
-.s2us
-.susqu2
-.susque1h4
-.susqueha2n
-.susqueha4n1n2
-.susquehan1na
-.ta8u9b8e8r9i8a8n.
-.tau4b
-.taub4e
-.tau3ber
-.tauber1i
-.taube1r2i3a4
-.tauberi2a2n
-.te8c8h9n8i9s8c8h8e.
-.te2ch
-.tec2h1n
-.techn2is1c
-.te2chnis3ch2
-.technische2
-.te8n9n8e8s9s8e8e.
-.t4e4n1n2
-.tenne4
-.ten1nes
-.tenn2e2ss
-.to9m8a9s8z8e8w9s8k8i.
-.to2ma
-.tomas2ze
-.tomaszewsk2
-.tomaszewsk1i
-.ty9p8o9g8r8a8p8h8i8q8u8e.
-.ty3po
-.ty5po4g
-.typo1gr
-.typogr4aphi
-.typographiqu2
-.uk8r8a8i8n9i8a8n.
-.4uk
-.ukr2ai2
-.ukra4i4n
-.ukra2ini
-.ukrai4n4i1a
-.ukraini3a2n
-.ve8r9a8l8l9g8e9m8e8i8n9e8r8t8e.
-.veral1l
-.veral4l1g4
-.verallge1me
-.verallgemei2
-.verallgeme2ine
-.verallgemein1er
-.ve8r9e8i8n9i9g8u8n8g.
-.vere3in
-.verei2
-.vere2ini
-.verein2ig
-.vereini3gun
-.ve8r9t8e8i9l8u8n9g8e8n.
-.vertei2
-.verteilun1gen
-.vi8i8i8t8h.
-.v4i5i4
-.vi4i5i4
-.vii2ith
-.vi8i8t8h.
-.vi2ith
-.wa8h8r9s8c8h8e8i8n9l8i8c8h9k8e8i8t8s9t8h8e8o9r8i8e.
-.wa4hr4
-.wah4rs2
-.wahrs4c
-.wahrs2ch2
-.wahrsche2
-.wahrschei2
-.wahrsche4i4n1l
-.wahrs2cheinl4i2ch
-.wahrscheinlic4hk
-.wahrscheinlichkei2
-.wahrscheinlichkei4t1s2
-.wahrscheinlichkeits3th2e
-.wahrscheinlichkeitsthe1o5r
-.wahrscheinlichkeitstheor2ie4
-.we8r9n8e8r.
-.w1er
-.wer4n1er
-.we8r9t8h8e8r9i8a8n.
-.werth2e
-.werther1i
-.werthe1r2i3a4
-.wertheri2a2n
-.wi8n9c8h8e8s9t8e8r.
-.win2ch
-.winche2
-.winch1es
-.wi8r8t9s8c8h8a8f8t.
-.w4ir4
-.wir4t1s2
-.wirt4sc
-.wirts2ch2
-.wirtscha2f
-.wirtscha2ft
-.wi8s9s8e8n9s8c8h8a8f8t9l8i8c8h.
-.w4i2s1s
-.wissen4
-.wisse2n1s2
-.wissens4c
-.wissens2ch2
-.wissenscha2f
-.wissenscha2ft
-.wissenschaf2tl
-.wissens2chaftl4i2ch
-.xv8i8i8i8t8h.
-.xv4i5i4
-.xvi4i5i4
-.xvii2ith
-.xv8i8i8t8h.
-.xvi2ith
-.xx8i8i8i8r8d.
-.xx4
-.xx3i
-.xx4i5i4
-.xxi4i5i4
-.xxii4ir
-.xx8i8i8n8d.
-.xxi4ind
-.yi8n8g9y8o8n8g.
-.y1i
-.yin2gy
-.yingy1o4
-.yingyo2n
-.sh8u9x8u8e.
-.shux1u3
-.ji9s8u8a8n.
-.ji2su
-.jisua2n
-.ze8a9l8a8n8d.
-.2ze
-.zea4l
-.zea3l4and
-.zeala2n
-.ze8i8t9s8c8h8r8i8f8t.
-.zei2
-.zei4t1s2
-.zeit4sc
-.zeits2ch2
-.zeitsc4hr4
-.zeitschr4i2ft
diff --git a/core/res/assets/webkit/incognito_mode_start_page.html b/core/res/assets/webkit/incognito_mode_start_page.html
deleted file mode 100644
index 5d7a3fb..0000000
--- a/core/res/assets/webkit/incognito_mode_start_page.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
- <title>New incognito window</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages you view in this window
- won't appear in your browser history or search history, and they won't
- leave other traces, like cookies, on your device after you close the
- incognito window. Any files you download or bookmarks you create will be
- preserved, however.</p>
-
- <p><strong>Going incognito doesn't affect the behavior of other people,
- servers, or software. Be wary of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/assets/webkit/missingImage.png b/core/res/assets/webkit/missingImage.png
deleted file mode 100644
index f49a98d..0000000
--- a/core/res/assets/webkit/missingImage.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/nullPlugin.png b/core/res/assets/webkit/nullPlugin.png
deleted file mode 100644
index 96a52e3..0000000
--- a/core/res/assets/webkit/nullPlugin.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/play.png b/core/res/assets/webkit/play.png
deleted file mode 100644
index 26fe286..0000000
--- a/core/res/assets/webkit/play.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/textAreaResizeCorner.png b/core/res/assets/webkit/textAreaResizeCorner.png
deleted file mode 100644
index 777eff0..0000000
--- a/core/res/assets/webkit/textAreaResizeCorner.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/togglePlugin.png b/core/res/assets/webkit/togglePlugin.png
deleted file mode 100644
index 008333c..0000000
--- a/core/res/assets/webkit/togglePlugin.png
+++ /dev/null
Binary files differ
diff --git a/core/res/assets/webkit/youtube.html b/core/res/assets/webkit/youtube.html
deleted file mode 100644
index 8e103c1..0000000
--- a/core/res/assets/webkit/youtube.html
+++ /dev/null
@@ -1,71 +0,0 @@
-<html>
- <head>
- <style type="text/css">
- body { background-color: black; }
- a:hover { text-decoration: none; }
- a:link { color: black; }
- a:visited { color: black; }
- #main {
- position: absolute;
- left: 0%;
- top: 0%;
- width: 100%;
- height: 100%;
- padding: 0%;
- z-index: 10;
- background-size: 100%;
- background: no-repeat;
- background-position: center;
- }
- #play {
- position: absolute;
- left: 50%;
- top: 50%;
- }
- #logo {
- position: absolute;
- bottom: 0;
- right: 0;
- }
- </style>
- </head>
- <body id="body">
- <script type="text/javascript">
- function setup() {
- var width = document.body.clientWidth;
- var height = document.body.clientHeight;
- var mainElement = document.getElementById("main");
- var playElement = document.getElementById("play");
- var loadcount = 0;
- var POSTER = "http://img.youtube.com/vi/VIDEO_ID/0.jpg";
-
- function doload() {
- if (++loadcount == 2) {
- // Resize the element to the right size
- mainElement.width = width;
- mainElement.height = height;
- mainElement.style.backgroundImage = "url('" + POSTER + "')";
- // Center the play button
- playElement.style.marginTop = "-" + play.height/2 + "px";
- playElement.style.marginLeft = "-" + play.width/2 + "px";
- playElement.addEventListener("click", function(e) {
- top.location.href = "vnd.youtube:VIDEO_ID";
- }, false);
- }
- }
- var background = new Image();
- background.onload = doload;
- background.src = POSTER;
- play = new Image();
- play.onload = doload;
- play.src = "play.png";
- }
-
- window.onload = setup;
- </script>
- <div id="main">
- <img src="play.png" id="play"></img>
- <img src="youtube.png" id="logo"></img>
- </div>
- </body>
-</html>
diff --git a/core/res/assets/webkit/youtube.png b/core/res/assets/webkit/youtube.png
deleted file mode 100644
index 87779b1..0000000
--- a/core/res/assets/webkit/youtube.png
+++ /dev/null
Binary files differ
diff --git a/core/res/res/anim/dock_bottom_exit_keyguard.xml b/core/res/res/anim/dock_bottom_exit_keyguard.xml
new file mode 100644
index 0000000..4de3ce5
--- /dev/null
+++ b/core/res/res/anim/dock_bottom_exit_keyguard.xml
@@ -0,0 +1,22 @@
+<!--
+ ~ 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
+ -->
+
+<!-- Animation for when a dock window at the bottom of the screen is exiting while on Keyguard -->
+<set xmlns:android="http://schemas.android.com/apk/res/android"
+ android:interpolator="@android:interpolator/fast_out_linear_in">
+ <translate android:fromYDelta="0" android:toYDelta="100%"
+ android:duration="200"/>
+</set>
\ No newline at end of file
diff --git a/core/res/res/anim/watch_switch_thumb_to_off_animation.xml b/core/res/res/anim/watch_switch_thumb_to_off_animation.xml
deleted file mode 100644
index cd02e0d..0000000
--- a/core/res/res/anim/watch_switch_thumb_to_off_animation.xml
+++ /dev/null
@@ -1,36 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?><!-- 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:ordering="sequentially">
- <objectAnimator
- android:duration="33"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
- <objectAnimator
- android:duration="66"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
- <objectAnimator
- android:duration="66"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
-</set>
diff --git a/core/res/res/anim/watch_switch_thumb_to_on_animation.xml b/core/res/res/anim/watch_switch_thumb_to_on_animation.xml
deleted file mode 100644
index e644217..0000000
--- a/core/res/res/anim/watch_switch_thumb_to_on_animation.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<set xmlns:android="http://schemas.android.com/apk/res/android"
- android:ordering="sequentially">
- <objectAnimator
- android:duration="33"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
- <objectAnimator
- android:duration="66"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
- <objectAnimator
- android:duration="66"
- android:interpolator="@android:interpolator/linear"
- android:propertyName="pathData"
- android:valueFrom="M -3.0,-7.0 l 6.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l -6.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueTo="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z"
- android:valueType="pathType" />
-</set>
diff --git a/core/res/res/color/hint_foreground_material_dark.xml b/core/res/res/color/hint_foreground_material_dark.xml
index 77883d9..5cc9559 100644
--- a/core/res/res/color/hint_foreground_material_dark.xml
+++ b/core/res/res/color/hint_foreground_material_dark.xml
@@ -15,6 +15,10 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true"
+ android:state_pressed="true"
+ android:alpha="@dimen/hint_pressed_alpha_material_dark"
+ android:color="@color/foreground_material_dark" />
<item android:alpha="@dimen/hint_alpha_material_dark"
android:color="@color/foreground_material_dark" />
</selector>
diff --git a/core/res/res/color/hint_foreground_material_light.xml b/core/res/res/color/hint_foreground_material_light.xml
index 99168fd..f7465e0 100644
--- a/core/res/res/color/hint_foreground_material_light.xml
+++ b/core/res/res/color/hint_foreground_material_light.xml
@@ -15,6 +15,10 @@
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="true"
+ android:state_pressed="true"
+ android:alpha="@dimen/hint_pressed_alpha_material_light"
+ android:color="@color/foreground_material_light" />
<item android:alpha="@dimen/hint_alpha_material_light"
android:color="@color/foreground_material_light" />
</selector>
diff --git a/core/res/res/color/watch_switch_thumb_color_material.xml b/core/res/res/color/watch_switch_thumb_color_material.xml
index d4796a0..f78d9b62 100644
--- a/core/res/res/color/watch_switch_thumb_color_material.xml
+++ b/core/res/res/color/watch_switch_thumb_color_material.xml
@@ -10,9 +10,9 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="?android:colorButtonNormal" android:state_enabled="false" />
- <item android:color="?android:colorControlActivated" android:state_checked="true" />
- <item android:color="?android:colorButtonNormal" />
-</selector>
\ No newline at end of file
+ <item android:color="?attr/colorButtonNormal" android:alpha="?attr/disabledAlpha"
+ android:state_enabled="false" />
+ <item android:color="?attr/colorControlActivated" android:state_checked="true" />
+ <item android:color="?attr/colorButtonNormal" />
+</selector>
diff --git a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml b/core/res/res/color/watch_switch_track_color_material.xml
similarity index 67%
copy from core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml
copy to core/res/res/color/watch_switch_track_color_material.xml
index 9f92361..402a536 100644
--- a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml
+++ b/core/res/res/color/watch_switch_track_color_material.xml
@@ -1,19 +1,21 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
-
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/watch_switch_thumb_material">
- <target
- android:name="thumb_path"
- android:animation="@anim/watch_switch_thumb_to_on_animation" />
-</animated-vector>
+<!-- Used for the background of switch track for watch switch preference. -->
+<selector xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:state_enabled="false"
+ android:alpha="0.4" android:color="?attr/colorPrimary" />
+ <item android:color="?attr/colorPrimary" />
+</selector>
diff --git a/core/res/res/drawable-hdpi/vpn_connected.png b/core/res/res/drawable-hdpi/vpn_connected.png
index c3547e8..e05e76f 100644
--- a/core/res/res/drawable-hdpi/vpn_connected.png
+++ b/core/res/res/drawable-hdpi/vpn_connected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/vpn_disconnected.png b/core/res/res/drawable-hdpi/vpn_disconnected.png
index 10a9065..3508984 100644
--- a/core/res/res/drawable-hdpi/vpn_disconnected.png
+++ b/core/res/res/drawable-hdpi/vpn_disconnected.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.png
new file mode 100644
index 0000000..371469c
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_14w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.png
new file mode 100644
index 0000000..e477260
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_15w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.png
new file mode 100644
index 0000000..19a1bd3
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_16w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.png
new file mode 100644
index 0000000..79dc733
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_17w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.png b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.png
new file mode 100644
index 0000000..6d921c0
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_thumb_mtrl_18w.png
Binary files differ
diff --git a/core/res/res/drawable-hdpi/watch_switch_track_mtrl.png b/core/res/res/drawable-hdpi/watch_switch_track_mtrl.png
new file mode 100644
index 0000000..ecee3e1
--- /dev/null
+++ b/core/res/res/drawable-hdpi/watch_switch_track_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/vpn_connected.png b/core/res/res/drawable-mdpi/vpn_connected.png
index 7e167f8..f7ac2a1 100644
--- a/core/res/res/drawable-mdpi/vpn_connected.png
+++ b/core/res/res/drawable-mdpi/vpn_connected.png
Binary files differ
diff --git a/core/res/res/drawable-mdpi/vpn_disconnected.png b/core/res/res/drawable-mdpi/vpn_disconnected.png
index a08c42a..9db4199 100644
--- a/core/res/res/drawable-mdpi/vpn_disconnected.png
+++ b/core/res/res/drawable-mdpi/vpn_disconnected.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/default_wallpaper.png b/core/res/res/drawable-nodpi/default_wallpaper.png
index ce546f0..d60ef83 100644
--- a/core/res/res/drawable-nodpi/default_wallpaper.png
+++ b/core/res/res/drawable-nodpi/default_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-nodpi/vpn_connected.xml b/core/res/res/drawable-nodpi/vpn_connected.xml
new file mode 100644
index 0000000..22a4a6cb4
--- /dev/null
+++ b/core/res/res/drawable-nodpi/vpn_connected.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="48dp"
+ android:height="48dp"
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M25.3,20c-1.65,-4.66 -6.08,-8 -11.3,-8 -6.63,0 -12,5.37 -12,12s5.37,12 12,12c5.22,0 9.65,-3.34 11.3,-8H34v8h8v-8h4v-8H25.3zM14,28c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4 4,1.79 4,4 -1.79,4 -4,4z"/>
+</vector>
diff --git a/core/res/res/drawable-nodpi/vpn_disconnected.xml b/core/res/res/drawable-nodpi/vpn_disconnected.xml
new file mode 100644
index 0000000..22a4a6cb4
--- /dev/null
+++ b/core/res/res/drawable-nodpi/vpn_disconnected.xml
@@ -0,0 +1,24 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="48dp"
+ android:height="48dp"
+ android:viewportWidth="48.0"
+ android:viewportHeight="48.0">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M25.3,20c-1.65,-4.66 -6.08,-8 -11.3,-8 -6.63,0 -12,5.37 -12,12s5.37,12 12,12c5.22,0 9.65,-3.34 11.3,-8H34v8h8v-8h4v-8H25.3zM14,28c-2.21,0 -4,-1.79 -4,-4s1.79,-4 4,-4 4,1.79 4,4 -1.79,4 -4,4z"/>
+</vector>
diff --git a/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png b/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png
index d259499..64e3cf8 100644
--- a/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png
+++ b/core/res/res/drawable-sw600dp-hdpi/unlock_wave.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png b/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png
index 9e38499..719366e 100644
--- a/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png
+++ b/core/res/res/drawable-sw600dp-mdpi/unlock_wave.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png b/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
index af8e251..7b7e940 100644
--- a/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
+++ b/core/res/res/drawable-sw600dp-nodpi/default_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png b/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png
index 035bd92..93916cd 100644
--- a/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png
+++ b/core/res/res/drawable-sw600dp-xhdpi/unlock_wave.png
Binary files differ
diff --git a/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png b/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
index cb00d82..68e6331 100644
--- a/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
+++ b/core/res/res/drawable-sw720dp-nodpi/default_wallpaper.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/vpn_connected.png b/core/res/res/drawable-xhdpi/vpn_connected.png
index 1f46be2..a8761c9 100644
--- a/core/res/res/drawable-xhdpi/vpn_connected.png
+++ b/core/res/res/drawable-xhdpi/vpn_connected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/vpn_disconnected.png b/core/res/res/drawable-xhdpi/vpn_disconnected.png
index 847d3f5..7118918 100644
--- a/core/res/res/drawable-xhdpi/vpn_disconnected.png
+++ b/core/res/res/drawable-xhdpi/vpn_disconnected.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.png
new file mode 100644
index 0000000..7f7ca14
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_14w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.png
new file mode 100644
index 0000000..52120b8
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_15w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.png
new file mode 100644
index 0000000..d6e9be9
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_16w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.png
new file mode 100644
index 0000000..8d76393
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_17w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.png b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.png
new file mode 100644
index 0000000..ca9c66e
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_thumb_mtrl_18w.png
Binary files differ
diff --git a/core/res/res/drawable-xhdpi/watch_switch_track_mtrl.png b/core/res/res/drawable-xhdpi/watch_switch_track_mtrl.png
new file mode 100644
index 0000000..1aa5442
--- /dev/null
+++ b/core/res/res/drawable-xhdpi/watch_switch_track_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/vpn_connected.png b/core/res/res/drawable-xxhdpi/vpn_connected.png
index ea4930c..16b1e4e 100644
--- a/core/res/res/drawable-xxhdpi/vpn_connected.png
+++ b/core/res/res/drawable-xxhdpi/vpn_connected.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/vpn_disconnected.png b/core/res/res/drawable-xxhdpi/vpn_disconnected.png
index 4cd0dd4..a025818 100644
--- a/core/res/res/drawable-xxhdpi/vpn_disconnected.png
+++ b/core/res/res/drawable-xxhdpi/vpn_disconnected.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.png
new file mode 100644
index 0000000..c0d72d7
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_14w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.png
new file mode 100644
index 0000000..d7c0ec0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_15w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.png
new file mode 100644
index 0000000..5815ba9
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_16w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.png
new file mode 100644
index 0000000..41da8c0
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_17w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.png b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.png
new file mode 100644
index 0000000..975eb01
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_thumb_mtrl_18w.png
Binary files differ
diff --git a/core/res/res/drawable-xxhdpi/watch_switch_track_mtrl.png b/core/res/res/drawable-xxhdpi/watch_switch_track_mtrl.png
new file mode 100644
index 0000000..af2042b
--- /dev/null
+++ b/core/res/res/drawable-xxhdpi/watch_switch_track_mtrl.png
Binary files differ
diff --git a/core/res/res/drawable/ic_check_circle_24px.xml b/core/res/res/drawable/ic_check_circle_24px.xml
index 066a8a7..e9af9e4 100644
--- a/core/res/res/drawable/ic_check_circle_24px.xml
+++ b/core/res/res/drawable/ic_check_circle_24px.xml
@@ -19,9 +19,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
- android:pathData="M0 0h24v24H0z"
- android:fillColor="#00000000"/>
- <path
android:fillColor="#FF000000"
android:pathData="M12.0,2.0C6.48,2.0 2.0,6.48 2.0,12.0s4.48,10.0 10.0,10.0 10.0,-4.48 10.0,-10.0S17.52,2.0 12.0,2.0zm-2.0,15.0l-5.0,-5.0 1.41,-1.41L10.0,14.17l7.59,-7.59L19.0,8.0l-9.0,9.0z"/>
</vector>
diff --git a/core/res/res/drawable/ic_collapse_notification.xml b/core/res/res/drawable/ic_collapse_notification.xml
index 603c159..124e99e 100644
--- a/core/res/res/drawable/ic_collapse_notification.xml
+++ b/core/res/res/drawable/ic_collapse_notification.xml
@@ -22,7 +22,4 @@
<path
android:fillColor="#FF000000"
android:pathData="M12.0,8.0l-6.0,6.0l1.4,1.4l4.6,-4.6l4.6,4.6L18.0,14.0L12.0,8.0z"/>
- <path
- android:pathData="M0,0h24v24H0V0z"
- android:fillColor="#00000000"/>
</vector>
diff --git a/core/res/res/drawable/ic_expand_more_48dp.xml b/core/res/res/drawable/ic_expand_more_48dp.xml
index 11323e3..5a71669 100644
--- a/core/res/res/drawable/ic_expand_more_48dp.xml
+++ b/core/res/res/drawable/ic_expand_more_48dp.xml
@@ -21,7 +21,4 @@
<path
android:fillColor="#FF000000"
android:pathData="M33.17,17.17L24.0,26.34l-9.17,-9.17L12.0,20.0l12.0,12.0 12.0,-12.0z"/>
- <path
- android:pathData="M0 0h48v48H0z"
- android:fillColor="#00000000"/>
</vector>
diff --git a/core/res/res/drawable/ic_expand_notification.xml b/core/res/res/drawable/ic_expand_notification.xml
index db7d3eb..847e326 100644
--- a/core/res/res/drawable/ic_expand_notification.xml
+++ b/core/res/res/drawable/ic_expand_notification.xml
@@ -22,7 +22,4 @@
<path
android:fillColor="#FF000000"
android:pathData="M16.6,8.6L12.0,13.2L7.4,8.6L6.0,10.0l6.0,6.0l6.0,-6.0L16.6,8.6z"/>
- <path
- android:pathData="M0,0h24v24H0V0z"
- android:fillColor="#00000000"/>
</vector>
diff --git a/core/res/res/drawable/ic_feedback.xml b/core/res/res/drawable/ic_feedback.xml
index b2d1cb8..365863d 100644
--- a/core/res/res/drawable/ic_feedback.xml
+++ b/core/res/res/drawable/ic_feedback.xml
@@ -19,9 +19,6 @@
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
- android:pathData="M0 0h24v24H0z"
- android:fillColor="#00000000"/>
- <path
android:fillColor="#FF000000"
android:pathData="M20.0,2.0L4.0,2.0c-1.1,0.0 -1.9,0.9 -1.99,2.0L2.0,22.0l4.0,-4.0l14.0,0.0c1.1,0.0 2.0,-0.9 2.0,-2.0L22.0,4.0c0.0,-1.1 -0.9,-2.0 -2.0,-2.0zm-7.0,12.0l-2.0,0.0l0.0,-2.0l2.0,0.0l0.0,2.0zm0.0,-4.0l-2.0,0.0L11.0,6.0l2.0,0.0l0.0,4.0z"/>
</vector>
diff --git a/core/res/res/drawable/ic_lock_power_off.xml b/core/res/res/drawable/ic_lock_power_off.xml
index 718f17e..babd1be 100644
--- a/core/res/res/drawable/ic_lock_power_off.xml
+++ b/core/res/res/drawable/ic_lock_power_off.xml
@@ -1,19 +1,25 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Copyright (C) 2014 The Android Open Source Project
+<!--
+ 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
+ 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
+ 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.
+ 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.
-->
-
-<bitmap xmlns:android="http://schemas.android.com/apk/res/android"
- android:src="@drawable/ic_lock_power_off_alpha"
- android:tint="?attr/colorControlNormal" />
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M13.0,3.0l-2.0,0.0l0.0,10.0l2.0,0.0L13.0,3.0zm4.83,2.17l-1.42,1.42C17.99,7.86 19.0,9.81 19.0,12.0c0.0,3.87 -3.13,7.0 -7.0,7.0s-7.0,-3.13 -7.0,-7.0c0.0,-2.19 1.01,-4.14 2.58,-5.42L6.17,5.17C4.23,6.82 3.0,9.26 3.0,12.0c0.0,4.97 4.03,9.0 9.0,9.0s9.0,-4.03 9.0,-9.0c0.0,-2.74 -1.23,-5.18 -3.17,-6.83z"/>
+</vector>
diff --git a/core/res/res/drawable/ic_more_items.xml b/core/res/res/drawable/ic_more_items.xml
index 5fdcdce..0ec754c 100644
--- a/core/res/res/drawable/ic_more_items.xml
+++ b/core/res/res/drawable/ic_more_items.xml
@@ -24,6 +24,5 @@
android:fillColor="#000000"
android:pathData="M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7
7v2h14V7H7z" />
- <path
- android:pathData="M0 0h24v24H0z" />
+
</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/ic_refresh.xml b/core/res/res/drawable/ic_refresh.xml
index 1f67168..1297407 100644
--- a/core/res/res/drawable/ic_refresh.xml
+++ b/core/res/res/drawable/ic_refresh.xml
@@ -21,7 +21,4 @@
<path
android:fillColor="#FF000000"
android:pathData="M17.65,6.35C16.2,4.9 14.21,4.0 12.0,4.0c-4.42,0.0 -7.99,3.58 -7.99,8.0s3.57,8.0 7.99,8.0c3.73,0.0 6.84,-2.55 7.73,-6.0l-2.08,0.0c-0.82,2.33 -3.04,4.0 -5.65,4.0 -3.31,0.0 -6.0,-2.69 -6.0,-6.0s2.69,-6.0 6.0,-6.0c1.66,0.0 3.1,0.69 4.22,1.78L13.0,11.0l7.0,0.0L20.0,4.0l-2.35,2.35z"/>
- <path
- android:pathData="M0 0h24v24H0z"
- android:fillColor="#00000000"/>
</vector>
diff --git a/core/res/res/drawable/ic_restart.xml b/core/res/res/drawable/ic_restart.xml
new file mode 100644
index 0000000..47ac483
--- /dev/null
+++ b/core/res/res/drawable/ic_restart.xml
@@ -0,0 +1,28 @@
+<!--
+ 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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportHeight="24.0"
+ android:viewportWidth="24.0"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M12.0,4.0L12.0,1.0L8.0,5.0l4.0,4.0L12.0,6.0c3.9,0.0 7.0,3.1 7.0,7.0c0.0,3.9 -3.1,7.0 -7.0,7.0l0.0,2.0c5.0,0.0 9.0,-4.0 9.0,-9.0C21.0,8.0 17.0,4.0 12.0,4.0z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M5.0,12.9C5.0,11.0 5.8,9.2 7.2,7.9L5.8,6.4C4.0,8.1 3.0,10.5 3.0,12.9c0.0,4.0 2.7,7.6 6.5,8.7l0.5,-1.9C7.1,18.8 5.0,16.1 5.0,12.9z"/>
+</vector>
diff --git a/core/res/res/drawable/ic_schedule.xml b/core/res/res/drawable/ic_schedule.xml
index 899dc82..55d54b1 100644
--- a/core/res/res/drawable/ic_schedule.xml
+++ b/core/res/res/drawable/ic_schedule.xml
@@ -22,9 +22,6 @@
android:fillColor="#FF000000"
android:pathData="M11.99,2.0C6.47,2.0 2.0,6.48 2.0,12.0s4.47,10.0 9.99,10.0C17.52,22.0 22.0,17.52 22.0,12.0S17.52,2.0 11.99,2.0zM12.0,20.0c-4.42,0.0 -8.0,-3.58 -8.0,-8.0s3.58,-8.0 8.0,-8.0 8.0,3.58 8.0,8.0 -3.58,8.0 -8.0,8.0z"/>
<path
- android:pathData="M0 0h24v24H0z"
- android:fillColor="#00000000"/>
- <path
android:fillColor="#FF000000"
android:pathData="M12.5,7.0L11.0,7.0l0.0,6.0l5.25,3.1 0.75,-1.23 -4.5,-2.67z"/>
</vector>
diff --git a/core/res/res/drawable/perm_group_calendar.xml b/core/res/res/drawable/perm_group_calendar.xml
index 4dc7b37..85a783e 100644
--- a/core/res/res/drawable/perm_group_calendar.xml
+++ b/core/res/res/drawable/perm_group_calendar.xml
@@ -24,6 +24,5 @@
android:fillColor="#000000"
android:pathData="M17 12h-5v5h5v-5zM16 1v2H8V1H6v2H5c-1.11 0-1.99 .9 -1.99 2L3 19c0 1.1 .89 2 2
2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2h-1V1h-2zm3 18H5V8h14v11z" />
- <path
- android:pathData="M0 0h24v24H0z" />
+
</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/perm_group_camera.xml b/core/res/res/drawable/perm_group_camera.xml
index 741a40e..61903a5 100644
--- a/core/res/res/drawable/perm_group_camera.xml
+++ b/core/res/res/drawable/perm_group_camera.xml
@@ -28,6 +28,4 @@
android:pathData="M9 2L7.17 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1 0 2-.9
2-2V6c0-1.1-.9-2-2-2h-3.17L15 2H9zm3 15c-2.76 0-5-2.24-5-5s2.24-5 5-5 5 2.24 5
5-2.24 5-5 5z" />
- <path
- android:pathData="M0 0h24v24H0z" />
</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/perm_group_contacts.xml b/core/res/res/drawable/perm_group_contacts.xml
index d698fd1..8f9dc3e 100644
--- a/core/res/res/drawable/perm_group_contacts.xml
+++ b/core/res/res/drawable/perm_group_contacts.xml
@@ -21,8 +21,6 @@
android:viewportHeight="24">
<path
- android:pathData="M0 0h24v24H0zm0 0h24v24H0zm0 0h24v24H0z" />
- <path
android:fillColor="#000000"
android:pathData="M20 0H4v2h16V0zM4 24h16v-2H4v2zM20 4H4c-1.1 0-2 .9-2 2v12c0 1.1 .9 2 2 2h16c1.1
0 2-.9 2-2V6c0-1.1-.9-2-2-2zm-8 2.75c1.24 0 2.25 1.01 2.25 2.25s-1.01 2.25-2.25
diff --git a/core/res/res/drawable/perm_group_location.xml b/core/res/res/drawable/perm_group_location.xml
index fbc6066..cc1ec90 100644
--- a/core/res/res/drawable/perm_group_location.xml
+++ b/core/res/res/drawable/perm_group_location.xml
@@ -24,6 +24,4 @@
android:fillColor="#000000"
android:pathData="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0
9.5c-1.38 0-2.5-1.12-2.5-2.5s1.12-2.5 2.5-2.5 2.5 1.12 2.5 2.5-1.12 2.5-2.5 2.5z" />
- <path
- android:pathData="M0 0h24v24H0z" />
</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/perm_group_microphone.xml b/core/res/res/drawable/perm_group_microphone.xml
index c565d20..d494e67 100644
--- a/core/res/res/drawable/perm_group_microphone.xml
+++ b/core/res/res/drawable/perm_group_microphone.xml
@@ -25,6 +25,4 @@
android:pathData="M12 14c1.66 0 2.99-1.34 2.99-3L15 5c0-1.66-1.34-3-3-3S9 3.34 9 5v6c0 1.66 1.34 3
3 3zm5.3-3c0 3-2.54 5.1-5.3 5.1S6.7 14 6.7 11H5c0 3.41 2.72 6.23 6
6.72V21h2v-3.28c3.28-.48 6-3.3 6-6.72h-1.7z" />
- <path
- android:pathData="M0 0h24v24H0z" />
</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/perm_group_phone_calls.xml b/core/res/res/drawable/perm_group_phone_calls.xml
index a647894..324d864 100644
--- a/core/res/res/drawable/perm_group_phone_calls.xml
+++ b/core/res/res/drawable/perm_group_phone_calls.xml
@@ -19,9 +19,6 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
-
- <path
- android:pathData="M0 0h24v24H0z" />
<path
android:fillColor="#000000"
android:pathData="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27 .67 -.36 1.02-.24 1.12
diff --git a/core/res/res/drawable/perm_group_sms.xml b/core/res/res/drawable/perm_group_sms.xml
index 9b32c601..47bca19e 100644
--- a/core/res/res/drawable/perm_group_sms.xml
+++ b/core/res/res/drawable/perm_group_sms.xml
@@ -24,6 +24,4 @@
android:fillColor="#000000"
android:pathData="M20 2H4c-1.1 0-1.99 .9 -1.99 2L2 22l4-4h14c1.1 0 2-.9 2-2V4c0-1.1-.9-2-2-2zM9
11H7V9h2v2zm4 0h-2V9h2v2zm4 0h-2V9h2v2z" />
- <path
- android:pathData="M0 0h24v24H0z" />
</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/perm_group_storage.xml b/core/res/res/drawable/perm_group_storage.xml
index 477270d..1ff1693 100644
--- a/core/res/res/drawable/perm_group_storage.xml
+++ b/core/res/res/drawable/perm_group_storage.xml
@@ -24,6 +24,4 @@
android:fillColor="#000000"
android:pathData="M10 4H4c-1.1 0-1.99 .9 -1.99 2L2 18c0 1.1 .9 2 2 2h16c1.1 0 2-.9
2-2V8c0-1.1-.9-2-2-2h-8l-2-2z" />
- <path
- android:pathData="M0 0h24v24H0z" />
</vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml b/core/res/res/drawable/progress_indeterminate_anim_large_material.xml
similarity index 70%
copy from core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml
copy to core/res/res/drawable/progress_indeterminate_anim_large_material.xml
index 9f92361..560ec5af 100644
--- a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml
+++ b/core/res/res/drawable/progress_indeterminate_anim_large_material.xml
@@ -1,19 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
-
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/watch_switch_thumb_material">
+ android:drawable="@drawable/vector_drawable_progress_bar_large" >
<target
- android:name="thumb_path"
- android:animation="@anim/watch_switch_thumb_to_on_animation" />
+ android:name="progressBar"
+ android:animation="@anim/progress_indeterminate_material" />
+
+ <target
+ android:name="root"
+ android:animation="@anim/progress_indeterminate_rotation_material" />
</animated-vector>
+
diff --git a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml b/core/res/res/drawable/progress_indeterminate_anim_medium_material.xml
similarity index 72%
rename from core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml
rename to core/res/res/drawable/progress_indeterminate_anim_medium_material.xml
index 9f92361..fbea22f 100644
--- a/core/res/res/drawable/watch_switch_thumb_to_on_anim_mtrl.xml
+++ b/core/res/res/drawable/progress_indeterminate_anim_medium_material.xml
@@ -1,19 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- 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.
-->
-
<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/watch_switch_thumb_material">
+ android:drawable="@drawable/vector_drawable_progress_bar_medium" >
+
<target
- android:name="thumb_path"
- android:animation="@anim/watch_switch_thumb_to_on_animation" />
-</animated-vector>
+ android:name="progressBar"
+ android:animation="@anim/progress_indeterminate_material" />
+
+ <target
+ android:name="root"
+ android:animation="@anim/progress_indeterminate_rotation_material" />
+
+</animated-vector>
\ No newline at end of file
diff --git a/core/res/res/drawable/progress_large_material.xml b/core/res/res/drawable/progress_large_material.xml
index 526f914..ee82e35 100644
--- a/core/res/res/drawable/progress_large_material.xml
+++ b/core/res/res/drawable/progress_large_material.xml
@@ -13,16 +13,8 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/vector_drawable_progress_bar_large" >
-
- <target
- android:name="progressBar"
- android:animation="@anim/progress_indeterminate_material" />
-
- <target
- android:name="root"
- android:animation="@anim/progress_indeterminate_rotation_material" />
-
-</animated-vector>
+<com.android.internal.graphics.drawable.AnimationScaleListDrawable
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/progress_static_material" />
+ <item android:drawable="@drawable/progress_indeterminate_anim_large_material" />
+</com.android.internal.graphics.drawable.AnimationScaleListDrawable>
diff --git a/core/res/res/drawable/progress_medium_material.xml b/core/res/res/drawable/progress_medium_material.xml
index cc35816..5c92600 100644
--- a/core/res/res/drawable/progress_medium_material.xml
+++ b/core/res/res/drawable/progress_medium_material.xml
@@ -13,15 +13,8 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/vector_drawable_progress_bar_medium" >
-
- <target
- android:name="progressBar"
- android:animation="@anim/progress_indeterminate_material" />
-
- <target
- android:name="root"
- android:animation="@anim/progress_indeterminate_rotation_material" />
-
-</animated-vector>
\ No newline at end of file
+<com.android.internal.graphics.drawable.AnimationScaleListDrawable
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/progress_static_material" />
+ <item android:drawable="@drawable/progress_indeterminate_anim_medium_material" />
+</com.android.internal.graphics.drawable.AnimationScaleListDrawable>
diff --git a/core/res/res/drawable/progress_small_material.xml b/core/res/res/drawable/progress_small_material.xml
index c6e4380..cec9d95 100644
--- a/core/res/res/drawable/progress_small_material.xml
+++ b/core/res/res/drawable/progress_small_material.xml
@@ -13,16 +13,17 @@
See the License for the specific language governing permissions and
limitations under the License.
-->
-
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/vector_drawable_progress_bar_small" >
-
- <target
- android:name="progressBar"
- android:animation="@anim/progress_indeterminate_material" />
-
- <target
- android:name="root"
- android:animation="@anim/progress_indeterminate_rotation_material" />
-
-</animated-vector>
+<com.android.internal.graphics.drawable.AnimationScaleListDrawable
+ xmlns:android="http://schemas.android.com/apk/res/android">
+ <item android:drawable="@drawable/progress_static_material" />
+ <item>
+ <animated-vector android:drawable="@drawable/vector_drawable_progress_bar_small" >
+ <target
+ android:name="progressBar"
+ android:animation="@anim/progress_indeterminate_material" />
+ <target
+ android:name="root"
+ android:animation="@anim/progress_indeterminate_rotation_material" />
+ </animated-vector>
+ </item>
+</com.android.internal.graphics.drawable.AnimationScaleListDrawable>
diff --git a/core/res/res/drawable/progress_static_material.xml b/core/res/res/drawable/progress_static_material.xml
new file mode 100644
index 0000000..b078fa9
--- /dev/null
+++ b/core/res/res/drawable/progress_static_material.xml
@@ -0,0 +1,25 @@
+<!--
+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.
+-->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24.0dp"
+ android:height="24.0dp"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0"
+ >
+ <path
+ android:fillColor="?attr/colorControlActivated"
+ android:pathData="M17.65,6.35C16.2,4.9 14.21,4.0 12.0,4.0c-4.42,0.0 -7.99,3.58 -7.99,8.0s3.57,8.0 7.99,8.0c3.73,0.0 6.84,-2.55 7.73,-6.0l-2.08,0.0c-0.82,2.33 -3.04,4.0 -5.65,4.0 -3.31,0.0 -6.0,-2.69 -6.0,-6.0s2.69,-6.0 6.0,-6.0c1.66,0.0 3.1,0.69 4.22,1.78L13.0,11.0l7.0,0.0L20.0,4.0l-2.35,2.35z"/>
+</vector>
diff --git a/core/res/res/drawable/watch_switch_thumb_material.xml b/core/res/res/drawable/watch_switch_thumb_material.xml
deleted file mode 100644
index 3463a4f..0000000
--- a/core/res/res/drawable/watch_switch_thumb_material.xml
+++ /dev/null
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="20dp"
- android:height="40dp"
- android:viewportHeight="40"
- android:viewportWidth="20">
- <group
- android:translateX="10"
- android:translateY="20">
- <path
- android:name="thumb_path"
- android:fillColor="@color/white"
- android:pathData="M 0.0,-7.0 l 0.0,0.0 c 3.8659932486,0.0 7.0,3.1340067514 7.0,7.0 l 0.0,0.0 c 0.0,3.8659932486 -3.1340067514,7.0 -7.0,7.0 l 0.0,0.0 c -3.8659932486,0.0 -7.0,-3.1340067514 -7.0,-7.0 l 0.0,0.0 c 0.0,-3.8659932486 3.1340067514,-7.0 7.0,-7.0 Z" />
- </group>
-</vector>
diff --git a/core/res/res/drawable/watch_switch_thumb_material_anim.xml b/core/res/res/drawable/watch_switch_thumb_material_anim.xml
index 686fb97..9e3e893 100644
--- a/core/res/res/drawable/watch_switch_thumb_material_anim.xml
+++ b/core/res/res/drawable/watch_switch_thumb_material_anim.xml
@@ -15,21 +15,79 @@
android:constantSize="true">
<item
android:id="@+id/off"
- android:drawable="@drawable/watch_switch_thumb_material"
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
android:state_enabled="false" />
<item
android:id="@+id/on"
- android:drawable="@drawable/watch_switch_thumb_material"
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
android:state_checked="true" />
<item
android:id="@+id/off"
- android:drawable="@drawable/watch_switch_thumb_material" />
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w" />
<transition
- android:drawable="@drawable/watch_switch_thumb_to_on_anim_mtrl"
android:fromId="@id/off"
- android:toId="@id/on" />
+ android:toId="@id/on">
+ <animation-list>
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
+ android:duration="30" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_15w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_16w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_17w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_18w"
+ android:duration="75" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_17w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_16w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_15w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
+ android:duration="30" />
+ </animation-list>
+ </transition>
<transition
- android:drawable="@drawable/watch_switch_thumb_to_off_anim_mtrl"
android:fromId="@id/on"
- android:toId="@id/off" />
+ android:toId="@id/off">
+ <animation-list>
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
+ android:duration="30" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_15w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_16w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_17w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_18w"
+ android:duration="75" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_17w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_16w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_15w"
+ android:duration="15" />
+ <item
+ android:drawable="@drawable/watch_switch_thumb_mtrl_14w"
+ android:duration="30" />
+ </animation-list>
+ </transition>
</animated-selector>
diff --git a/core/res/res/drawable/watch_switch_thumb_to_off_anim_mtrl.xml b/core/res/res/drawable/watch_switch_thumb_to_off_anim_mtrl.xml
deleted file mode 100644
index 2c6ba2f..0000000
--- a/core/res/res/drawable/watch_switch_thumb_to_off_anim_mtrl.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<animated-vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:drawable="@drawable/watch_switch_thumb_material">
- <target
- android:name="thumb_path"
- android:animation="@anim/watch_switch_thumb_to_off_animation" />
-</animated-vector>
diff --git a/core/res/res/drawable/watch_switch_track_material.xml b/core/res/res/drawable/watch_switch_track_material.xml
deleted file mode 100644
index 00cdadb..0000000
--- a/core/res/res/drawable/watch_switch_track_material.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- 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.
--->
-
-<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:gravity="center_vertical|center_horizontal">
- <shape android:shape="oval">
- <solid android:color="@android:color/white" />
- <size
- android:width="40dp"
- android:height="40dp" />
- </shape>
- </item>
-</layer-list>
\ No newline at end of file
diff --git a/core/res/res/layout-notround-watch/alert_dialog_header_micro.xml b/core/res/res/layout-notround-watch/alert_dialog_title_material.xml
similarity index 85%
rename from core/res/res/layout-notround-watch/alert_dialog_header_micro.xml
rename to core/res/res/layout-notround-watch/alert_dialog_title_material.xml
index fc840d9..307c6db 100644
--- a/core/res/res/layout-notround-watch/alert_dialog_header_micro.xml
+++ b/core/res/res/layout-notround-watch/alert_dialog_title_material.xml
@@ -30,12 +30,9 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@null" />
- <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
+ <TextView android:id="@+id/alertTitle"
style="?android:attr/windowTitleStyle"
- android:ellipsize="end"
- android:layout_marginStart="8dp"
android:layout_marginBottom="8dp"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAlignment="viewStart" />
+ android:layout_height="wrap_content" />
</LinearLayout>
diff --git a/core/res/res/layout-round-watch/alert_dialog_header_micro.xml b/core/res/res/layout-round-watch/alert_dialog_title_material.xml
similarity index 84%
rename from core/res/res/layout-round-watch/alert_dialog_header_micro.xml
rename to core/res/res/layout-round-watch/alert_dialog_title_material.xml
index 6f7ae02..0279911 100644
--- a/core/res/res/layout-round-watch/alert_dialog_header_micro.xml
+++ b/core/res/res/layout-round-watch/alert_dialog_title_material.xml
@@ -27,12 +27,10 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@null" />
- <com.android.internal.widget.DialogTitle android:id="@+id/alertTitle"
+ <TextView android:id="@+id/alertTitle"
style="?android:attr/windowTitleStyle"
- android:ellipsize="end"
android:layout_marginTop="36dp"
- android:layout_marginBottom="4dp"
+ android:layout_marginBottom="8dp"
android:layout_width="match_parent"
- android:layout_height="wrap_content"
- android:textAlignment="center" />
+ android:layout_height="wrap_content" />
</FrameLayout>
diff --git a/core/res/res/layout-watch/alert_dialog_material.xml b/core/res/res/layout-watch/alert_dialog_material.xml
index ce8e20a..002dde8 100644
--- a/core/res/res/layout-watch/alert_dialog_material.xml
+++ b/core/res/res/layout-watch/alert_dialog_material.xml
@@ -39,7 +39,7 @@
<include android:id="@+id/title_template"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- layout="@layout/alert_dialog_header_micro"/>
+ layout="@layout/alert_dialog_title_material"/>
</FrameLayout>
<!-- Content Panel -->
@@ -50,7 +50,8 @@
<TextView android:id="@+id/message"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:textAppearance="@style/TextAppearance.Material.Body1"
+ android:gravity="@integer/config_dialogTextGravity"
+ android:textAppearance="@style/TextAppearance.Material.Subhead"
android:paddingStart="?dialogPreferredPadding"
android:paddingEnd="?dialogPreferredPadding"
android:paddingTop="8dip"
@@ -77,6 +78,7 @@
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
+ android:layout_gravity="bottom"
android:orientation="vertical"
android:minHeight="@dimen/alert_dialog_button_bar_height"
android:paddingBottom="?dialogPreferredPadding"
diff --git a/core/res/res/layout-watch/date_picker_dialog.xml b/core/res/res/layout-watch/date_picker_dialog.xml
new file mode 100644
index 0000000..b8772bc
--- /dev/null
+++ b/core/res/res/layout-watch/date_picker_dialog.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+ Copyright (C) 2007 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.
+-->
+
+<DatePicker xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/datePicker"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:spinnersShown="true"
+ android:calendarViewShown="false"
+ android:datePickerMode="@integer/date_picker_mode" />
diff --git a/core/res/res/layout-watch/number_picker_material.xml b/core/res/res/layout-watch/number_picker_material.xml
deleted file mode 100644
index a1c09214..0000000
--- a/core/res/res/layout-watch/number_picker_material.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!--
-**
-** Copyright 2012, 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.
-*/
--->
-
-<merge xmlns:android="http://schemas.android.com/apk/res/android">
-
- <view class="android.widget.NumberPicker$CustomEditText"
- android:textAppearance="?android:attr/textAppearanceLarge"
- android:id="@+id/numberpicker_input"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:gravity="center"
- android:singleLine="true"
- android:background="@null" />
-
-</merge>
diff --git a/core/res/res/layout-watch/preference_widget_switch.xml b/core/res/res/layout-watch/preference_widget_switch.xml
index 37d0c6b..a1a845a 100644
--- a/core/res/res/layout-watch/preference_widget_switch.xml
+++ b/core/res/res/layout-watch/preference_widget_switch.xml
@@ -23,8 +23,9 @@
android:layout_gravity="center"
android:thumb="@drawable/watch_switch_thumb_material_anim"
android:thumbTint="@color/watch_switch_thumb_color_material"
- android:track="@drawable/watch_switch_track_material"
- android:trackTint="?android:colorPrimary"
+ android:thumbTintMode="multiply"
+ android:track="@drawable/watch_switch_track_mtrl"
+ android:trackTint="@color/watch_switch_track_color_material"
android:focusable="false"
android:clickable="false"
android:background="@null" />
diff --git a/core/res/res/layout-watch/time_picker_dialog.xml b/core/res/res/layout-watch/time_picker_dialog.xml
new file mode 100644
index 0000000..788602b
--- /dev/null
+++ b/core/res/res/layout-watch/time_picker_dialog.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+**
+** Copyright 2007, 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.
+*/
+-->
+
+<TimePicker xmlns:android="http://schemas.android.com/apk/res/android"
+ android:id="@+id/timePicker"
+ android:layout_gravity="center_horizontal"
+ android:gravity="center_horizontal"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:timePickerMode="@integer/time_picker_mode" />
diff --git a/core/res/res/layout/date_picker_legacy_holo.xml b/core/res/res/layout/date_picker_legacy_holo.xml
index b465d97..a6e93c9 100644
--- a/core/res/res/layout/date_picker_legacy_holo.xml
+++ b/core/res/res/layout/date_picker_legacy_holo.xml
@@ -41,8 +41,8 @@
android:id="@+id/month"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:layout_marginStart="8dip"
android:layout_marginEnd="8dip"
android:focusable="true"
@@ -54,8 +54,8 @@
android:id="@+id/day"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:layout_marginStart="8dip"
android:layout_marginEnd="8dip"
android:focusable="true"
@@ -67,8 +67,8 @@
android:id="@+id/year"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:layout_marginStart="8dip"
android:layout_marginEnd="16dip"
android:focusable="true"
diff --git a/core/res/res/layout/number_picker_material.xml b/core/res/res/layout/number_picker_material.xml
index b045585..6fbd2b2 100644
--- a/core/res/res/layout/number_picker_material.xml
+++ b/core/res/res/layout/number_picker_material.xml
@@ -22,4 +22,4 @@
android:gravity="center"
android:singleLine="true"
android:background="@null"
- android:textAppearance="@style/TextAppearance.Material.Body1" />
+ android:textAppearance="@style/TextAppearance.Material.NumberPicker" />
diff --git a/core/res/res/layout/time_picker_legacy_material.xml b/core/res/res/layout/time_picker_legacy_material.xml
index c6b7d3a..ee56266 100644
--- a/core/res/res/layout/time_picker_legacy_material.xml
+++ b/core/res/res/layout/time_picker_legacy_material.xml
@@ -40,8 +40,8 @@
android:id="@+id/hour"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:focusable="true"
android:focusableInTouchMode="true"
/>
@@ -62,8 +62,8 @@
android:id="@+id/minute"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:focusable="true"
android:focusableInTouchMode="true"
/>
@@ -75,8 +75,8 @@
android:id="@+id/amPm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="16dip"
- android:layout_marginBottom="16dip"
+ android:layout_marginTop="@dimen/picker_top_margin"
+ android:layout_marginBottom="@dimen/picker_bottom_margin"
android:layout_marginStart="8dip"
android:layout_marginEnd="8dip"
android:focusable="true"
diff --git a/core/res/res/raw-ar-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ar-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 002be41..0000000
--- a/core/res/res/raw-ar-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>نافذة جديدة للتصفح المتخفي</title>
- </head>
- <body>
- <p><strong>أنت الآن في وضع التصفح المتخفي</strong> الصفحات التي تشاهدها في هذه النافذة لن تظهر في سجل المتصفح أو سجلّ البحث، ولن تترك آثارًا أخرى للتتبع، مثل ملفات تعريف الارتباط على جهازك بعد أن تغلق نافذة التصفح المتخفي. ورغم ذلك، سيتم الاحتفاظ بأي ملفات تنزلها أو أية إشارات مرجعية تقوم بإنشائها.</p>
-
- <p><strong>العمل في وضع التصفح المخفي لا يؤثر على طريقة عمل الأشخاص الآخرين أو الخوادم أو البرامج الأخرى. كن على حذر مما يلي:</strong></p>
-
- <ul>
- <li>مواقع الويب التي تجمع معلومات عنك أو تشارك الآخرين فيها</li>
- <li>مزوّدو خدمة الإنترنت أو الموظفون الذين يتتبعون الصفحات التي تزورها</li>
- <li>البرامج الضارة التي تتبع ضغطات المفاتيح التي تقوم بها مقابل تنزيل وجوه رمزية مجانًا</li>
- <li>المراقبة من قبل العملاء السريين</li>
- <li>الأشخاص الذين يقفون خلفك</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ar/incognito_mode_start_page.html b/core/res/res/raw-ar/incognito_mode_start_page.html
deleted file mode 100644
index 002be41..0000000
--- a/core/res/res/raw-ar/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>نافذة جديدة للتصفح المتخفي</title>
- </head>
- <body>
- <p><strong>أنت الآن في وضع التصفح المتخفي</strong> الصفحات التي تشاهدها في هذه النافذة لن تظهر في سجل المتصفح أو سجلّ البحث، ولن تترك آثارًا أخرى للتتبع، مثل ملفات تعريف الارتباط على جهازك بعد أن تغلق نافذة التصفح المتخفي. ورغم ذلك، سيتم الاحتفاظ بأي ملفات تنزلها أو أية إشارات مرجعية تقوم بإنشائها.</p>
-
- <p><strong>العمل في وضع التصفح المخفي لا يؤثر على طريقة عمل الأشخاص الآخرين أو الخوادم أو البرامج الأخرى. كن على حذر مما يلي:</strong></p>
-
- <ul>
- <li>مواقع الويب التي تجمع معلومات عنك أو تشارك الآخرين فيها</li>
- <li>مزوّدو خدمة الإنترنت أو الموظفون الذين يتتبعون الصفحات التي تزورها</li>
- <li>البرامج الضارة التي تتبع ضغطات المفاتيح التي تقوم بها مقابل تنزيل وجوه رمزية مجانًا</li>
- <li>المراقبة من قبل العملاء السريين</li>
- <li>الأشخاص الذين يقفون خلفك</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-bg-xlarge/incognito_mode_start_page.html b/core/res/res/raw-bg-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index ee25ae4..0000000
--- a/core/res/res/raw-bg-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нов прозорец „инкогнито“</title>
- </head>
- <body>
- <p><strong>Влязохте в режим „инкогнито“</strong>. Страниците, които разглеждате в този прозорец, няма да се показват в историята на браузъра ви, нито в историята на търсенията ви. Те също няма да оставят други следи като „бисквитки“ в устройството ви, след като затворите прозореца в режим „инкогнито“. Ще се съхранят обаче всички файлове, които изтеглите, или отметки, които създадете.</p>
-
- <p><strong>Преминаването в режим „инкогнито“ не засяга поведението на други хора, сървъри или софтуер. </strong>Внимавайте за:</p>
-
- <ul>
- <li>уебсайтове, които събират или споделят информация за вас;</li>
- <li>доставчици на интернет услуги или служители, които проследяват посещаваните от вас страници;</li>
- <li>злонамерен софтуер, който ви дава безплатни емотикони, но в замяна проследява натисканията на клавишите от вас;</li>
- <li>наблюдение от тайните служби;</li>
- <li>хора, които стоят зад вас.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-bg/incognito_mode_start_page.html b/core/res/res/raw-bg/incognito_mode_start_page.html
deleted file mode 100644
index ee25ae4..0000000
--- a/core/res/res/raw-bg/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нов прозорец „инкогнито“</title>
- </head>
- <body>
- <p><strong>Влязохте в режим „инкогнито“</strong>. Страниците, които разглеждате в този прозорец, няма да се показват в историята на браузъра ви, нито в историята на търсенията ви. Те също няма да оставят други следи като „бисквитки“ в устройството ви, след като затворите прозореца в режим „инкогнито“. Ще се съхранят обаче всички файлове, които изтеглите, или отметки, които създадете.</p>
-
- <p><strong>Преминаването в режим „инкогнито“ не засяга поведението на други хора, сървъри или софтуер. </strong>Внимавайте за:</p>
-
- <ul>
- <li>уебсайтове, които събират или споделят информация за вас;</li>
- <li>доставчици на интернет услуги или служители, които проследяват посещаваните от вас страници;</li>
- <li>злонамерен софтуер, който ви дава безплатни емотикони, но в замяна проследява натисканията на клавишите от вас;</li>
- <li>наблюдение от тайните служби;</li>
- <li>хора, които стоят зад вас.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ca-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ca-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index bec3dac..0000000
--- a/core/res/res/raw-ca-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova finestra d'incògnit</title>
- </head>
- <body>
- <p><strong>Has passat a l'estat d'incògnit</strong>. Les pàgines que visualitzis en aquesta finestra no apareixeran a l'historial del navegador ni a l'historial de cerques, i no deixaran cap pista, com ara galetes, al dispositiu després de tancar la finestra d'incògnit. Tanmateix, es conservaran tots els fitxers que baixis o les adreces d'interès que creïs.</p>
-
- <p><strong>Utilitzar el mode d'incògnit no afecta el comportament d'altres usuaris, servidors ni programari. Vés amb compte amb:</strong></p>
-
- <ul>
- <li>llocs web que recopilen o comparteixen informació sobre la teva identitat,</li>
- <li>proveïdors de serveis d'Internet o treballadors que segueixen les pàgines que visites,</li>
- <li>programari maliciós que segueix les teves pulsacions del teclat a canvi d'emoticones,</li>
- <li>vigilància per part d'agents secrets,</li>
- <li>persones que estan darrere teu.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ca/incognito_mode_start_page.html b/core/res/res/raw-ca/incognito_mode_start_page.html
deleted file mode 100644
index bec3dac..0000000
--- a/core/res/res/raw-ca/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova finestra d'incògnit</title>
- </head>
- <body>
- <p><strong>Has passat a l'estat d'incògnit</strong>. Les pàgines que visualitzis en aquesta finestra no apareixeran a l'historial del navegador ni a l'historial de cerques, i no deixaran cap pista, com ara galetes, al dispositiu després de tancar la finestra d'incògnit. Tanmateix, es conservaran tots els fitxers que baixis o les adreces d'interès que creïs.</p>
-
- <p><strong>Utilitzar el mode d'incògnit no afecta el comportament d'altres usuaris, servidors ni programari. Vés amb compte amb:</strong></p>
-
- <ul>
- <li>llocs web que recopilen o comparteixen informació sobre la teva identitat,</li>
- <li>proveïdors de serveis d'Internet o treballadors que segueixen les pàgines que visites,</li>
- <li>programari maliciós que segueix les teves pulsacions del teclat a canvi d'emoticones,</li>
- <li>vigilància per part d'agents secrets,</li>
- <li>persones que estan darrere teu.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-cs-xlarge/incognito_mode_start_page.html b/core/res/res/raw-cs-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 7420393..0000000
--- a/core/res/res/raw-cs-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nové anonymní okno</title>
- </head>
- <body>
- <p><strong>Spustili jste anonymní režim</strong>. Stránky, které zobrazíte v tomto okně, se nezahrnou do historie prohlížeče ani historie vyhledávání a dokonce po zavření tohoto anonymního okna ve vašem zařízení nezanechají ani žádné jiné stopy například v podobě souborů cookie. Veškeré stažené soubory nebo vytvořené záložky však budou zachovány.</p>
-
- <p><strong>Použití anonymního režimu nemá vliv na chování jiných osob, serverů nebo softwaru. Dejte si pozor na:</strong></p>
-
- <ul>
- <li>Weby, které sbírají nebo sdílejí informace o vás</li>
- <li>Poskytovatele internetových služeb nebo zaměstnavatele, kteří sledují stránky, které navštěvujete</li>
- <li>Škodlivý software, který sleduje stisknuté klávesy a výměnou nabízí nové emotikony</li>
- <li>Tajné agenty</li>
- <li>Lidi, kteří vám koukají přes rameno</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-cs/incognito_mode_start_page.html b/core/res/res/raw-cs/incognito_mode_start_page.html
deleted file mode 100644
index 7420393..0000000
--- a/core/res/res/raw-cs/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nové anonymní okno</title>
- </head>
- <body>
- <p><strong>Spustili jste anonymní režim</strong>. Stránky, které zobrazíte v tomto okně, se nezahrnou do historie prohlížeče ani historie vyhledávání a dokonce po zavření tohoto anonymního okna ve vašem zařízení nezanechají ani žádné jiné stopy například v podobě souborů cookie. Veškeré stažené soubory nebo vytvořené záložky však budou zachovány.</p>
-
- <p><strong>Použití anonymního režimu nemá vliv na chování jiných osob, serverů nebo softwaru. Dejte si pozor na:</strong></p>
-
- <ul>
- <li>Weby, které sbírají nebo sdílejí informace o vás</li>
- <li>Poskytovatele internetových služeb nebo zaměstnavatele, kteří sledují stránky, které navštěvujete</li>
- <li>Škodlivý software, který sleduje stisknuté klávesy a výměnou nabízí nové emotikony</li>
- <li>Tajné agenty</li>
- <li>Lidi, kteří vám koukají přes rameno</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-da-xlarge/incognito_mode_start_page.html b/core/res/res/raw-da-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index eae989f..0000000
--- a/core/res/res/raw-da-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nyt inkognitovindue</title>
- </head>
- <body>
- <p><strong>Nu er du inkognito</strong>. De sider, du besøger i dette vindue, vises ikke i din browser- eller søgeoversigt, og de efterlader ikke andre spor, såsom cookies, på din enhed, når du lukker incognitovinduet. Filer, som du downloader eller bogmærker, som du opretter, gemmes dog.</p>
-
- <p><strong>At være inkognito er ikke noget, der påvirker andre folk, servere eller software. Vær opmærksom på:</strong></p>
-
- <ul>
- <li>Websider, der indsamler eller deler oplysninger om dig</li>
- <li>Internetserviceudbydere eller arbejdsgivere, der registrerer de sider, du besøger</li>
- <li>Ondsindet software, der registrerer dine tasteslag til gengæld for gratis smileys</li>
- <li>Overvågning af hemmelige agenter</li>
- <li>Folk, der kigger dig over skulderen</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-da/incognito_mode_start_page.html b/core/res/res/raw-da/incognito_mode_start_page.html
deleted file mode 100644
index eae989f..0000000
--- a/core/res/res/raw-da/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nyt inkognitovindue</title>
- </head>
- <body>
- <p><strong>Nu er du inkognito</strong>. De sider, du besøger i dette vindue, vises ikke i din browser- eller søgeoversigt, og de efterlader ikke andre spor, såsom cookies, på din enhed, når du lukker incognitovinduet. Filer, som du downloader eller bogmærker, som du opretter, gemmes dog.</p>
-
- <p><strong>At være inkognito er ikke noget, der påvirker andre folk, servere eller software. Vær opmærksom på:</strong></p>
-
- <ul>
- <li>Websider, der indsamler eller deler oplysninger om dig</li>
- <li>Internetserviceudbydere eller arbejdsgivere, der registrerer de sider, du besøger</li>
- <li>Ondsindet software, der registrerer dine tasteslag til gengæld for gratis smileys</li>
- <li>Overvågning af hemmelige agenter</li>
- <li>Folk, der kigger dig over skulderen</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-de-xlarge/incognito_mode_start_page.html b/core/res/res/raw-de-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 1d2cb69..0000000
--- a/core/res/res/raw-de-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Neues Inkognito-Fenster</title>
- </head>
- <body>
- <p><strong>Sie haben den Modus für anonymes Browsen aktiviert</strong>. In diesem Fenster aufgerufene Seiten erscheinen nicht in Ihrem Browser- oder Suchverlauf. Zudem werden nach dem Schließen des Inkognito-Fensters keine anderen Spuren wie etwa Cookies auf Ihrem Gerät gespeichert. Heruntergeladene Dateien oder hinzugefügte Lesezeichen werden jedoch beibehalten.</p>
-
- <p><strong>Das anonyme Browsen wirkt sich nicht auf das Verhalten von Menschen, Servern oder Software aus. </strong>Vorsicht ist geboten bei:</p>
-
- <ul>
- <li>Websites, auf denen Informationen über Sie gesammelt oder weitergegeben werden</li>
- <li>Internetanbietern oder Arbeitgebern, die die von Ihnen aufgerufenen Seiten protokollieren</li>
- <li>Bösartiger Software, die Ihnen kostenlose Smileys bietet, dafür aber Ihre Tastatureingaben speichert</li>
- <li>Geheimagenten</li>
- <li>Personen, die hinter Ihnen stehen</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-de/incognito_mode_start_page.html b/core/res/res/raw-de/incognito_mode_start_page.html
deleted file mode 100644
index 1d2cb69..0000000
--- a/core/res/res/raw-de/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Neues Inkognito-Fenster</title>
- </head>
- <body>
- <p><strong>Sie haben den Modus für anonymes Browsen aktiviert</strong>. In diesem Fenster aufgerufene Seiten erscheinen nicht in Ihrem Browser- oder Suchverlauf. Zudem werden nach dem Schließen des Inkognito-Fensters keine anderen Spuren wie etwa Cookies auf Ihrem Gerät gespeichert. Heruntergeladene Dateien oder hinzugefügte Lesezeichen werden jedoch beibehalten.</p>
-
- <p><strong>Das anonyme Browsen wirkt sich nicht auf das Verhalten von Menschen, Servern oder Software aus. </strong>Vorsicht ist geboten bei:</p>
-
- <ul>
- <li>Websites, auf denen Informationen über Sie gesammelt oder weitergegeben werden</li>
- <li>Internetanbietern oder Arbeitgebern, die die von Ihnen aufgerufenen Seiten protokollieren</li>
- <li>Bösartiger Software, die Ihnen kostenlose Smileys bietet, dafür aber Ihre Tastatureingaben speichert</li>
- <li>Geheimagenten</li>
- <li>Personen, die hinter Ihnen stehen</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-el-xlarge/incognito_mode_start_page.html b/core/res/res/raw-el-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 5641650..0000000
--- a/core/res/res/raw-el-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Νέο παράθυρο για ανώνυμη περιήγηση</title>
- </head>
- <body>
- <p><strong>Είστε σε κατάσταση ανώνυμης περιήγησης</strong>. Οι σελίδες που θα προβάλλετε σε αυτό το παράθυρο δεν θα εμφανιστούν στο ιστορικό του πρόγράμματος περιήγησης ή στο ιστορικό αναζήτησης. Επίσης, δεν θα αφήσουν ίχνη, όπως cookie, στη συσκευή σας αφού κλείσετε το παράθυρο ανώνυμης περιήγησης. Ωστόσο, τα αρχεία και οι σελιδοδείκτες που θα δημιουργήσετε θα διατηρηθούν.</p>
-
- <p><strong>Η κατάσταση ανώνυμης περιήγησης δεν επηρεάζει την συμπεριφορά άλλων, διακομιστών ή λογισμικού. Αλλά προσοχή σε:</strong></p>
-
- <ul>
- <li>Ιστοτόπους που συλλέγουν ή μοιράζονται πληροφορίες για εσάς</li>
- <li>Πάροχους υπηρεσιών διαδικτύου ή εργοδότες που παρακολουθούν τις ιστοσελίδες που επισκέπτεστε</li>
- <li>Κακόβουλο λογισμικό που καταγράφει ότι πληκτρολογείτε με αντάλλαγμα δωρεάν "φατσούλες"</li>
- <li>Παρακολούθηση από μυστικούς πράκτορες</li>
- <li>Άτομα που στέκονται πίσω σας</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-el/incognito_mode_start_page.html b/core/res/res/raw-el/incognito_mode_start_page.html
deleted file mode 100644
index 5641650..0000000
--- a/core/res/res/raw-el/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Νέο παράθυρο για ανώνυμη περιήγηση</title>
- </head>
- <body>
- <p><strong>Είστε σε κατάσταση ανώνυμης περιήγησης</strong>. Οι σελίδες που θα προβάλλετε σε αυτό το παράθυρο δεν θα εμφανιστούν στο ιστορικό του πρόγράμματος περιήγησης ή στο ιστορικό αναζήτησης. Επίσης, δεν θα αφήσουν ίχνη, όπως cookie, στη συσκευή σας αφού κλείσετε το παράθυρο ανώνυμης περιήγησης. Ωστόσο, τα αρχεία και οι σελιδοδείκτες που θα δημιουργήσετε θα διατηρηθούν.</p>
-
- <p><strong>Η κατάσταση ανώνυμης περιήγησης δεν επηρεάζει την συμπεριφορά άλλων, διακομιστών ή λογισμικού. Αλλά προσοχή σε:</strong></p>
-
- <ul>
- <li>Ιστοτόπους που συλλέγουν ή μοιράζονται πληροφορίες για εσάς</li>
- <li>Πάροχους υπηρεσιών διαδικτύου ή εργοδότες που παρακολουθούν τις ιστοσελίδες που επισκέπτεστε</li>
- <li>Κακόβουλο λογισμικό που καταγράφει ότι πληκτρολογείτε με αντάλλαγμα δωρεάν "φατσούλες"</li>
- <li>Παρακολούθηση από μυστικούς πράκτορες</li>
- <li>Άτομα που στέκονται πίσω σας</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html b/core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 7436f98..0000000
--- a/core/res/res/raw-en-rGB-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>New incognito window</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages that you view in this window won't appear in your browser history or search history, and they won't leave other traces, such as cookies, on your device after you close the incognito window. However, any files that you download or bookmarks that you create will be preserved.</p>
-
- <p><strong>Going incognito doesn't affect the behaviour of other people, servers or software. Be cautious of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages that you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-en-rGB/incognito_mode_start_page.html b/core/res/res/raw-en-rGB/incognito_mode_start_page.html
deleted file mode 100644
index 7436f98..0000000
--- a/core/res/res/raw-en-rGB/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>New incognito window</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages that you view in this window won't appear in your browser history or search history, and they won't leave other traces, such as cookies, on your device after you close the incognito window. However, any files that you download or bookmarks that you create will be preserved.</p>
-
- <p><strong>Going incognito doesn't affect the behaviour of other people, servers or software. Be cautious of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages that you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html b/core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index d283df5..0000000
--- a/core/res/res/raw-es-rUS-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nueva ventana de incógnito</title>
- </head>
- <body>
- <p><strong>Estás de incógnito</strong>. Las páginas que veas en esta ventana no aparecerán en el historial de tu navegador ni en el historial de búsquedas, y cuando cierres la ventana de incógnito, tampoco quedará ningún otro rastro, como cookies, en tu dispositivo. Sin embargo, sí se preservarán los archivos que descargues o los favoritos que marques.</p>
-
- <p><strong>Estar de incógnito no afecta el comportamiento de otras personas, servidores o programas. Ten cuidado con:</strong></p>
-
- <ul>
- <li>Sitios web que recaban o comparten tu información</li>
- <li>Proveedores de servicio de Internet o empleadores que hacen un seguimiento de las páginas que visitas</li>
- <li>Programas de software maliciosos que hacen un seguimiento de la actividad de tu teclado a cambio de emoticones gratuitos</li>
- <li>Vigilancia a cargo de agentes secretos</li>
- <li>Personas paradas atrás tuyo</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-es-rUS/incognito_mode_start_page.html b/core/res/res/raw-es-rUS/incognito_mode_start_page.html
deleted file mode 100644
index d283df5..0000000
--- a/core/res/res/raw-es-rUS/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nueva ventana de incógnito</title>
- </head>
- <body>
- <p><strong>Estás de incógnito</strong>. Las páginas que veas en esta ventana no aparecerán en el historial de tu navegador ni en el historial de búsquedas, y cuando cierres la ventana de incógnito, tampoco quedará ningún otro rastro, como cookies, en tu dispositivo. Sin embargo, sí se preservarán los archivos que descargues o los favoritos que marques.</p>
-
- <p><strong>Estar de incógnito no afecta el comportamiento de otras personas, servidores o programas. Ten cuidado con:</strong></p>
-
- <ul>
- <li>Sitios web que recaban o comparten tu información</li>
- <li>Proveedores de servicio de Internet o empleadores que hacen un seguimiento de las páginas que visitas</li>
- <li>Programas de software maliciosos que hacen un seguimiento de la actividad de tu teclado a cambio de emoticones gratuitos</li>
- <li>Vigilancia a cargo de agentes secretos</li>
- <li>Personas paradas atrás tuyo</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-es-xlarge/incognito_mode_start_page.html b/core/res/res/raw-es-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 6d9b501..0000000
--- a/core/res/res/raw-es-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nueva ventana de incógnito</title>
- </head>
- <body>
- <p><strong>Estás navegando de incógnito</strong>. Las páginas que consultes a través de esta ventana no quedarán registradas en el historial del navegador ni en el historial de búsquedas, y tampoco dejarán otros rastros en el ordenador (como cookies) una vez cerrada. Los archivos que descargues y los marcadores que guardes sí se almacenarán. </p>
-
- <p><strong>La función de navegación de incógnito no afecta al comportamiento de los servidores o programas de software. Ten cuidado con:</strong></p>
-
- <ul>
- <li>sitios web que recopilan o comparten información personal</li>
- <li>proveedores de servicios de Internet o trabajadores de estas empresas que supervisan las páginas que visitas</li>
- <li>software malicioso que realiza un seguimiento de las teclas que pulsas a cambio de emoticonos gratuitos</li>
- <li>actividades de seguimiento por parte de terceros</li>
- <li>personas merodeando cerca de tu ordenador</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-es/incognito_mode_start_page.html b/core/res/res/raw-es/incognito_mode_start_page.html
deleted file mode 100644
index 6d9b501..0000000
--- a/core/res/res/raw-es/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nueva ventana de incógnito</title>
- </head>
- <body>
- <p><strong>Estás navegando de incógnito</strong>. Las páginas que consultes a través de esta ventana no quedarán registradas en el historial del navegador ni en el historial de búsquedas, y tampoco dejarán otros rastros en el ordenador (como cookies) una vez cerrada. Los archivos que descargues y los marcadores que guardes sí se almacenarán. </p>
-
- <p><strong>La función de navegación de incógnito no afecta al comportamiento de los servidores o programas de software. Ten cuidado con:</strong></p>
-
- <ul>
- <li>sitios web que recopilan o comparten información personal</li>
- <li>proveedores de servicios de Internet o trabajadores de estas empresas que supervisan las páginas que visitas</li>
- <li>software malicioso que realiza un seguimiento de las teclas que pulsas a cambio de emoticonos gratuitos</li>
- <li>actividades de seguimiento por parte de terceros</li>
- <li>personas merodeando cerca de tu ordenador</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fa-xlarge/incognito_mode_start_page.html b/core/res/res/raw-fa-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index f004120..0000000
--- a/core/res/res/raw-fa-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>پنجره ناشناس جدید</title>
- </head>
- <body>
- <p><strong>شما به صورت ناشناس وارد شده اید</strong> صفحاتی که شما در این پنجره مشاهده میکنید در سابقه مرورگر یا سابقه جستجوی شما ظاهر نمیشوند، و پس از بستن پنجره ناشناس، دنباله ای از خود مانند کوکی ها روی دستگاه شما بر جای نمیگذارند. به هر حال، فایل های دانلود شده و نشانکهای صفحه ای که ایجاد کرده اید باقی خواهند ماند.</p>
-
- <p><strong>وارد شدن به صورت ناشناس، تاثیری بر روی رفتار افراد دیگر، سرورها و یا نرم افزارها ندارد. در خصوص موارد زیر هشیار باشید:</strong></p>
-
- <ul>
- <li>وبسایت هایی که اطلاعاتی را در مورد شما جمع آوری کرده و به اشتراک میگذارند</li>
- <li>تامین کننده های خدمات اینترنتی شما یا کارمندانی که صفحاتی که شما بازدید کرده اید را پیگیری میکنند</li>
- <li>نرم افزارهای مخربی که در ازای نشانک های رایگان، ضربات کلیدهای شما را ذخیره میکنند</li>
- <li>نظارت توسط نمایندگان سری</li>
- <li>افرادی که پشت سرتان ایستاده اند</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fa/incognito_mode_start_page.html b/core/res/res/raw-fa/incognito_mode_start_page.html
deleted file mode 100644
index f004120..0000000
--- a/core/res/res/raw-fa/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>پنجره ناشناس جدید</title>
- </head>
- <body>
- <p><strong>شما به صورت ناشناس وارد شده اید</strong> صفحاتی که شما در این پنجره مشاهده میکنید در سابقه مرورگر یا سابقه جستجوی شما ظاهر نمیشوند، و پس از بستن پنجره ناشناس، دنباله ای از خود مانند کوکی ها روی دستگاه شما بر جای نمیگذارند. به هر حال، فایل های دانلود شده و نشانکهای صفحه ای که ایجاد کرده اید باقی خواهند ماند.</p>
-
- <p><strong>وارد شدن به صورت ناشناس، تاثیری بر روی رفتار افراد دیگر، سرورها و یا نرم افزارها ندارد. در خصوص موارد زیر هشیار باشید:</strong></p>
-
- <ul>
- <li>وبسایت هایی که اطلاعاتی را در مورد شما جمع آوری کرده و به اشتراک میگذارند</li>
- <li>تامین کننده های خدمات اینترنتی شما یا کارمندانی که صفحاتی که شما بازدید کرده اید را پیگیری میکنند</li>
- <li>نرم افزارهای مخربی که در ازای نشانک های رایگان، ضربات کلیدهای شما را ذخیره میکنند</li>
- <li>نظارت توسط نمایندگان سری</li>
- <li>افرادی که پشت سرتان ایستاده اند</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fi-xlarge/incognito_mode_start_page.html b/core/res/res/raw-fi-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index feb9f4f..0000000
--- a/core/res/res/raw-fi-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Uusi incognito-ikkuna</title>
- </head>
- <body>
- <p><strong>Olet nyt incognito-tilassa</strong>. Incognito-tilassa katsellut sivut eivät näy selainhistoriassa eikä hakuhistoriassa. Ne eivät myöskään jätä muita jälkiä, kuten evästeitä, sivun sulkemisen jälkeen. Lataamasi tiedostot tai luomasi kirjanmerkit tosin tallentuvat.</p>
-
- <p><strong>Incognito-tilaan siirtyminen ei vaikuta muiden ihmisten, palvelimien tai tietokoneohjelmien toimintaan. Varo:</strong></p>
-
- <ul>
- <li>Verkkosivustoja jotka keräävät sinusta tietoa ja/tai jakavat sitä eteenpäin</li>
- <li>Internet-palveluntarjoajia ja työnantajia jotka seuraavat sivuja, joilla käyt</li>
- <li>Haittaohjelmia jotka seuraavat näppäimistön toimintaa ja tarjoavat vastineeksi ilmaisia hymiöitä</li>
- <li>Salaisten agenttien seurantaa</li>
- <li>Ihmisiä jotka seisovat takanasi</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fi/incognito_mode_start_page.html b/core/res/res/raw-fi/incognito_mode_start_page.html
deleted file mode 100644
index feb9f4f..0000000
--- a/core/res/res/raw-fi/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Uusi incognito-ikkuna</title>
- </head>
- <body>
- <p><strong>Olet nyt incognito-tilassa</strong>. Incognito-tilassa katsellut sivut eivät näy selainhistoriassa eikä hakuhistoriassa. Ne eivät myöskään jätä muita jälkiä, kuten evästeitä, sivun sulkemisen jälkeen. Lataamasi tiedostot tai luomasi kirjanmerkit tosin tallentuvat.</p>
-
- <p><strong>Incognito-tilaan siirtyminen ei vaikuta muiden ihmisten, palvelimien tai tietokoneohjelmien toimintaan. Varo:</strong></p>
-
- <ul>
- <li>Verkkosivustoja jotka keräävät sinusta tietoa ja/tai jakavat sitä eteenpäin</li>
- <li>Internet-palveluntarjoajia ja työnantajia jotka seuraavat sivuja, joilla käyt</li>
- <li>Haittaohjelmia jotka seuraavat näppäimistön toimintaa ja tarjoavat vastineeksi ilmaisia hymiöitä</li>
- <li>Salaisten agenttien seurantaa</li>
- <li>Ihmisiä jotka seisovat takanasi</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-fr-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 8962cdf..0000000
--- a/core/res/res/raw-fr-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nouvelle fenêtre de navigation privée</title>
- </head>
- <body>
- <p><strong>Vous êtes passé en navigation privée</strong>. Les pages que vous consultez dans cette fenêtre n'apparaîtront ni dans l'historique de votre navigateur, ni dans l'historique des recherches, et ne laisseront aucune trace (comme les cookies) sur votre appareil une fois que vous aurez fermé la fenêtre de navigation privée. Tous les fichiers téléchargés et les favoris créés seront toutefois conservés.</p>
-
- <p><strong>Passer en navigation privée n'a aucun effet sur les autres utilisateurs, serveurs ou logiciels. Méfiez-vous :</strong></p>
-
- <ul>
- <li>Des sites Web qui collectent ou partagent des informations vous concernant</li>
- <li>Des fournisseurs d'accès Internet ou des employeurs qui conservent une trace des pages que vous visitez</li>
- <li>Des programmes indésirables qui enregistrent vos frappes en échange d'émoticônes gratuites</li>
- <li>Des personnes qui pourraient surveiller vos activités</li>
- <li>Des personnes qui se tiennent derrière vous</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-fr/incognito_mode_start_page.html b/core/res/res/raw-fr/incognito_mode_start_page.html
deleted file mode 100644
index 8962cdf..0000000
--- a/core/res/res/raw-fr/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nouvelle fenêtre de navigation privée</title>
- </head>
- <body>
- <p><strong>Vous êtes passé en navigation privée</strong>. Les pages que vous consultez dans cette fenêtre n'apparaîtront ni dans l'historique de votre navigateur, ni dans l'historique des recherches, et ne laisseront aucune trace (comme les cookies) sur votre appareil une fois que vous aurez fermé la fenêtre de navigation privée. Tous les fichiers téléchargés et les favoris créés seront toutefois conservés.</p>
-
- <p><strong>Passer en navigation privée n'a aucun effet sur les autres utilisateurs, serveurs ou logiciels. Méfiez-vous :</strong></p>
-
- <ul>
- <li>Des sites Web qui collectent ou partagent des informations vous concernant</li>
- <li>Des fournisseurs d'accès Internet ou des employeurs qui conservent une trace des pages que vous visitez</li>
- <li>Des programmes indésirables qui enregistrent vos frappes en échange d'émoticônes gratuites</li>
- <li>Des personnes qui pourraient surveiller vos activités</li>
- <li>Des personnes qui se tiennent derrière vous</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hi-xlarge/incognito_mode_start_page.html b/core/res/res/raw-hi-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index f73c41d..0000000
--- a/core/res/res/raw-hi-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>नई गुप्त विंडो</title>
- </head>
- <body>
- <p><strong>आप गुप्त मोड में हैं</strong>. इस विंडो में देखे गए पृष्ठ आपके ब्राउज़र इतिहास या खोज इतिहास में प्रकट नहीं होंगे, और वे आपके डिवाइस पर गुप्त विंडो बंद करने के बाद और कोई चिह्न जैसे कुकीज़, नहीं छोड़ते. हालांकि डाउनलोड की गई या बुकमार्क की गई कोई भी फ़ाइल संरक्षित रखी जाएगी.</p>
-
- <p><strong>गुप्त मोड में होने से दूसरे लोगों, सर्वर. या सॉफ़्टवेयर पर कोई प्रभाव नहीं होता. इनका ध्यान रखें</strong></p>
-
- <ul>
- <li>वे वेबसाइट जो आपके बारे में जानकारी एकत्र या शेयर करती हैं</li>
- <li>इंटरनेट सेवा प्रदाता या नियोक्ता जो आपके द्वारा विज़िट किए गए पृष्ठों पर नज़र रखते हैं</li>
- <li>दुर्भावनापूर्ण सॉफ़्टवेयर जो मुफ़्त स्माइली के बदले आपके कीस्ट्रोक पर नज़र रखते हैं.</li>
- <li>गुप्तचरों द्वारा निगरानी</li>
- <li>आपके पीछे खड़े लोग</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hi/incognito_mode_start_page.html b/core/res/res/raw-hi/incognito_mode_start_page.html
deleted file mode 100644
index f73c41d..0000000
--- a/core/res/res/raw-hi/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>नई गुप्त विंडो</title>
- </head>
- <body>
- <p><strong>आप गुप्त मोड में हैं</strong>. इस विंडो में देखे गए पृष्ठ आपके ब्राउज़र इतिहास या खोज इतिहास में प्रकट नहीं होंगे, और वे आपके डिवाइस पर गुप्त विंडो बंद करने के बाद और कोई चिह्न जैसे कुकीज़, नहीं छोड़ते. हालांकि डाउनलोड की गई या बुकमार्क की गई कोई भी फ़ाइल संरक्षित रखी जाएगी.</p>
-
- <p><strong>गुप्त मोड में होने से दूसरे लोगों, सर्वर. या सॉफ़्टवेयर पर कोई प्रभाव नहीं होता. इनका ध्यान रखें</strong></p>
-
- <ul>
- <li>वे वेबसाइट जो आपके बारे में जानकारी एकत्र या शेयर करती हैं</li>
- <li>इंटरनेट सेवा प्रदाता या नियोक्ता जो आपके द्वारा विज़िट किए गए पृष्ठों पर नज़र रखते हैं</li>
- <li>दुर्भावनापूर्ण सॉफ़्टवेयर जो मुफ़्त स्माइली के बदले आपके कीस्ट्रोक पर नज़र रखते हैं.</li>
- <li>गुप्तचरों द्वारा निगरानी</li>
- <li>आपके पीछे खड़े लोग</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-hr-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 6f20fe0..0000000
--- a/core/res/res/raw-hr-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Novi anonimni prozor</title>
- </head>
- <body>
- <p><strong>Sada ste anonimni</strong>. Stranice koje pregledavate u ovom prozoru neće se pojaviti u povijesti preglednika ili povijesti pretraživanja, neće ostaviti tragove, poput kolačića, na vašem uređaju nakon što zatvorite anonimni prozor. Međutim, sve datoteke koje preuzmete ili oznake koje stvorite bit će sačuvane.</p>
-
- <p><strong>Anonimno pregledavanje neće utjecati na ponašanje drugih osoba, poslužitelja ili softvera. Pazite na sljedeće:</strong></p>
-
- <ul>
- <li>Web-lokacije koje prikupljaju ili dijele informacije o vama</li>
- <li>Davatelje internetskih usluga ili poslodavce koji prate stranice koje posjećujete</li>
- <li>Zlonamjerni softver koji prati koje tipke pritišćete u zamjenu za besplatne emotikone</li>
- <li>Nadzor tajnih službi</li>
- <li>Osobe koje stoje iza vas</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hr/incognito_mode_start_page.html b/core/res/res/raw-hr/incognito_mode_start_page.html
deleted file mode 100644
index 6f20fe0..0000000
--- a/core/res/res/raw-hr/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Novi anonimni prozor</title>
- </head>
- <body>
- <p><strong>Sada ste anonimni</strong>. Stranice koje pregledavate u ovom prozoru neće se pojaviti u povijesti preglednika ili povijesti pretraživanja, neće ostaviti tragove, poput kolačića, na vašem uređaju nakon što zatvorite anonimni prozor. Međutim, sve datoteke koje preuzmete ili oznake koje stvorite bit će sačuvane.</p>
-
- <p><strong>Anonimno pregledavanje neće utjecati na ponašanje drugih osoba, poslužitelja ili softvera. Pazite na sljedeće:</strong></p>
-
- <ul>
- <li>Web-lokacije koje prikupljaju ili dijele informacije o vama</li>
- <li>Davatelje internetskih usluga ili poslodavce koji prate stranice koje posjećujete</li>
- <li>Zlonamjerni softver koji prati koje tipke pritišćete u zamjenu za besplatne emotikone</li>
- <li>Nadzor tajnih službi</li>
- <li>Osobe koje stoje iza vas</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hu-xlarge/incognito_mode_start_page.html b/core/res/res/raw-hu-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 38b0806..0000000
--- a/core/res/res/raw-hu-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Új inkognitóablak</title>
- </head>
- <body>
- <p><strong>Ön inkognitó módra váltott</strong>. Az inkognitóablakban megtekintett oldalak nem jelennek meg böngészője előzményeiben, illetve keresési előzményeiben, és nem hagynak más nyomot pl. cookie-t sem a számítógépén az inkognitóablak bezárását követően. A letöltött fájlok, valamint a létrehozott könyvjelzők azonban megmaradnak.</p>
-
- <p><strong>Az inkognitó üzemmód nem befolyásolja a többi felhasználó, szerver vagy szoftver viselkedését. Ügyeljen a következőkre:</strong></p>
-
- <ul>
- <li>Olyan webhelyek, amelyek információt gyűjtenek vagy osztanak meg Önről</li>
- <li>Olyan internetszolgáltatók vagy alkalmazottaik, akik nyomon követik az Ön által látogatott oldalakat</li>
- <li>Olyan kártékony szoftverek, amelyek ingyenes hangulatjelekért cserébe nyomon követik billentyűbeviteleit</li>
- <li>Titkos ügynökök megfigyelése</li>
- <li>Az Ön mögött álló emberek</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-hu/incognito_mode_start_page.html b/core/res/res/raw-hu/incognito_mode_start_page.html
deleted file mode 100644
index 38b0806..0000000
--- a/core/res/res/raw-hu/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Új inkognitóablak</title>
- </head>
- <body>
- <p><strong>Ön inkognitó módra váltott</strong>. Az inkognitóablakban megtekintett oldalak nem jelennek meg böngészője előzményeiben, illetve keresési előzményeiben, és nem hagynak más nyomot pl. cookie-t sem a számítógépén az inkognitóablak bezárását követően. A letöltött fájlok, valamint a létrehozott könyvjelzők azonban megmaradnak.</p>
-
- <p><strong>Az inkognitó üzemmód nem befolyásolja a többi felhasználó, szerver vagy szoftver viselkedését. Ügyeljen a következőkre:</strong></p>
-
- <ul>
- <li>Olyan webhelyek, amelyek információt gyűjtenek vagy osztanak meg Önről</li>
- <li>Olyan internetszolgáltatók vagy alkalmazottaik, akik nyomon követik az Ön által látogatott oldalakat</li>
- <li>Olyan kártékony szoftverek, amelyek ingyenes hangulatjelekért cserébe nyomon követik billentyűbeviteleit</li>
- <li>Titkos ügynökök megfigyelése</li>
- <li>Az Ön mögött álló emberek</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-id-xlarge/incognito_mode_start_page.html b/core/res/res/raw-id-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 788c088..0000000
--- a/core/res/res/raw-id-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Jendela penyamaran baru</title>
- </head>
- <body>
- <p><strong>Anda menggunakan penyamaran</strong>. Laman yang Anda lihat di jendela ini tidak akan ditampilkan dalam riwayat peramban atau riwayat penelusuran, dan tidak akan meninggalkan jejak, seperti kuki, di perangkat setelah jendela penyamaran ditutup. Namun, berkas yang diunduh atau bookmark yang dibuat akan disimpan.</p>
-
- <p><strong>Menggunakan penyamaran tidak mempengaruhi perilaku orang lain, server, atau perangkat lunak. Waspadai:</strong></p>
-
- <ul>
- <li>Situs web yang mengumpulkan atau berbagi informasi tentang Anda</li>
- <li>Penyedia layanan internet atau tempat kerja yang melacak laman yang Anda kunjungi</li>
- <li>Perangkat lunak jahat yang melacak penekanan tombol dengan imbalan smiley gratis</li>
- <li>Pemantauan oleh agen rahasia</li>
- <li>Orang yang berdiri di belakang Anda</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-id/incognito_mode_start_page.html b/core/res/res/raw-id/incognito_mode_start_page.html
deleted file mode 100644
index 788c088..0000000
--- a/core/res/res/raw-id/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Jendela penyamaran baru</title>
- </head>
- <body>
- <p><strong>Anda menggunakan penyamaran</strong>. Laman yang Anda lihat di jendela ini tidak akan ditampilkan dalam riwayat peramban atau riwayat penelusuran, dan tidak akan meninggalkan jejak, seperti kuki, di perangkat setelah jendela penyamaran ditutup. Namun, berkas yang diunduh atau bookmark yang dibuat akan disimpan.</p>
-
- <p><strong>Menggunakan penyamaran tidak mempengaruhi perilaku orang lain, server, atau perangkat lunak. Waspadai:</strong></p>
-
- <ul>
- <li>Situs web yang mengumpulkan atau berbagi informasi tentang Anda</li>
- <li>Penyedia layanan internet atau tempat kerja yang melacak laman yang Anda kunjungi</li>
- <li>Perangkat lunak jahat yang melacak penekanan tombol dengan imbalan smiley gratis</li>
- <li>Pemantauan oleh agen rahasia</li>
- <li>Orang yang berdiri di belakang Anda</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-it-xlarge/incognito_mode_start_page.html b/core/res/res/raw-it-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 4a34874..0000000
--- a/core/res/res/raw-it-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nuova finestra di navigazione in incognito</title>
- </head>
- <body>
- <p><strong>Sei passato alla navigazione in incognito</strong>. Le pagine aperte in questa finestra non vengono registrate nella cronologia di navigazione o di ricerca, e non lasciano traccia sul tuo computer, ad esempio sotto forma di cookie, una volta chiusa la finestra. Tuttavia, qualsiasi file scaricato o preferito creato verrà conservato.</p>
-
- <p><strong>La navigazione in incognito non influisce sul comportamento di altri utenti, server o software. Diffida di:</strong></p>
-
- <ul>
- <li>Siti web che raccolgono o condividono informazioni su di te</li>
- <li>Provider di servizi Internet o datori di lavoro che registrano le pagine da te visitate</li>
- <li>Software dannosi che registrano le sequenze di tasti da te utilizzate in cambio di smiley gratuiti</li>
- <li>Agenti segreti</li>
- <li>Persone che ti stanno alle spalle</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-it/incognito_mode_start_page.html b/core/res/res/raw-it/incognito_mode_start_page.html
deleted file mode 100644
index 4a34874..0000000
--- a/core/res/res/raw-it/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nuova finestra di navigazione in incognito</title>
- </head>
- <body>
- <p><strong>Sei passato alla navigazione in incognito</strong>. Le pagine aperte in questa finestra non vengono registrate nella cronologia di navigazione o di ricerca, e non lasciano traccia sul tuo computer, ad esempio sotto forma di cookie, una volta chiusa la finestra. Tuttavia, qualsiasi file scaricato o preferito creato verrà conservato.</p>
-
- <p><strong>La navigazione in incognito non influisce sul comportamento di altri utenti, server o software. Diffida di:</strong></p>
-
- <ul>
- <li>Siti web che raccolgono o condividono informazioni su di te</li>
- <li>Provider di servizi Internet o datori di lavoro che registrano le pagine da te visitate</li>
- <li>Software dannosi che registrano le sequenze di tasti da te utilizzate in cambio di smiley gratuiti</li>
- <li>Agenti segreti</li>
- <li>Persone che ti stanno alle spalle</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-iw-xlarge/incognito_mode_start_page.html b/core/res/res/raw-iw-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 368dea0..0000000
--- a/core/res/res/raw-iw-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>חלון חדש של גלישה בסתר</title>
- </head>
- <body>
- <p><strong>עברת למצב של גלישה בסתר</strong>. דפים שאתה רואה בחלון זה לא יופיעו בהיסטוריית הדפדפן או בהיסטוריית החיפושים שלך, והם לא ישאירו עקבות אחרים, כמו קובצי cookie, לאחר שתסגור את חלון הגלישה בסתר. עם זאת, כל קובץ שאתה מוריד או כוכביות שאתה יוצר יישמרו.</p>
-
- <p><strong> גלישה בסתר לא משפיעה על התנהגותם של אנשים אחרים, שרתים אחרים או תוכנות אחרות. היזהר מ:</strong></p>
-
- <ul>
- <li>אתרים שאוספים נתונים או משתפים מידע לגביך</li>
- <li>ספקי שירות אינטרנט או עובדים שעוקבים אחר הדפים שבהם אתה מבקר</li>
- <li>תוכנה זדונית שעוקבת אחר ההקשות שלך על המקשים בתמורה לסימני סמיילי בחינם</li>
- <li>מעקב של סוכנים חשאיים</li>
- <li>אנשים שעומדים מאחוריך</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-iw/incognito_mode_start_page.html b/core/res/res/raw-iw/incognito_mode_start_page.html
deleted file mode 100644
index 368dea0..0000000
--- a/core/res/res/raw-iw/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="RTL">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>חלון חדש של גלישה בסתר</title>
- </head>
- <body>
- <p><strong>עברת למצב של גלישה בסתר</strong>. דפים שאתה רואה בחלון זה לא יופיעו בהיסטוריית הדפדפן או בהיסטוריית החיפושים שלך, והם לא ישאירו עקבות אחרים, כמו קובצי cookie, לאחר שתסגור את חלון הגלישה בסתר. עם זאת, כל קובץ שאתה מוריד או כוכביות שאתה יוצר יישמרו.</p>
-
- <p><strong> גלישה בסתר לא משפיעה על התנהגותם של אנשים אחרים, שרתים אחרים או תוכנות אחרות. היזהר מ:</strong></p>
-
- <ul>
- <li>אתרים שאוספים נתונים או משתפים מידע לגביך</li>
- <li>ספקי שירות אינטרנט או עובדים שעוקבים אחר הדפים שבהם אתה מבקר</li>
- <li>תוכנה זדונית שעוקבת אחר ההקשות שלך על המקשים בתמורה לסימני סמיילי בחינם</li>
- <li>מעקב של סוכנים חשאיים</li>
- <li>אנשים שעומדים מאחוריך</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ja-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ja-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index a58ad05..0000000
--- a/core/res/res/raw-ja-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新しいシークレットウィンドウ</title>
- </head>
- <body>
- <p><strong>シークレットモードを使用中です</strong>。このウィンドウで開いたページはブラウザの履歴や検索履歴に残りません。このウィンドウを閉じるとCookieなどの記録も端末から消去されます。ただし、ダウンロードしたファイルやブックマークしたページは保存されます。</p>
-
- <p><strong>シークレットモードが他のユーザーやサーバー、ソフトウェアの動作に影響することはありません。なお、下記のようなケースにご注意ください。</strong></p>
-
- <ul>
- <li>ユーザーの情報を収集、共有するウェブサイト</li>
- <li>アクセスしたページをトラッキングするインターネットサービスプロバイダや雇用主</li>
- <li>無料ダウンロードなどと一緒にインストールされ、キーストロークを記録するマルウェア</li>
- <li>スパイ、諜報活動</li>
- <li>背後にいる人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ja/incognito_mode_start_page.html b/core/res/res/raw-ja/incognito_mode_start_page.html
deleted file mode 100644
index a58ad05..0000000
--- a/core/res/res/raw-ja/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新しいシークレットウィンドウ</title>
- </head>
- <body>
- <p><strong>シークレットモードを使用中です</strong>。このウィンドウで開いたページはブラウザの履歴や検索履歴に残りません。このウィンドウを閉じるとCookieなどの記録も端末から消去されます。ただし、ダウンロードしたファイルやブックマークしたページは保存されます。</p>
-
- <p><strong>シークレットモードが他のユーザーやサーバー、ソフトウェアの動作に影響することはありません。なお、下記のようなケースにご注意ください。</strong></p>
-
- <ul>
- <li>ユーザーの情報を収集、共有するウェブサイト</li>
- <li>アクセスしたページをトラッキングするインターネットサービスプロバイダや雇用主</li>
- <li>無料ダウンロードなどと一緒にインストールされ、キーストロークを記録するマルウェア</li>
- <li>スパイ、諜報活動</li>
- <li>背後にいる人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ko-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ko-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 0e703b100..0000000
--- a/core/res/res/raw-ko-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>새 시크릿 창</title>
- </head>
- <body>
- <p><strong>시크릿 모드로 들어오셨습니다.</strong> 이 창에서 보는 페이지는 브라우저 기록이나 검색기록에 남지 않으며, 시크릿 창을 닫은 뒤 기기에 쿠기와 같은 흔적도 남기지 않습니다. 다운로드한 파일이나 생성한 북마크는 보관됩니다. </p>
-
- <p><strong>시크릿 모드를 이용해도 다른 사용자, 서버, 소프트웨어에 영향을 주지는 않습니다. 다음을 주의하세요.</strong></p>
-
- <ul>
- <li>사용자에 대한 정보를 모으고 공유하는 웹사이트</li>
- <li>방문 페이지를 추적하는 인터넷 서비스 제공업체나 직원 </li>
- <li>스마일 이모티콘을 제공한다는 명목으로 입력 내용을 추적하는 악성 소프트웨어</li>
- <li>비밀 개체를 통한 감시</li>
- <li>뒤에서 사용자의 작업내용을 지켜보는 사람</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ko/incognito_mode_start_page.html b/core/res/res/raw-ko/incognito_mode_start_page.html
deleted file mode 100644
index 0e703b100..0000000
--- a/core/res/res/raw-ko/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>새 시크릿 창</title>
- </head>
- <body>
- <p><strong>시크릿 모드로 들어오셨습니다.</strong> 이 창에서 보는 페이지는 브라우저 기록이나 검색기록에 남지 않으며, 시크릿 창을 닫은 뒤 기기에 쿠기와 같은 흔적도 남기지 않습니다. 다운로드한 파일이나 생성한 북마크는 보관됩니다. </p>
-
- <p><strong>시크릿 모드를 이용해도 다른 사용자, 서버, 소프트웨어에 영향을 주지는 않습니다. 다음을 주의하세요.</strong></p>
-
- <ul>
- <li>사용자에 대한 정보를 모으고 공유하는 웹사이트</li>
- <li>방문 페이지를 추적하는 인터넷 서비스 제공업체나 직원 </li>
- <li>스마일 이모티콘을 제공한다는 명목으로 입력 내용을 추적하는 악성 소프트웨어</li>
- <li>비밀 개체를 통한 감시</li>
- <li>뒤에서 사용자의 작업내용을 지켜보는 사람</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-lt-xlarge/incognito_mode_start_page.html b/core/res/res/raw-lt-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 9244ae4..0000000
--- a/core/res/res/raw-lt-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Naujas inkognito langas</title>
- </head>
- <body>
- <p><strong>Naršote inkognito režimu</strong>. Šiame lange peržiūrimi puslapiai nebus išsaugomi naršyklės istorijoje ar paieškos istorijoje ir uždarius inkognito langą nepaliks jokių kitų žymių, pvz., slapukų. Tačiau bus išsaugoti atsisiųsti failai ar sukurtos žymos.</p>
-
- <p><strong>Naršymas inkognito režimu nedaro jokios įtakos kitiems asmenims, serveriams ar programinei įrangai. Saugokitės:</strong></p>
-
- <ul>
- <li>svetainių, kurios renka ar platina informaciją apie jus</li>
- <li>interneto paslaugos teikėjų ar darbdavių, kurie stebi, kuriuos puslapius peržiūrite</li>
- <li>kenkėjiškos programinės įrangos, kuri siūlydama nemokamų šypsniukų fiksuoja klavišų paspaudimus</li>
- <li>jus galinčių sekti slaptųjų agentų</li>
- <li>už nugaros stovinčių asmenų</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-lt/incognito_mode_start_page.html b/core/res/res/raw-lt/incognito_mode_start_page.html
deleted file mode 100644
index 9244ae4..0000000
--- a/core/res/res/raw-lt/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Naujas inkognito langas</title>
- </head>
- <body>
- <p><strong>Naršote inkognito režimu</strong>. Šiame lange peržiūrimi puslapiai nebus išsaugomi naršyklės istorijoje ar paieškos istorijoje ir uždarius inkognito langą nepaliks jokių kitų žymių, pvz., slapukų. Tačiau bus išsaugoti atsisiųsti failai ar sukurtos žymos.</p>
-
- <p><strong>Naršymas inkognito režimu nedaro jokios įtakos kitiems asmenims, serveriams ar programinei įrangai. Saugokitės:</strong></p>
-
- <ul>
- <li>svetainių, kurios renka ar platina informaciją apie jus</li>
- <li>interneto paslaugos teikėjų ar darbdavių, kurie stebi, kuriuos puslapius peržiūrite</li>
- <li>kenkėjiškos programinės įrangos, kuri siūlydama nemokamų šypsniukų fiksuoja klavišų paspaudimus</li>
- <li>jus galinčių sekti slaptųjų agentų</li>
- <li>už nugaros stovinčių asmenų</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-lv-xlarge/incognito_mode_start_page.html b/core/res/res/raw-lv-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index f325ef5..0000000
--- a/core/res/res/raw-lv-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Jauns inkognito logs</title>
- </head>
- <body>
- <p><strong>Jūs esat ieslēdzis inkognito režīmu</strong>. Šajā logā aplūkotās lapas neparādīsies jūsu pārlūkprogrammas vēsturē vai meklēšanas vēsturē, tās arī neatstās citas pēdas, piemēram, sīkfailus, jūsu ierīcē pēc inkognito režīma loga aizvēršanas. Tomēr visi jūsu lejupielādētie faili vai izveidotās grāmatzīmes tiks saglabātas.</p>
-
- <p><strong>Inkognito režīma ieslēgšana neietekmēs citu personu, serveru vai programmatūras darbību. Uzmanieties no</strong></p>
-
- <ul>
- <li>vietnēm, kas apkopo vai koplieto informāciju par jums;</li>
- <li>interneta pakalpojumu sniedzējiem vai darba devējiem, kas izseko jūsu apmeklētajām lapām;</li>
- <li>maldprogrammatūras, kas izseko jūsu taustiņsitieniem apmaiņā par bezmaksas smaidiņiem;</li>
- <li>slepeno aģentu veiktas izmeklēšanas;</li>
- <li>personām, kas stāv aiz jums.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-lv/incognito_mode_start_page.html b/core/res/res/raw-lv/incognito_mode_start_page.html
deleted file mode 100644
index f325ef5..0000000
--- a/core/res/res/raw-lv/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Jauns inkognito logs</title>
- </head>
- <body>
- <p><strong>Jūs esat ieslēdzis inkognito režīmu</strong>. Šajā logā aplūkotās lapas neparādīsies jūsu pārlūkprogrammas vēsturē vai meklēšanas vēsturē, tās arī neatstās citas pēdas, piemēram, sīkfailus, jūsu ierīcē pēc inkognito režīma loga aizvēršanas. Tomēr visi jūsu lejupielādētie faili vai izveidotās grāmatzīmes tiks saglabātas.</p>
-
- <p><strong>Inkognito režīma ieslēgšana neietekmēs citu personu, serveru vai programmatūras darbību. Uzmanieties no</strong></p>
-
- <ul>
- <li>vietnēm, kas apkopo vai koplieto informāciju par jums;</li>
- <li>interneta pakalpojumu sniedzējiem vai darba devējiem, kas izseko jūsu apmeklētajām lapām;</li>
- <li>maldprogrammatūras, kas izseko jūsu taustiņsitieniem apmaiņā par bezmaksas smaidiņiem;</li>
- <li>slepeno aģentu veiktas izmeklēšanas;</li>
- <li>personām, kas stāv aiz jums.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-nb-xlarge/incognito_mode_start_page.html b/core/res/res/raw-nb-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 724e734..0000000
--- a/core/res/res/raw-nb-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nytt inkognitovindu</title>
- </head>
- <body>
- <p><strong></strong>Du er nå inkognito Sider du besøker i dette vinduet blir ikke lagret i nettleser- eller søkelogg, og etterlater ikke andre spor, f. eks. informasjonskapsler, på enheten din etter at du har lukket vinduet. Filer du laster ned eller bokmerker du lager blir derimot lagret.</p>
-
- <p><strong>Det at du er inkognito endrer ikke hvordan andre mennesker, tjenere eller programmer oppfører seg. Pass deg for:</strong></p>
-
- <ul>
- <li>Nettsider som samler eller deler informasjon om deg</li>
- <li>Nettleverandører eller arbeidsgivere som overvåker hvilke sider du besøker</li>
- <li>Skadelige programmer som følger med på tastetrykk i bytte mot smilefjes</li>
- <li>Hemmelige agenter som spionerer på deg</li>
- <li>Folk som titter over skulderen din</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-nb/incognito_mode_start_page.html b/core/res/res/raw-nb/incognito_mode_start_page.html
deleted file mode 100644
index 724e734..0000000
--- a/core/res/res/raw-nb/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nytt inkognitovindu</title>
- </head>
- <body>
- <p><strong></strong>Du er nå inkognito Sider du besøker i dette vinduet blir ikke lagret i nettleser- eller søkelogg, og etterlater ikke andre spor, f. eks. informasjonskapsler, på enheten din etter at du har lukket vinduet. Filer du laster ned eller bokmerker du lager blir derimot lagret.</p>
-
- <p><strong>Det at du er inkognito endrer ikke hvordan andre mennesker, tjenere eller programmer oppfører seg. Pass deg for:</strong></p>
-
- <ul>
- <li>Nettsider som samler eller deler informasjon om deg</li>
- <li>Nettleverandører eller arbeidsgivere som overvåker hvilke sider du besøker</li>
- <li>Skadelige programmer som følger med på tastetrykk i bytte mot smilefjes</li>
- <li>Hemmelige agenter som spionerer på deg</li>
- <li>Folk som titter over skulderen din</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-nl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-nl-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 92fedd7..0000000
--- a/core/res/res/raw-nl-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nieuw incognitovenster</title>
- </head>
- <body>
- <p><strong>U bent nu incognito</strong> De pagina's die u in dit venster bekijkt worden niet opgenomen in de browsergeschiedenis en de zoekgeschiedenis en laten geen cookies of andere sporen na op uw apparaat nadat u het incognitovenster hebt gesloten. Alle bestanden die u downloadt en bladwijzers die u maakt, blijven echter behouden.</p>
-
- <p><strong>Incognito zijn heeft geen invloed op het gedrag van andere personen, servers of software. Wees op uw hoede voor:</strong></p>
-
- <ul>
- <li>Websites die informatie over u verzamelen of delen</li>
- <li>Internetproviders of werkgevers die bijhouden welke pagina's u bezoekt</li>
- <li>Schadelijke software die uw toetsaanslagen registreert in ruil voor gratis emoticons</li>
- <li>Spionage door geheim agenten</li>
- <li>Mensen die achter u staan</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-nl/incognito_mode_start_page.html b/core/res/res/raw-nl/incognito_mode_start_page.html
deleted file mode 100644
index 92fedd7..0000000
--- a/core/res/res/raw-nl/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nieuw incognitovenster</title>
- </head>
- <body>
- <p><strong>U bent nu incognito</strong> De pagina's die u in dit venster bekijkt worden niet opgenomen in de browsergeschiedenis en de zoekgeschiedenis en laten geen cookies of andere sporen na op uw apparaat nadat u het incognitovenster hebt gesloten. Alle bestanden die u downloadt en bladwijzers die u maakt, blijven echter behouden.</p>
-
- <p><strong>Incognito zijn heeft geen invloed op het gedrag van andere personen, servers of software. Wees op uw hoede voor:</strong></p>
-
- <ul>
- <li>Websites die informatie over u verzamelen of delen</li>
- <li>Internetproviders of werkgevers die bijhouden welke pagina's u bezoekt</li>
- <li>Schadelijke software die uw toetsaanslagen registreert in ruil voor gratis emoticons</li>
- <li>Spionage door geheim agenten</li>
- <li>Mensen die achter u staan</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-pl-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 9748ead..0000000
--- a/core/res/res/raw-pl-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nowe okno incognito</title>
- </head>
- <body>
- <p><strong>Jesteś teraz incognito</strong> Strony przeglądane w tym oknie nie będą wyświetlane w historii przeglądarki ani w historii wyszukiwania. Po zamknięciu okna incognito na komputerze nie zostanie po nich żaden ślad np. w postaci plików cookie. Zachowane zostaną jednak pobrane pliki lub utworzone zakładki.</p>
-
- <p><strong>Przejście do trybu incognito nie ma wpływu na działania innych osób, serwery ani oprogramowanie. Należy uważać na:</strong></p>
-
- <ul>
- <li>witryny zbierające lub udostępniające dane na temat użytkowników</li>
- <li>dostawców usług internetowych oraz pracowników monitorujących strony odwiedzane przez użytkowników</li>
- <li>złośliwe oprogramowanie śledzące naciśnięcia klawiszy (np. w zamian za darmowe emotikony)</li>
- <li>aktywność wywiadowczą tajnych agentów</li>
- <li>osoby stojące za plecami</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pl/incognito_mode_start_page.html b/core/res/res/raw-pl/incognito_mode_start_page.html
deleted file mode 100644
index 9748ead..0000000
--- a/core/res/res/raw-pl/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nowe okno incognito</title>
- </head>
- <body>
- <p><strong>Jesteś teraz incognito</strong> Strony przeglądane w tym oknie nie będą wyświetlane w historii przeglądarki ani w historii wyszukiwania. Po zamknięciu okna incognito na komputerze nie zostanie po nich żaden ślad np. w postaci plików cookie. Zachowane zostaną jednak pobrane pliki lub utworzone zakładki.</p>
-
- <p><strong>Przejście do trybu incognito nie ma wpływu na działania innych osób, serwery ani oprogramowanie. Należy uważać na:</strong></p>
-
- <ul>
- <li>witryny zbierające lub udostępniające dane na temat użytkowników</li>
- <li>dostawców usług internetowych oraz pracowników monitorujących strony odwiedzane przez użytkowników</li>
- <li>złośliwe oprogramowanie śledzące naciśnięcia klawiszy (np. w zamian za darmowe emotikony)</li>
- <li>aktywność wywiadowczą tajnych agentów</li>
- <li>osoby stojące za plecami</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html b/core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 89a5ab0..0000000
--- a/core/res/res/raw-pt-rPT-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova janela de navegação anónima</title>
- </head>
- <body>
- <p><strong>Está no modo de navegação anónima</strong>. As páginas que visualizar nesta janela não vão aparecer nos históricos de pesquisa ou de navegação e não deixarão quaisquer vestígios (por exemplo cookies) no computador depois de fechar a janela. No entanto se transferir ficheiros ou criar marcadores, estes serão preservados.</p>
-
- <p><strong>Navegar no modo de navegação anónima não afecta o comportamento de outras pessoas, nem o comportamento de servidores ou programas. Tenha cuidado com:</strong></p>
-
- <ul>
- <li>Web sites que recolhem ou partilham informações sobre si</li>
- <li>Serviços de fornecimento de internet ou empregadores que monitorizam as páginas que você visita</li>
- <li>Programas maliciosos que monitorizam as teclas em que carrega em troca de ícones expressivos ("smileys")</li>
- <li>Vigilância de agentes secretos</li>
- <li>Pessoas que estejam perto de si</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pt-rPT/incognito_mode_start_page.html b/core/res/res/raw-pt-rPT/incognito_mode_start_page.html
deleted file mode 100644
index 89a5ab0..0000000
--- a/core/res/res/raw-pt-rPT/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova janela de navegação anónima</title>
- </head>
- <body>
- <p><strong>Está no modo de navegação anónima</strong>. As páginas que visualizar nesta janela não vão aparecer nos históricos de pesquisa ou de navegação e não deixarão quaisquer vestígios (por exemplo cookies) no computador depois de fechar a janela. No entanto se transferir ficheiros ou criar marcadores, estes serão preservados.</p>
-
- <p><strong>Navegar no modo de navegação anónima não afecta o comportamento de outras pessoas, nem o comportamento de servidores ou programas. Tenha cuidado com:</strong></p>
-
- <ul>
- <li>Web sites que recolhem ou partilham informações sobre si</li>
- <li>Serviços de fornecimento de internet ou empregadores que monitorizam as páginas que você visita</li>
- <li>Programas maliciosos que monitorizam as teclas em que carrega em troca de ícones expressivos ("smileys")</li>
- <li>Vigilância de agentes secretos</li>
- <li>Pessoas que estejam perto de si</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pt-xlarge/incognito_mode_start_page.html b/core/res/res/raw-pt-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index b301eda..0000000
--- a/core/res/res/raw-pt-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova janela anônima</title>
- </head>
- <body>
- <p><strong>Você ficou anônimo</strong>. As páginas que você vê nesta janela não aparecerão no histórico do seu navegador ou da sua pesquisa e não deixarão rastros, como cookies, no seu dispositivo depois que você fechar a janela anônima. Quaisquer arquivos que você fizer o download ou favoritos que criar serão preservados.</p>
-
- <p><strong>Tornar-se anônimo não afeta o comportamento de outras pessoas, servidores ou software. Esteja atento a:</strong></p>
-
- <ul>
- <li>Websites que coletam ou compartilham informações sobre você</li>
- <li>Provedores de serviços de internet ou funcionários que rastreiam as páginas que você visita</li>
- <li>Softwares maliciosos que rastreiam os seus toques de teclado em troca de ícones gratuitos</li>
- <li>Vigilância por agentes secretos</li>
- <li>Pessoas paradas detrás de você</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-pt/incognito_mode_start_page.html b/core/res/res/raw-pt/incognito_mode_start_page.html
deleted file mode 100644
index b301eda..0000000
--- a/core/res/res/raw-pt/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nova janela anônima</title>
- </head>
- <body>
- <p><strong>Você ficou anônimo</strong>. As páginas que você vê nesta janela não aparecerão no histórico do seu navegador ou da sua pesquisa e não deixarão rastros, como cookies, no seu dispositivo depois que você fechar a janela anônima. Quaisquer arquivos que você fizer o download ou favoritos que criar serão preservados.</p>
-
- <p><strong>Tornar-se anônimo não afeta o comportamento de outras pessoas, servidores ou software. Esteja atento a:</strong></p>
-
- <ul>
- <li>Websites que coletam ou compartilham informações sobre você</li>
- <li>Provedores de serviços de internet ou funcionários que rastreiam as páginas que você visita</li>
- <li>Softwares maliciosos que rastreiam os seus toques de teclado em troca de ícones gratuitos</li>
- <li>Vigilância por agentes secretos</li>
- <li>Pessoas paradas detrás de você</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ro-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ro-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 3e499d3..0000000
--- a/core/res/res/raw-ro-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Fereastră incognito nouă</title>
- </head>
- <body>
- <p><strong>Navigaţi incognito</strong>. Paginile pe care le afişaţi în această fereastră nu vor apărea în istoricul browserului sau al căutărilor şi nu vor lăsa alte urme, precum cookie-uri, pe dispozitivul dvs. după ce închideţi fereastra incognito. Dar fişierele descărcate şi marcajele create vor fi păstrate.</p>
-
- <p><strong>Navigarea incognito nu influenţează comportamentul altor persoane, servere sau aplicaţii software. Fiţi atent(ă) la:</strong></p>
-
- <ul>
- <li>site-urile web care colectează sau distribuie informaţii despre dvs.;</li>
- <li>furnizorii de servicii de internet sau angajatorii care urmăresc paginile pe care le accesaţi;</li>
- <li>aplicaţiile software rău intenţionate care vă urmăresc apăsările pe taste promiţându-vă că vă oferă emoticonuri gratuite;</li>
- <li>acţiunile de monitorizare efectuate de agenţi secreţi;</li>
- <li>persoanele din spatele dvs.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ro/incognito_mode_start_page.html b/core/res/res/raw-ro/incognito_mode_start_page.html
deleted file mode 100644
index 3e499d3..0000000
--- a/core/res/res/raw-ro/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Fereastră incognito nouă</title>
- </head>
- <body>
- <p><strong>Navigaţi incognito</strong>. Paginile pe care le afişaţi în această fereastră nu vor apărea în istoricul browserului sau al căutărilor şi nu vor lăsa alte urme, precum cookie-uri, pe dispozitivul dvs. după ce închideţi fereastra incognito. Dar fişierele descărcate şi marcajele create vor fi păstrate.</p>
-
- <p><strong>Navigarea incognito nu influenţează comportamentul altor persoane, servere sau aplicaţii software. Fiţi atent(ă) la:</strong></p>
-
- <ul>
- <li>site-urile web care colectează sau distribuie informaţii despre dvs.;</li>
- <li>furnizorii de servicii de internet sau angajatorii care urmăresc paginile pe care le accesaţi;</li>
- <li>aplicaţiile software rău intenţionate care vă urmăresc apăsările pe taste promiţându-vă că vă oferă emoticonuri gratuite;</li>
- <li>acţiunile de monitorizare efectuate de agenţi secreţi;</li>
- <li>persoanele din spatele dvs.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ru-xlarge/incognito_mode_start_page.html b/core/res/res/raw-ru-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index ae7b59c..0000000
--- a/core/res/res/raw-ru-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Новое окно в режиме инкогнито</title>
- </head>
- <body>
- <p><strong>Вы перешли в режим инкогнито</strong>. Страницы, которые вы просматриваете в окне в режиме инкогнито, не появятся в истории вашего браузера или истории поиска, а также не оставят на вашем компьютере других следов, таких как файлы cookie, когда вы закроете это окно. Тем не менее, все файлы, которые вы загружаете, или закладки, которые вы создаете, останутся в целости и сохранности. </p>
-
- <p><strong>Переход в режим инкогнито не влияет на поведение других пользователей, серверов или программ. Опасайтесь:</strong></p>
-
- <ul>
- <li>Веб-сайтов, которые собирают информацию о вас или передают ее другим</li>
- <li>Поставщиков услуг Интернета или их сотрудников, которые отслеживают, какие страницы вы посещаете</li>
- <li>Вредоносного ПО, которое отслеживает нажатие клавиш клавиатуры в обмен на бесплатные смайлики</li>
- <li>Слежки тайными агентами</li>
- <li>Людей, которые стоят у вас за спиной</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-ru/incognito_mode_start_page.html b/core/res/res/raw-ru/incognito_mode_start_page.html
deleted file mode 100644
index ae7b59c..0000000
--- a/core/res/res/raw-ru/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Новое окно в режиме инкогнито</title>
- </head>
- <body>
- <p><strong>Вы перешли в режим инкогнито</strong>. Страницы, которые вы просматриваете в окне в режиме инкогнито, не появятся в истории вашего браузера или истории поиска, а также не оставят на вашем компьютере других следов, таких как файлы cookie, когда вы закроете это окно. Тем не менее, все файлы, которые вы загружаете, или закладки, которые вы создаете, останутся в целости и сохранности. </p>
-
- <p><strong>Переход в режим инкогнито не влияет на поведение других пользователей, серверов или программ. Опасайтесь:</strong></p>
-
- <ul>
- <li>Веб-сайтов, которые собирают информацию о вас или передают ее другим</li>
- <li>Поставщиков услуг Интернета или их сотрудников, которые отслеживают, какие страницы вы посещаете</li>
- <li>Вредоносного ПО, которое отслеживает нажатие клавиш клавиатуры в обмен на бесплатные смайлики</li>
- <li>Слежки тайными агентами</li>
- <li>Людей, которые стоят у вас за спиной</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sk-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sk-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 5b138f1..0000000
--- a/core/res/res/raw-sk-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nové okno inkognito</title>
- </head>
- <body>
- <p><strong>Ste v režime inkognito</strong> Stránky, ktoré si pozriete v tomto okne, sa nezobrazia v histórii prehliadača ani v histórii vyhľadávania. Po zavretí okna inkognito na zariadení nezostanú ani žiadne iné stopy, ako sú napr. súbory cookie. Napriek tomu však zostanú zachované všetky prevzaté súbory aj záložky, ktoré ste vytvorili.</p>
-
- <p><strong>Režim inkognito neovplyvňuje správanie iných ľudí, serverov ani softvéru. Dávajte si pozor na:</strong></p>
-
- <ul>
- <li>webové stránky, ktoré zbierajú alebo zdieľajú vaše informácie;</li>
- <li>poskytovateľov internetových služieb alebo zamestnancov, ktorí sledujú vaše navštívené stránky;</li>
- <li>škodlivý softvér, ktorý sleduje ktoré klávesy stláčate výmenou za smajlíkov zadarmo;</li>
- <li>sledovanie tajnými agentmi;</li>
- <li>ľudí, ktorí stoja za vami.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sk/incognito_mode_start_page.html b/core/res/res/raw-sk/incognito_mode_start_page.html
deleted file mode 100644
index 5b138f1..0000000
--- a/core/res/res/raw-sk/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nové okno inkognito</title>
- </head>
- <body>
- <p><strong>Ste v režime inkognito</strong> Stránky, ktoré si pozriete v tomto okne, sa nezobrazia v histórii prehliadača ani v histórii vyhľadávania. Po zavretí okna inkognito na zariadení nezostanú ani žiadne iné stopy, ako sú napr. súbory cookie. Napriek tomu však zostanú zachované všetky prevzaté súbory aj záložky, ktoré ste vytvorili.</p>
-
- <p><strong>Režim inkognito neovplyvňuje správanie iných ľudí, serverov ani softvéru. Dávajte si pozor na:</strong></p>
-
- <ul>
- <li>webové stránky, ktoré zbierajú alebo zdieľajú vaše informácie;</li>
- <li>poskytovateľov internetových služieb alebo zamestnancov, ktorí sledujú vaše navštívené stránky;</li>
- <li>škodlivý softvér, ktorý sleduje ktoré klávesy stláčate výmenou za smajlíkov zadarmo;</li>
- <li>sledovanie tajnými agentmi;</li>
- <li>ľudí, ktorí stoja za vami.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sl-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 33a8b08..0000000
--- a/core/res/res/raw-sl-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Novo okno brez beleženja zgodovine</title>
- </head>
- <body>
- <p><strong>Ste v načinu brez beleženja zgodovine.</strong> Strani, ki si jih ogledate v tem oknu, ne bodo prikazane v zgodovini brskalnika ali zgodovini iskanja, prav tako v vaši napravi ne bodo pustile sledi, kot npr. piškotkov, ko zaprete stran, ki jo imate odprto v tem načinu. Datoteke, ki jih prenesete ali zaznamki, ki jih ustvarite, bodo ohranjeni.</p>
-
- <p><strong>Funkcije brez beleženja zgodovine ne vplivajo na obnašanje drugih oseb, strežnikov ali programske opreme. Pazite na:</strong></p>
-
- <ul>
- <li>Spletna mesta, ki zbirajo informacije o vas ali jih dajejo v skupno rabo.</li>
- <li>Ponudnike internetnih storitev ali zaposlene, ki spremljajo spletna mesta, ki ste jih obiskali.</li>
- <li>Zlonamerno programsko opremo, ki spremlja vaše tipkanje, v zameno pa vam ponuja brezplačne čustvene simbole.</li>
- <li>Nadzor tajnih agentov.</li>
- <li>Osebe, ki stojijo za vašim hrbtom.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sl/incognito_mode_start_page.html b/core/res/res/raw-sl/incognito_mode_start_page.html
deleted file mode 100644
index 33a8b08..0000000
--- a/core/res/res/raw-sl/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Novo okno brez beleženja zgodovine</title>
- </head>
- <body>
- <p><strong>Ste v načinu brez beleženja zgodovine.</strong> Strani, ki si jih ogledate v tem oknu, ne bodo prikazane v zgodovini brskalnika ali zgodovini iskanja, prav tako v vaši napravi ne bodo pustile sledi, kot npr. piškotkov, ko zaprete stran, ki jo imate odprto v tem načinu. Datoteke, ki jih prenesete ali zaznamki, ki jih ustvarite, bodo ohranjeni.</p>
-
- <p><strong>Funkcije brez beleženja zgodovine ne vplivajo na obnašanje drugih oseb, strežnikov ali programske opreme. Pazite na:</strong></p>
-
- <ul>
- <li>Spletna mesta, ki zbirajo informacije o vas ali jih dajejo v skupno rabo.</li>
- <li>Ponudnike internetnih storitev ali zaposlene, ki spremljajo spletna mesta, ki ste jih obiskali.</li>
- <li>Zlonamerno programsko opremo, ki spremlja vaše tipkanje, v zameno pa vam ponuja brezplačne čustvene simbole.</li>
- <li>Nadzor tajnih agentov.</li>
- <li>Osebe, ki stojijo za vašim hrbtom.</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sr-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index b1fbcb1..0000000
--- a/core/res/res/raw-sr-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нов прозор без архивирања</title>
- </head>
- <body>
- <p><strong>Ушли сте у режим без архивирања</strong> Странице које гледате у овом прозору се неће појавити у историји прегледања ни историји претраге, нити ће оставити друге трагове, попут колачића, на вашем уређају када затворите овај прозор. Међутим, ако преузмете датотеке или направите обележиваче, они ће бити сачувани.</p>
-
- <p><strong>Режим без архивирања не утиче на понашање других људи, сервера нити софтвера. Чувајте се:</strong></p>
-
- <ul>
- <li>Веб сајтова који прикупљају и деле податке о вама</li>
- <li>Добављача интернет услуга или запослених који прате странице које посетите</li>
- <li>Злонамерног софтвера који прати шта куцате</li>
- <li>Надзора тајних агената</li>
- <li>Људи који вам стоје иза леђа</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sr/incognito_mode_start_page.html b/core/res/res/raw-sr/incognito_mode_start_page.html
deleted file mode 100644
index b1fbcb1..0000000
--- a/core/res/res/raw-sr/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нов прозор без архивирања</title>
- </head>
- <body>
- <p><strong>Ушли сте у режим без архивирања</strong> Странице које гледате у овом прозору се неће појавити у историји прегледања ни историји претраге, нити ће оставити друге трагове, попут колачића, на вашем уређају када затворите овај прозор. Међутим, ако преузмете датотеке или направите обележиваче, они ће бити сачувани.</p>
-
- <p><strong>Режим без архивирања не утиче на понашање других људи, сервера нити софтвера. Чувајте се:</strong></p>
-
- <ul>
- <li>Веб сајтова који прикупљају и деле податке о вама</li>
- <li>Добављача интернет услуга или запослених који прате странице које посетите</li>
- <li>Злонамерног софтвера који прати шта куцате</li>
- <li>Надзора тајних агената</li>
- <li>Људи који вам стоје иза леђа</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sv-xlarge/incognito_mode_start_page.html b/core/res/res/raw-sv-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 5ebbb22..0000000
--- a/core/res/res/raw-sv-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nytt inkognitofönster</title>
- </head>
- <body>
- <p><strong>Du använder inkognitoläget</strong>. Sidor som du har läst i detta fönster visas inte i din webbläsarhistorik eller sökhistorik. De lämnar inga spår efter sig, till exempel cookies, i din enhet efter att du stängt inkognitofönstret. Alla filer som du hämtar eller bokmärken du skapar sparas dock.</p>
-
- <p><strong>Att använda datorn inkognito påverkar inte användare, servrar eller program. Se upp för:</strong></p>
-
- <ul>
- <li>Webbplatser som samlar eller delar information om dig</li>
- <li>Internetleverantörer eller arbetsgivare som spårar var du surfar</li>
- <li>Skadlig programvara som spårar dina tangenttryckningar som nyckelloggare</li>
- <li>Övervakning av hemliga agenter</li>
- <li>Personer som står bakom dig</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-sv/incognito_mode_start_page.html b/core/res/res/raw-sv/incognito_mode_start_page.html
deleted file mode 100644
index 5ebbb22..0000000
--- a/core/res/res/raw-sv/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Nytt inkognitofönster</title>
- </head>
- <body>
- <p><strong>Du använder inkognitoläget</strong>. Sidor som du har läst i detta fönster visas inte i din webbläsarhistorik eller sökhistorik. De lämnar inga spår efter sig, till exempel cookies, i din enhet efter att du stängt inkognitofönstret. Alla filer som du hämtar eller bokmärken du skapar sparas dock.</p>
-
- <p><strong>Att använda datorn inkognito påverkar inte användare, servrar eller program. Se upp för:</strong></p>
-
- <ul>
- <li>Webbplatser som samlar eller delar information om dig</li>
- <li>Internetleverantörer eller arbetsgivare som spårar var du surfar</li>
- <li>Skadlig programvara som spårar dina tangenttryckningar som nyckelloggare</li>
- <li>Övervakning av hemliga agenter</li>
- <li>Personer som står bakom dig</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-th-xlarge/incognito_mode_start_page.html b/core/res/res/raw-th-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 29c64eb..0000000
--- a/core/res/res/raw-th-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>หน้าต่างใหม่ที่ไม่ระบุตัวตน</title>
- </head>
- <body>
- <p><strong>คุณได้เข้าสู่โหมดไม่ระบุตัวตนแล้ว</strong> หน้าเว็บที่คุณดูในหน้าต่างนี้จะไม่ปรากฏในประวัติของเบราว์เซอร์หรือประวัติการค้นหาของคุณ และจะไม่ทิ้งร่องรอยอื่นๆ เช่น คุกกี้ ไว้บนอุปกรณ์หลังจากที่คุณปิดหน้าต่างที่ไม่ระบุตัวตนนี้แล้ว อย่างไรก็ตาม ไฟล์ที่คุณดาวน์โหลดหรือบุ๊กมาร์กที่สร้างขึ้นจะถูกเก็บไว้</p>
-
- <p><strong>การเข้าสู่โหมดไม่ระบุตัวตนจะไม่กระทบต่อการทำงานของบุคคล เซิร์ฟเวอร์ หรือซอฟต์แวร์อื่น โปรดระวัง:</strong></p>
-
- <ul>
- <li>เว็บไซต์ที่เก็บหรือแบ่งปันข้อมูลเกี่ยวกับคุณ</li>
- <li>ผู้ให้บริการอินเทอร์เน็ตหรือนายจ้างที่ติดตามหน้าเว็บที่คุณเข้าชม</li>
- <li>ซอฟต์แวร์มุ่งร้ายที่ติดตามการกดแป้นพิมพ์โดยมากับของฟรี</li>
- <li>การตรวจสอบของหน่วยสืบราชการลับ</li>
- <li>บุคคลที่ยืนอยู่ข้างหลังคุณ</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-th/incognito_mode_start_page.html b/core/res/res/raw-th/incognito_mode_start_page.html
deleted file mode 100644
index 29c64eb..0000000
--- a/core/res/res/raw-th/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>หน้าต่างใหม่ที่ไม่ระบุตัวตน</title>
- </head>
- <body>
- <p><strong>คุณได้เข้าสู่โหมดไม่ระบุตัวตนแล้ว</strong> หน้าเว็บที่คุณดูในหน้าต่างนี้จะไม่ปรากฏในประวัติของเบราว์เซอร์หรือประวัติการค้นหาของคุณ และจะไม่ทิ้งร่องรอยอื่นๆ เช่น คุกกี้ ไว้บนอุปกรณ์หลังจากที่คุณปิดหน้าต่างที่ไม่ระบุตัวตนนี้แล้ว อย่างไรก็ตาม ไฟล์ที่คุณดาวน์โหลดหรือบุ๊กมาร์กที่สร้างขึ้นจะถูกเก็บไว้</p>
-
- <p><strong>การเข้าสู่โหมดไม่ระบุตัวตนจะไม่กระทบต่อการทำงานของบุคคล เซิร์ฟเวอร์ หรือซอฟต์แวร์อื่น โปรดระวัง:</strong></p>
-
- <ul>
- <li>เว็บไซต์ที่เก็บหรือแบ่งปันข้อมูลเกี่ยวกับคุณ</li>
- <li>ผู้ให้บริการอินเทอร์เน็ตหรือนายจ้างที่ติดตามหน้าเว็บที่คุณเข้าชม</li>
- <li>ซอฟต์แวร์มุ่งร้ายที่ติดตามการกดแป้นพิมพ์โดยมากับของฟรี</li>
- <li>การตรวจสอบของหน่วยสืบราชการลับ</li>
- <li>บุคคลที่ยืนอยู่ข้างหลังคุณ</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-tl-xlarge/incognito_mode_start_page.html b/core/res/res/raw-tl-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 6ce5853..0000000
--- a/core/res/res/raw-tl-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Bagong incognito window</title>
- </head>
- <body>
- <p><strong>Nag-incognito ka</strong>. Hindi lalabas sa iyong kasaysayan ng pag-browse at kasaysayan ng paghahanap ang mga pahinang tiningnan mo sa window na ito, at hindi sila mag-iiwan ng ibang bakas, gaya ng cookies, sa iyong device matapos mong isara ang window na incognito. Gayunpaman, pananatiliin ang anumang mga file na iyong na-download o ang iyong mga ginawang bookmark.</p>
-
- <p><strong>Hindi nakakaapekto ang pagiging incognito sa gawi ng ibang mga tao, server, o software. Maging maingat sa:</strong></p>
-
- <ul>
- <li>Mga website na kumokolekta o nagbabahagi ng impormasyong tungkol sa iyo</li>
- <li>Mga internet service provider o mga employer na sinusubaybayan ang mga pahinang binibisita mo</li>
- <li>Malicious software na sinusubaybayan ang iyong mga keystroke kapalit ng mga libreng smiley</li>
- <li>Pagmamasid ng mga secret agent</li>
- <li>Mga tao na nakatayo sa likuran mo</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-tl/incognito_mode_start_page.html b/core/res/res/raw-tl/incognito_mode_start_page.html
deleted file mode 100644
index 6ce5853..0000000
--- a/core/res/res/raw-tl/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Bagong incognito window</title>
- </head>
- <body>
- <p><strong>Nag-incognito ka</strong>. Hindi lalabas sa iyong kasaysayan ng pag-browse at kasaysayan ng paghahanap ang mga pahinang tiningnan mo sa window na ito, at hindi sila mag-iiwan ng ibang bakas, gaya ng cookies, sa iyong device matapos mong isara ang window na incognito. Gayunpaman, pananatiliin ang anumang mga file na iyong na-download o ang iyong mga ginawang bookmark.</p>
-
- <p><strong>Hindi nakakaapekto ang pagiging incognito sa gawi ng ibang mga tao, server, o software. Maging maingat sa:</strong></p>
-
- <ul>
- <li>Mga website na kumokolekta o nagbabahagi ng impormasyong tungkol sa iyo</li>
- <li>Mga internet service provider o mga employer na sinusubaybayan ang mga pahinang binibisita mo</li>
- <li>Malicious software na sinusubaybayan ang iyong mga keystroke kapalit ng mga libreng smiley</li>
- <li>Pagmamasid ng mga secret agent</li>
- <li>Mga tao na nakatayo sa likuran mo</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-tr-xlarge/incognito_mode_start_page.html b/core/res/res/raw-tr-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index c570cc7..0000000
--- a/core/res/res/raw-tr-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Yeni gizli pencere</title>
- </head>
- <body>
- <p><strong>Gizli moda geçtiniz</strong> Bu pencerede görüntülediğiniz sayfalar tarayıcı geçmişinizde veya arama geçmişinizde görünmez ve gizli pencereyi kapatmanızın ardından cihazınızda çerezler gibi izler bırakmaz. Ancak, indirdiğiniz dosyalar ve oluşturduğunuz favoriler korunur.</p>
-
- <p><strong>Gizli moda geçmeniz diğer kişilerin, sunucuların veya yazılımların davranışlarını etkilemez. Şu konularda dikkatli olun:</strong></p>
-
- <ul>
- <li>Hakkınızda bilgi toplayan veya paylaşan web siteleri</li>
- <li>Ziyaret ettiğiniz sayfaları izleyen şirket çalışanları veya servis sağlayıcıları</li>
- <li>Ücretsiz ifade simgeleri karşılığında tuş vuruşlarınızı takip eden kötü niyetli yazılımlar</li>
- <li>Gizli ajanlar tarafından takip edilme</li>
- <li>Arkanızda dikilip ne yaptığınıza bakan kişiler</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-tr/incognito_mode_start_page.html b/core/res/res/raw-tr/incognito_mode_start_page.html
deleted file mode 100644
index c570cc7..0000000
--- a/core/res/res/raw-tr/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Yeni gizli pencere</title>
- </head>
- <body>
- <p><strong>Gizli moda geçtiniz</strong> Bu pencerede görüntülediğiniz sayfalar tarayıcı geçmişinizde veya arama geçmişinizde görünmez ve gizli pencereyi kapatmanızın ardından cihazınızda çerezler gibi izler bırakmaz. Ancak, indirdiğiniz dosyalar ve oluşturduğunuz favoriler korunur.</p>
-
- <p><strong>Gizli moda geçmeniz diğer kişilerin, sunucuların veya yazılımların davranışlarını etkilemez. Şu konularda dikkatli olun:</strong></p>
-
- <ul>
- <li>Hakkınızda bilgi toplayan veya paylaşan web siteleri</li>
- <li>Ziyaret ettiğiniz sayfaları izleyen şirket çalışanları veya servis sağlayıcıları</li>
- <li>Ücretsiz ifade simgeleri karşılığında tuş vuruşlarınızı takip eden kötü niyetli yazılımlar</li>
- <li>Gizli ajanlar tarafından takip edilme</li>
- <li>Arkanızda dikilip ne yaptığınıza bakan kişiler</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-uk-xlarge/incognito_mode_start_page.html b/core/res/res/raw-uk-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 8852854..0000000
--- a/core/res/res/raw-uk-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нове анонімне вікно</title>
- </head>
- <body>
- <p><strong>Ви в анонімному режимі</strong>. Сторінки, які ви переглядаєте в цьому вікні, не з’являться в історії веб-переглядача чи в історії пошуку. Вони також не залишать жодних слідів, як-от файлів cookie, у вашому пристрої після того, як ви закриєте анонімне вікно. Однак, завантажені файли та збережені закладки залишаться.</p>
-
- <p><strong>Анонімний режим не впливає на поведінку інших людей, серверів чи програмного забезпечення. Остерігайтеся:</strong></p>
-
- <ul>
- <li>веб-сайтів, які збирають чи поширюють інформацію про вас</li>
- <li>постачальників інтернет-послуг або роботодавців, які відстежують сторінки, які ви відвідуєте</li>
- <li>зловмисного програмного забезпечення, яке пропонує безкоштовні смайли, натомість реєструючи клавіші, які ви натискаєте</li>
- <li>нагляду збоку секретних служб</li>
- <li>людей за вашою спиною</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-uk/incognito_mode_start_page.html b/core/res/res/raw-uk/incognito_mode_start_page.html
deleted file mode 100644
index 8852854..0000000
--- a/core/res/res/raw-uk/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Нове анонімне вікно</title>
- </head>
- <body>
- <p><strong>Ви в анонімному режимі</strong>. Сторінки, які ви переглядаєте в цьому вікні, не з’являться в історії веб-переглядача чи в історії пошуку. Вони також не залишать жодних слідів, як-от файлів cookie, у вашому пристрої після того, як ви закриєте анонімне вікно. Однак, завантажені файли та збережені закладки залишаться.</p>
-
- <p><strong>Анонімний режим не впливає на поведінку інших людей, серверів чи програмного забезпечення. Остерігайтеся:</strong></p>
-
- <ul>
- <li>веб-сайтів, які збирають чи поширюють інформацію про вас</li>
- <li>постачальників інтернет-послуг або роботодавців, які відстежують сторінки, які ви відвідуєте</li>
- <li>зловмисного програмного забезпечення, яке пропонує безкоштовні смайли, натомість реєструючи клавіші, які ви натискаєте</li>
- <li>нагляду збоку секретних служб</li>
- <li>людей за вашою спиною</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-vi-xlarge/incognito_mode_start_page.html b/core/res/res/raw-vi-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 9902cde..0000000
--- a/core/res/res/raw-vi-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Cửa sổ ẩn danh mới</title>
- </head>
- <body>
- <p><strong>Bạn đã sử dụng cửa sổ ẩn danh</strong>. Các trang bạn xem trong cửa sổ này sẽ không xuất hiện trong lịch sử của trình duyệt hoặc lịch sử tìm kiếm và chúng cũng không để lại dấu vết như cookie trên thiết bị sau khi bạn đóng cửa sổ ẩn danh. Tuy nhiên, mọi tệp bạn tải xuống hoặc mọi dấu trang bạn tạo sẽ được giữ nguyên.</p>
-
- <p><strong>Sử dụng cửa sổ ẩn danh không ảnh hưởng đến hành vi của người khác, của máy chủ hoặc phần mềm. Hãy cảnh giác với:</strong></p>
-
- <ul>
- <li>Các trang web thu thập hoặc chia sẻ thông tin về bạn</li>
- <li>Nhà cung cấp dịch vụ Internet hoặc ông chủ muốn theo dõi những trang bạn đã truy cập</li>
- <li>Phần mềm độc hại theo dõi thao tác gõ phím khi nhập các mặt cười</li>
- <li>Sự theo dõi của các cơ quan tình báo</li>
- <li>Những người đứng đằng sau bạn</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-vi/incognito_mode_start_page.html b/core/res/res/raw-vi/incognito_mode_start_page.html
deleted file mode 100644
index 9902cde..0000000
--- a/core/res/res/raw-vi/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>Cửa sổ ẩn danh mới</title>
- </head>
- <body>
- <p><strong>Bạn đã sử dụng cửa sổ ẩn danh</strong>. Các trang bạn xem trong cửa sổ này sẽ không xuất hiện trong lịch sử của trình duyệt hoặc lịch sử tìm kiếm và chúng cũng không để lại dấu vết như cookie trên thiết bị sau khi bạn đóng cửa sổ ẩn danh. Tuy nhiên, mọi tệp bạn tải xuống hoặc mọi dấu trang bạn tạo sẽ được giữ nguyên.</p>
-
- <p><strong>Sử dụng cửa sổ ẩn danh không ảnh hưởng đến hành vi của người khác, của máy chủ hoặc phần mềm. Hãy cảnh giác với:</strong></p>
-
- <ul>
- <li>Các trang web thu thập hoặc chia sẻ thông tin về bạn</li>
- <li>Nhà cung cấp dịch vụ Internet hoặc ông chủ muốn theo dõi những trang bạn đã truy cập</li>
- <li>Phần mềm độc hại theo dõi thao tác gõ phím khi nhập các mặt cười</li>
- <li>Sự theo dõi của các cơ quan tình báo</li>
- <li>Những người đứng đằng sau bạn</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-xlarge/incognito_mode_start_page.html b/core/res/res/raw-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 492658d..0000000
--- a/core/res/res/raw-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
- <title>New incognito tab</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages you view in this tab
- won't appear in your browser history or search history, and they won't
- leave other traces, like cookies, on your device after you close the
- incognito tab. Any files you download or bookmarks you create will be
- preserved, however.</p>
-
- <p><strong>Going incognito doesn't affect the behavior of other people,
- servers, or software. Be wary of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html b/core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 2caf8f8b..0000000
--- a/core/res/res/raw-zh-rCN-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新建隐身窗口</title>
- </head>
- <body>
- <p><strong>您已进入隐身模式</strong>。当关闭隐身窗口后,您在此窗口中查看的网页将不会出现在您的浏览器历史记录或搜索记录中,也不会在您的设备留下任何踪迹(如 cookie)。但是,您下载的任何文件或您创建的书签会予以保留。</p>
-
- <p><strong>进入隐身模式不会影响他人、其他服务器或软件的行为。敬请提防:</strong></p>
-
- <ul>
- <li>搜集并分享有关您的信息的网站</li>
- <li>跟踪您所访问的网页的互联网服务提供商或雇主</li>
- <li>跟踪您的键盘输入内容以换取免费表情符号的恶意软件</li>
- <li>对您进行监视的秘密代理</li>
- <li>站在您身后的人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-zh-rCN/incognito_mode_start_page.html b/core/res/res/raw-zh-rCN/incognito_mode_start_page.html
deleted file mode 100644
index 2caf8f8b..0000000
--- a/core/res/res/raw-zh-rCN/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新建隐身窗口</title>
- </head>
- <body>
- <p><strong>您已进入隐身模式</strong>。当关闭隐身窗口后,您在此窗口中查看的网页将不会出现在您的浏览器历史记录或搜索记录中,也不会在您的设备留下任何踪迹(如 cookie)。但是,您下载的任何文件或您创建的书签会予以保留。</p>
-
- <p><strong>进入隐身模式不会影响他人、其他服务器或软件的行为。敬请提防:</strong></p>
-
- <ul>
- <li>搜集并分享有关您的信息的网站</li>
- <li>跟踪您所访问的网页的互联网服务提供商或雇主</li>
- <li>跟踪您的键盘输入内容以换取免费表情符号的恶意软件</li>
- <li>对您进行监视的秘密代理</li>
- <li>站在您身后的人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html b/core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html
deleted file mode 100644
index 54eb40b..0000000
--- a/core/res/res/raw-zh-rTW-xlarge/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新的無痕式視窗</title>
- </head>
- <body>
- <p><strong>您已開啟無痕式視窗</strong>。透過這個視窗開啟的網頁都不會出現在瀏覽器記錄和搜尋記錄中,而且您關閉此類視窗之後,裝置上並不會保留任何相關記錄 (例如 cookie)。不過系統會保存您的下載檔案和書籤。</p>
-
- <p><strong>無痕式視窗無法掌控人、伺服器和軟體的行為,所以請小心下列的人事物:</strong></p>
-
- <ul>
- <li>會收集或分享您的相關資訊的網站</li>
- <li>會追蹤您造訪網頁的網路服務供應商或雇主</li>
- <li>以免費下載為誘因引誘您點擊的連結,其中通常隱藏鍵盤記錄惡意軟體</li>
- <li>情報特務的監控</li>
- <li>站在您身後的人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw-zh-rTW/incognito_mode_start_page.html b/core/res/res/raw-zh-rTW/incognito_mode_start_page.html
deleted file mode 100644
index 54eb40b..0000000
--- a/core/res/res/raw-zh-rTW/incognito_mode_start_page.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<html DIR="LTR">
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no" />
- <title>新的無痕式視窗</title>
- </head>
- <body>
- <p><strong>您已開啟無痕式視窗</strong>。透過這個視窗開啟的網頁都不會出現在瀏覽器記錄和搜尋記錄中,而且您關閉此類視窗之後,裝置上並不會保留任何相關記錄 (例如 cookie)。不過系統會保存您的下載檔案和書籤。</p>
-
- <p><strong>無痕式視窗無法掌控人、伺服器和軟體的行為,所以請小心下列的人事物:</strong></p>
-
- <ul>
- <li>會收集或分享您的相關資訊的網站</li>
- <li>會追蹤您造訪網頁的網路服務供應商或雇主</li>
- <li>以免費下載為誘因引誘您點擊的連結,其中通常隱藏鍵盤記錄惡意軟體</li>
- <li>情報特務的監控</li>
- <li>站在您身後的人</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/raw/incognito_mode_start_page.html b/core/res/res/raw/incognito_mode_start_page.html
deleted file mode 100644
index 5d7a3fb..0000000
--- a/core/res/res/raw/incognito_mode_start_page.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<html>
- <head>
- <meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no"/>
- <title>New incognito window</title>
- </head>
- <body>
- <p><strong>You've gone incognito</strong>. Pages you view in this window
- won't appear in your browser history or search history, and they won't
- leave other traces, like cookies, on your device after you close the
- incognito window. Any files you download or bookmarks you create will be
- preserved, however.</p>
-
- <p><strong>Going incognito doesn't affect the behavior of other people,
- servers, or software. Be wary of:</strong></p>
-
- <ul>
- <li>Websites that collect or share information about you</li>
- <li>Internet service providers or employers that track the pages you visit</li>
- <li>Malicious software that tracks your keystrokes in exchange for free smileys</li>
- <li>Surveillance by secret agents</li>
- <li>People standing behind you</li>
- </ul>
- </body>
-</html>
diff --git a/core/res/res/values-af/strings.xml b/core/res/res/values-af/strings.xml
index bd92ab6..677017d 100644
--- a/core/res/res/values-af/strings.xml
+++ b/core/res/res/values-af/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi het geen internettoegang nie"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tik vir opsies"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Het oorgeskakel na <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Toestel gebruik <xliff:g id="NEW_NETWORK">%1$s</xliff:g> wanneer <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> geen internetverbinding het nie. Heffings kan geld."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Het oorgeskakel van <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"sellulêre data"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"\'n onbekende netwerktipe"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kon nie aan Wi-Fikoppel nie"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" het \'n swak internetverbinding."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Laat verbinding toe?"</string>
diff --git a/core/res/res/values-am/strings.xml b/core/res/res/values-am/strings.xml
index 98fcebb..721f884 100644
--- a/core/res/res/values-am/strings.xml
+++ b/core/res/res/values-am/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi በይነመረብ መዳረሻ የለውም"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ለአማራጮች መታ ያድርጉ"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"ወደ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ተቀይሯል"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ምንም ዓይነት የበይነመረብ ግንኙነት በማይኖረው ጊዜ መሣሪያዎች <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ን ይጠቀማሉ። ክፍያዎች ተፈጻሚ ሊሆኑ ይችላሉ።"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"ከ<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ወደ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ተቀይሯል"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"የተንቀሳቃሽ ስልክ ውሂብ"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"ብሉቱዝ"</item>
+ <item msgid="5447331121797802871">"ኤተርኔት"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"አንድ ያልታወቀ አውታረ መረብ ዓይነት"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ወደ Wi-Fi ለማያያዝ አልተቻለም"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ደካማ የበይነመረብ ግንኙነት ኣለው።"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"ግንኙነት ይፈቀድ?"</string>
diff --git a/core/res/res/values-ar/strings.xml b/core/res/res/values-ar/strings.xml
index 32df247..630c292 100644
--- a/core/res/res/values-ar/strings.xml
+++ b/core/res/res/values-ar/strings.xml
@@ -1176,6 +1176,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"شبكة Wi-Fi غير متصلة بالإنترنت"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"انقر للحصول على الخيارات."</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"تم التبديل إلى <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"يستخدم الجهاز <xliff:g id="NEW_NETWORK">%1$s</xliff:g> عندما لا يتوفر اتصال بالإنترنت في شبكة <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>، ويمكن أن يتم فرض رسوم مقابل ذلك."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"تم التبديل من <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> إلى <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"بيانات شبكة الجوّال"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"بلوتوث"</item>
+ <item msgid="5447331121797802871">"إيثرنت"</item>
+ <item msgid="8257233890381651999">"شبكة ظاهرية خاصة (VPN)"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"نوع شبكة غير معروف"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"تعذر الاتصال بـ Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" لديها اتصال إنترنت رديء."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"هل تريد السماح بالاتصال؟"</string>
diff --git a/core/res/res/values-az-rAZ/strings.xml b/core/res/res/values-az-rAZ/strings.xml
index b1ed7dd..502131a 100644
--- a/core/res/res/values-az-rAZ/strings.xml
+++ b/core/res/res/values-az-rAZ/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi-ın İnternetə girişi yoxdur"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Seçimlər üçün tıklayın"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> şəbəkə növünə keçirildi"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> şəbəkəsinin İnternetə çıxışı olmadıqda, cihaz <xliff:g id="NEW_NETWORK">%1$s</xliff:g> şəbəkəsini istifadə edir. Ödəniş tətbiq oluna bilər."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> şəbəkəsindən <xliff:g id="NEW_NETWORK">%2$s</xliff:g> şəbəkəsinə keçirildi"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobil data"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"naməlum şəbəkə növü"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi\'a qoşulmaq alınmadı"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" internet bağlantısı keyfiyyətsizdir."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Bağlantıya icazə verilsin?"</string>
diff --git a/core/res/res/values-b+sr+Latn/strings.xml b/core/res/res/values-b+sr+Latn/strings.xml
index ad74e2e..c8fc56f 100644
--- a/core/res/res/values-b+sr+Latn/strings.xml
+++ b/core/res/res/values-b+sr+Latn/strings.xml
@@ -1101,6 +1101,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi nema pristup internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Dodirnite za opcije"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Prešli ste na tip mreže <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Uređaj koristi tip mreže <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kada tip mreže <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu. Možda će se naplaćivati troškovi."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Prešli ste sa tipa mreže <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na tip mreže <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobilni podaci"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Eternet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"nepoznat tip mreže"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nije moguće povezati sa Wi-Fi mrežom"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ima lošu internet vezu."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Želite li da dozvolite povezivanje?"</string>
diff --git a/core/res/res/values-be-rBY/strings.xml b/core/res/res/values-be-rBY/strings.xml
index 237820c..c98b151 100644
--- a/core/res/res/values-be-rBY/strings.xml
+++ b/core/res/res/values-be-rBY/strings.xml
@@ -1126,6 +1126,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"У Wi-Fi няма доступу да Інтэрнэту"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Дакраніцеся, каб убачыць параметры"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Выкананы пераход да <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Прылада выкарыстоўвае <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, калі ў <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> няма доступу да інтэрнэту. Можа спаганяцца дадатковая плата."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Выкананы пераход з <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> да <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"сотавая перадача даных"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"невядомы тып сеткі"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Немагчыма падключыцца да Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" дрэннае падключэнне да Інтэрнэту."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Дазволіць падключэнне?"</string>
diff --git a/core/res/res/values-bg/strings.xml b/core/res/res/values-bg/strings.xml
index 098a1a56..cffc850 100644
--- a/core/res/res/values-bg/strings.xml
+++ b/core/res/res/values-bg/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi мрежата няма достъп до интернет"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Докоснете за опции"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Превключи се към <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Устройството използва <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, когато <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> няма достъп до интернет. Възможно е да бъдете таксувани."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Превключи се от <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> към <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"мобилни данни"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"виртуална частна мрежа (VPN)"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"неизвестен тип мрежа"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Не можа да се свърже с Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" има лоша връзка с интернет."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Да се разреши ли връзката?"</string>
diff --git a/core/res/res/values-bn-rBD/strings.xml b/core/res/res/values-bn-rBD/strings.xml
index c9e921a..aa2d5d5 100644
--- a/core/res/res/values-bn-rBD/strings.xml
+++ b/core/res/res/values-bn-rBD/strings.xml
@@ -215,7 +215,7 @@
<string name="global_action_lock" msgid="2844945191792119712">"স্ক্রীণ লক"</string>
<string name="global_action_power_off" msgid="4471879440839879722">"পাওয়ার বন্ধ করুন"</string>
<string name="global_action_bug_report" msgid="7934010578922304799">"ত্রুটির প্রতিবেদন"</string>
- <string name="bugreport_title" msgid="2667494803742548533">"ত্রুটির প্রতিবেদন করুন"</string>
+ <string name="bugreport_title" msgid="2667494803742548533">"ত্রুটির অভিযোগ করুন"</string>
<string name="bugreport_message" msgid="398447048750350456">"এটি একটি ই-মেল বার্তা পাঠানোর জন্য আপনার ডিভাইসের বর্তমান অবস্থা সম্পর্কে তথ্য সংগ্রহ করবে৷ ত্রুটির প্রতিবেদন শুরুর সময় থেকে এটি পাঠানোর জন্য প্রস্তুত হতে কিছুটা সময় নেবে; দয়া করে ধৈর্য রাখুন৷"</string>
<string name="bugreport_option_interactive_title" msgid="8635056131768862479">"ইন্টারেক্টিভ প্রতিবেদন"</string>
<string name="bugreport_option_interactive_summary" msgid="229299488536107968">"বেশিরভাগ পরিস্থিতিতে এটিকে ব্যবহার করুন৷ এটি আপনাকে প্রতিবেদনের কাজ কতটা হয়েছে তার উপর নজর রাখতে দেয়, সমস্যাটির সম্পর্কে আরো অনেক কিছু লিখতে দেয় এবং স্ক্রীনশটগুলি নিতে দেয়৷ এটি হয়ত প্রতিবেদন করতে খুব বেশি সময় নেয় এমনকি কম-ব্যবহৃত বিভাগগুলি সরিয়ে দিতে পারে৷"</string>
@@ -1007,7 +1007,7 @@
<string name="anr_application_process" msgid="6417199034861140083">"<xliff:g id="APPLICATION">%1$s</xliff:g> সাড়া দিচ্ছে না"</string>
<string name="anr_process" msgid="6156880875555921105">"<xliff:g id="PROCESS">%1$s</xliff:g> প্রক্রিয়া সাড়া দিচ্ছে না"</string>
<string name="force_close" msgid="8346072094521265605">"ঠিক আছে"</string>
- <string name="report" msgid="4060218260984795706">"প্রতিবেদন করুন"</string>
+ <string name="report" msgid="4060218260984795706">"অভিযোগ করুন"</string>
<string name="wait" msgid="7147118217226317732">"অপেক্ষা করুন"</string>
<string name="webpage_unresponsive" msgid="3272758351138122503">"পৃষ্ঠাটি কোনো পতিক্রিয়া করছে না৷\n\nআপনি কি এটিকে বন্ধ করতে চান?"</string>
<string name="launch_warning_title" msgid="1547997780506713581">"অ্যাপ্লিকেশানকে পুনঃনির্দেশিত করা হয়েছে"</string>
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"ওয়াই-ফাই -তে কোনো ইন্টারনেট অ্যাক্সেস নেই"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"বিকল্পগুলির জন্য আলতো চাপুন"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> এ পাল্টানো হয়েছে"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"যখন <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> এর কোনো ইন্টারনেট অ্যাক্সেস থাকে না তখন ডিভাইস <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ব্যবহার করে৷ চার্জ লাগতে পারে৷"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> থেকে <xliff:g id="NEW_NETWORK">%2$s</xliff:g> এ পাল্টানো হয়েছে"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"সেলুলার ডেটা"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"ইথারনেট"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"এই নেটওয়ার্কের প্রকার অজানা"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ওয়াই-ফাই এর সাথে সংযোগ করা যায়নি"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" একটি দুর্বল ইন্টারনেট সংযোগ রয়েছে৷"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"সংযোগের অনুমতি দেবেন?"</string>
diff --git a/core/res/res/values-bs-rBA/strings.xml b/core/res/res/values-bs-rBA/strings.xml
index 20104a6..d9bb9f0 100644
--- a/core/res/res/values-bs-rBA/strings.xml
+++ b/core/res/res/values-bs-rBA/strings.xml
@@ -1103,6 +1103,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi nema pristup Internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Dodirnite za opcije"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Prebačeno na: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Kada na uređaju <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu, koristi se <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Moguća je naplata usluge."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Prebačeno iz mreže <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> u <xliff:g id="NEW_NETWORK">%2$s</xliff:g> mrežu"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobilni podaci"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"nepoznata vrsta mreže"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Problem prilikom spajanja na Wi-Fi mrežu"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ima lošu internet vezu."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Želite li dozvoliti povezivanje?"</string>
diff --git a/core/res/res/values-ca/strings.xml b/core/res/res/values-ca/strings.xml
index eeed892..b3a0cde 100644
--- a/core/res/res/values-ca/strings.xml
+++ b/core/res/res/values-ca/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"La Wi-Fi no té accés a Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toca per veure les opcions"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Actualment en ús: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"El dispositiu utilitza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> en cas que <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tingui accés a Internet. És possible que s\'apliquin càrrecs."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Abans es feia servir la xarxa <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>; ara s\'utilitza <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"dades mòbils"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"una tipus de xarxa desconegut"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"No s\'ha pogut connectar a la Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" té una mala connexió a Internet."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Vols permetre la connexió?"</string>
diff --git a/core/res/res/values-cs/strings.xml b/core/res/res/values-cs/strings.xml
index df8bffd..59f8385 100644
--- a/core/res/res/values-cs/strings.xml
+++ b/core/res/res/values-cs/strings.xml
@@ -692,7 +692,7 @@
<string name="lockscreen_missing_sim_message" product="default" msgid="2186920585695169078">"V telefonu není žádná SIM karta."</string>
<string name="lockscreen_missing_sim_instructions" msgid="5372787138023272615">"Vložte SIM kartu."</string>
<string name="lockscreen_missing_sim_instructions_long" msgid="3526573099019319472">"SIM karta chybí nebo je nečitelná. Vložte SIM kartu."</string>
- <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Nepoužitelná karta SIM."</string>
+ <string name="lockscreen_permanent_disabled_sim_message_short" msgid="5096149665138916184">"Nepoužitelná SIM karta."</string>
<string name="lockscreen_permanent_disabled_sim_instructions" msgid="910904643433151371">"Vaše SIM karta byla natrvalo zablokována.\n Požádejte svého poskytovatele bezdrátových služeb o další SIM kartu."</string>
<string name="lockscreen_transport_prev_description" msgid="6300840251218161534">"Předchozí skladba"</string>
<string name="lockscreen_transport_next_description" msgid="573285210424377338">"Další skladba"</string>
@@ -1126,6 +1126,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi nemá přístup k internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Klepnutím zobrazíte možnosti"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Přechod na síť <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Když síť <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nebude mít přístup k internetu, zařízení použije síť <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Mohou být účtovány poplatky."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Přechod ze sítě <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na síť <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobilní data"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"neznámý typ sítě"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Připojení k síti Wi-Fi se nezdařilo"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" má pomalé připojení k internetu."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Povolit připojení?"</string>
diff --git a/core/res/res/values-da/strings.xml b/core/res/res/values-da/strings.xml
index 731c847..48b3b87 100644
--- a/core/res/res/values-da/strings.xml
+++ b/core/res/res/values-da/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi har ingen internetadgang"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tryk for at se valgmuligheder"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Der blev skiftet til <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Enheden benytter <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, når <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ikke har adgang til internettet. Der opkræves muligvis gebyr."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Der blev skiftet fra <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> til <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobildata"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"en ukendt netværkstype"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kunne ikke oprette forbindelse til Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" har en dårlig internetforbindelse."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Vil du tillade denne forbindelse?"</string>
diff --git a/core/res/res/values-de/strings.xml b/core/res/res/values-de/strings.xml
index c478607..cb61390 100644
--- a/core/res/res/values-de/strings.xml
+++ b/core/res/res/values-de/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"WLAN hat keinen Internetzugriff"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Für Optionen tippen"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Zu <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> gewechselt"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Auf dem Gerät wird \"<xliff:g id="NEW_NETWORK">%1$s</xliff:g>\" verwendet, wenn über \"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>\" kein Internet verfügbar ist. Eventuell fallen Gebühren an."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Von \"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>\" zu \"<xliff:g id="NEW_NETWORK">%2$s</xliff:g>\" gewechselt"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobile Datennutzung"</item>
+ <item msgid="75483255295529161">"WLAN"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"ein unbekannter Netzwerktyp"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Es konnte keine WLAN-Verbindung hergestellt werden."</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" hat eine schlechte Internetverbindung."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Verbindung zulassen?"</string>
diff --git a/core/res/res/values-el/strings.xml b/core/res/res/values-el/strings.xml
index 3c6e832..54f39ebd 100644
--- a/core/res/res/values-el/strings.xml
+++ b/core/res/res/values-el/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Το δίκτυο Wi-Fi δεν έχει πρόσβαση στο διαδίκτυο"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Πατήστε για να δείτε τις επιλογές"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Μετάβαση σε δίκτυο <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Η συσκευή χρησιμοποιεί το δίκτυο <xliff:g id="NEW_NETWORK">%1$s</xliff:g> όταν το δίκτυο <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> δεν έχει πρόσβαση στο διαδίκτυο. Ενδέχεται να ισχύουν χρεώσεις."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Μετάβαση από το δίκτυο <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> στο δίκτυο <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"δεδομένα κινητής τηλεφωνίας"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"άγνωστος τύπος δικτύου"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Δεν είναι δυνατή η σύνδεση στο Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" έχει κακή σύνδεση στο Διαδίκτυο."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Να επιτρέπεται η σύνδεση;"</string>
diff --git a/core/res/res/values-en-rAU/strings.xml b/core/res/res/values-en-rAU/strings.xml
index 12b7aa5..aeb9634 100644
--- a/core/res/res/values-en-rAU/strings.xml
+++ b/core/res/res/values-en-rAU/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi has no Internet access"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tap for options"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobile data"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"an unknown network type"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Couldn\'t connect to Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" has a poor Internet connection."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Allow connection?"</string>
diff --git a/core/res/res/values-en-rGB/strings.xml b/core/res/res/values-en-rGB/strings.xml
index 12b7aa5..aeb9634 100644
--- a/core/res/res/values-en-rGB/strings.xml
+++ b/core/res/res/values-en-rGB/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi has no Internet access"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tap for options"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobile data"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"an unknown network type"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Couldn\'t connect to Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" has a poor Internet connection."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Allow connection?"</string>
diff --git a/core/res/res/values-en-rIN/strings.xml b/core/res/res/values-en-rIN/strings.xml
index 12b7aa5..aeb9634 100644
--- a/core/res/res/values-en-rIN/strings.xml
+++ b/core/res/res/values-en-rIN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi has no Internet access"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tap for options"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Switched to <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Device uses <xliff:g id="NEW_NETWORK">%1$s</xliff:g> when <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> has no Internet access. Charges may apply."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Switched from <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> to <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobile data"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"an unknown network type"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Couldn\'t connect to Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" has a poor Internet connection."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Allow connection?"</string>
diff --git a/core/res/res/values-es-rUS/strings.xml b/core/res/res/values-es-rUS/strings.xml
index 136902b..85fb97c 100644
--- a/core/res/res/values-es-rUS/strings.xml
+++ b/core/res/res/values-es-rUS/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"La red Wi-Fi no tiene acceso a Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Presiona para ver opciones"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Se cambió a <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"El dispositivo usa <xliff:g id="NEW_NETWORK">%1$s</xliff:g> cuando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tiene acceso a Internet. Es posible que se apliquen cargos."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Se cambió de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"datos móviles"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"un tipo de red desconocido"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"No se pudo conectar a la red Wi-Fi."</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" tiene una mala conexión a Internet."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"¿Permitir la conexión?"</string>
diff --git a/core/res/res/values-es/strings.xml b/core/res/res/values-es/strings.xml
index c4ebb02..df9251f 100644
--- a/core/res/res/values-es/strings.xml
+++ b/core/res/res/values-es/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi sin acceso a Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toca para ver opciones"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Se ha cambiado a <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"El dispositivo utiliza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> cuando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> no tiene acceso a Internet. Es posible que se apliquen cargos."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Se ha cambiado de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"datos móviles"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"tipo de red desconocido"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"No se ha podido establecer conexión con la red Wi-Fi."</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" tiene una conexión inestable a Internet."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"¿Permitir la conexión?"</string>
diff --git a/core/res/res/values-et-rEE/strings.xml b/core/res/res/values-et-rEE/strings.xml
index 8922379..44698fe 100644
--- a/core/res/res/values-et-rEE/strings.xml
+++ b/core/res/res/values-et-rEE/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"WiFi-l pole juurdepääsu Internetile"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Puudutage valikute nägemiseks"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Lülitati võrgule <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Seade kasutab võrku <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, kui võrgul <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> puudub Interneti-ühendus. Rakenduda võivad tasud."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Lülitati võrgult <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> võrgule <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobiilne andmeside"</item>
+ <item msgid="75483255295529161">"WiFi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"tundmatu võrgutüüp"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ei saanud WiFi-ga ühendust"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" on halb Interneti-ühendus."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Kas lubada ühendus?"</string>
diff --git a/core/res/res/values-eu-rES/strings.xml b/core/res/res/values-eu-rES/strings.xml
index 7dc0877c..6f33f31 100644
--- a/core/res/res/values-eu-rES/strings.xml
+++ b/core/res/res/values-eu-rES/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi konexioa ezin da Internetera konektatu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Sakatu aukerak ikusteko"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> erabiltzen ari zara orain"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> Internetera konektatzeko gauza ez denean, <xliff:g id="NEW_NETWORK">%1$s</xliff:g> erabiltzen du gailuak. Agian kostuak ordaindu beharko dituzu."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> erabiltzen ari zinen, baina <xliff:g id="NEW_NETWORK">%2$s</xliff:g> erabiltzen ari zara orain"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"datu-konexioa"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"sare mota ezezaguna"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ezin izan da Wi-Fi sarera konektatu"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" Interneteko konexio txarra du."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Konektatzea baimendu nahi diozu?"</string>
diff --git a/core/res/res/values-fa/strings.xml b/core/res/res/values-fa/strings.xml
index 5976ad1..e86b256 100644
--- a/core/res/res/values-fa/strings.xml
+++ b/core/res/res/values-fa/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi به اینترنت دسترسی ندارد"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"برای گزینهها ضربه بزنید"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"به <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> تغییر کرد"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"وقتی <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> دسترسی به اینترنت نداشته باشد، دستگاه از <xliff:g id="NEW_NETWORK">%1$s</xliff:g> استفاده میکند. ممکن است هزینههایی اعمال شود."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"از <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> به <xliff:g id="NEW_NETWORK">%2$s</xliff:g> تغییر کرد"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"داده شبکه تلفن همراه"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"بلوتوث"</item>
+ <item msgid="5447331121797802871">"اترنت"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"نوع شبکه نامشخص"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"اتصال به Wi-Fi ممکن نیست"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" اتصال اینترنتی ضعیفی دارد."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"اتصال مجاز است؟"</string>
diff --git a/core/res/res/values-fi/strings.xml b/core/res/res/values-fi/strings.xml
index b221750..e624e22 100644
--- a/core/res/res/values-fi/strings.xml
+++ b/core/res/res/values-fi/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi ei ole yhteydessä internetiin."</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Näytä vaihtoehdot napauttamalla."</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> otettiin käyttöön"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="NEW_NETWORK">%1$s</xliff:g> otetaan käyttöön, kun <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ei voi muodostaa yhteyttä internetiin. Veloitukset ovat mahdollisia."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> poistettiin käytöstä ja <xliff:g id="NEW_NETWORK">%2$s</xliff:g> otettiin käyttöön."</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobiilidata"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"tuntematon verkon tyyppi"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi-yhteyden muodostaminen epäonnistui"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" : huono internetyhteys."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Sallitaanko yhteys?"</string>
diff --git a/core/res/res/values-fr-rCA/strings.xml b/core/res/res/values-fr-rCA/strings.xml
index f0d9888..f6b2ab1 100644
--- a/core/res/res/values-fr-rCA/strings.xml
+++ b/core/res/res/values-fr-rCA/strings.xml
@@ -21,7 +21,7 @@
<resources xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<string name="byteShort" msgid="8340973892742019101">"B"</string>
- <string name="kilobyteShort" msgid="5973789783504771878">"Ko"</string>
+ <string name="kilobyteShort" msgid="5973789783504771878">"ko"</string>
<string name="megabyteShort" msgid="6355851576770428922">"Mo"</string>
<string name="gigabyteShort" msgid="3259882455212193214">"Go"</string>
<string name="terabyteShort" msgid="231613018159186962">"To"</string>
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Le réseau Wi-Fi ne dispose d\'aucun accès à Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Touchez pour afficher les options"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Passé au réseau <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"L\'appareil utilise <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quand <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> n\'a pas d\'accès à Internet. Des frais peuvent s\'appliquer."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Passé du réseau <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> au <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"données cellulaires"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"RPV"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"un type de réseau inconnu"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Impossible de se connecter au Wi-Fi."</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" dispose d\'une mauvaise connexion Internet."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Autoriser la connexion?"</string>
diff --git a/core/res/res/values-fr/strings.xml b/core/res/res/values-fr/strings.xml
index 6600f09..d726c63 100644
--- a/core/res/res/values-fr/strings.xml
+++ b/core/res/res/values-fr/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Le réseau Wi-Fi ne dispose d\'aucun accès à Internet."</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Appuyez ici pour afficher des options."</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Nouveau réseau : <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"L\'appareil utilise <xliff:g id="NEW_NETWORK">%1$s</xliff:g> lorsque <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> n\'a pas de connexion Internet. Des frais supplémentaires peuvent s\'appliquer."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Ancien réseau : <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>. Nouveau réseau : <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"données mobiles"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"type de réseau inconnu"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Impossible de se connecter au Wi-Fi."</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" dispose d\'une mauvaise connexion Internet."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Autoriser la connexion ?"</string>
diff --git a/core/res/res/values-gl-rES/strings.xml b/core/res/res/values-gl-rES/strings.xml
index 8023edf..16a46f1 100644
--- a/core/res/res/values-gl-rES/strings.xml
+++ b/core/res/res/values-gl-rES/strings.xml
@@ -598,7 +598,7 @@
<string name="phoneTypeCallback" msgid="2712175203065678206">"Devolver chamada"</string>
<string name="phoneTypeCar" msgid="8738360689616716982">"Coche"</string>
<string name="phoneTypeCompanyMain" msgid="540434356461478916">"Empresa (ppal.)"</string>
- <string name="phoneTypeIsdn" msgid="8022453193171370337">"ISDN"</string>
+ <string name="phoneTypeIsdn" msgid="8022453193171370337">"RDSI"</string>
<string name="phoneTypeMain" msgid="6766137010628326916">"Principal"</string>
<string name="phoneTypeOtherFax" msgid="8587657145072446565">"Outro fax"</string>
<string name="phoneTypeRadio" msgid="4093738079908667513">"Radio"</string>
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"A wifi non ten acceso a Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toca para ver opcións."</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Cambiouse a: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"O dispositivo utiliza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> cando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> non ten acceso a Internet. Pódense aplicar cargos."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Cambiouse de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"datos móbiles"</item>
+ <item msgid="75483255295529161">"wifi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"un tipo de rede descoñecido"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Non se puido conectar coa rede Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ten unha conexión a Internet deficiente."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Queres permitir a conexión?"</string>
diff --git a/core/res/res/values-gu-rIN/strings.xml b/core/res/res/values-gu-rIN/strings.xml
index 5c3bf93..1f49bec 100644
--- a/core/res/res/values-gu-rIN/strings.xml
+++ b/core/res/res/values-gu-rIN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi ને કોઈ ઇન્ટરનેટ ઍક્સેસ નથી"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"વિકલ્પો માટે ટૅપ કરો"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> પર સ્વિચ કર્યું"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"જ્યારે <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> પાસે કોઈ ઇન્ટરનેટ ઍક્સેસ ન હોય ત્યારે ઉપકરણ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> નો ઉપયોગ કરે છે. શુલ્ક લાગુ થઈ શકે છે."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> પરથી <xliff:g id="NEW_NETWORK">%2$s</xliff:g> પર સ્વિચ કર્યું"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"સેલ્યુલર ડેટા"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"ઇથરનેટ"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"અજાણ્યો નેટવર્ક પ્રકાર"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi સાથે કનેક્ટ કરી શકાયું નથી"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" નબળું ઇન્ટરનેટ કનેક્શન ધરાવે છે."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"કનેક્શનની મંજૂરી આપીએ?"</string>
diff --git a/core/res/res/values-hi/strings.xml b/core/res/res/values-hi/strings.xml
index bea243b..3fd6f9e 100644
--- a/core/res/res/values-hi/strings.xml
+++ b/core/res/res/values-hi/strings.xml
@@ -295,9 +295,9 @@
<string name="permlab_sendSms" msgid="7544599214260982981">"SMS संदेश भेजें और देखें"</string>
<string name="permdesc_sendSms" msgid="7094729298204937667">"ऐप्स को SMS संदेशों को भेजने देता है. इसके परिणामस्वरूप अप्रत्याशित शुल्क लागू हो सकते हैं. दुर्भावनापूर्ण ऐप्स आपकी पुष्टि के बिना संदेश भेजकर आपका धन व्यय कर सकते हैं."</string>
<string name="permlab_readSms" msgid="8745086572213270480">"अपने लेख संदेश (SMS या MMS) पढ़ें"</string>
- <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"ऐप्स को आपके टेबलेट या सिम कार्ड में संग्रहीत SMS संदेश पढ़ने देता है. इससे सामग्री या गोपनीयता पर ध्यान दिए बिना, ऐप्स सभी SMS संदेश पढ़ सकता है."</string>
- <string name="permdesc_readSms" product="tv" msgid="5102425513647038535">"ऐप को आपके टीवी या सिम कार्ड पर संग्रहीत SMS संदेशों को पढ़ने की अनुमति देती है. इससे ऐप को सामग्री या गोपनीयता पर ध्यान दिए बिना, सभी SMS संदेशों को पढ़ने की अनुमति मिल जाती है."</string>
- <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"ऐप्स को आपके फ़ोन या सिम कार्ड में संग्रहीत SMS संदेश पढ़ने देता है. इससे सामग्री या गोपनीयता पर ध्यान दिए बिना, ऐप्स सभी SMS संदेश पढ़ सकता है."</string>
+ <string name="permdesc_readSms" product="tablet" msgid="2467981548684735522">"ऐप्स को आपके टेबलेट या सिम कार्ड में संग्रहीत SMS संदेश पढ़ने देता है. इससे सामग्री या निजता पर ध्यान दिए बिना, ऐप्स सभी SMS संदेश पढ़ सकता है."</string>
+ <string name="permdesc_readSms" product="tv" msgid="5102425513647038535">"ऐप को आपके टीवी या सिम कार्ड पर संग्रहीत SMS संदेशों को पढ़ने की अनुमति देती है. इससे ऐप को सामग्री या निजता पर ध्यान दिए बिना, सभी SMS संदेशों को पढ़ने की अनुमति मिल जाती है."</string>
+ <string name="permdesc_readSms" product="default" msgid="3695967533457240550">"ऐप्स को आपके फ़ोन या सिम कार्ड में संग्रहीत SMS संदेश पढ़ने देता है. इससे सामग्री या निजता पर ध्यान दिए बिना, ऐप्स सभी SMS संदेश पढ़ सकता है."</string>
<string name="permlab_receiveWapPush" msgid="5991398711936590410">"लेख संदेश (WAP) प्राप्त करें"</string>
<string name="permdesc_receiveWapPush" msgid="748232190220583385">"ऐप्स को WAP संदेशों को प्राप्त और संसाधित करने देता है. इस अनुमति में आपको भेजे गए संदेशों की निगरानी आपको दिखाए बिना करने और हटाने की क्षमता शामिल है."</string>
<string name="permlab_getTasks" msgid="6466095396623933906">"चल रहे ऐप्स पुनर्प्राप्त करें"</string>
@@ -347,9 +347,9 @@
<string name="permlab_bodySensors" msgid="4683341291818520277">"शरीर संवेदक एक्सेस करें (जैसे हृदय गति मॉनीटर)"</string>
<string name="permdesc_bodySensors" product="default" msgid="4380015021754180431">"ऐप को आपकी शारीरिक स्थिति, जैसे आपकी हृदय गति पर नज़र रखने वाले संवेदकों का डेटा एक्सेस करने देती है."</string>
<string name="permlab_readCalendar" msgid="5972727560257612398">"केलैंडर ईवेंट के साथ-साथ गोपनीय जानकारी पढ़ें"</string>
- <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"ऐप्स को मित्रों या सहकर्मियों के कैलेंडर इवेंट सहित, आपके टेबलेट पर संग्रहीत कैलेंडर इवेंट पढ़ने देता है. इससे गोपनीयता या संवेदनशीलता पर ध्यान दिए बिना, ऐप्स आपके कैलेंडर डेटा को साझा कर सकता है या सहेज सकता है."</string>
- <string name="permdesc_readCalendar" product="tv" msgid="3191352452242394196">"ऐप को, मित्रों और सहकर्मियों के कैलेंडर ईवेंट सहित, आपके टीवी पर संग्रहीत सभी कैलेंडर ईवेंट पढ़ने देती है. इससे ऐप को गोपनीयता या संवेदनशीलता पर ध्यान दिए बिना, आपका कैलेडर डेटा साझा करने या सहेजने की अनुमति मिल जाती है."</string>
- <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"ऐप्स को मित्रों या सहकर्मियों के कैलेंडर इवेंट सहित, आपके फ़ोन पर संग्रहीत कैलेंडर इवेंट पढ़ने देता है. इससे गोपनीयता या संवेदनशीलता पर ध्यान दिए बिना, ऐप्स आपके कैलेंडर डेटा को साझा कर सकता है या सहेज सकता है."</string>
+ <string name="permdesc_readCalendar" product="tablet" msgid="4216462049057658723">"ऐप्स को मित्रों या सहकर्मियों के कैलेंडर इवेंट सहित, आपके टेबलेट पर संग्रहीत कैलेंडर इवेंट पढ़ने देता है. इससे निजता या संवेदनशीलता पर ध्यान दिए बिना, ऐप्स आपके कैलेंडर डेटा को साझा कर सकता है या सहेज सकता है."</string>
+ <string name="permdesc_readCalendar" product="tv" msgid="3191352452242394196">"ऐप को, मित्रों और सहकर्मियों के कैलेंडर ईवेंट सहित, आपके टीवी पर संग्रहीत सभी कैलेंडर ईवेंट पढ़ने देती है. इससे ऐप को निजता या संवेदनशीलता पर ध्यान दिए बिना, आपका कैलेडर डेटा साझा करने या सहेजने की अनुमति मिल जाती है."</string>
+ <string name="permdesc_readCalendar" product="default" msgid="7434548682470851583">"ऐप्स को मित्रों या सहकर्मियों के कैलेंडर इवेंट सहित, आपके फ़ोन पर संग्रहीत कैलेंडर इवेंट पढ़ने देता है. इससे निजता या संवेदनशीलता पर ध्यान दिए बिना, ऐप्स आपके कैलेंडर डेटा को साझा कर सकता है या सहेज सकता है."</string>
<string name="permlab_writeCalendar" msgid="8438874755193825647">"अपनी जानकारी के बिना कैलेंडर ईवेंट जोड़ें या संशोधित करें और अतिथियों को ईमेल भेजें"</string>
<string name="permdesc_writeCalendar" product="tablet" msgid="6679035520113668528">"ऐप्स को मित्रों या सहकर्मियों के ईवेंट के साथ ही वे ईवेंट जोड़ने, निकालने, बदलने देता है जिन्हें आप अपने टेबलेट पर संशोधित कर सकते हैं. इससे ऐप्स ,अपनी जानकारी के बिना उन संदेशों को भेज सकता है जो कैलेंडर स्वामियों की ओर से आते दिखाई देते हैं, या ईवेंट संशोधित कर सकता है."</string>
<string name="permdesc_writeCalendar" product="tv" msgid="1273290605500902507">"ऐप को ऐसे ईवेंट जोड़ने, निकालने, बदलने देती है जिन्हें आप अपने डिवाइस पर बदल सकते हैं, जिनमें मित्रों या सहकर्मियों के ईवेंट शामिल हैं. इससे ऐप ऐसे संदेश भेज सकता है जो कैलेंडर स्वामी से आते हुए प्रतीत होते हैं या ऐप स्वामी की जानकारी के बिना ईवेंट बदल सकता है."</string>
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"वाई-फ़ाई में कोई इंटरनेट ऐक्सेस नहीं है"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"विकल्पों के लिए टैप करें"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> पर ले जाया गया"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> में कोई इंटरनेट एक्सेस नहीं होने पर डिवाइस <xliff:g id="NEW_NETWORK">%1$s</xliff:g> का उपयोग करता है. शुल्क लिया जा सकता है."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> से <xliff:g id="NEW_NETWORK">%2$s</xliff:g> पर ले जाया गया"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"सेल्युलर डेटा"</item>
+ <item msgid="75483255295529161">"वाई-फ़ाई"</item>
+ <item msgid="6862614801537202646">"ब्लूटूथ"</item>
+ <item msgid="5447331121797802871">"ईथरनेट"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"अज्ञात नेटवर्क प्रकार"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"वाई-फ़ाई से कनेक्ट नहीं हो सका"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" के पास एक कमज़ोर इंटरनेट कनेक्शन है."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"कनेक्शन की अनुमति दें?"</string>
diff --git a/core/res/res/values-hr/strings.xml b/core/res/res/values-hr/strings.xml
index b181f6d..8b503c9 100644
--- a/core/res/res/values-hr/strings.xml
+++ b/core/res/res/values-hr/strings.xml
@@ -1101,6 +1101,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi nema pristup internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Dodirnite za opcije"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Prelazak na drugu mrežu: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Kada <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nema pristup internetu, na uređaju se upotrebljava <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Moguća je naplata naknade."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Mreža je promijenjena: <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> > <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobilni podaci"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"nepoznata vrsta mreže"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ne može se spojiti na Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ima lošu internetsku vezu."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Dopustiti povezivanje?"</string>
diff --git a/core/res/res/values-hu/strings.xml b/core/res/res/values-hu/strings.xml
index aea12a6..ebdae0f 100644
--- a/core/res/res/values-hu/strings.xml
+++ b/core/res/res/values-hu/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"A Wi-Fi-hálózaton nincs internetkapcsolat"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Koppintson a beállítások megjelenítéséhez"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Átváltva erre: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="NEW_NETWORK">%1$s</xliff:g> használata, ha nincs internetkapcsolat <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>-kapcsolaton keresztül. A szolgáltató díjat számíthat fel."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Átváltva <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>-hálózatról erre: <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobiladat"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"ismeretlen hálózati típus"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nem sikerült csatlakozni a Wi-Fi hálózathoz"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" rossz internetkapcsolattal rendelkezik."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Engedélyezi a csatlakozást?"</string>
diff --git a/core/res/res/values-hy-rAM/strings.xml b/core/res/res/values-hy-rAM/strings.xml
index ba97468..7178c5f 100644
--- a/core/res/res/values-hy-rAM/strings.xml
+++ b/core/res/res/values-hy-rAM/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi ցանցը համացանցի միացում չունի"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Հպեք՝ ընտրանքները տեսնելու համար"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Անցել է <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ցանցի"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Եթե <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ցանցն ինտերնետ կապ չունի, սարքն անցնում է <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ցանցի: Կարող են վճարներ գանձվել:"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ցանցից անցել է <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ցանցի"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"բջջային տվյալներ"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"ցանցի անհայտ տեսակ"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Չհաջողվեց միանալ Wi-Fi-ին"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ունի թույլ ինտերնետ կապ:"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Թույլատրե՞լ կապը:"</string>
diff --git a/core/res/res/values-in/strings.xml b/core/res/res/values-in/strings.xml
index 132789b..41902b5 100644
--- a/core/res/res/values-in/strings.xml
+++ b/core/res/res/values-in/strings.xml
@@ -116,7 +116,7 @@
<string name="roamingText5" msgid="7604063252850354350">"Roaming - Sistem Yang Dipilih"</string>
<string name="roamingText6" msgid="2059440825782871513">"Roaming - Sistem Tersedia"</string>
<string name="roamingText7" msgid="7112078724097233605">"Mitra Roaming - Alliance"</string>
- <string name="roamingText8" msgid="5989569778604089291">"Roaming - Mitra Premium"</string>
+ <string name="roamingText8" msgid="5989569778604089291">"Roaming - Partner Premium"</string>
<string name="roamingText9" msgid="7969296811355152491">"Fungsionalitas Layanan Roaming - Penuh"</string>
<string name="roamingText10" msgid="3992906999815316417">"Fungsionalitas Layanan Roaming - Sebagian"</string>
<string name="roamingText11" msgid="4154476854426920970">"Spanduk Roaming Hidup"</string>
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi tidak memiliki akses internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Ketuk untuk melihat opsi"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Dialihkan ke <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Perangkat menggunakan <xliff:g id="NEW_NETWORK">%1$s</xliff:g> jika <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> tidak memiliki akses internet. Tarif mungkin berlaku."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Dialihkan dari <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ke <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"data seluler"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"jenis jaringan yang tidak dikenal"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Tidak dapat tersambung ke Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" memiliki sambungan internet yang buruk."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Izinkan hubungan?"</string>
diff --git a/core/res/res/values-is-rIS/strings.xml b/core/res/res/values-is-rIS/strings.xml
index a897ba8..34165ba 100644
--- a/core/res/res/values-is-rIS/strings.xml
+++ b/core/res/res/values-is-rIS/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi netið er ekki með tengingu við internetið"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Ýttu til að sjá valkosti"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Skipt yfir á <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Tækið notar <xliff:g id="NEW_NETWORK">%1$s</xliff:g> þegar <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> er ekki með internetaðgang. Gjöld geta átt við."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Skipt úr <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> yfir í <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"farsímagögn"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"óþekkt tegund netkerfis"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ekki var hægt að tengjast Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" er með lélegt netsamband."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Leyfa tengingu?"</string>
diff --git a/core/res/res/values-it/strings.xml b/core/res/res/values-it/strings.xml
index 9cd74dc..5668e6d 100644
--- a/core/res/res/values-it/strings.xml
+++ b/core/res/res/values-it/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Connessione Wi-Fi priva di accesso Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tocca per le opzioni"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Passato a <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Il dispositivo utilizza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> non ha accesso a Internet. Potrebbero essere applicati costi."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Passato da <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> a <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"rete dati"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"tipo di rete sconosciuto"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Impossibile connettersi alla rete Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ha una connessione Internet debole."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Consentire la connessione?"</string>
diff --git a/core/res/res/values-iw/strings.xml b/core/res/res/values-iw/strings.xml
index bebe027..19f3953 100644
--- a/core/res/res/values-iw/strings.xml
+++ b/core/res/res/values-iw/strings.xml
@@ -1126,6 +1126,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"אין ל-Wi-Fi גישה לאינטרנט"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"הקש לקבלת אפשרויות"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"מעבר אל <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"המכשיר משתמש ברשת <xliff:g id="NEW_NETWORK">%1$s</xliff:g> כשלרשת <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> אין גישה לאינטרנט. עשויים לחול חיובים."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"עבר מרשת <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> לרשת <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"נתונים סלולריים"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"סוג רשת לא מזוהה"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"אין אפשרות להתחבר ל-Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" אינו מחובר היטב לאינטרנט."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"האם להתיר את החיבור?"</string>
@@ -1362,7 +1373,7 @@
<string name="action_menu_overflow_description" msgid="2295659037509008453">"אפשרויות נוספות"</string>
<string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
<string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
- <string name="storage_internal" msgid="3570990907910199483">"אחסון משותף פנימי"</string>
+ <string name="storage_internal" msgid="3570990907910199483">"אחסון שיתוף פנימי"</string>
<string name="storage_sd_card" msgid="3282948861378286745">"כרטיס SD"</string>
<string name="storage_sd_card_label" msgid="6347111320774379257">"כרטיס SD של <xliff:g id="MANUFACTURER">%s</xliff:g>"</string>
<string name="storage_usb_drive" msgid="6261899683292244209">"כונן USB"</string>
diff --git a/core/res/res/values-ja/strings.xml b/core/res/res/values-ja/strings.xml
index b2a7bd2..23e9535 100644
--- a/core/res/res/values-ja/strings.xml
+++ b/core/res/res/values-ja/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fiはインターネットに接続していません"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"タップしてその他のオプションを表示"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"「<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>」に切り替えました"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"端末で「<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>」によるインターネット接続ができない場合に「<xliff:g id="NEW_NETWORK">%1$s</xliff:g>」を使用します。通信料が発生することがあります。"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"「<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>」から「<xliff:g id="NEW_NETWORK">%2$s</xliff:g>」に切り替えました"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"モバイルデータ"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"イーサネット"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"不明なネットワーク タイプ"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fiに接続できませんでした"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" はインターネット接続に問題があります。"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"接続を許可しますか?"</string>
diff --git a/core/res/res/values-ka-rGE/strings.xml b/core/res/res/values-ka-rGE/strings.xml
index 0295ea5..fbe1b00 100644
--- a/core/res/res/values-ka-rGE/strings.xml
+++ b/core/res/res/values-ka-rGE/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi-ს არ აქვს ინტერნეტზე წვდომა"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"შეეხეთ ვარიანტების სანახავად"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"ახლა გამოიყენება <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"თუ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ინტერნეტთან კავშირს დაკარგავს, მოწყობილობის მიერ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> იქნება გამოყენებული, რამაც შეიძლება დამატებითი ხარჯები გამოიწვიოს"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"ახლა გამოიყენება <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> (გამოიყენებოდა <xliff:g id="NEW_NETWORK">%2$s</xliff:g>)"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"მობილური ინტერნეტი"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"უცნობი ტიპის ქსელი"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi-თან დაკავშირება ვერ მოხერხდა"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" აქვს ცუდი ინტერნეტ კავშირი."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"გსურთ კავშირის დაშვება?"</string>
diff --git a/core/res/res/values-kk-rKZ/strings.xml b/core/res/res/values-kk-rKZ/strings.xml
index b5931c1..11497b9 100644
--- a/core/res/res/values-kk-rKZ/strings.xml
+++ b/core/res/res/values-kk-rKZ/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi желісінде интернет байланысы жоқ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Опциялар үшін түртіңіз"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> желісіне ауысты"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Құрылғы <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> желісінде интернетпен байланыс жоғалған жағдайда <xliff:g id="NEW_NETWORK">%1$s</xliff:g> желісін пайдаланады. Деректер ақысы алынуы мүмкін."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> желісінен <xliff:g id="NEW_NETWORK">%2$s</xliff:g> желісіне ауысты"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"ұялы дерек"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"желі түрі белгісіз"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi желісіне қосыла алмады"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" Интернет байланысы нашар."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Қосылуға рұқсат ету керек пе?"</string>
diff --git a/core/res/res/values-km-rKH/strings.xml b/core/res/res/values-km-rKH/strings.xml
index 71f8cba..85fb303 100644
--- a/core/res/res/values-km-rKH/strings.xml
+++ b/core/res/res/values-km-rKH/strings.xml
@@ -1078,6 +1078,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi មិនមានអ៊ិនធឺណិតនោះទេ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ប៉ះសម្រាប់ជម្រើស"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"បានប្តូរទៅ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"ឧបករណ៍ប្រើ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> នៅពេលដែល <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> គ្មានការតភ្ជាប់អ៊ីនធឺណិត។ អាចគិតប្រាក់លើការប្រើប្រាស់ទិន្នន័យ។"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"បានប្តូរពី <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ទៅ <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"ទិន្នន័យចល័ត"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"ប៊្លូធូស"</item>
+ <item msgid="5447331121797802871">"អ៊ីសឺរណិត"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"ប្រភេទបណ្តាញមិនស្គាល់"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"មិនអាចតភ្ជាប់វ៉ាយហ្វាយ"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" មានការតភ្ជាប់អ៊ីនធឺណិតមិនល្អ។"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"អនុញ្ញាតភ្ជាប់?"</string>
diff --git a/core/res/res/values-kn-rIN/strings.xml b/core/res/res/values-kn-rIN/strings.xml
index 770af19..ab37751 100644
--- a/core/res/res/values-kn-rIN/strings.xml
+++ b/core/res/res/values-kn-rIN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"ವೈ-ಫೈ ಯಾವುದೇ ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶವನ್ನು ಹೊಂದಿಲ್ಲ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ಆಯ್ಕೆಗಳಿಗೆ ಟ್ಯಾಪ್ ಮಾಡಿ"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ಇಂಟರ್ನೆಟ್ ಪ್ರವೇಶ ಹೊಂದಿಲ್ಲದಿರುವಾಗ, ಸಾಧನವು <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ಬಳಸುತ್ತದೆ. ಶುಲ್ಕಗಳು ಅನ್ವಯವಾಗಬಹುದು."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ರಿಂದ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ಗೆ ಬದಲಾಯಿಸಲಾಗಿದೆ"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"ಸೆಲ್ಯುಲರ್ ಡೇಟಾ"</item>
+ <item msgid="75483255295529161">"ವೈ-ಫೈ"</item>
+ <item msgid="6862614801537202646">"ಬ್ಲೂಟೂತ್"</item>
+ <item msgid="5447331121797802871">"ಇಥರ್ನೆಟ್"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"ಅಪರಿಚಿತ ನೆಟ್ವರ್ಕ್ ಪ್ರಕಾರ"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ವೈ-ಫೈ ಗೆ ಸಂಪರ್ಕಿಸಲು ಸಾಧ್ಯವಾಗುತ್ತಿಲ್ಲ"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ಕಳಪೆ ಇಂಟರ್ನೆಟ್ ಸಂಪರ್ಕವನ್ನು ಹೊಂದಿದೆ."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"ಸಂಪರ್ಕವನ್ನು ಅನುಮತಿಸುವುದೇ?"</string>
diff --git a/core/res/res/values-ko/strings.xml b/core/res/res/values-ko/strings.xml
index 5b446b4..1df55c9 100644
--- a/core/res/res/values-ko/strings.xml
+++ b/core/res/res/values-ko/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi가 인터넷에 연결되어 있지 않습니다."</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"탭하여 옵션 보기"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>(으)로 전환"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>이(가) 인터넷에 연결되지 않는 경우 기기에서 <xliff:g id="NEW_NETWORK">%1$s</xliff:g>을(를) 사용합니다. 요금이 부과될 수 있습니다."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>에서 <xliff:g id="NEW_NETWORK">%2$s</xliff:g>(으)로 전환"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"모바일 데이터"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"블루투스"</item>
+ <item msgid="5447331121797802871">"이더넷"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"알 수 없는 네트워크 유형"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi에 연결할 수 없습니다"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" 인터넷 연결 상태가 좋지 않습니다."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"연결을 허용하시겠습니까?"</string>
@@ -1310,7 +1321,7 @@
<string name="action_menu_overflow_description" msgid="2295659037509008453">"옵션 더보기"</string>
<string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
<string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
- <string name="storage_internal" msgid="3570990907910199483">"내부 공유 저장공간"</string>
+ <string name="storage_internal" msgid="3570990907910199483">"내부 공유 저장용량"</string>
<string name="storage_sd_card" msgid="3282948861378286745">"SD 카드"</string>
<string name="storage_sd_card_label" msgid="6347111320774379257">"<xliff:g id="MANUFACTURER">%s</xliff:g> SD 카드"</string>
<string name="storage_usb_drive" msgid="6261899683292244209">"USB 드라이브"</string>
diff --git a/core/res/res/values-ky-rKG/strings.xml b/core/res/res/values-ky-rKG/strings.xml
index 0f82dcb..9e0c6cf 100644
--- a/core/res/res/values-ky-rKG/strings.xml
+++ b/core/res/res/values-ky-rKG/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi тармагы Интернетке туташпай турат"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Параметрлерди ачуу үчүн таптап коюңуз"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> тармагына которуштурулду"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> тармагы Интернетке туташпай турганда, түзмөгүңүз <xliff:g id="NEW_NETWORK">%1$s</xliff:g> тармагын колдонот. Акы алынышы мүмкүн."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> дегенден <xliff:g id="NEW_NETWORK">%2$s</xliff:g> тармагына которуштурулду"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"мобилдик дайындар"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"белгисиз тармак түрү"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi менен туташуу түзүлбөдү"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" хотспотунун интернет байланышы начар."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Туташууга уруксатпы?"</string>
@@ -1197,8 +1208,7 @@
<string name="permdesc_readInstallSessions" msgid="2049771699626019849">"Колдонмого орнотуу сеанстарын окуу мүмкүнчүлүгүн берет. Ушуну менен, ал жигердүү топтом орнотууларынын чоо-жайын көрө алат."</string>
<string name="permlab_requestInstallPackages" msgid="5782013576218172577">"орнотуу топтомдорун суроо"</string>
<string name="permdesc_requestInstallPackages" msgid="5740101072486783082">"Колдонмо топтомдорду орнотууга уруксат сурай алат."</string>
- <!-- no translation found for tutorial_double_tap_to_zoom_message_short (1311810005957319690) -->
- <skip />
+ <string name="tutorial_double_tap_to_zoom_message_short" msgid="1311810005957319690">"Масштабдын параметрлерин өзгөртүү үчүн бул жерди эки жолу басыңыз."</string>
<string name="gadget_host_error_inflating" msgid="4882004314906466162">"Виджетти кошуу мүмкүн болбоду."</string>
<string name="ime_action_go" msgid="8320845651737369027">"Өтүү"</string>
<string name="ime_action_search" msgid="658110271822807811">"Издөө"</string>
@@ -1229,10 +1239,8 @@
<string name="notification_ranker_binding_label" msgid="774540592299064747">"Эскертмелердин маанилүүлүгүн баалоо кызматы"</string>
<string name="vpn_title" msgid="19615213552042827">"VPN иштетилди"</string>
<string name="vpn_title_long" msgid="6400714798049252294">"VPN <xliff:g id="APP">%s</xliff:g> аркылуу жандырылды"</string>
- <!-- no translation found for vpn_text (1610714069627824309) -->
- <skip />
- <!-- no translation found for vpn_text_long (4907843483284977618) -->
- <skip />
+ <string name="vpn_text" msgid="1610714069627824309">"Тармактын параметрлерин өзгөртүү үчүн бул жерди басыңыз."</string>
+ <string name="vpn_text_long" msgid="4907843483284977618">"<xliff:g id="SESSION">%s</xliff:g> сеансына туташуу ишке ашты. Желенин параметрлерин өзгөртүү үчүн бул жерди басыңыз."</string>
<string name="vpn_lockdown_connecting" msgid="6443438964440960745">"Дайым иштеген VPN туташууда…"</string>
<string name="vpn_lockdown_connected" msgid="8202679674819213931">"Дайым иштеген VPN туташтырылды"</string>
<string name="vpn_lockdown_error" msgid="6009249814034708175">"Дайым иштеген VPN\'де ката кетти"</string>
diff --git a/core/res/res/values-lo-rLA/strings.xml b/core/res/res/values-lo-rLA/strings.xml
index e2720c7..dbf4044 100644
--- a/core/res/res/values-lo-rLA/strings.xml
+++ b/core/res/res/values-lo-rLA/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi ບໍ່ມີການເຂົ້າເຖິງອິນເຕີເນັດ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ແຕະເພື່ອເບິ່ງຕົວເລືອກ"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"ສະຫຼັບໄປໃຊ້ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ແລ້ວ"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"ອຸປະກອນຈະໃຊ້ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ເມື່ອ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ບໍ່ມີການເຊື່ອມຕໍ່ອິນເຕີເນັດ. ອາດມີການຮຽກເກັບຄ່າບໍລິການ."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"ສະຫຼັບຈາກ <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ໄປໃຊ້ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ແລ້ວ"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"ຂໍ້ມູນອິນເຕີເນັດມືຖື"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"ອີເທີເນັດ"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"ບໍ່ຮູ້ຈັກປະເພດເຄືອຂ່າຍ"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ບໍ່ສາມາດເຊື່ອມຕໍ່ Wi-Fi ໄດ້"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ມີສັນຍານອິນເຕີເນັດທີ່ບໍ່ດີ."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"ອະນຸຍາດການເຊື່ອມຕໍ່ຫຼືບໍ່?"</string>
diff --git a/core/res/res/values-lt/strings.xml b/core/res/res/values-lt/strings.xml
index ab38c0c..7ab35aa 100644
--- a/core/res/res/values-lt/strings.xml
+++ b/core/res/res/values-lt/strings.xml
@@ -1126,6 +1126,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"„Wi-Fi“ tinkle nėra interneto ryšio"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Palieskite, kad būtų rodomos parinktys."</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Perjungta į tinklą <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Įrenginys naudoja tinklą <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kai tinkle <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nėra interneto ryšio. Gali būti taikomi mokesčiai."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Perjungta iš tinklo <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> į tinklą <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobiliojo ryšio duomenys"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Eternetas"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"nežinomas tinklo tipas"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nepavyko prisijungti prie „Wi-Fi“"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" turi prastą interneto ryšį."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Leisti prisijungti?"</string>
diff --git a/core/res/res/values-lv/strings.xml b/core/res/res/values-lv/strings.xml
index 35b699f..e0c83c4 100644
--- a/core/res/res/values-lv/strings.xml
+++ b/core/res/res/values-lv/strings.xml
@@ -1101,6 +1101,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi tīklā nav piekļuves internetam."</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Pieskarieties, lai skatītu iespējas."</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Pārslēdzās uz tīklu <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Kad tīklā <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nav piekļuves internetam, ierīcē tiek izmantots tīkls <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Var tikt piemērota maksa."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Pārslēdzās no tīkla <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> uz tīklu <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobilie dati"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"nezināms tīkla veids"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nevarēja izveidot savienojumu ar Wi-Fi."</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ir slikts interneta savienojums."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Vai atļaut savienojumu?"</string>
diff --git a/core/res/res/values-mcc001/config.xml b/core/res/res/values-mcc001/config.xml
new file mode 100644
index 0000000..93cde03
--- /dev/null
+++ b/core/res/res/values-mcc001/config.xml
@@ -0,0 +1,21 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 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.
+*/
+-->
+<resources>
+ <bool name="config_use_sim_language_file">true</bool>
+</resources>
diff --git a/core/res/res/values-mcc222-mnc10/config.xml b/core/res/res/values-mcc222-mnc10/config.xml
index cd6e8c6..c819de2 100644
--- a/core/res/res/values-mcc222-mnc10/config.xml
+++ b/core/res/res/values-mcc222-mnc10/config.xml
@@ -28,29 +28,4 @@
<string-array translatable="false" name="config_tether_apndata">
<item>Tethering Internet,web.omnitel.it,,,,,,,,,222,10,,DUN</item>
</string-array>
-
- <string-array translatable="false" name="config_operatorConsideredNonRoaming">
- <item>21401</item>
- <item>21402</item>
- <item>21403</item>
- <item>21404</item>
- <item>21405</item>
- <item>21406</item>
- <item>21407</item>
- <item>21408</item>
- <item>21409</item>
- <item>21410</item>
- <item>21411</item>
- <item>21412</item>
- <item>21413</item>
- <item>21414</item>
- <item>21415</item>
- <item>21416</item>
- <item>21417</item>
- <item>21418</item>
- <item>21419</item>
- <item>21420</item>
- <item>21421</item>
- </string-array>
-
</resources>
diff --git a/core/res/res/values-mcc232-mnc10/config.xml b/core/res/res/values-mcc232-mnc10/config.xml
new file mode 100644
index 0000000..bdf83016
--- /dev/null
+++ b/core/res/res/values-mcc232-mnc10/config.xml
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ ** Copyright 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.
+ */
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Don't use roaming icon for considered operators -->
+ <string-array translatable="false" name="config_operatorConsideredNonRoaming">
+ <item>23203</item>
+ <item>23205</item>
+ </string-array>
+</resources>
diff --git a/core/res/res/values-mcc232-mnc13/config.xml b/core/res/res/values-mcc232-mnc13/config.xml
new file mode 100644
index 0000000..2c14f87
--- /dev/null
+++ b/core/res/res/values-mcc232-mnc13/config.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ ** Copyright 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.
+ */
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Don't use roaming icon for considered operators -->
+ <string-array translatable="false" name="config_operatorConsideredNonRoaming">
+ <item>23203</item>
+ </string-array>
+</resources>
diff --git a/core/res/res/values-mcc302-mnc220/config.xml b/core/res/res/values-mcc302-mnc220/config.xml
index 454e4b6..d638b89 100644
--- a/core/res/res/values-mcc302-mnc220/config.xml
+++ b/core/res/res/values-mcc302-mnc220/config.xml
@@ -42,4 +42,23 @@
<item>[ApnSettingV3]Tethered Public Mobile,isp.mb.com,,,,,,,,,302,220,,DUN,,,true,0,,,,,,,gid,4D4F</item>
</string-array>
+ <!-- Values for GPS configuration (Telus) -->
+ <string-array translatable="false" name="config_gpsParameters">
+ <item>SUPL_HOST=supl.telusmobility.com</item>
+ <item>SUPL_PORT=7275</item>
+ <item>XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra3grc.bin</item>
+ <item>NTP_SERVER=north-america.pool.ntp.org</item>
+ <item>SUPL_MODE=1</item>
+ <item>SUPL_VER=0x20000</item>
+ <item>LPP_PROFILE=2</item>
+ <item>NMEA_PROVIDER=0</item>
+ <item>A_GLONASS_POS_PROTOCOL_SELECT=0</item>
+ <item>ERR_ESTIMATE=0</item>
+ <item>INTERMEDIATE_POS=0</item>
+ <item>GPS_LOCK=0</item>
+ <item>SUPL_ES=0</item>
+ </string-array>
+
</resources>
diff --git a/core/res/res/values-mcc302-mnc221/config.xml b/core/res/res/values-mcc302-mnc221/config.xml
index ffc9d6c..1444250 100644
--- a/core/res/res/values-mcc302-mnc221/config.xml
+++ b/core/res/res/values-mcc302-mnc221/config.xml
@@ -32,4 +32,23 @@
<item>[ApnSettingV3]Koodo,sp.koodo.com,,,,,,,,,302,221,,DUN,,,true,0,,,,,,,gid,4B</item>
</string-array>
+ <!-- Values for GPS configuration (Telus) -->
+ <string-array translatable="false" name="config_gpsParameters">
+ <item>SUPL_HOST=supl.telusmobility.com</item>
+ <item>SUPL_PORT=7275</item>
+ <item>XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra3grc.bin</item>
+ <item>NTP_SERVER=north-america.pool.ntp.org</item>
+ <item>SUPL_MODE=1</item>
+ <item>SUPL_VER=0x20000</item>
+ <item>LPP_PROFILE=2</item>
+ <item>NMEA_PROVIDER=0</item>
+ <item>A_GLONASS_POS_PROTOCOL_SELECT=0</item>
+ <item>ERR_ESTIMATE=0</item>
+ <item>INTERMEDIATE_POS=0</item>
+ <item>GPS_LOCK=0</item>
+ <item>SUPL_ES=0</item>
+ </string-array>
+
</resources>
diff --git a/core/res/res/values-mcc302-mnc370/config.xml b/core/res/res/values-mcc302-mnc370/config.xml
index 5e7e8bc..05265c7 100644
--- a/core/res/res/values-mcc302-mnc370/config.xml
+++ b/core/res/res/values-mcc302-mnc370/config.xml
@@ -43,4 +43,23 @@
<item>302780</item>
</string-array>
+ <!-- Values for GPS configuration (Rogers) -->
+ <string-array translatable="false" name="config_gpsParameters">
+ <item>SUPL_HOST=supl.google.com</item>
+ <item>SUPL_PORT=7275</item>
+ <item>XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra3grc.bin</item>
+ <item>NTP_SERVER=north-america.pool.ntp.org</item>
+ <item>SUPL_MODE=1</item>
+ <item>SUPL_VER=0x20000</item>
+ <item>LPP_PROFILE=2</item>
+ <item>NMEA_PROVIDER=0</item>
+ <item>A_GLONASS_POS_PROTOCOL_SELECT=0</item>
+ <item>ERR_ESTIMATE=0</item>
+ <item>INTERMEDIATE_POS=0</item>
+ <item>GPS_LOCK=0</item>
+ <item>SUPL_ES=0</item>
+ </string-array>
+
</resources>
diff --git a/core/res/res/values-mcc302-mnc500/config.xml b/core/res/res/values-mcc302-mnc500/config.xml
new file mode 100644
index 0000000..77f6419
--- /dev/null
+++ b/core/res/res/values-mcc302-mnc500/config.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ ** Copyright 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.
+ */
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Don't use roaming icon for considered operators -->
+ <string-array translatable="false" name="config_operatorConsideredNonRoaming">
+ <item>302</item>
+ </string-array>
+</resources>
diff --git a/core/res/res/values-mcc302-mnc510/config.xml b/core/res/res/values-mcc302-mnc510/config.xml
new file mode 100644
index 0000000..77f6419
--- /dev/null
+++ b/core/res/res/values-mcc302-mnc510/config.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+ ** Copyright 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.
+ */
+-->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Don't use roaming icon for considered operators -->
+ <string-array translatable="false" name="config_operatorConsideredNonRoaming">
+ <item>302</item>
+ </string-array>
+</resources>
diff --git a/core/res/res/values-mcc302-mnc610/config.xml b/core/res/res/values-mcc302-mnc610/config.xml
index 81cec96..0af2c39 100644
--- a/core/res/res/values-mcc302-mnc610/config.xml
+++ b/core/res/res/values-mcc302-mnc610/config.xml
@@ -27,4 +27,22 @@
-->
<integer name="config_mobile_mtu">1428</integer>
+ <!-- Values for GPS configuration (Bell) -->
+ <string-array translatable="false" name="config_gpsParameters">
+ <item>SUPL_HOST=supl.google.com</item>
+ <item>SUPL_PORT=7275</item>
+ <item>XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra3grc.bin</item>
+ <item>NTP_SERVER=north-america.pool.ntp.org</item>
+ <item>SUPL_MODE=1</item>
+ <item>SUPL_VER=0x20000</item>
+ <item>LPP_PROFILE=2</item>
+ <item>NMEA_PROVIDER=0</item>
+ <item>A_GLONASS_POS_PROTOCOL_SELECT=0</item>
+ <item>ERR_ESTIMATE=0</item>
+ <item>INTERMEDIATE_POS=0</item>
+ <item>GPS_LOCK=0</item>
+ <item>SUPL_ES=0</item>
+ </string-array>
</resources>
diff --git a/core/res/res/values-mcc302-mnc640/config.xml b/core/res/res/values-mcc302-mnc640/config.xml
index 706570c..e005bc0 100644
--- a/core/res/res/values-mcc302-mnc640/config.xml
+++ b/core/res/res/values-mcc302-mnc640/config.xml
@@ -22,4 +22,23 @@
<string-array translatable="false" name="config_operatorConsideredNonRoaming">
<item>302</item>
</string-array>
+
+ <!-- Values for GPS configuration (Bell) -->
+ <string-array translatable="false" name="config_gpsParameters">
+ <item>SUPL_HOST=supl.google.com</item>
+ <item>SUPL_PORT=7275</item>
+ <item>XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra3grc.bin</item>
+ <item>NTP_SERVER=north-america.pool.ntp.org</item>
+ <item>SUPL_MODE=1</item>
+ <item>SUPL_VER=0x20000</item>
+ <item>LPP_PROFILE=2</item>
+ <item>NMEA_PROVIDER=0</item>
+ <item>A_GLONASS_POS_PROTOCOL_SELECT=0</item>
+ <item>ERR_ESTIMATE=0</item>
+ <item>INTERMEDIATE_POS=0</item>
+ <item>GPS_LOCK=0</item>
+ <item>SUPL_ES=0</item>
+ </string-array>
</resources>
diff --git a/core/res/res/values-mcc302-mnc720/config.xml b/core/res/res/values-mcc302-mnc720/config.xml
index dcfa5c5..7a3540a 100644
--- a/core/res/res/values-mcc302-mnc720/config.xml
+++ b/core/res/res/values-mcc302-mnc720/config.xml
@@ -45,4 +45,23 @@
<item>302780</item>
</string-array>
+ <!-- Values for GPS configuration (Rogers) -->
+ <string-array translatable="false" name="config_gpsParameters">
+ <item>SUPL_HOST=supl.google.com</item>
+ <item>SUPL_PORT=7275</item>
+ <item>XTRA_SERVER_1=http://xtrapath1.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_2=http://xtrapath2.izatcloud.net/xtra3grc.bin</item>
+ <item>XTRA_SERVER_3=http://xtrapath3.izatcloud.net/xtra3grc.bin</item>
+ <item>NTP_SERVER=north-america.pool.ntp.org</item>
+ <item>SUPL_MODE=1</item>
+ <item>SUPL_VER=0x20000</item>
+ <item>LPP_PROFILE=2</item>
+ <item>NMEA_PROVIDER=0</item>
+ <item>A_GLONASS_POS_PROTOCOL_SELECT=0</item>
+ <item>ERR_ESTIMATE=0</item>
+ <item>INTERMEDIATE_POS=0</item>
+ <item>GPS_LOCK=0</item>
+ <item>SUPL_ES=0</item>
+ </string-array>
+
</resources>
diff --git a/core/res/res/values-mcc311-mnc480/config.xml b/core/res/res/values-mcc311-mnc480/config.xml
index 39ea2bf..4e17e98 100755
--- a/core/res/res/values-mcc311-mnc480/config.xml
+++ b/core/res/res/values-mcc311-mnc480/config.xml
@@ -69,4 +69,12 @@
<item>true</item>
</string-array>
<string translatable="false" name="prohibit_manual_network_selection_in_gobal_mode">true</string>
+
+ <!-- Network switching warnings use toasts. -->
+ <integer translatable="false" name="config_networkNotifySwitchType">2</integer>
+ <!-- Notify when switching from Wi-Fi to cellular data. -->
+ <string-array translatable="false" name="config_networkNotifySwitches">
+ <item>WIFI-CELLULAR</item>
+ </string-array>
+
</resources>
diff --git a/core/res/res/values-mk-rMK/strings.xml b/core/res/res/values-mk-rMK/strings.xml
index e0ec16a..413fe0a 100644
--- a/core/res/res/values-mk-rMK/strings.xml
+++ b/core/res/res/values-mk-rMK/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi нема пристап на интернет"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Допрете за опции"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Префрлено на <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Уредот користи <xliff:g id="NEW_NETWORK">%1$s</xliff:g> кога <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> нема пристап до интернет. Може да се наплатат трошоци."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Префрлено од <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> на <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"мобилен интернет"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Етернет"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"непознат тип мрежа"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Не можеше да се поврзе со Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" има слаба конекција на интернет."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Дозволете поврзување?"</string>
diff --git a/core/res/res/values-ml-rIN/strings.xml b/core/res/res/values-ml-rIN/strings.xml
index 39d493a..2d416ba 100644
--- a/core/res/res/values-ml-rIN/strings.xml
+++ b/core/res/res/values-ml-rIN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi-യിൽ ഇന്റർനെറ്റ് ആക്സസ് ഇല്ല."</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ഓപ്ഷനുകൾക്ക് ടാപ്പുചെയ്യുക"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> എന്നതിലേക്ക് മാറി"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> നെറ്റ്വർക്കിന് ഇന്റർനെറ്റ് ആക്സസ്സ് ഇല്ലാത്തപ്പോൾ ഉപകരണം <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ഉപയോഗിക്കുന്നു. നിരക്കുകൾ ബാധകമായേക്കാം."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> നെറ്റ്വർക്കിൽ നിന്ന് <xliff:g id="NEW_NETWORK">%2$s</xliff:g> നെറ്റ്വർക്കിലേക്ക് മാറി"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"സെല്ലുലാർ ഡാറ്റ"</item>
+ <item msgid="75483255295529161">"വൈഫൈ"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"ഇതര്നെറ്റ്"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"തിരിച്ചറിയാനാകാത്ത ഒരു നെറ്റ്വർക്ക് തരം"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi-ലേക്ക് കണക്റ്റുചെയ്യാൻ കഴിഞ്ഞില്ല"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" മോശം ഇന്റർനെറ്റ് കണക്ഷനാണുള്ളത്."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"കണക്ഷൻ അനുവദിക്കണോ?"</string>
diff --git a/core/res/res/values-mn-rMN/strings.xml b/core/res/res/values-mn-rMN/strings.xml
index 5f384a1..ac0d241 100644
--- a/core/res/res/values-mn-rMN/strings.xml
+++ b/core/res/res/values-mn-rMN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi-д интернет холболт байхгүй байна"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Сонголт хийхийн тулд товшино уу"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> руу шилжүүлсэн"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> интернэт холболтгүй үед төхөөрөмж <xliff:g id="NEW_NETWORK">%1$s</xliff:g>-г ашигладаг. Төлбөр гарч болзошгүй."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>-с <xliff:g id="NEW_NETWORK">%2$s</xliff:g> руу шилжүүлсэн"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"мобайл дата"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Этернэт"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"сүлжээний тодорхойгүй төрөл"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi-д холбогдож чадсангүй"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" Интернет холболт муу байна."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Холболтыг зөвшөөрөх үү?"</string>
diff --git a/core/res/res/values-mr-rIN/strings.xml b/core/res/res/values-mr-rIN/strings.xml
index 36d6f6a..2b6abe40 100644
--- a/core/res/res/values-mr-rIN/strings.xml
+++ b/core/res/res/values-mr-rIN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"वाय-फाय मध्ये इंटरनेट प्रवेश नाही"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"पर्यायांसाठी टॅप करा"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> वर स्विच केले"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> कडे इंटरनेट प्रवेश नसताना डिव्हाइस <xliff:g id="NEW_NETWORK">%1$s</xliff:g> वापरतो. शुल्क लागू शकतील."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> वरून <xliff:g id="NEW_NETWORK">%2$s</xliff:g> वर स्विच केले"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"मोबाइल डेटा"</item>
+ <item msgid="75483255295529161">"वाय-फाय"</item>
+ <item msgid="6862614801537202646">"ब्लूटुथ"</item>
+ <item msgid="5447331121797802871">"इथरनेट"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"अज्ञात नेटवर्क प्रकार"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"वाय-फाय ला कनेक्ट करू शकलो नाही"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" खराब इंटरनेट कनेक्शन आहे."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"कनेक्शनला अनुमती द्यायची?"</string>
diff --git a/core/res/res/values-ms-rMY/strings.xml b/core/res/res/values-ms-rMY/strings.xml
index 7db5c74..b2589e5 100644
--- a/core/res/res/values-ms-rMY/strings.xml
+++ b/core/res/res/values-ms-rMY/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi tiada akses Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Ketik untuk mendapatkan pilihan"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Beralih kepada <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Peranti menggunakan <xliff:g id="NEW_NETWORK">%1$s</xliff:g> apabila <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> tiada akses Internet. Bayaran mungkin dikenakan."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Beralih daripada <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> kepada <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"data selular"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"jenis rangkaian tidak diketahui"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Tidak boleh menyambung kepada Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" mempunyai sambungan internet yang kurang baik."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Benarkan sambungan?"</string>
diff --git a/core/res/res/values-my-rMM/strings.xml b/core/res/res/values-my-rMM/strings.xml
index 077b889..09391436 100644
--- a/core/res/res/values-my-rMM/strings.xml
+++ b/core/res/res/values-my-rMM/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"ဝိုင်-ဖို်ငတွင် အင်တာနက် ဝင်ရောက်သုံးခွင့် မရှိပါ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"အခြားရွေးချယ်စရာများကိုကြည့်ရန် တို့ပါ"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> သို့ ပြောင်းလိုက်ပြီ"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"စက်ပစ္စည်းသည် <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ဖြင့် အင်တာနက် အသုံးမပြုနိုင်သည့်အချိန်တွင် <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ကို သုံးပါသည်။ ဒေတာသုံးစွဲခ ကျသင့်နိုင်ပါသည်။"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> မှ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> သို့ ပြောင်းလိုက်ပြီ"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"ဆယ်လူလာဒေတာ"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"ဘလူးတုသ်"</item>
+ <item msgid="5447331121797802871">"အီသာနက်"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"အမည်မသိကွန်ရက်အမျိုးအစား"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ဝိုင်ဖိုင်ကိုချိတ်ဆက်မရပါ"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" အင်တာနက် ဆက်သွယ်မှု ကောင်းကောင်းမရှိပါ"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"ချိတ်ဆက်မှုကို ခွင့်ပြုမလား?"</string>
diff --git a/core/res/res/values-nb/strings.xml b/core/res/res/values-nb/strings.xml
index c9b275c..ab83793 100644
--- a/core/res/res/values-nb/strings.xml
+++ b/core/res/res/values-nb/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi har ikke Internett-tilgang"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Trykk for å få alternativer"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Byttet til <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Enheten bruker <xliff:g id="NEW_NETWORK">%1$s</xliff:g> når <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ikke har Internett-tilgang. Avgifter kan påløpe."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Byttet fra <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> til <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobildata"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"en ukjent nettverkstype"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kan ikke koble til Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" har en dårlig Internett-tilkobling."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Vil du tillat tilkoblingen?"</string>
diff --git a/core/res/res/values-ne-rNP/strings.xml b/core/res/res/values-ne-rNP/strings.xml
index a0dcfeb..39acf6b 100644
--- a/core/res/res/values-ne-rNP/strings.xml
+++ b/core/res/res/values-ne-rNP/strings.xml
@@ -1082,6 +1082,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi मा इन्टरनेट पहुँच छैन"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"विकल्पहरूका लागि ट्याप गर्नुहोस्"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> मा बदल्नुहोस्"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> मा इन्टरनेट माथिको पहुँच नहुँदा यन्त्रले <xliff:g id="NEW_NETWORK">%1$s</xliff:g> को प्रयोग गर्दछ। शुल्कहरू लागू हुन सक्छन्।"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> बाट <xliff:g id="NEW_NETWORK">%2$s</xliff:g> मा परिवर्तन गरियो"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"सेलुलर डेटा"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"ब्लुटुथ"</item>
+ <item msgid="5447331121797802871">"इथरनेट"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"नेटवर्कको कुनै अज्ञात प्रकार"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"वाइ-फाइसँग जडान गर्न सकेन"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" कमजोर इन्टरनेट जडान छ।"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"जडान अनुमति दिने हो?"</string>
diff --git a/core/res/res/values-nl/strings.xml b/core/res/res/values-nl/strings.xml
index d7f10d3..99cc80f 100644
--- a/core/res/res/values-nl/strings.xml
+++ b/core/res/res/values-nl/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wifi-netwerk heeft geen internettoegang"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tik voor opties"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Overgeschakeld naar <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Apparaat gebruikt <xliff:g id="NEW_NETWORK">%1$s</xliff:g> wanneer <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> geen internetverbinding heeft. Er kunnen kosten in rekening worden gebracht."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Overgeschakeld van <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> naar <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobiele data"</item>
+ <item msgid="75483255295529161">"Wifi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"een onbekend netwerktype"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kan geen verbinding maken met wifi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" heeft een slechte internetverbinding."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Verbinding toestaan?"</string>
diff --git a/core/res/res/values-notround-watch/config_material.xml b/core/res/res/values-notround-watch/config_material.xml
new file mode 100644
index 0000000..a99674f
--- /dev/null
+++ b/core/res/res/values-notround-watch/config_material.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+
+<!-- These resources are around just to allow their values to be customized
+ for different hardware and product builds, only for Material theme. Do not translate.
+
+ NOTE: The naming convention is "config_camelCaseValue". -->
+
+<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
+ <!-- Gravity that should be used for dialog text styles. Equivalent to: Gravity.START | Gravity.TOP -->
+ <integer name="config_dialogTextGravity">0x00800033</integer>
+</resources>
diff --git a/core/res/res/values-pa-rIN/strings.xml b/core/res/res/values-pa-rIN/strings.xml
index e717e69..5956460 100644
--- a/core/res/res/values-pa-rIN/strings.xml
+++ b/core/res/res/values-pa-rIN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi ਦੀ ਕੋਈ ਇੰਟਰਨੈਟ ਪਹੁੰਚ ਨਹੀਂ ਹੈ"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ਵਿਕਲਪਾਂ ਲਈ ਟੈਪ ਕਰੋ"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"ਬਦਲਕੇ <xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ਲਿਆਂਦਾ ਗਿਆ"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ਦੀ ਇੰਟਰਨੈੱਟ \'ਤੇ ਪਹੁੰਚ ਨਾ ਹੋਣ \'ਤੇ ਡੀਵਾਈਸ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ਦੀ ਵਰਤੋਂ ਕਰਦੀ ਹੈ। ਖਰਚੇ ਲਾਗੂ ਹੋ ਸਕਦੇ ਹਨ।"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ਤੋਂ ਬਦਲਕੇ <xliff:g id="NEW_NETWORK">%2$s</xliff:g> \'ਤੇ ਕੀਤਾ ਗਿਆ"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"ਸੈਲਿਊਲਰ ਡੈਟਾ"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"ਬਲੂਟੁੱਥ"</item>
+ <item msgid="5447331121797802871">"ਈਥਰਨੈੱਟ"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"ਇੱਕ ਅਗਿਆਤ ਨੈੱਟਵਰਕ ਕਿਸਮ"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi ਨਾਲ ਕਨੈਕਟ ਨਹੀਂ ਕਰ ਸਕਿਆ"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ਇਸਦਾ ਇੱਕ ਖ਼ਰਾਬ ਇੰਟਰਨੈਟ ਕਨੈਕਸ਼ਨ ਹੈ।"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"ਕੀ ਕਨੈਕਸ਼ਨ ਦੀ ਆਗਿਆ ਦੇਣੀ ਹੈ?"</string>
diff --git a/core/res/res/values-pl/strings.xml b/core/res/res/values-pl/strings.xml
index d9e63a6..84ee0f8 100644
--- a/core/res/res/values-pl/strings.xml
+++ b/core/res/res/values-pl/strings.xml
@@ -1126,6 +1126,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Sieć Wi-Fi nie ma dostępu do internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Kliknij, by wyświetlić opcje"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Zmieniono na połączenie typu <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Urządzenie korzysta z połączenia typu <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, gdy <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nie dostępu do internetu. Mogą zostać naliczone opłaty."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Przełączono z połączenia typu <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na <xliff:g id="NEW_NETWORK">%2$s</xliff:g>."</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"komórkowa transmisja danych"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"nieznany typ sieci"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nie można połączyć się z siecią Wi-Fi."</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ma powolne połączenie internetowe."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Zezwolić na połączenie?"</string>
diff --git a/core/res/res/values-pt-rBR/strings.xml b/core/res/res/values-pt-rBR/strings.xml
index eaaad25c..67398350 100644
--- a/core/res/res/values-pt-rBR/strings.xml
+++ b/core/res/res/values-pt-rBR/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"O Wi-Fi não tem acesso à Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toque para ver opções"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Alternado para <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"O dispositivo usa <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> não tem acesso à Internet. Cobranças podem ser aplicadas."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Alternado de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> para <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"dados da rede celular"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"um tipo de rede desconhecido"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Não foi possível se conectar a redes Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" tem uma conexão de baixa qualidade com a Internet."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Permitir conexão?"</string>
diff --git a/core/res/res/values-pt-rPT/strings.xml b/core/res/res/values-pt-rPT/strings.xml
index ae115d8..5e244a9 100644
--- a/core/res/res/values-pt-rPT/strings.xml
+++ b/core/res/res/values-pt-rPT/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"O Wi-Fi não tem acesso à Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toque para obter mais opções"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Mudou para <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"O dispositivo utiliza <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> não tem acesso à Internet. Podem ser aplicados custos."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Mudou de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> para <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"dados móveis"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"um tipo de rede desconhecido"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Não foi possível ligar a Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" tem uma ligação à internet fraca."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Permitir ligação?"</string>
@@ -1310,7 +1321,7 @@
<string name="action_menu_overflow_description" msgid="2295659037509008453">"Mais opções"</string>
<string name="action_bar_home_description_format" msgid="7965984360903693903">"%1$s, %2$s"</string>
<string name="action_bar_home_subtitle_description_format" msgid="6985546530471780727">"%1$s, %2$s, %3$s"</string>
- <string name="storage_internal" msgid="3570990907910199483">"Armazenamento interno partilhado"</string>
+ <string name="storage_internal" msgid="3570990907910199483">"Armazen. interno partilhado"</string>
<string name="storage_sd_card" msgid="3282948861378286745">"Cartão SD"</string>
<string name="storage_sd_card_label" msgid="6347111320774379257">"Cartão SD <xliff:g id="MANUFACTURER">%s</xliff:g>"</string>
<string name="storage_usb_drive" msgid="6261899683292244209">"Unidade USB"</string>
diff --git a/core/res/res/values-pt/strings.xml b/core/res/res/values-pt/strings.xml
index eaaad25c..67398350 100644
--- a/core/res/res/values-pt/strings.xml
+++ b/core/res/res/values-pt/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"O Wi-Fi não tem acesso à Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Toque para ver opções"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Alternado para <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"O dispositivo usa <xliff:g id="NEW_NETWORK">%1$s</xliff:g> quando <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> não tem acesso à Internet. Cobranças podem ser aplicadas."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Alternado de <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> para <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"dados da rede celular"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"um tipo de rede desconhecido"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Não foi possível se conectar a redes Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" tem uma conexão de baixa qualidade com a Internet."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Permitir conexão?"</string>
diff --git a/core/res/res/values-ro/strings.xml b/core/res/res/values-ro/strings.xml
index 6198f12..042ea62 100644
--- a/core/res/res/values-ro/strings.xml
+++ b/core/res/res/values-ro/strings.xml
@@ -1101,6 +1101,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Rețeaua Wi-Fi nu are acces la internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Atingeți pentru opțiuni"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"S-a comutat la <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Dispozitivul folosește <xliff:g id="NEW_NETWORK">%1$s</xliff:g> când <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nu are acces la internet. Se pot aplica taxe."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"S-a comutat de la <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> la <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"date mobile"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"un tip de rețea necunoscut"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nu se poate conecta la Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" are o conexiune la internet slabă."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Permiteți conectarea?"</string>
diff --git a/core/res/res/values-round-watch/config_material.xml b/core/res/res/values-round-watch/config_material.xml
index bf445ef..1179870 100644
--- a/core/res/res/values-round-watch/config_material.xml
+++ b/core/res/res/values-round-watch/config_material.xml
@@ -19,4 +19,10 @@
<resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
<!-- Don't clip on round screens so the list can scroll past the rounded edges. -->
<bool name="config_preferenceFragmentClipToPadding">false</bool>
+
+ <!-- Gravity that should be used for dialog text styles. Equivalent to: Gravity.CENTER_HORIZONTAL | Gravity.TOP -->
+ <integer name="config_dialogTextGravity">0x00000031</integer>
+
+ <!-- The amount to offset when scrolling to a selection in an AlertDialog -->
+ <dimen name="config_alertDialogSelectionScrollOffset">@dimen/screen_percentage_15</dimen>
</resources>
diff --git a/core/res/res/values-round-watch/styles_material.xml b/core/res/res/values-round-watch/styles_material.xml
deleted file mode 100644
index a2f3c02..0000000
--- a/core/res/res/values-round-watch/styles_material.xml
+++ /dev/null
@@ -1,20 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!-- 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.
--->
-<resources>
- <style name="TextAppearance.Material.AlertDialogMessage" parent="TextAppearance.Material.Body1">
- <item name="textAlignment">center</item>
- </style>
-</resources>
diff --git a/core/res/res/values-ru/strings.xml b/core/res/res/values-ru/strings.xml
index 0ef96af..bbb1488 100644
--- a/core/res/res/values-ru/strings.xml
+++ b/core/res/res/values-ru/strings.xml
@@ -1126,6 +1126,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Сеть Wi-Fi не подключена к Интернету"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Нажмите, чтобы показать варианты."</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Новое подключение: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Устройство использует <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, если подключение к сети <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> недоступно. Может взиматься плата за передачу данных."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Устройство отключено от сети <xliff:g id="NEW_NETWORK">%2$s</xliff:g> и теперь использует <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"мобильные данные"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"неизвестный тип сети"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Не удалось подключиться к сети Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" – плохое интернет-соединение."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Разрешить подключение?"</string>
diff --git a/core/res/res/values-si-rLK/strings.xml b/core/res/res/values-si-rLK/strings.xml
index 4f90b57..5917d6d 100644
--- a/core/res/res/values-si-rLK/strings.xml
+++ b/core/res/res/values-si-rLK/strings.xml
@@ -1078,6 +1078,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi හට අන්තර්ජාල ප්රවේශය නැත"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"විකල්ප සඳහා තට්ටු කරන්න"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> වෙත මාරු විය"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"උපාංගය <xliff:g id="NEW_NETWORK">%1$s</xliff:g> <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> සඳහා අන්තර්ජාල ප්රවේශය නැති විට භාවිත කරයි. ගාස්තු අදාළ විය හැකිය."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> සිට <xliff:g id="NEW_NETWORK">%2$s</xliff:g> වෙත මාරු විය"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"සෙලියුලර් දත්ත"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"බ්ලූටූත්"</item>
+ <item msgid="5447331121797802871">"ඊතර්නෙට්"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"නොදන්නා ජාල වර්ගයකි"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi වෙත සම්බන්ධ විය නොහැක"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" දුබල අන්තර්ජාල සම්බන්ධතාවයක් ඇත."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"සම්බන්ධතාවයට ඉඩ දෙන්නද?"</string>
diff --git a/core/res/res/values-sk/strings.xml b/core/res/res/values-sk/strings.xml
index 0a48693..10a64fe 100644
--- a/core/res/res/values-sk/strings.xml
+++ b/core/res/res/values-sk/strings.xml
@@ -1126,6 +1126,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Sieť Wi-Fi nemá prístup k internetu"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Klepnutím získate možnosti"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Prepnuté na sieť: <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Keď sieť <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nemá prístup k internetu, zariadenie používa sieť <xliff:g id="NEW_NETWORK">%1$s</xliff:g>. Môžu sa účtovať poplatky."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Prepnuté zo siete <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na sieť <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobilné dáta"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"neznámy typ siete"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nepodarilo sa pripojiť k sieti Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" má nekvalitné internetové pripojenie."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Povoliť pripojenie?"</string>
diff --git a/core/res/res/values-sl/strings.xml b/core/res/res/values-sl/strings.xml
index 7b8a03a..28031e1 100644
--- a/core/res/res/values-sl/strings.xml
+++ b/core/res/res/values-sl/strings.xml
@@ -1126,6 +1126,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Omrežje Wi-Fi nima dostopa do interneta"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Dotaknite se za možnosti"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Preklopljeno na omrežje vrste <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Naprava uporabi omrežje vrste <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, ko omrežje vrste <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nima dostopa do interneta. Prenos podatkov se lahko zaračuna posebej."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Preklopljeno z omrežja vrste <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na omrežje vrste <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"prenos podatkov v mobilnih omrežjih"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"neznana vrsta omrežja"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Z omrežjem Wi-Fi se ni mogoče povezati"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ima slabo internetno povezavo."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Ali dovolite vzpostavitev povezave?"</string>
diff --git a/core/res/res/values-sq-rAL/strings.xml b/core/res/res/values-sq-rAL/strings.xml
index 05f0e59..e83f39c 100644
--- a/core/res/res/values-sq-rAL/strings.xml
+++ b/core/res/res/values-sq-rAL/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi nuk ka qasje në internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Trokit për opsionet"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Kaloi te <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Pajisja përdor <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kur <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> nuk ka qasje në internet. Mund të zbatohen tarifa."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Kaloi nga <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> te <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"të dhënat celulare"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Eternet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"një lloj rrjeti i panjohur"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Nuk mund të lidhej me Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ka një lidhje të dobët interneti."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Të lejohet lidhja?"</string>
diff --git a/core/res/res/values-sr/strings.xml b/core/res/res/values-sr/strings.xml
index 517d777..5b3986f 100644
--- a/core/res/res/values-sr/strings.xml
+++ b/core/res/res/values-sr/strings.xml
@@ -1101,6 +1101,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi нема приступ интернету"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Додирните за опције"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Прешли сте на тип мреже <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Уређај користи тип мреже <xliff:g id="NEW_NETWORK">%1$s</xliff:g> када тип мреже <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> нема приступ интернету. Можда ће се наплаћивати трошкови."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Прешли сте са типа мреже <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> на тип мреже <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"мобилни подаци"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Етернет"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"непознат тип мреже"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Није могуће повезати са Wi-Fi мрежом"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" има лошу интернет везу."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Желите ли да дозволите повезивање?"</string>
diff --git a/core/res/res/values-sv/strings.xml b/core/res/res/values-sv/strings.xml
index cf1b19c..b9d7247 100644
--- a/core/res/res/values-sv/strings.xml
+++ b/core/res/res/values-sv/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi-nätverket är inte anslutet till internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Tryck för alternativ"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Byte av nätverk till <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="NEW_NETWORK">%1$s</xliff:g> används på enheten när det inte finns internetåtkomst via <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>. Avgifter kan tillkomma."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Byte av nätverk från <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> till <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobildata"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"en okänd nätverkstyp"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Det gick inte att ansluta till Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" har en dålig Internetanslutning."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Tillåt anslutning?"</string>
diff --git a/core/res/res/values-sw/strings.xml b/core/res/res/values-sw/strings.xml
index 3daaf93..959c04d 100644
--- a/core/res/res/values-sw/strings.xml
+++ b/core/res/res/values-sw/strings.xml
@@ -1074,6 +1074,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi haina muunganisho wa intaneti"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Gonga ili upate chaguo"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Sasa inatumia <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Kifaa hutumia <xliff:g id="NEW_NETWORK">%1$s</xliff:g> wakati <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> haina Intaneti. Huenda ukalipishwa."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Imebadilisha mtandao kutoka <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> na sasa inatumia <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"data ya simu za mkononi"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethaneti"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"aina ya mtandao isiyojulikana"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Haikuweza kuunganisha kwa Mtandao-Hewa"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ina muunganisho duni wa Mtandao."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Ungepenga kuruhusu muunganisho?"</string>
diff --git a/core/res/res/values-ta-rIN/strings.xml b/core/res/res/values-ta-rIN/strings.xml
index e851399..68c0da9 100644
--- a/core/res/res/values-ta-rIN/strings.xml
+++ b/core/res/res/values-ta-rIN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"வைஃபை இணைய அணுகல் கொண்டிருக்கவில்லை"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"விருப்பங்களுக்கு, தட்டவும்"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>க்கு மாற்றப்பட்டது"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> இல் இணைய அணுகல் இல்லாததால், சாதனமானது <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ஐப் பயன்படுத்துகிறது. கட்டணங்கள் விதிக்கப்படலாம்."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> இலிருந்து <xliff:g id="NEW_NETWORK">%2$s</xliff:g>க்கு மாற்றப்பட்டது"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"செல்லுலார் தரவு"</item>
+ <item msgid="75483255295529161">"வைஃபை"</item>
+ <item msgid="6862614801537202646">"புளூடூத்"</item>
+ <item msgid="5447331121797802871">"ஈத்தர்நெட்"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"தெரியாத நெட்வொர்க் வகை"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"வைஃபை உடன் இணைக்க முடியவில்லை"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" இணைய இணைப்பு மோசமாக உள்ளது."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"இணைப்பை அனுமதிக்கவா?"</string>
diff --git a/core/res/res/values-te-rIN/strings.xml b/core/res/res/values-te-rIN/strings.xml
index 7c48c8c..4e2a581 100644
--- a/core/res/res/values-te-rIN/strings.xml
+++ b/core/res/res/values-te-rIN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fiకి ఇంటర్నెట్ ప్రాప్యత లేదు"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"ఎంపికల కోసం నొక్కండి"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>కి మార్చబడింది"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"పరికరం <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>కి ఇంటర్నెట్ ప్రాప్యత లేనప్పుడు <xliff:g id="NEW_NETWORK">%1$s</xliff:g>ని ఉపయోగిస్తుంది. ఛార్జీలు వర్తించవచ్చు."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> నుండి <xliff:g id="NEW_NETWORK">%2$s</xliff:g>కి మార్చబడింది"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"సెల్యులార్ డేటా"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"బ్లూటూత్"</item>
+ <item msgid="5447331121797802871">"ఈథర్నెట్"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"తెలియని నెట్వర్క్ రకం"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fiకి కనెక్ట్ చేయడం సాధ్యపడలేదు"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" బలహీన ఇంటర్నెట్ కనెక్షన్ను కలిగి ఉంది."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"కనెక్షన్ని అనుమతించాలా?"</string>
diff --git a/core/res/res/values-th/strings.xml b/core/res/res/values-th/strings.xml
index 90d9f9b..332e70b 100644
--- a/core/res/res/values-th/strings.xml
+++ b/core/res/res/values-th/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi ไม่สามารถเข้าถึงอินเทอร์เน็ต"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"แตะเพื่อดูตัวเลือก"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"เปลี่ยนเป็น <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"อุปกรณ์จะใช้ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> เมื่อ <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ไม่สามารถเข้าถึงอินเทอร์เน็ต อาจมีค่าบริการ"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"เปลี่ยนจาก <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> เป็น <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"เน็ตมือถือ"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"บลูทูธ"</item>
+ <item msgid="5447331121797802871">"อีเทอร์เน็ต"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"ประเภทเครือข่ายที่ไม่รู้จัก"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"ไม่สามารถเชื่อมต่อ WiFi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" มีสัญญาณอินเทอร์เน็ตไม่ดี"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"อนุญาตการเชื่อมต่อใช่ไหม"</string>
diff --git a/core/res/res/values-tl/strings.xml b/core/res/res/values-tl/strings.xml
index efb319f..065f7b4 100644
--- a/core/res/res/values-tl/strings.xml
+++ b/core/res/res/values-tl/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Walang access sa Internet ang Wi-Fi"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"I-tap para sa mga opsyon"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Lumipat sa <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Ginagamit ng device ang <xliff:g id="NEW_NETWORK">%1$s</xliff:g> kapag walang access sa Internet ang <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>. Maaaring may mga malapat na singilin."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Lumipat sa <xliff:g id="NEW_NETWORK">%2$s</xliff:g> mula sa <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"cellular data"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"isang hindi kilalang uri ng network"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Hindi makakonekta sa Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" ay mayroong mahinang koneksyon sa Internet."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Payagan ang kuneksyon?"</string>
diff --git a/core/res/res/values-tr/strings.xml b/core/res/res/values-tr/strings.xml
index 5a0776a..5cf25fd 100644
--- a/core/res/res/values-tr/strings.xml
+++ b/core/res/res/values-tr/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Kablosuz bağlantıda İnternet erişimi yok"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Seçenekler için dokunun"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> ağına geçildi"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ağının İnternet erişimi olmadığında cihaz <xliff:g id="NEW_NETWORK">%1$s</xliff:g> ağını kullanır. Bunun için ödeme alınabilir."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> ağından <xliff:g id="NEW_NETWORK">%2$s</xliff:g> ağına geçildi"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"hücresel veri"</item>
+ <item msgid="75483255295529161">"Kablosuz"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"bilinmeyen ağ türü"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Kablosuz bağlantısı kurulamadı"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" İnternet bağlantısı zayıf."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Bağlantıya izin verilsin mi?"</string>
diff --git a/core/res/res/values-uk/strings.xml b/core/res/res/values-uk/strings.xml
index 4810e37..1f5856d 100644
--- a/core/res/res/values-uk/strings.xml
+++ b/core/res/res/values-uk/strings.xml
@@ -1126,6 +1126,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Мережа Wi-Fi не має доступу до Інтернету"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Торкніться, щоб відкрити опції"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Пристрій перейшов на мережу <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Пристрій використовує мережу <xliff:g id="NEW_NETWORK">%1$s</xliff:g>, коли мережа <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> не має доступу до Інтернету. Може стягуватися плата."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Пристрій перейшов з мережі <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> на мережу <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"мобільний трафік"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"Мережа VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"невідомий тип мережі"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Не вдалося під’єднатися до мережі Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" має погане з’єднання з Інтернетом."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Дозволити з’єднання?"</string>
diff --git a/core/res/res/values-ur-rPK/strings.xml b/core/res/res/values-ur-rPK/strings.xml
index f677132..996a50b 100644
--- a/core/res/res/values-ur-rPK/strings.xml
+++ b/core/res/res/values-ur-rPK/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi کی انٹرنیٹ تک رسائی نہیں ہے"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"اختیارات کیلئے تھپتھپائیں"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> پر سوئچ ہو گیا"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"جب <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> کے پاس انٹرنیٹ تک رسائی نہ ہو تو آلہ <xliff:g id="NEW_NETWORK">%1$s</xliff:g> کو استعمال کرتا ہے۔ چارجز کا اطلاق ہو سکتا ہے۔"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> سے <xliff:g id="NEW_NETWORK">%2$s</xliff:g> پر سوئچ ہو گیا"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"سیلولر ڈیٹا"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"بلوٹوتھ"</item>
+ <item msgid="5447331121797802871">"ایتھرنیٹ"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"نیٹ ورک کی نامعلوم قسم"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi سے مربوط نہیں ہو سکا"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" اس میں ایک کمزور انٹرنیٹ کنکشن ہے۔"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"کنکشن کی اجازت دیں؟"</string>
diff --git a/core/res/res/values-uz-rUZ/strings.xml b/core/res/res/values-uz-rUZ/strings.xml
index 8fc6428..a12bdad 100644
--- a/core/res/res/values-uz-rUZ/strings.xml
+++ b/core/res/res/values-uz-rUZ/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi tarmog‘ida internet aloqasi yo‘q"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Variantlarni ko‘rsatish uchun bosing"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"<xliff:g id="NETWORK_TYPE">%1$s</xliff:g> tarmog‘iga ulanildi"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Qurilma <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> tarmog‘ida internet o‘chganda, <xliff:g id="NEW_NETWORK">%1$s</xliff:g> tarmog‘iga ulaniladi. To‘lov olinishi mumkin."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> tarmog‘idan <xliff:g id="NEW_NETWORK">%2$s</xliff:g> tarmog‘iga o‘tildi"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"mobil internet"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"noma’lum tarmoq turi"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Wi-Fi’ga ulana olmadi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" tezligi past Internetga ulangan."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Ulanishga ruxsat berilsinmi?"</string>
diff --git a/core/res/res/values-vi/strings.xml b/core/res/res/values-vi/strings.xml
index a537b8f..6984027 100644
--- a/core/res/res/values-vi/strings.xml
+++ b/core/res/res/values-vi/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi không có quyền truy cập Internet"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Nhấn để biết tùy chọn"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Đã chuyển sang <xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Thiết bị sử dụng <xliff:g id="NEW_NETWORK">%1$s</xliff:g> khi <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> không có quyền truy cập Internet. Bạn có thể phải trả phí."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Đã chuyển từ <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> sang <xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"dữ liệu di động"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"Bluetooth"</item>
+ <item msgid="5447331121797802871">"Ethernet"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"loại mạng không xác định"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Không thể kết nối với Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" có kết nối Internet không tốt."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Cho phép kết nối?"</string>
diff --git a/core/res/res/values-w180dp-notround-watch/dimens_material.xml b/core/res/res/values-w180dp-notround-watch/dimens_material.xml
new file mode 100644
index 0000000..79acf84
--- /dev/null
+++ b/core/res/res/values-w180dp-notround-watch/dimens_material.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<resources>
+ <dimen name="text_size_display_4_material">80sp</dimen>
+ <dimen name="text_size_display_3_material">50sp</dimen>
+ <dimen name="text_size_display_2_material">40sp</dimen>
+ <dimen name="text_size_display_1_material">30sp</dimen>
+ <dimen name="text_size_headline_material">20sp</dimen>
+ <dimen name="text_size_title_material">18sp</dimen>
+ <dimen name="text_size_subhead_material">18sp</dimen>
+ <dimen name="text_size_title_material_toolbar">18dp</dimen>
+ <dimen name="text_size_subtitle_material_toolbar">18dp</dimen>
+ <dimen name="text_size_menu_material">18sp</dimen>
+ <dimen name="text_size_menu_header_material">16sp</dimen>
+ <dimen name="text_size_body_2_material">16sp</dimen>
+ <dimen name="text_size_body_1_material">16sp</dimen>
+ <dimen name="text_size_caption_material">14sp</dimen>
+ <dimen name="text_size_button_material">16sp</dimen>
+
+ <dimen name="text_size_large_material">18sp</dimen>
+ <dimen name="text_size_medium_material">16sp</dimen>
+ <dimen name="text_size_small_material">14sp</dimen>
+</resources>
diff --git a/core/res/res/values-w210dp-round-watch/dimens_material.xml b/core/res/res/values-w210dp-round-watch/dimens_material.xml
new file mode 100644
index 0000000..79acf84
--- /dev/null
+++ b/core/res/res/values-w210dp-round-watch/dimens_material.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!-- 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.
+-->
+<resources>
+ <dimen name="text_size_display_4_material">80sp</dimen>
+ <dimen name="text_size_display_3_material">50sp</dimen>
+ <dimen name="text_size_display_2_material">40sp</dimen>
+ <dimen name="text_size_display_1_material">30sp</dimen>
+ <dimen name="text_size_headline_material">20sp</dimen>
+ <dimen name="text_size_title_material">18sp</dimen>
+ <dimen name="text_size_subhead_material">18sp</dimen>
+ <dimen name="text_size_title_material_toolbar">18dp</dimen>
+ <dimen name="text_size_subtitle_material_toolbar">18dp</dimen>
+ <dimen name="text_size_menu_material">18sp</dimen>
+ <dimen name="text_size_menu_header_material">16sp</dimen>
+ <dimen name="text_size_body_2_material">16sp</dimen>
+ <dimen name="text_size_body_1_material">16sp</dimen>
+ <dimen name="text_size_caption_material">14sp</dimen>
+ <dimen name="text_size_button_material">16sp</dimen>
+
+ <dimen name="text_size_large_material">18sp</dimen>
+ <dimen name="text_size_medium_material">16sp</dimen>
+ <dimen name="text_size_small_material">14sp</dimen>
+</resources>
diff --git a/core/res/res/values-notround-watch/styles_material.xml b/core/res/res/values-w225dp/dimens_material.xml
similarity index 76%
rename from core/res/res/values-notround-watch/styles_material.xml
rename to core/res/res/values-w225dp/dimens_material.xml
index cd8521f4..aa822a3 100644
--- a/core/res/res/values-notround-watch/styles_material.xml
+++ b/core/res/res/values-w225dp/dimens_material.xml
@@ -1,4 +1,4 @@
-<?xml version="1.0" encoding="UTF-8"?>
+<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2016 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
@@ -14,5 +14,7 @@
limitations under the License.
-->
<resources>
- <style name="TextAppearance.Material.AlertDialogMessage" parent="TextAppearance.Material.Body1"/>
+ <dimen name="screen_percentage_05">11.25dp</dimen>
+ <dimen name="screen_percentage_10">22.5dp</dimen>
+ <dimen name="screen_percentage_15">33.75dp</dimen>
</resources>
diff --git a/core/res/res/values-watch/colors_material.xml b/core/res/res/values-watch/colors_material.xml
index 45eb981..54eece4 100644
--- a/core/res/res/values-watch/colors_material.xml
+++ b/core/res/res/values-watch/colors_material.xml
@@ -22,5 +22,5 @@
<color name="primary_material_dark">#4D4D4D</color>
- <color name="button_material_dark">#ff999999</color>
+ <color name="button_material_dark">#ff919699</color>
</resources>
diff --git a/core/res/res/values-watch/config.xml b/core/res/res/values-watch/config.xml
index 919519e..7c05b7a 100644
--- a/core/res/res/values-watch/config.xml
+++ b/core/res/res/values-watch/config.xml
@@ -57,4 +57,9 @@
<!-- Use a custom transition for RemoteViews. -->
<bool name="config_overrideRemoteViewsActivityTransition">true</bool>
+
+ <!-- Default value for android:focusableInTouchMode for some framework scrolling containers.
+ ListView/GridView are notably absent since this is their default anyway.
+ Set to true for watch devices. -->
+ <bool name="config_focusScrollContainersInTouchMode">true</bool>
</resources>
diff --git a/core/res/res/values-watch/config_material.xml b/core/res/res/values-watch/config_material.xml
index 81b53e7..104d122 100644
--- a/core/res/res/values-watch/config_material.xml
+++ b/core/res/res/values-watch/config_material.xml
@@ -29,7 +29,4 @@
<!-- Always overscan by default to ensure onApplyWindowInsets will always be called. -->
<bool name="config_windowOverscanByDefault">true</bool>
-
- <!-- Due to the smaller screen size, have dialog titles occupy more than 1 line. -->
- <integer name="config_dialogWindowTitleMaxLines">3</integer>
</resources>
diff --git a/core/res/res/values-watch/dimens_material.xml b/core/res/res/values-watch/dimens_material.xml
index d579434..b48cde6 100644
--- a/core/res/res/values-watch/dimens_material.xml
+++ b/core/res/res/values-watch/dimens_material.xml
@@ -14,5 +14,29 @@
limitations under the License.
-->
<resources>
+ <dimen name="text_size_display_4_material">71sp</dimen>
+ <dimen name="text_size_display_3_material">44sp</dimen>
+ <dimen name="text_size_display_2_material">36sp</dimen>
+ <dimen name="text_size_display_1_material">27sp</dimen>
+ <dimen name="text_size_headline_material">18sp</dimen>
+ <dimen name="text_size_title_material">16sp</dimen>
+ <dimen name="text_size_subhead_material">16sp</dimen>
+ <dimen name="text_size_title_material_toolbar">16dp</dimen>
+ <dimen name="text_size_subtitle_material_toolbar">16dp</dimen>
+ <dimen name="text_size_menu_material">16sp</dimen>
+ <dimen name="text_size_menu_header_material">14sp</dimen>
+ <dimen name="text_size_body_2_material">14sp</dimen>
+ <dimen name="text_size_body_1_material">14sp</dimen>
+ <dimen name="text_size_caption_material">12sp</dimen>
+ <dimen name="text_size_button_material">14sp</dimen>
+
+ <dimen name="text_size_large_material">16sp</dimen>
+ <dimen name="text_size_medium_material">14sp</dimen>
+ <dimen name="text_size_small_material">12sp</dimen>
+
<item name="text_line_spacing_multiplier_material" format="float" type="dimen">1.2</item>
+
+ <!-- Date and time picker legacy dimens -->
+ <dimen name="picker_top_margin">1dip</dimen>
+ <dimen name="picker_bottom_margin">1dip</dimen>
</resources>
diff --git a/core/res/res/values-watch/integers.xml b/core/res/res/values-watch/integers.xml
new file mode 100644
index 0000000..46ed97d
--- /dev/null
+++ b/core/res/res/values-watch/integers.xml
@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!--
+/*
+** Copyright 2012, 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.
+*/
+-->
+<resources>
+ <!-- Specifies date picker mode to be 'spinner' -->
+ <integer name="date_picker_mode_material">1</integer>
+
+ <!-- Specifies time picker mode to be 'spinner' -->
+ <integer name="time_picker_mode_material">1</integer>
+</resources>
diff --git a/core/res/res/values-watch/styles_material.xml b/core/res/res/values-watch/styles_material.xml
index f5735e6..d09119f 100644
--- a/core/res/res/values-watch/styles_material.xml
+++ b/core/res/res/values-watch/styles_material.xml
@@ -61,12 +61,19 @@
<item name="divider">@empty</item>
</style>
+ <style name="TextAppearance.Material.ListItem" parent="TextAppearance.Material.Body1" />
+ <style name="TextAppearance.Material.ListItemSecondary" parent="TextAppearance.Material.Caption" />
+
<style name="Widget.Material.TextView" parent="Widget.TextView">
<item name="breakStrategy">balanced</item>
</style>
<style name="Widget.Material.ButtonBar" parent="Widget.Material.BaseButtonBar" />
+ <style name="TextAppearance.Material.NumberPicker" parent="TextAppearance.Material.Body1">
+ <item name="textSize">@dimen/text_size_medium_material</item>
+ </style>
+
<!-- Alert dialog button bar button -->
<style name="Widget.Material.Button.ButtonBar.AlertDialog" parent="Widget.Material.Button.Borderless.Small">
<item name="paddingStart">@dimen/list_item_padding_start_material</item>
@@ -82,13 +89,21 @@
<item name="solidColor">@color/transparent</item>
<item name="selectionDivider">@drawable/numberpicker_selection_divider</item>
<item name="selectionDividerHeight">2dp</item>
- <item name="selectionDividersDistance">48dp</item>
- <item name="internalMinWidth">64dp</item>
- <item name="internalMaxHeight">180dp</item>
+ <item name="selectionDividersDistance">24dp</item>
+ <item name="internalMinWidth">32dp</item>
+ <item name="internalMaxHeight">90dp</item>
<item name="virtualButtonPressedDrawable">?selectableItemBackground</item>
<item name="descendantFocusability">blocksDescendants</item>
</style>
+ <style name="DialogWindowTitle.Material">
+ <item name="maxLines">3</item>
+ <item name="scrollHorizontally">false</item>
+ <item name="textAppearance">@style/TextAppearance.Material.DialogWindowTitle</item>
+ <item name="gravity">@integer/config_dialogTextGravity</item>
+ <item name="ellipsize">end</item>
+ </style>
+
<!-- DO NOTE TRANSLATE Spans within this text are applied to style composing regions
within an EditText widget. The text content is ignored and not used.
Note: This is @color/material_deep_teal_200, cannot use @color references here. -->
diff --git a/core/res/res/values-watch/themes_material.xml b/core/res/res/values-watch/themes_material.xml
index 4ae4367..84bc25f 100644
--- a/core/res/res/values-watch/themes_material.xml
+++ b/core/res/res/values-watch/themes_material.xml
@@ -59,4 +59,17 @@
<item name="colorBackgroundCacheHint">@color/background_cache_hint_selector_material_light</item>
<item name="windowIsFloating">false</item>
</style>
+
+ <!-- Force all settings themes to use normal Material theme. -->
+ <style name="Theme.Material.Settings" parent="Theme.Material"/>
+ <style name="Theme.Material.Settings.NoActionBar" parent="Theme.Material"/>
+ <style name="Theme.Material.Settings.BaseDialog" parent="Theme.Material.Dialog"/>
+ <style name="Theme.Material.Settings.Dialog" parent="Theme.Material.Settings.BaseDialog"/>
+ <style name="Theme.Material.Settings.Dialog.BaseAlert" parent="Theme.Material.Dialog.BaseAlert"/>
+ <style name="Theme.Material.Settings.Dialog.Alert" parent="Theme.Material.Settings.Dialog.BaseAlert"/>
+ <style name="Theme.Material.Settings.DialogWhenLarge" parent="Theme.Material.DialogWhenLarge"/>
+ <style name="Theme.Material.Settings.DialogWhenLarge.NoActionBar" parent="Theme.Material.DialogWhenLarge.NoActionBar"/>
+ <style name="Theme.Material.Settings.Dialog.Presentation" parent="Theme.Material.Dialog.Presentation"/>
+ <style name="Theme.Material.Settings.SearchBar" parent="Theme.Material.SearchBar"/>
+ <style name="Theme.Material.Settings.CompactMenu" parent="Theme.Material.CompactMenu"/>
</resources>
diff --git a/core/res/res/values-zh-rCN/strings.xml b/core/res/res/values-zh-rCN/strings.xml
index 8116ec0..d3428b3 100644
--- a/core/res/res/values-zh-rCN/strings.xml
+++ b/core/res/res/values-zh-rCN/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"此 WLAN 网络无法访问互联网"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"点按即可查看相关选项"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"已切换至<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"设备会在无法连接到<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>时使用<xliff:g id="NEW_NETWORK">%1$s</xliff:g>(可能需要支付相应的费用)。"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"已从<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>切换至<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"移动数据网络"</item>
+ <item msgid="75483255295529161">"WLAN"</item>
+ <item msgid="6862614801537202646">"蓝牙"</item>
+ <item msgid="5447331121797802871">"以太网"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"未知网络类型"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"无法连接到WLAN"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" 互联网连接状况不佳。"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"要允许连接吗?"</string>
diff --git a/core/res/res/values-zh-rHK/strings.xml b/core/res/res/values-zh-rHK/strings.xml
index ef12eea..734a506 100644
--- a/core/res/res/values-zh-rHK/strings.xml
+++ b/core/res/res/values-zh-rHK/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi 並未連接互聯網"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"輕按即可查看選項"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"已切換至<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"當<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g>無法連線至互聯網時,裝置便會切換至<xliff:g id="NEW_NETWORK">%1$s</xliff:g>。可能需要支付額外費用。"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"已從<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g>切換至<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"流動數據"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"藍牙"</item>
+ <item msgid="5447331121797802871">"以太網"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"不明網絡類型"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"無法連線至 Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" 互聯網連線欠佳。"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"允許連線?"</string>
diff --git a/core/res/res/values-zh-rTW/strings.xml b/core/res/res/values-zh-rTW/strings.xml
index 84e2c2c..73ed62c 100644
--- a/core/res/res/values-zh-rTW/strings.xml
+++ b/core/res/res/values-zh-rTW/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"Wi-Fi 網路沒有網際網路連線"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"輕觸即可查看選項"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"已切換至<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"裝置會在無法連上 <xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> 時切換至<xliff:g id="NEW_NETWORK">%1$s</xliff:g> (可能需要支付相關費用)。"</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"已從 <xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> 切換至<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"行動數據"</item>
+ <item msgid="75483255295529161">"Wi-Fi"</item>
+ <item msgid="6862614801537202646">"藍牙"</item>
+ <item msgid="5447331121797802871">"乙太網路"</item>
+ <item msgid="8257233890381651999">"VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"不明的網路類型"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"無法連線至 Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" 的網際網路連線狀況不佳。"</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"允許連線?"</string>
diff --git a/core/res/res/values-zu/strings.xml b/core/res/res/values-zu/strings.xml
index 0c7af8d..12818fc 100644
--- a/core/res/res/values-zu/strings.xml
+++ b/core/res/res/values-zu/strings.xml
@@ -1076,6 +1076,17 @@
<skip />
<string name="wifi_no_internet" msgid="8451173622563841546">"I-Wi-Fi ayinakho ukufinyelela kwe-inthanethi"</string>
<string name="wifi_no_internet_detailed" msgid="8083079241212301741">"Thepha ukuze uthole izinketho"</string>
+ <string name="network_switch_metered" msgid="4671730921726992671">"Kushintshelwe ku-<xliff:g id="NETWORK_TYPE">%1$s</xliff:g>"</string>
+ <string name="network_switch_metered_detail" msgid="5325661434777870353">"Idivayisi isebenzisa i-<xliff:g id="NEW_NETWORK">%1$s</xliff:g> uma i-<xliff:g id="PREVIOUS_NETWORK">%2$s</xliff:g> ingenakho ukufinyelela kwe-inthanethi. Izindleko zingasebenza."</string>
+ <string name="network_switch_metered_toast" msgid="5779283181685974304">"Kushintshelewe kusuka ku-<xliff:g id="PREVIOUS_NETWORK">%1$s</xliff:g> kuya ku-<xliff:g id="NEW_NETWORK">%2$s</xliff:g>"</string>
+ <string-array name="network_switch_type_name">
+ <item msgid="2952042958050315394">"idatha yeselula"</item>
+ <item msgid="75483255295529161">"I-Wi-Fi"</item>
+ <item msgid="6862614801537202646">"I-Bluetooth"</item>
+ <item msgid="5447331121797802871">"I-Ethernet"</item>
+ <item msgid="8257233890381651999">"I-VPN"</item>
+ </string-array>
+ <string name="network_switch_type_name_unknown" msgid="4552612897806660656">"uhlobo olungaziwa lwenethiwekhi"</string>
<string name="wifi_watchdog_network_disabled" msgid="7904214231651546347">"Ayikwazanga ukuxhuma kwi-Wi-Fi"</string>
<string name="wifi_watchdog_network_disabled_detailed" msgid="5548780776418332675">" inoxhumano oluphansi lwe-inthanethi."</string>
<string name="wifi_connect_alert_title" msgid="8455846016001810172">"Vumela ukuxhumeka?"</string>
diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml
index 0c08564..0561131 100644
--- a/core/res/res/values/attrs.xml
+++ b/core/res/res/values/attrs.xml
@@ -2057,6 +2057,8 @@
<!-- Controller for micro specific layout. -->
<enum name="micro" value="1" />
</attr>
+ <!-- @hide Offset when scrolling to a selection. -->
+ <attr name="selectionScrollOffset" format="dimension" />
</declare-styleable>
<!-- @hide -->
@@ -2633,10 +2635,11 @@
<enum name="viewEnd" value="6" />
</attr>
- <!-- Controls how this View is important for accessibility which is if it fires
- accessibility events and if it is reported to accessibility services that
- query the screen. Note: While not recommended, an accessibility service may
- decide to ignore this attribute and operate on all views in the view tree. -->
+ <!-- Describes whether or not this view is important for accessibility.
+ If it is important, the view fires accessibility events and is
+ reported to accessibility services that query the screen. Note:
+ While not recommended, an accessibility service may decide to
+ ignore this attribute and operate on all views in the view tree. -->
<attr name="importantForAccessibility" format="integer">
<!-- The system determines whether the view is important for accessibility - default
(recommended). -->
@@ -5312,6 +5315,21 @@
<attr name="alpha" />
</declare-styleable>
+ <!-- Drawable used to render according to the animation scale. Esp. when it is 0 due to battery
+ saver mode. It should contain one animatable drawable and one static drawable.
+ @hide -->
+ <declare-styleable name="AnimationScaleListDrawable">
+ </declare-styleable>
+
+ <!-- Attributes that can be assigned to a AnimationScaleListDrawable item.
+ @hide -->
+ <declare-styleable name="AnimationScaleListDrawableItem">
+ <!-- Reference to a drawable resource to use for the state. If not
+ given, the drawable must be defined by the first child tag. -->
+ <attr name="drawable" />
+ </declare-styleable>
+
+
<!-- Drawable used to render a geometric shape, with a gradient or a solid color. -->
<declare-styleable name="GradientDrawable">
<!-- Indicates whether the drawable should intially be visible. -->
@@ -5341,7 +5359,10 @@
<attr name="innerRadius" format="dimension" />
<!-- Thickness of the ring. When defined, thicknessRatio is ignored. -->
<attr name="thickness" format="dimension" />
- <!-- Indicates whether the drawable's level affects the way the gradient is drawn. -->
+ <!-- Whether the drawable level value (see
+ {@link android.graphics.drawable.Drawable#getLevel()}) is used to scale the shape.
+ Scaling behavior depends on the shape type. For "ring", the angle is scaled from 0 to
+ 360. For all other types, there is no effect. The default value is true. -->
<attr name="useLevel" />
<!-- If set, specifies the color to apply to the drawable as a tint. By default,
no tint is applied. May be a color state list. -->
@@ -5375,28 +5396,37 @@
<declare-styleable name="GradientDrawableGradient">
<!-- Start color of the gradient. -->
<attr name="startColor" format="color" />
- <!-- Optional center color. For linear gradients, use centerX or centerY
- to place the center color. -->
+ <!-- Optional center color. For linear gradients, use centerX or centerY to place the center
+ color. -->
<attr name="centerColor" format="color" />
<!-- End color of the gradient. -->
<attr name="endColor" format="color" />
+ <!-- Whether the drawable level value (see
+ {@link android.graphics.drawable.Drawable#getLevel()}) is used to scale the gradient.
+ Scaling behavior varies based on gradient type. For "linear", adjusts the ending
+ position along the gradient's axis of orientation. For "radial", adjusts the outer
+ radius. For "sweep", adjusts the ending angle. The default value is false. -->
<attr name="useLevel" format="boolean" />
- <!-- Angle of the gradient. -->
+ <!-- Angle of the gradient, used only with linear gradient. Must be a multiple of 45 in the
+ range [0, 315]. -->
<attr name="angle" format="float" />
<!-- Type of gradient. The default type is linear. -->
<attr name="type">
- <!-- Linear gradient. -->
+ <!-- Linear gradient extending across the center point. -->
<enum name="linear" value="0" />
- <!-- Radial, or circular, gradient. -->
+ <!-- Radial gradient extending from the center point outward. -->
<enum name="radial" value="1" />
- <!-- Sweep, or angled or diamond, gradient. -->
+ <!-- Sweep (or angular) gradient sweeping counter-clockwise around the center point. -->
<enum name="sweep" value="2" />
</attr>
- <!-- X coordinate of the origin of the gradient within the shape. -->
+ <!-- X-position of the center point of the gradient within the shape as a fraction of the
+ width. The default value is 0.5. -->
<attr name="centerX" format="float|fraction" />
- <!-- Y coordinate of the origin of the gradient within the shape. -->
+ <!-- Y-position of the center point of the gradient within the shape as a fraction of the
+ height. The default value is 0.5. -->
<attr name="centerY" format="float|fraction" />
- <!-- Radius of the gradient, used only with radial gradient. -->
+ <!-- Radius of the gradient, used only with radial gradient. May be an explicit dimension
+ or a fractional value relative to the shape's minimum dimension. -->
<attr name="gradientRadius" format="float|fraction|dimension" />
</declare-styleable>
diff --git a/core/res/res/values/colors_material.xml b/core/res/res/values/colors_material.xml
index a864cf3..92426c6 100644
--- a/core/res/res/values/colors_material.xml
+++ b/core/res/res/values/colors_material.xml
@@ -61,7 +61,10 @@
<color name="secondary_text_default_material_dark">#b3ffffff</color>
<item name="hint_alpha_material_dark" format="float" type="dimen">0.50</item>
- <item name="hint_alpha_material_light" format="float" type="dimen">0.54</item>
+ <item name="hint_alpha_material_light" format="float" type="dimen">0.38</item>
+
+ <item name="hint_pressed_alpha_material_dark" format="float" type="dimen">0.70</item>
+ <item name="hint_pressed_alpha_material_light" format="float" type="dimen">0.54</item>
<item name="disabled_alpha_material_light" format="float" type="dimen">0.26</item>
<item name="disabled_alpha_material_dark" format="float" type="dimen">0.30</item>
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 2835c6f..2b8cc98 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -202,7 +202,7 @@
<!-- The threshold angle for any motion detection in auto-power save modes.
In hundreths of a degree. -->
- <integer name="config_autoPowerModeThresholdAngle">200</integer>
+ <integer name="config_autoPowerModeThresholdAngle">10</integer>
<!-- The sensor id of an "any motion" sensor used in auto-power save modes.
0 indicates this sensor is not available. -->
@@ -268,6 +268,13 @@
<!-- The maximum duration (in milliseconds) we expect a network transition to take -->
<integer name="config_networkTransitionTimeout">60000</integer>
+ <!-- Whether/how to notify the user on network switches. See LingerMonitor.java. -->
+ <integer translatable="false" name="config_networkNotifySwitchType">0</integer>
+
+ <!-- What types of network switches to notify. See LingerMonitor.java. -->
+ <string-array translatable="false" name="config_networkNotifySwitches">
+ </string-array>
+
<!-- List of regexpressions describing the interface (if any) that represent tetherable
USB interfaces. If the device doesn't want to support tethering over USB this should
be empty. An example would be "usb.*" -->
@@ -539,9 +546,12 @@
Software implementation will be used if config_hardware_auto_brightness_available is not set -->
<bool name="config_automatic_brightness_available">false</bool>
- <!-- Fast brightness animation ramp rate -->
+ <!-- Fast brightness animation ramp rate in brightness units per second-->
<integer translatable="false" name="config_brightness_ramp_rate_fast">200</integer>
+ <!-- Slow brightness animation ramp rate in brightness units per second-->
+ <integer translatable="false" name="config_brightness_ramp_rate_slow">40</integer>
+
<!-- Don't name config resources like this. It should look like config_annoyDianne -->
<bool name="config_annoy_dianne">true</bool>
@@ -796,6 +806,12 @@
-->
<integer name="config_longPressOnBackBehavior">0</integer>
+ <!-- Control the behavior when the user panic presses the back button.
+ 0 - Nothing
+ 1 - Go to home
+ -->
+ <integer name="config_backPanicBehavior">0</integer>
+
<!-- Control the behavior when the user short presses the power button.
0 - Nothing
1 - Go to sleep (doze)
@@ -1123,6 +1139,40 @@
<integer-array name="config_autoBrightnessKeyboardBacklightValues">
</integer-array>
+ <!-- Array of hysteresis constraint values for brightening, represented as tenths of a
+ percent. The length of this array is assumed to be one greater than
+ config_dynamicHysteresisLuxLevels. The brightening threshold is calculated as
+ lux * (1.0f + CONSTRAINT_VALUE). When the current lux is higher than this threshold,
+ the screen brightness is recalculated. See the config_dynamicHysteresisLuxLevels
+ description for how the constraint value is chosen. -->
+ <integer-array name="config_dynamicHysteresisBrightLevels">
+ <item>100</item>
+ </integer-array>
+
+ <!-- Array of hysteresis constraint values for darkening, represented as tenths of a
+ percent. The length of this array is assumed to be one greater than
+ config_dynamicHysteresisLuxLevels. The darkening threshold is calculated as
+ lux * (1.0f - CONSTRAINT_VALUE). When the current lux is lower than this threshold,
+ the screen brightness is recalculated. See the config_dynamicHysteresisLuxLevels
+ description for how the constraint value is chosen. -->
+ <integer-array name="config_dynamicHysteresisDarkLevels">
+ <item>200</item>
+ </integer-array>
+
+ <!-- Array of ambient lux threshold values. This is used for determining hysteresis constraint
+ values by calculating the index to use for lookup and then setting the constraint value
+ to the corresponding value of the array. The new brightening hysteresis constraint value
+ is the n-th element of config_dynamicHysteresisBrightLevels, and the new darkening
+ hysteresis constraint value is the n-th element of config_dynamicHysteresisDarkLevels.
+
+ The (zero-based) index is calculated as follows: (MAX is the largest index of the array)
+ condition calculated index
+ value < lux[0] 0
+ lux[n] <= value < lux[n+1] n+1
+ lux[MAX] <= value MAX+1 -->
+ <integer-array name="config_dynamicHysteresisLuxLevels">
+ </integer-array>
+
<!-- Amount of time it takes for the light sensor to warm up in milliseconds.
For this time after the screen turns on, the Power Manager
will not debounce light sensor readings -->
@@ -1744,6 +1794,10 @@
<!-- Amount of time in ms the user needs to press the relevant key to bring up the global actions dialog -->
<integer name="config_globalActionsKeyTimeout">500</integer>
+ <!-- Distance that should be scrolled in response to a {@link MotionEvent#ACTION_SCROLL event}
+ with an axis value of 1. -->
+ <dimen name="config_scrollFactor">64dp</dimen>
+
<!-- Maximum number of grid columns permitted in the ResolverActivity
used for picking activities to handle an intent. -->
<integer name="config_maxResolverActivityColumns">3</integer>
@@ -2071,9 +2125,11 @@
"bugreport" = Take bug report, if available
"silent" = silent mode
"users" = list of users
+ "restart" = restart device
-->
<string-array translatable="false" name="config_globalActionsList">
<item>power</item>
+ <item>restart</item>
<item>bugreport</item>
<item>users</item>
</string-array>
@@ -2144,6 +2200,11 @@
<!-- Flag specifying whether VT is available on device -->
<bool name="config_device_vt_available">false</bool>
+ <!-- Flag specifying whether the device will use the "allow_hold_in_ims_call" carrier config
+ option. When false, the device will support holding of IMS calls, regardless of the
+ carrier config setting. -->
+ <bool name="config_device_respects_hold_carrier_config">true</bool>
+
<!-- Flag specifying whether VT should be available for carrier: independent of
carrier provisioning. If false: hard disabled. If true: then depends on carrier
provisioning, availability etc -->
@@ -2286,8 +2347,8 @@
<!-- An array of CDMA roaming indicators which means international roaming -->
<integer-array translatable="false" name="config_cdma_international_roaming_indicators" />
- <!-- set the system language as value of EF LI/EF PL -->
- <bool name="config_use_sim_language_file">true</bool>
+ <!-- flag to indicate if EF LI/EF PL should be used for system language -->
+ <bool name="config_use_sim_language_file">false</bool>
<!-- Use ERI text for network name on CDMA LTE -->
<bool name="config_LTE_eri_for_network_name">true</bool>
@@ -2500,6 +2561,10 @@
<!-- Flag indicating whether round icons should be parsed from the application manifest. -->
<bool name="config_useRoundIcon">false</bool>
+ <!-- Flag indicating whether the assist disclosure can be disabled using
+ ASSIST_DISCLOSURE_ENABLED. -->
+ <bool name="config_allowDisablingAssistDisclosure">false</bool>
+
<!-- True if the device supports system navigation keys. -->
<bool name="config_supportSystemNavigationKeys">false</bool>
@@ -2513,4 +2578,21 @@
Note: Also update appropriate overlay files. -->
<string-array translatable="false" name="config_defaultFirstUserRestrictions">
</string-array>
+
+ <!-- Default value for android:focusableInTouchMode for some framework scrolling containers.
+ ListView/GridView are notably absent since this is their default anyway.
+ Set to true for watch devices. -->
+ <bool name="config_focusScrollContainersInTouchMode">false</bool>
+
+ <string name="config_networkOverLimitComponent" translatable="false">com.android.systemui/com.android.systemui.net.NetworkOverLimitActivity</string>
+ <string name="config_dataUsageSummaryComponent" translatable="false">com.android.settings/com.android.settings.Settings$DataUsageSummaryActivity</string>
+
+ <!-- A array of regex to treat a SMS as VVM SMS if the message body matches.
+ Each item represents an entry, which consists of two parts:
+ a comma (,) separated list of MCCMNC the regex applies to, followed by a semicolon (;), and
+ then the regex itself. -->
+ <string-array translatable="false" name="config_vvmSmsFilterRegexes">
+ <!-- Verizon requires any SMS that starts with //VZWVVM to be treated as a VVM SMS-->
+ <item>310004,310010,310012,310013,310590,310890,310910,311110,311270,311271,311272,311273,311274,311275,311276,311277,311278,311279,311280,311281,311282,311283,311284,311285,311286,311287,311288,311289,311390,311480,311481,311482,311483,311484,311485,311486,311487,311488,311489;^//VZWVVM.*</item>
+ </string-array>
</resources>
diff --git a/core/res/res/values/config_material.xml b/core/res/res/values/config_material.xml
index a37be83..29494db 100644
--- a/core/res/res/values/config_material.xml
+++ b/core/res/res/values/config_material.xml
@@ -32,9 +32,9 @@
<!-- True if windowOverscan should be on by default. -->
<bool name="config_windowOverscanByDefault">false</bool>
- <!-- Max number of lines for the dialog title. -->
- <integer name="config_dialogWindowTitleMaxLines">1</integer>
-
<!-- True if preference fragment should clip to padding. -->
<bool name="config_preferenceFragmentClipToPadding">true</bool>
+
+ <!-- The amount to offset when scrolling to a selection in an AlertDialog -->
+ <dimen name="config_alertDialogSelectionScrollOffset">0dp</dimen>
</resources>
diff --git a/core/res/res/values/dimens_material.xml b/core/res/res/values/dimens_material.xml
index f96cef9..ae31165 100644
--- a/core/res/res/values/dimens_material.xml
+++ b/core/res/res/values/dimens_material.xml
@@ -189,4 +189,8 @@
<dimen name="day_picker_button_margin_top">0dp</dimen>
<dimen name="datepicker_view_animator_height">226dp</dimen>
+
+ <!-- Date and time picker legacy dimens -->
+ <dimen name="picker_top_margin">16dip</dimen>
+ <dimen name="picker_bottom_margin">16dip</dimen>
</resources>
diff --git a/core/res/res/values/integers.xml b/core/res/res/values/integers.xml
index 71ac2f4..2b69c75b 100644
--- a/core/res/res/values/integers.xml
+++ b/core/res/res/values/integers.xml
@@ -26,5 +26,12 @@
<integer name="date_picker_mode">1</integer>
<integer name="time_picker_mode">1</integer>
+
+ <!-- Specifies date picker mode to be 'calendar' -->
+ <integer name="date_picker_mode_material">2</integer>
+
+ <!-- Specifies time picker mode to be 'clock' -->
+ <integer name="time_picker_mode_material">2</integer>
+
<integer name="date_picker_header_max_lines_material">2</integer>
</resources>
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 8d3cd48..6649aef 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -482,6 +482,10 @@
<!-- label for item that turns off power in phone options dialog -->
<string name="global_action_power_off">Power off</string>
+ <!-- label for item that restarts phone in phone options dialog -->
+ <!-- TODO: promote to separate string-->
+ <string name="global_action_restart" translatable="false">@string/sim_restart_button</string>
+
<!-- label for item that generates a bug report in the phone options dialog -->
<string name="global_action_bug_report">Bug report</string>
@@ -1953,7 +1957,7 @@
<string name="lockscreen_access_pattern_cleared">Pattern cleared</string>
<!-- Accessibility description sent when user adds a dot to the pattern. [CHAR LIMIT=NONE] -->
<string name="lockscreen_access_pattern_cell_added">Cell added</string>
- <!-- Accessibility description sent when user adds a dot to the pattern. Announces the
+ <!-- Accessibility description sent when user adds a dot to the pattern. Announces the
actual cell when headphones are connected [CHAR LIMIT=NONE] -->
<string name="lockscreen_access_pattern_cell_added_verbose">
Cell <xliff:g id="cell_index" example="3">%1$s</xliff:g> added</string>
@@ -2033,6 +2037,12 @@
<!-- Button to restart the device after the factory test. -->
<string name="factorytest_reboot">Reboot</string>
+ <!-- Do not translate. timepicker mode, overridden for watch -->
+ <string name="time_picker_mode" translatable="false">"clock"</string>
+
+ <!-- Do not translate. datepicker mode, overridden for watch -->
+ <string name="date_picker_mode" translatable="false">"calendar"</string>
+
<!-- Do not translate. WebView User Agent string -->
<string name="web_user_agent" translatable="false">Mozilla/5.0 (Linux; U; <xliff:g id="x">Android %s</xliff:g>)
AppleWebKit/534.30 (KHTML, like Gecko) Version/4.0 <xliff:g id="mobile">%s</xliff:g>Safari/534.30</string>
@@ -2925,6 +2935,27 @@
<!-- A notification is shown when the user connects to a Wi-Fi network and the system detects that that network has no Internet access. This is the notification's message. -->
<string name="wifi_no_internet_detailed">Tap for options</string>
+ <!-- A notification might be shown if the device switches to another network type (e.g., cellular data) because it detects that the network it was using (e.g., Wi-Fi) has lost Internet connectivity. This is the notification's title. %1$s is the network type that the device switched to, e.g., cellular data. It is one of the strings in the network_switch_type_name array. -->
+ <string name="network_switch_metered">Switched to <xliff:g id="network_type">%1$s</xliff:g></string>
+
+ <!-- A notification might be shown if the device switches to another network type (e.g., cellular data) because it detects that the network it was using (e.g., Wi-Fi) has lost Internet connectivity. This is the notification's message. %1$s is the network that the device switched to, e.g., cellular data. %2$s is the network type the device switched from, e.g., Wi-Fi. Both are strings in the network_switch_type_name array. -->
+ <string name="network_switch_metered_detail">Device uses <xliff:g id="new_network">%1$s</xliff:g> when <xliff:g id="previous_network">%2$s</xliff:g> has no Internet access. Charges may apply.</string>
+
+ <!-- A toast might be shown if the device switches to another network type (e.g., cellular data) because it detects that the network it was using (e.g., Wi-Fi) has lost Internet connectivity. This is the text of the toast. %1$s is the network that the device switched from, e.g., Wi-Fi. %2$s is the network type the device switched from, e.g., cellular data. Both are strings in the network_switch_type_name array. -->
+ <string name="network_switch_metered_toast">Switched from <xliff:g id="previous_network">%1$s</xliff:g> to <xliff:g id="new_network">%2$s</xliff:g></string>
+
+ <!-- Network type names used in the network_switch_metered and network_switch_metered_detail strings. These must be kept in the sync with the values NetworkCapabilities.TRANSPORT_xxx values, and in the same order. -->
+ <string-array name="network_switch_type_name">
+ <item>cellular data</item>
+ <item>Wi-Fi</item>
+ <item>Bluetooth</item>
+ <item>Ethernet</item>
+ <item>VPN</item>
+ </string-array>
+
+ <!-- Network type name displayed if one of the types is not found in network_switch_type_name. -->
+ <string name="network_switch_type_name_unknown">an unknown network type</string>
+
<!-- A notification is shown when a user's selected SSID is later disabled due to connectivity problems. This is the notification's title / ticker. -->
<string name="wifi_watchdog_network_disabled">Couldn\'t connect to Wi-Fi</string>
<!-- A notification is shown when a user's selected SSID is later disabled due to connectivity problems. The complete alert msg is: <hotspot name> + this string, i.e. "Linksys has a poor internet connection" -->
@@ -3301,10 +3332,12 @@
<string name="vpn_lockdown_connecting">Always-on VPN connecting\u2026</string>
<!-- Notification title when connected to lockdown VPN. -->
<string name="vpn_lockdown_connected">Always-on VPN connected</string>
+ <!-- Notification title when not connected to lockdown VPN. -->
+ <string name="vpn_lockdown_disconnected">Always-on VPN disconnected</string>
<!-- Notification title when error connecting to lockdown VPN. -->
<string name="vpn_lockdown_error">Always-on VPN error</string>
<!-- Notification body that indicates user can touch to configure lockdown VPN connection. -->
- <string name="vpn_lockdown_config">Tap to configure</string>
+ <string name="vpn_lockdown_config">Tap to set up</string>
<!-- Localized strings for WebView -->
<!-- Label for button in a WebView that will open a chooser to choose a file to upload -->
@@ -4332,6 +4365,9 @@
<string name="language_picker_section_suggested">Suggested</string>
<!-- List section subheader for the language picker, containing a list of all languages available [CHAR LIMIT=30] -->
<string name="language_picker_section_all">All languages</string>
+ <!-- List section subheader for the region picker, containing a list of all regions supported for the selected language.
+ Warning: this is a more 'neutral' term for 'country', not for the sub-divisions of a country. [CHAR LIMIT=30] -->
+ <string name="region_picker_section_all">All regions</string>
<!-- Menu item in the locale menu [CHAR LIMIT=30] -->
<string name="locale_search_menu">Search</string>
diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml
index 762cf31..937428b 100644
--- a/core/res/res/values/styles.xml
+++ b/core/res/res/values/styles.xml
@@ -649,11 +649,13 @@
<style name="Widget.ScrollView">
<item name="scrollbars">vertical</item>
<item name="fadingEdge">vertical</item>
+ <item name="focusableInTouchMode">@bool/config_focusScrollContainersInTouchMode</item>
</style>
<style name="Widget.HorizontalScrollView">
<item name="scrollbars">horizontal</item>
<item name="fadingEdge">horizontal</item>
+ <item name="focusableInTouchMode">@bool/config_focusScrollContainersInTouchMode</item>
</style>
<style name="Widget.ListView" parent="Widget.AbsListView">
diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml
index 4435537..224e3b7 100644
--- a/core/res/res/values/styles_material.xml
+++ b/core/res/res/values/styles_material.xml
@@ -255,6 +255,8 @@
<item name="textColor">?attr/textColorPrimary</item>
</style>
+ <style name="TextAppearance.Material.NumberPicker" parent="TextAppearance.Material.Body1"/>
+
<!-- Deprecated text styles -->
<style name="TextAppearance.Material.Inverse">
@@ -475,6 +477,9 @@
<item name="textColor">#66000000</item>
</style>
+ <style name="TextAppearance.Material.ListItem" parent="TextAppearance.Material.Subhead" />
+ <style name="TextAppearance.Material.ListItemSecondary" parent="TextAppearance.Material.Body1" />
+
<style name="Widget.Material.Notification.ProgressBar" parent="Widget.Material.Light.ProgressBar.Horizontal" />
<style name="Widget.Material.Notification.MessagingText" parent="Widget.Material.Light.TextView">
@@ -684,7 +689,7 @@
</style>
<style name="Widget.Material.TimePicker">
- <item name="timePickerMode">clock</item>
+ <item name="timePickerMode">@integer/time_picker_mode_material</item>
<item name="legacyLayout">@layout/time_picker_legacy_material</item>
<!-- Attributes for new-style TimePicker. -->
<item name="internalLayout">@layout/time_picker_material</item>
@@ -698,7 +703,7 @@
</style>
<style name="Widget.Material.DatePicker">
- <item name="datePickerMode">calendar</item>
+ <item name="datePickerMode">@integer/date_picker_mode_material</item>
<item name="legacyLayout">@layout/date_picker_legacy_holo</item>
<item name="calendarViewShown">true</item>
<!-- Attributes for new-style DatePicker. -->
@@ -1208,6 +1213,7 @@
<item name="multiChoiceItemLayout">@layout/select_dialog_multichoice_material</item>
<item name="singleChoiceItemLayout">@layout/select_dialog_singlechoice_material</item>
<item name="controllerType">@integer/config_alertDialogController</item>
+ <item name="selectionScrollOffset">@dimen/config_alertDialogSelectionScrollOffset</item>
</style>
<style name="AlertDialog.Material.Light" />
@@ -1246,7 +1252,7 @@
<style name="DialogWindowTitleBackground.Material.Light" />
<style name="DialogWindowTitle.Material">
- <item name="maxLines">@integer/config_dialogWindowTitleMaxLines</item>
+ <item name="maxLines">1</item>
<item name="scrollHorizontally">true</item>
<item name="textAppearance">@style/TextAppearance.Material.DialogWindowTitle</item>
</style>
diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml
index 2a40c08..64814e4 100644
--- a/core/res/res/values/symbols.xml
+++ b/core/res/res/values/symbols.xml
@@ -375,6 +375,7 @@
<java-symbol type="integer" name="config_immersive_mode_confirmation_panic" />
<java-symbol type="integer" name="config_longPressOnPowerBehavior" />
<java-symbol type="integer" name="config_longPressOnBackBehavior" />
+ <java-symbol type="integer" name="config_backPanicBehavior" />
<java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAdjust" />
<java-symbol type="integer" name="config_lowMemoryKillerMinFreeKbytesAbsolute" />
<java-symbol type="integer" name="config_max_pan_devices" />
@@ -415,6 +416,7 @@
<java-symbol type="dimen" name="config_viewConfigurationTouchSlop" />
<java-symbol type="dimen" name="config_viewMinFlingVelocity" />
<java-symbol type="dimen" name="config_viewMaxFlingVelocity" />
+ <java-symbol type="dimen" name="config_scrollFactor" />
<java-symbol type="dimen" name="default_app_widget_padding_bottom" />
<java-symbol type="dimen" name="default_app_widget_padding_left" />
<java-symbol type="dimen" name="default_app_widget_padding_right" />
@@ -947,6 +949,11 @@
<java-symbol type="string" name="wifi_available_sign_in" />
<java-symbol type="string" name="network_available_sign_in" />
<java-symbol type="string" name="network_available_sign_in_detailed" />
+ <java-symbol type="string" name="network_switch_metered" />
+ <java-symbol type="string" name="network_switch_metered_detail" />
+ <java-symbol type="string" name="network_switch_metered_toast" />
+ <java-symbol type="array" name="network_switch_type_name" />
+ <java-symbol type="string" name="network_switch_type_name_unknown" />
<java-symbol type="string" name="wifi_no_internet" />
<java-symbol type="string" name="wifi_no_internet_detailed" />
<java-symbol type="string" name="wifi_connect_alert_title" />
@@ -1402,7 +1409,6 @@
<java-symbol type="raw" name="color_fade_vert" />
<java-symbol type="raw" name="color_fade_frag" />
<java-symbol type="raw" name="accessibility_gestures" />
- <java-symbol type="raw" name="incognito_mode_start_page" />
<java-symbol type="raw" name="loaderror" />
<java-symbol type="raw" name="nodomain" />
@@ -1454,6 +1460,7 @@
<java-symbol type="anim" name="dock_top_exit" />
<java-symbol type="anim" name="dock_bottom_enter" />
<java-symbol type="anim" name="dock_bottom_exit" />
+ <java-symbol type="anim" name="dock_bottom_exit_keyguard" />
<java-symbol type="anim" name="dock_left_enter" />
<java-symbol type="anim" name="dock_left_exit" />
<java-symbol type="anim" name="dock_right_enter" />
@@ -1589,6 +1596,7 @@
<java-symbol type="string" name="bugreport_title" />
<java-symbol type="string" name="faceunlock_multiple_failures" />
<java-symbol type="string" name="global_action_power_off" />
+ <java-symbol type="string" name="global_action_restart" />
<java-symbol type="string" name="global_actions_airplane_mode_off_status" />
<java-symbol type="string" name="global_actions_airplane_mode_on_status" />
<java-symbol type="string" name="global_actions_toggle_airplane_mode" />
@@ -1637,6 +1645,9 @@
<java-symbol type="array" name="config_autoBrightnessKeyboardBacklightValues" />
<java-symbol type="array" name="config_autoBrightnessLcdBacklightValues" />
<java-symbol type="array" name="config_autoBrightnessLevels" />
+ <java-symbol type="array" name="config_dynamicHysteresisBrightLevels" />
+ <java-symbol type="array" name="config_dynamicHysteresisDarkLevels" />
+ <java-symbol type="array" name="config_dynamicHysteresisLuxLevels" />
<java-symbol type="array" name="config_protectedNetworks" />
<java-symbol type="array" name="config_statusBarIcons" />
<java-symbol type="array" name="config_tether_bluetooth_regexs" />
@@ -1738,6 +1749,8 @@
<java-symbol type="integer" name="config_lowBatteryWarningLevel" />
<java-symbol type="integer" name="config_networkPolicyDefaultWarning" />
<java-symbol type="integer" name="config_networkTransitionTimeout" />
+ <java-symbol type="integer" name="config_networkNotifySwitchType" />
+ <java-symbol type="array" name="config_networkNotifySwitches" />
<java-symbol type="integer" name="config_notificationsBatteryFullARGB" />
<java-symbol type="integer" name="config_notificationsBatteryLedOff" />
<java-symbol type="integer" name="config_notificationsBatteryLedOn" />
@@ -1756,6 +1769,7 @@
<java-symbol type="integer" name="config_undockedHdmiRotation" />
<java-symbol type="integer" name="config_virtualKeyQuietTimeMillis" />
<java-symbol type="integer" name="config_brightness_ramp_rate_fast" />
+ <java-symbol type="integer" name="config_brightness_ramp_rate_slow" />
<java-symbol type="layout" name="am_compat_mode_dialog" />
<java-symbol type="layout" name="launch_warning" />
<java-symbol type="layout" name="safe_mode" />
@@ -1860,6 +1874,7 @@
<java-symbol type="string" name="vpn_title_long" />
<java-symbol type="string" name="vpn_lockdown_connecting" />
<java-symbol type="string" name="vpn_lockdown_connected" />
+ <java-symbol type="string" name="vpn_lockdown_disconnected" />
<java-symbol type="string" name="vpn_lockdown_error" />
<java-symbol type="string" name="vpn_lockdown_config" />
<java-symbol type="string" name="wallpaper_binding_label" />
@@ -1934,6 +1949,7 @@
<java-symbol type="anim" name="lock_screen_behind_enter_fade_in" />
<java-symbol type="anim" name="lock_screen_wallpaper_exit" />
<java-symbol type="anim" name="launch_task_behind_source" />
+ <java-symbol type="anim" name="wallpaper_open_exit" />
<java-symbol type="bool" name="config_alwaysUseCdmaRssi" />
<java-symbol type="dimen" name="status_bar_icon_size" />
@@ -2203,6 +2219,7 @@
<java-symbol type="bool" name="config_carrier_volte_provisioned" />
<java-symbol type="bool" name="config_carrier_volte_tty_supported" />
<java-symbol type="bool" name="config_device_vt_available" />
+ <java-symbol type="bool" name="config_device_respects_hold_carrier_config" />
<java-symbol type="bool" name="config_carrier_vt_available" />
<java-symbol type="bool" name="config_device_wfc_ims_available" />
<java-symbol type="bool" name="config_carrier_wfc_ims_available" />
@@ -2265,6 +2282,8 @@
<java-symbol type="string" name="prohibit_manual_network_selection_in_gobal_mode" />
<java-symbol type="id" name="profile_button" />
+ <java-symbol type="array" name="config_vvmSmsFilterRegexes" />
+
<!-- Cascading submenus -->
<java-symbol type="dimen" name="cascading_menus_min_smallest_width" />
@@ -2494,6 +2513,7 @@
<java-symbol type="menu" name="language_selection_list" />
<java-symbol type="string" name="country_selection_title" />
<java-symbol type="string" name="language_picker_section_all" />
+ <java-symbol type="string" name="region_picker_section_all" />
<java-symbol type="string" name="language_picker_section_suggested" />
<java-symbol type="string" name="language_selection_title" />
<java-symbol type="string" name="search_language_hint" />
@@ -2646,6 +2666,10 @@
<!-- Colon separated list of package names that should be granted DND access -->
<java-symbol type="string" name="config_defaultDndAccessPackages" />
+ <!-- For NetworkPolicyManagerService -->
+ <java-symbol type="string" name="config_networkOverLimitComponent" />
+ <java-symbol type="string" name="config_dataUsageSummaryComponent" />
+
<java-symbol type="string" name="lockscreen_storage_locked" />
<!-- Used for MimeIconUtils. -->
@@ -2674,10 +2698,14 @@
<java-symbol type="drawable" name="ic_doc_generic" />
<java-symbol type="bool" name="config_nightDisplayAvailable" />
+ <java-symbol type="bool" name="config_allowDisablingAssistDisclosure" />
<java-symbol type="integer" name="config_defaultNightDisplayAutoMode" />
<java-symbol type="integer" name="config_defaultNightDisplayCustomStartTime" />
<java-symbol type="integer" name="config_defaultNightDisplayCustomEndTime" />
<!-- Default first user restrictions -->
<java-symbol type="array" name="config_defaultFirstUserRestrictions" />
+
+ <java-symbol type="drawable" name="ic_restart" />
+
</resources>
diff --git a/core/res/res/values/themes_material.xml b/core/res/res/values/themes_material.xml
index 7e2867d..0eb4c8d 100644
--- a/core/res/res/values/themes_material.xml
+++ b/core/res/res/values/themes_material.xml
@@ -114,9 +114,9 @@
<item name="listPreferredItemHeightSmall">48dip</item>
<item name="listPreferredItemHeightLarge">80dip</item>
<item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <item name="textAppearanceListItem">@style/TextAppearance.Material.Subhead</item>
- <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.Subhead</item>
- <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.Body1</item>
+ <item name="textAppearanceListItem">@style/TextAppearance.Material.ListItem</item>
+ <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.ListItem</item>
+ <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.ListItemSecondary</item>
<item name="listPreferredItemPaddingLeft">@dimen/list_item_padding_horizontal_material</item>
<item name="listPreferredItemPaddingRight">@dimen/list_item_padding_horizontal_material</item>
<item name="listPreferredItemPaddingStart">@dimen/list_item_padding_start_material</item>
@@ -475,9 +475,9 @@
<item name="listPreferredItemHeightSmall">48dip</item>
<item name="listPreferredItemHeightLarge">80dip</item>
<item name="dropdownListPreferredItemHeight">?attr/listPreferredItemHeightSmall</item>
- <item name="textAppearanceListItem">@style/TextAppearance.Material.Subhead</item>
- <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.Subhead</item>
- <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.Body1</item>
+ <item name="textAppearanceListItem">@style/TextAppearance.Material.ListItem</item>
+ <item name="textAppearanceListItemSmall">@style/TextAppearance.Material.ListItem</item>
+ <item name="textAppearanceListItemSecondary">@style/TextAppearance.Material.ListItemSecondary</item>
<item name="listPreferredItemPaddingLeft">@dimen/list_item_padding_horizontal_material</item>
<item name="listPreferredItemPaddingRight">@dimen/list_item_padding_horizontal_material</item>
<item name="listPreferredItemPaddingStart">@dimen/list_item_padding_start_material</item>
diff --git a/core/res/res/xml-watch/default_zen_mode_config.xml b/core/res/res/xml-watch/default_zen_mode_config.xml
index 26af10c..938cc0c 100644
--- a/core/res/res/xml-watch/default_zen_mode_config.xml
+++ b/core/res/res/xml-watch/default_zen_mode_config.xml
@@ -17,8 +17,8 @@
<!-- Default configuration for zen mode. See android.service.notification.ZenModeConfig. -->
<zen version="2">
- <!-- Allow starred contacts to go through only. Repeated calls on.
- Calls, messages, reminders, events off.-->
- <allow from="2" repeatCallers="true" calls="false" messages="false" reminders="false"
+ <!-- Allow starred contacts to go through only.
+ Repeated calls, calls, messages, reminders, events off. -->
+ <allow from="2" repeatCallers="false" calls="false" messages="false" reminders="false"
events="false"/>
</zen>
diff --git a/core/res/res/xml/sms_short_codes.xml b/core/res/res/xml/sms_short_codes.xml
index c02a01a..b357016 100644
--- a/core/res/res/xml/sms_short_codes.xml
+++ b/core/res/res/xml/sms_short_codes.xml
@@ -78,7 +78,7 @@
<shortcode country="cz" premium="9\\d{6,7}" free="116\\d{3}" />
<!-- Germany: 4-5 digits plus 1232xxx (premium codes from http://www.vodafone.de/infofaxe/537.pdf and http://premiumdienste.eplus.de/pdf/kodex.pdf), plus EU. To keep the premium regex from being too large, it only includes payment processors that have been used by SMS malware, with the regular pattern matching the other premium short codes. -->
- <shortcode country="de" pattern="\\d{4,5}|1232\\d{3}" premium="11(?:111|833)|1232(?:013|021|060|075|286|358)|118(?:44|80|86)|20[25]00|220(?:21|22|88|99)|221(?:14|21)|223(?:44|53|77)|224[13]0|225(?:20|59|90)|226(?:06|10|20|26|30|40|56|70)|227(?:07|33|39|66|76|78|79|88|99)|228(?:08|11|66|77)|23300|30030|3[12347]000|330(?:33|55|66)|33(?:233|331|366|533)|34(?:34|567)|37000|40(?:040|123|444|[3568]00)|41(?:010|414)|44(?:000|044|344|44[24]|544)|50005|50100|50123|50555|51000|52(?:255|783)|54(?:100|2542)|55(?:077|[24]00|222|333|55|[12369]55)|56(?:789|886)|60800|6[13]000|66(?:[12348]66|566|766|777|88|999)|68888|70(?:07|123|777)|76766|77(?:007|070|222|444|[567]77)|80(?:008|123|888)|82(?:002|[378]00|323|444|472|474|488|727)|83(?:005|[169]00|333|830)|84(?:141|300|32[34]|343|488|499|777|888)|85888|86(?:188|566|640|644|650|677|868|888)|870[24]9|871(?:23|[49]9)|872(?:1[0-8]|49|99)|87499|875(?:49|55|99)|876(?:0[1367]|1[1245678]|54|99)|877(?:00|99)|878(?:15|25|3[567]|8[12])|87999|880(?:08|44|55|77|99)|88688|888(?:03|10|8|89)|8899|90(?:009|999)|99999" free="116\\d{3}|81214|81215|47529|70296" />
+ <shortcode country="de" pattern="\\d{4,5}|1232\\d{3}" premium="11(?:111|833)|1232(?:013|021|060|075|286|358)|118(?:44|80|86)|20[25]00|220(?:21|22|88|99)|221(?:14|21)|223(?:44|53|77)|224[13]0|225(?:20|59|90)|226(?:06|10|20|26|30|40|56|70)|227(?:07|33|39|66|76|78|79|88|99)|228(?:08|11|66|77)|23300|30030|3[12347]000|330(?:33|55|66)|33(?:233|331|366|533)|34(?:34|567)|37000|40(?:040|123|444|[3568]00)|41(?:010|414)|44(?:000|044|344|44[24]|544)|50005|50100|50123|50555|51000|52(?:255|783)|54(?:100|2542)|55(?:077|[24]00|222|333|55|[12369]55)|56(?:789|886)|60800|6[13]000|66(?:[12348]66|566|766|777|88|999)|68888|70(?:07|123|777)|76766|77(?:007|070|222|444|[567]77)|80(?:008|123|888)|82(?:002|[378]00|323|444|472|474|488|727)|83(?:005|[169]00|333|830)|84(?:141|300|32[34]|343|488|499|777|888)|85888|86(?:188|566|640|644|650|677|868|888)|870[24]9|871(?:23|[49]9)|872(?:1[0-8]|49|99)|87499|875(?:49|55|99)|876(?:0[1367]|1[1245678]|54|99)|877(?:00|99)|878(?:15|25|3[567]|8[12])|87999|880(?:08|44|55|77|99)|88688|888(?:03|10|8|89)|8899|90(?:009|999)|99999" free="116\\d{3}|81214|81215|47529|70296|73240|3011" />
<!-- Denmark: see http://iprs.webspacecommerce.com/Denmark-Premium-Rate-Numbers -->
<shortcode country="dk" pattern="\\d{4,5}" premium="1\\d{3}" free="116\\d{3}|4665" />
@@ -153,6 +153,9 @@
<!-- Latvia: 4 digits, known premium codes listed, plus EU -->
<shortcode country="lv" pattern="\\d{4}" premium="18(?:19|63|7[1-4])" free="116\\d{3}" />
+ <!-- Macedonia -->
+ <shortcode country="mk" free="129005|122" />
+
<!-- Mexico: 4-5 digits (not confirmed), known premium codes listed -->
<shortcode country="mx" pattern="\\d{4,5}" premium="53035|7766" free="46645" />
diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsSamplingTimerTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsSamplingTimerTest.java
index ce6879d..b4afdda 100644
--- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsSamplingTimerTest.java
+++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsSamplingTimerTest.java
@@ -178,19 +178,40 @@
clocks.elapsedRealtime() * 1000);
offBatterySummaryParcel.setDataPosition(0);
- // Read the on battery summary from the parcel.
- BatteryStatsImpl.SamplingTimer unparceledTimer = new BatteryStatsImpl.SamplingTimer(
- clocks, timeBase);
- unparceledTimer.readSummaryFromParcelLocked(onBatterySummaryParcel);
+ // Set the timebase running again. That way any issues with tracking reported values
+ // get tested when we unparcel the timers below.
+ timeBase.setRunning(true, clocks.uptimeMillis(), clocks.elapsedRealtime());
- assertEquals(10, unparceledTimer.getTotalTimeLocked(0, BatteryStats.STATS_SINCE_CHARGED));
- assertEquals(1, unparceledTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+ // Read the on battery summary from the parcel.
+ BatteryStatsImpl.SamplingTimer unparceledOnBatteryTimer =
+ new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
+ unparceledOnBatteryTimer.readSummaryFromParcelLocked(onBatterySummaryParcel);
+
+ assertEquals(10, unparceledOnBatteryTimer.getTotalTimeLocked(0,
+ BatteryStats.STATS_SINCE_CHARGED));
+ assertEquals(1, unparceledOnBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
// Read the off battery summary from the parcel.
- unparceledTimer = new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
- unparceledTimer.readSummaryFromParcelLocked(offBatterySummaryParcel);
+ BatteryStatsImpl.SamplingTimer unparceledOffBatteryTimer =
+ new BatteryStatsImpl.SamplingTimer(clocks, timeBase);
+ unparceledOffBatteryTimer.readSummaryFromParcelLocked(offBatterySummaryParcel);
- assertEquals(10, unparceledTimer.getTotalTimeLocked(0, BatteryStats.STATS_SINCE_CHARGED));
- assertEquals(1, unparceledTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+ assertEquals(10, unparceledOffBatteryTimer.getTotalTimeLocked(0,
+ BatteryStats.STATS_SINCE_CHARGED));
+ assertEquals(1, unparceledOffBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+ // Now, just like with a fresh timer, the first update should be absorbed to account for
+ // data being collected when we weren't recording.
+ unparceledOnBatteryTimer.update(10, 10);
+
+ assertEquals(10, unparceledOnBatteryTimer.getTotalTimeLocked(0,
+ BatteryStats.STATS_SINCE_CHARGED));
+ assertEquals(1, unparceledOnBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
+
+ unparceledOffBatteryTimer.update(10, 10);
+
+ assertEquals(10, unparceledOffBatteryTimer.getTotalTimeLocked(0,
+ BatteryStats.STATS_SINCE_CHARGED));
+ assertEquals(1, unparceledOffBatteryTimer.getCountLocked(BatteryStats.STATS_SINCE_CHARGED));
}
}
diff --git a/data/sounds/alarms/material/ogg/Bounce_OG7_1ch_48k.ogg b/data/sounds/alarms/material/ogg/Bounce_OG7_1ch_48k.ogg
index 6af4d70..3d1f8ea 100755
--- a/data/sounds/alarms/material/ogg/Bounce_OG7_1ch_48k.ogg
+++ b/data/sounds/alarms/material/ogg/Bounce_OG7_1ch_48k.ogg
Binary files differ
diff --git a/docs/html-intl/intl/es/about/versions/nougat/android-7.0-testing.jd b/docs/html-intl/intl/es/about/versions/nougat/android-7.0-testing.jd
deleted file mode 100644
index 20d2d6e..0000000
--- a/docs/html-intl/intl/es/about/versions/nougat/android-7.0-testing.jd
+++ /dev/null
@@ -1,190 +0,0 @@
-page.title=Guía de prueba
-page.image=images/cards/card-n-guide_2x.png
-meta.tags="preview", "testing"
-page.tags="preview", "developer preview"
-
-@jd:body
-
-<div id="tb-wrapper">
- <div id="tb">
- <h2>En este documento</h2>
- <ol>
- <li><a href="#runtime-permissions">Prueba de los permisos</a></li>
- <li><a href="#doze-standby">Prueba de los modos Descanso y App Standby</a></li>
- <li><a href="#ids">Copia de seguridad automática e identificadores de dispositivos</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N te brinda la oportunidad de garantizar que tus aplicaciones funcionen con la próxima versión de la plataforma.
- Esta versión preliminar incluye diversas API y cambios en los comportamientos que pueden
-tener impactos en tu aplicación, como se describe en las secciones <a href="{@docRoot}preview/api-overview.html">Información general de la API</a> y <a href="{@docRoot}preview/behavior-changes.html">Cambios en los comportamientos</a>.
- Al probar tu aplicación con la versión preliminar, te debes centrar en algunos cambios específicos del sistema para garantizar que los usuarios disfruten de una buena experiencia.
-
-
-</p>
-
-<p>
- En esta guía, se describen qué y cómo probar las características preliminares con tu aplicación. Debes priorizar la prueba de estas características específicas preliminares, puesto que podrían tener un alto impacto en el comportamiento de tu aplicación:
-
-
-</p>
-
-<ul>
- <li><a href="#runtime-permissions">Permisos</a>
- </li>
- <li><a href="#doze-standby">Modos Descanso y App Standby</a>
- </li>
- <li><a href="#ids">Copia de seguridad automática e identificadores de dispositivos</a></li>
-</ul>
-
-<p>
- Para obtener más información sobre cómo configurar dispositivos o dispositivos virtuales con una imagen
- del sistema de la versión preliminar para realizar pruebas, consulta la sección <a href="{@docRoot}preview/setup-sdk.html">Configurar el SDK de Android N</a>.
-
-</p>
-
-
-<h2 id="runtime-permissions">Prueba de los permisos</h2>
-
-<p>
- El nuevo modelo de <a href="{@docRoot}preview/features/runtime-permissions.html">permisos</a> cambia el modo en que el usuario asigna permisos a tu aplicación.
- En lugar de conceder todos los permisos durante el procedimiento de instalación, tu aplicación debe solicitar al usuario los permisos individuales en el tiempo de ejecución.
-
- Para los usuarios, este comportamiento ofrece más control granular sobre las actividades de cada aplicación, así como un mejor contexto para comprender por qué la aplicación está solicitando un permiso específico.
- Los usuarios pueden conceder o revocar los permisos concedidos a una aplicación de forma individual en cualquier momento.
- Es muy probable que esta característica de la versión preliminar tenga un impacto en el comportamiento de tu aplicación y puede hacer que algunas características de tu aplicación no funcionen o funcionen en un estado degradado.
-
-
-</p>
-
-<p class="caution">
- Este cambio afecta a todas las aplicaciones que se ejecutan en la nueva plataforma, incluso a aquellas que no tienen como destino la nueva versión de la plataforma.
- La plataforma ofrece un comportamiento de compatibilidad limitada para las aplicaciones heredadas, pero debes comenzar a planificar ahora la migración de tu aplicación al nuevo modelo de permisos, con el objetivo de publicar una versión actualizada de tu aplicación cuando se lance la plataforma oficial.
-
-
-</p>
-
-
-<h3 id="permission-test-tips">Tips para pruebas</h3>
-
-<p>
- Usa los siguientes tips para pruebas como ayuda para planificar y ejecutar las pruebas de tu aplicación con el nuevo comportamiento de permisos.
-
-</p>
-
-<ul>
- <li>Identifica los permisos actuales de tu aplicación y las rutas de códigos relacionadas.</li>
- <li>Prueba los flujos del usuario en los datos y servicios protegidos por permisos.</li>
- <li>Realiza pruebas con varias combinaciones de permisos concedidos/revocados.</li>
- <li>Usa la herramienta {@code adb} para administrar permisos desde la línea de comando:
- <ul>
- <li>Enumera los permisos y estados por grupo:
- <pre>adb shell pm list permissions -d -g</pre>
- </li>
- <li>Concede o revoca un permiso o más permisos utilizando la siguiente sintaxis:<br>
- <pre>adb shell pm [grant|revoke] <permission.name> ...</pre>
- </li>
- </ul>
- </li>
- <li>Analiza tu aplicación para detectar servicios que utilizan permisos.</li>
-</ul>
-
-<h3 id="permission-test-strategy">Estrategia de prueba</h3>
-
-<p>
- El cambio en los permisos afecta la estructura y el diseño de tu aplicación, además de la experiencia del usuario y los flujos que proporcionas a los usuarios.
- Debes evaluar el uso de los permisos actuales de tu aplicación y comenzar a planificar los nuevos flujos que deseas ofrecer.
- La versión oficial de la plataforma proporciona un comportamiento de compatibilidad, pero debes prever la actualización de tu aplicación y no depender de estos comportamientos.
-
-
-</p>
-
-<p>
- Identifica los permisos que tu aplicación verdaderamente necesita y utiliza, y luego busca las diversas rutas de códigos que utilizan los servicios protegidos por permisos.
- Puedes realizar esto mediante una combinación de pruebas en la plataforma nueva y análisis de códigos.
- Al realizar las pruebas, debes centrarte en
- incluir permisos de tiempo de ejecución cambiando {@code targetSdkVersion} de la aplicación a la versión preliminar. Para
- obtener más información, consulta la sección <a href="{@docRoot}preview/setup-sdk.html#">Configurar el SDK de Android N</a>.
-
-</p>
-
-<p>
- Realiza pruebas con diversas combinaciones de permisos revocados y agregados, a fin de destacar los flujos del usuario que dependen de permisos.
- Cuando una dependencia no sea obvia ni lógica, debes considerar la opción de refactorizar o compartimentar ese flujo para eliminar la dependencia o aclarar por qué se necesita el permiso.
-
-
-</p>
-
-<p>
- Para obtener más información sobre el comportamiento de los permisos de tiempo de ejecución, las pruebas y las mejores prácticas, consulta la página <a href="{@docRoot}preview/features/runtime-permissions.html">Permisos</a> de la versión preliminar para desarrolladores.
-
-
-</p>
-
-
-<h2 id="doze-standby">Prueba de los modos Descanso y App Standby</h2>
-
-<p>
- Las características de ahorro de energía de los modos Descanso y App Standby limitan la cantidad de procesamiento en segundo plano que puede realizar tu aplicación cuando un dispositivo se encuentra en estado inactivo o mientras tu aplicación no está en foco.
- Entre las restricciones que el sistema puede imponer en las aplicaciones se incluyen el acceso limitado a la red o denegación de acceso, suspensión de las tareas en segundo plano, suspensión de notificaciones, y alarmas y solicitudes de reactivación ignoradas.
-
- Para garantizar que tu aplicación tenga un comportamiento correcto con estas optimizaciones de ahorro de energía, debes probar tu aplicación simulando estos estados de bajo consumo.
-
-
-</p>
-
-<h4 id="doze">Cómo probar la aplicación en modo Descanso</h4>
-
-<p>Para probar el modo Descanso con tu aplicación, realiza lo siguiente:</p>
-
-<ol>
-<li>Configura un dispositivo de hardware o un dispositivo virtual con una imagen del sistema Android N.</li>
-<li>Conecta el dispositivo a tu equipo de desarrollo e instala tu aplicación.</li>
-<li>Ejecuta tu aplicación y déjala activa.</li>
-<li>Simula la activación del modo Descanso en el dispositivo ejecutando los siguientes comandos:
-
-<pre>
-$ adb shell dumpsys battery unplug
-$ adb shell dumpsys deviceidle step
-$ adb shell dumpsys deviceidle -h
-</pre>
-
- </li>
- <li>Observa el comportamiento de tu aplicación cuando se reactive el dispositivo. Asegúrate de que se recupere correctamente cuando el dispositivo salga del modo Descanso.
-</li>
-</ol>
-
-
-<h4 id="standby">Cómo probar aplicaciones en modo App Standby</h4>
-
-<p>Para probar el modo App Standby con tu aplicación, realiza lo siguiente:</p>
-
-<ol>
- <li>Configura un dispositivo de hardware o un dispositivo virtual con una imagen del sistema Android N.</li>
- <li>Conecta el dispositivo a tu equipo de desarrollo e instala tu aplicación.</li>
- <li>Ejecuta tu aplicación y déjala activa.</li>
- <li>Simula la activación del modo App Standby en la aplicación ejecutando los siguientes comandos:
-
-<pre>
-$ adb shell am broadcast -a android.os.action.DISCHARGING
-$ adb shell am set-idle <packageName> true
-</pre>
-
- </li>
- <li>Simula la activación de tu aplicación con el siguiente comando:
- <pre>$ adb shell am set-idle <packageName> false</pre>
- </li>
- <li>Observa el comportamiento de tu aplicación al reactivarse. Asegúrate de que se recupere correctamente del modo App Standby.
- En particular, debes comprobar si los trabajos en segundo plano y las notificaciones de tu aplicación continúan funcionando de la manera esperada.
-</li>
-</ol>
-
-<h2 id="ids">Copia de seguridad automática para aplicaciones e identificadores específicos del dispositivo</h2>
-
-<p>Si tu aplicación continúa teniendo algún identificador específico del dispositivo, como la Id. de registro de Google Cloud Messaging, en el almacenamiento interno, asegúrate de seguir las mejores prácticas para excluir la ubicación de almacenamiento de la copia de seguridad automática, como se describe en la sección <a href="{@docRoot}preview/backup/index.html">Copia de seguridad automática para aplicaciones</a>.
-
-
-
- </p>
diff --git a/docs/html-intl/intl/es/about/versions/nougat/index.jd b/docs/html-intl/intl/es/about/versions/nougat/index.jd
index c931270..59afd81 100644
--- a/docs/html-intl/intl/es/about/versions/nougat/index.jd
+++ b/docs/html-intl/intl/es/about/versions/nougat/index.jd
@@ -1,78 +1,62 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<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 N Developer Preview</h1>
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- ¡Prepárate para Android N!
+ ¡Prepárate para Android Nougat!
<strong>Prueba tus aplicaciones</strong> en Nexus y en otros dispositivos. Admite comportamientos del sistema
nuevo para <strong>ahorrar energía y memoria</strong>.
Amplía la funcionalidad de tus aplicaciones gracias a una <strong>IU con ventanas múltiples</strong>,
<strong>notificaciones de respuestas directas</strong> y más.
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
Comencemos
- </a><!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ </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}images/home/n-preview-hero.png" srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
+ srcset="{@docRoot}images/home/n-preview-hero.png 1x,
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
+ data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
+ data-maxResults="3"></div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Informa un problema
</a>
</li>
<li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- Consulta las notas de la versión
- </a>
- </li>
- <li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Únete a la comunidad de desarrolladores
@@ -82,26 +66,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
-
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Informar un problema
- </a></div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Consulta las notas de la versión
- </a></div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Únete a la comunidad de desarrolladores
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
<h2 class="norule">Lo último</h2>
<div class="resource-widget resource-flow-layout col-16"
@@ -113,19 +77,33 @@
data-initial-results="3"></div>
</div></section>
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">Recursos</h1>
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
- Información esencial para ayudarte a preparar tus aplicaciones para Android N.
+ New Android capabilities and the right way to use them in your apps.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
+ 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-light" id="resources"><div class="wrap">
+ <h1 class="dac-section-title">Recursos</h1>
+ <div class="dac-section-subtitle">
+ Información esencial para ayudarte a preparar tus aplicaciones para Android Nougat.
+ </div>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
-
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html-intl/intl/es/index.jd b/docs/html-intl/intl/es/index.jd
index 66f9bf0..1ecf47c 100644
--- a/docs/html-intl/intl/es/index.jd
+++ b/docs/html-intl/intl/es/index.jd
@@ -5,49 +5,36 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-invert" style="background-color:#455A64">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="col-7of16 col-push-9of16" style="padding-left:2em;">
- <a href="{@docRoot}preview/index.html">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Get ready for the next version of Android!
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
- behaviors to <strong>save power and memory</strong>.
+<section class="dac-expand dac-hero" style="background-color:#b2dfdb;">
+ <div class="wrap" style="max-width:1000px;margin-top:0">
+ <div class="col-7of16 col-push-8of16">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <h1 class="dac-hero-title" style="color:#004d40">Android 7.0 Nougat!</h1>
+ <p class="dac-hero-description" style="color:#004d40">
+ <strong>Android 7.0 Nougat is here!</strong>
+ Get your apps ready for the latest version of Android, with new system
+ behaviors to <strong>save battery and memory</strong>.
Extend your apps with <strong>multi-window UI</strong>,
<strong>direct reply notifications</strong> and more.
</p>
- <a class="dac-hero-cta" href="/preview/index.html">
- <span class="dac-sprite dac-auto-chevron"></span>
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron" style="background-color:#b2dfdb"></span>
Learn more
- </a><!--<br>
- <a class="dac-hero-cta" href="/preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Developer Preview (final SDK)
- </a><br>-->
+ </a>
+ </a>
</a>
</div>
- <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:0em;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,
- /images/home/n-preview-hero_2x.png 2x">
+ <div class="col-6of16 col-pull-6of16 dac-hero-figure" style="padding-left:1em;padding-top:1em;">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/nougat_bg.jpg"
+ srcset="{@docRoot}images/home/nougat_bg.jpg 1x,
+ {@docRoot}images/home/nougat_bg_2x.jpg 2x">
</a>
</div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
<i class="dac-sprite dac-arrow-down-gray"></i>
@@ -75,28 +62,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
- <i class="dac-sprite dac-arrow-down-gray"></i>
- </a>
- <div class="actions">
- <div><a href="{@docRoot}sdk/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Get the SDK
- </a></div>
- <div><a href="{@docRoot}samples/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Browse Samples
- </a></div>
- <div><a href="{@docRoot}distribute/stories/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Watch Stories
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light" id="build-apps"><div class="wrap">
<h1 class="dac-section-title">Build Beautiful Apps</h1>
<div class="dac-section-subtitle">
diff --git a/docs/html-intl/intl/es/preview/download_mp2.jd b/docs/html-intl/intl/es/preview/download_mp2.jd
deleted file mode 100644
index d71d8fd..0000000
--- a/docs/html-intl/intl/es/preview/download_mp2.jd
+++ /dev/null
@@ -1,360 +0,0 @@
-page.title=Descargas
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Antes de descargar e instalar los componentes del SDK de la versión preliminar de Android, debe aceptar los términos y las condiciones que se describen a continuación.
-</p>
-
- <h2 class="norule">Términos y condiciones</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-Este es el Contrato de licencia de la versión preliminar del SDK de Android (el “Contrato de licencia”). 1.
-
- Introducción 1.1 Se le otorga la licencia de la versión preliminar del SDK de Android (denominada “Versión preliminar” en este Contrato de licencia y que incluye específicamente los archivos de sistema de Android, las API agrupadas y los archivos de biblioteca de la Versión preliminar, si se encuentran disponibles), sujeto a los términos del Contrato de licencia.
-
- El Contrato de licencia establece una relación legal vinculante entre usted y Google en relación con el uso que usted realice de la Versión preliminar. 1.2 “Android” hace referencia al conjunto de soluciones Android para dispositivos, según se encuentre disponible en el Proyecto de código abierto de Android (Android Open Source Project), que se encuentra en la siguiente URL: http://source.android.com/, y según se actualiza periódicamente. 1.3 “Google” hace referencia a Google Inc., una corporación de Delaware, con sede principal en 1600 Amphitheatre Parkway, Mountain View, CA 94043, Estados Unidos. 2.
-
-
-
-
-
- Aceptación del Contrato de licencia 2.1 Para poder utilizar la Versión preliminar, primero debe aceptar el Contrato de licencia.
-
- Si no acepta el Contrato de licencia, no podrá utilizar la Versión preliminar. 2.2 Al hacer clic para aceptar o utilizar la Versión preliminar, por medio del presente, usted acepta los términos del Contrato de licencia. 2.3 Usted no puede utilizar la Versión preliminar ni aceptar el Contrato de licencia si tiene prohibido recibir la Versión preliminar en virtud de las leyes de los Estados Unidos o de otros países, lo que incluye el país donde es residente o desde el que utilizará la Versión preliminar. 2.4 Si usted utilizará la Versión preliminar de forma interna, dentro de su compañía u organización, usted acepta quedar sujeto al Contrato de licencia en representación de su empleador u otra entidad, y expresa y garantiza que tiene plena autoridad legal para vincular a su empleador o a dicha entidad al Contrato de licencia.
-
-
-
-
-
- Si no posee la autoridad exigida, no podrá aceptar el Contrato de licencia ni usar la Versión preliminar en representación de su empleador u otra entidad. 3.
-
- Licencia de la Versión preliminar de Google 3.1 Sujeto a los términos del Contrato de licencia, Google le otorga una licencia libre de regalías, no asignable, no exclusiva, no transferible a terceros, limitada y revocable para utilizar la Versión preliminar, de forma personal o interna dentro de su compañía u organización, únicamente para desarrollar aplicaciones para ejecutar en la plataforma de Android. 3.2 Usted acepta que Google u otros terceros poseen todos los derechos legales, títulos e intereses en relación con la Versión preliminar, incluidos los Derechos de propiedad intelectual que existan en la Versión preliminar.
-
-
-
- Los “Derechos de propiedad intelectual” hacen referencia a todos y cada uno de los derechos en virtud de las leyes de patentes, derechos de autor, secreto comercial y marca comercial, y todos los demás derechos de propiedad. Google se reserva todos los derechos que no se le otorguen expresamente. 3.3 No podrá utilizar la Versión preliminar para ningún otro propósito que no esté expresamente permitido en el Contrato de licencia.
-
- Excepto en la medida que lo exijan las licencias correspondientes de terceros, no podrá: (a) copiar (excepto con fines de copia de seguridad), modificar, adaptar, redistribuir, descompilar, utilizar técnicas de ingeniería inversa, desarmar ni crear trabajos derivados de la Versión preliminar ni de ninguna de sus partes; ni (b) cargar ninguna parte de la Versión preliminar en un teléfono móvil ni en ningún otro dispositivo de hardware (a excepción de una computadora personal), ni podrá combinar ninguna parte de la Versión preliminar con otro software, ni distribuir algún software o dispositivo que incorpore alguna parte de la Versión preliminar. 3.4 Usted acepta que no tomará medidas que pudieran provocar la fragmentación de Android, incluidas, entre otras, la distribución y la participación en la creación o la promoción de un kit de desarrollo de software derivado de la Versión preliminar. 3.5 El uso, la reproducción y la distribución de los componentes de la Versión preliminar con licencia de software de código abierto están regidos exclusivamente por los términos de la licencia de ese software de código abierto y no de este Contrato de licencia.
-
-
-
- Usted acepta mantener la licencia en buenas condiciones con respecto a dichas licencias de software de código abierto en virtud de todos los derechos otorgados y acepta abstenerse de realizar alguna acción que pueda poner fin, suspender o violar dichos derechos. 3.6 Usted acepta que la forma y la naturaleza de la Versión preliminar que proporciona Google pueden cambiar sin brindarle aviso previo y que las versiones futuras de la Versión preliminar pueden ser incompatibles con las aplicaciones desarrolladas en versiones anteriores de la Versión preliminar.
-
- Usted acepta que Google puede (de forma permanente o temporal) dejar de proporcionarles la Versión preliminar (o cualquiera de las características incluidas en ella) a usted o a los usuarios, generalmente, a criterio exclusivo de Google, sin brindarle aviso previo. 3.7 Ninguna declaración de este Contrato de licencia le otorga el derecho de utilizar alguno de los nombres comerciales, las marcas comerciales, las marcas de servicio, los logotipos, los nombres de dominio ni otras características distintivas de marca de Google. 3.8 Usted acepta que no eliminará, ocultará ni alterará ninguno de los avisos de derechos de propiedad (lo que incluye los avisos de marca comercial y derechos de autor) que pudieran estar anexados o incluidos en la Versión preliminar. 4.
-
-
-
-
-
- Uso que usted realiza de la Versión preliminar 4.1 Google acepta que ninguna declaración del Contrato de licencia le concede a Google derecho, título o interés alguno de su parte (o de parte de sus licenciantes), en virtud del Contrato de licencia, con respecto a las aplicaciones de software que usted desarrolle mediante el uso de la Versión preliminar, lo que incluye los derechos de propiedad intelectual que conlleven esas aplicaciones. 4.2 Usted acepta utilizar la Versión preliminar y escribir aplicaciones únicamente conforme a lo que permite (a) este Contrato de licencia y (b) las leyes, regulaciones, o prácticas y pautas generalmente aceptadas pertinentes en las jurisdicciones relevantes (lo que incluye las leyes sobre la exportación de datos o software hacia los Estados Unidos u otros países relevantes y desde ellos). 4.3 Usted acepta que si utiliza la Versión preliminar para desarrollar aplicaciones, protegerá la privacidad y los derechos legales de los usuarios.
-
-
-
-
-
- Si los usuarios le proporcionan sus nombres de usuario, contraseñas u otra información de inicio de sesión o información personal, debe comunicarles a los usuarios que la información se encontrará disponible para su aplicación, y debe proporcionarles a dichos usuarios un aviso de privacidad con protección y validez legal. Si su aplicación almacena información personal o confidencial proporcionada por los usuarios, lo debe hacer de forma segura. Si los usuarios le proporcionan información sobre la cuenta de Google, su aplicación solo puede usar esa información para acceder a la cuenta de Google del usuario siempre que este le haya otorgado permiso para hacerlo y con los fines para los que se lo haya otorgado. 4.4 Usted acepta que no participará en ninguna actividad con la Versión preliminar (lo que incluye el desarrollo o la distribución de una aplicación) que interfiera, interrumpa, dañe o acceda sin autorización a servidores, redes u otras propiedades o servicios de Google o de algún tercero. 4.5 Usted acepta que es el único responsable (y que Google no asume responsabilidades hacia usted ni terceros) de los datos, el contenido o los recursos que usted cree, transmita o muestre a través de Android o las aplicaciones para Android, y de las consecuencias de sus acciones (lo que incluye la pérdida o el daño que Google pudiera sufrir) al hacerlo. 4.6 Usted acepta que es el único responsable (y que Google no asume responsabilidades hacia usted ni terceros) de cualquier incumplimiento de sus obligaciones en virtud de este Contrato de licencia, los contratos aplicables de terceros o los términos del servicio, o cualquier ley o regulación pertinentes, y de las consecuencias (lo que incluye las pérdidas o los daños que pudieran sufrir Google o algún tercero) de dichos incumplimientos. 4.7 La Versión preliminar se encuentra en desarrollo, y sus pruebas y comentarios son una parte importante del proceso de desarrollo.
-
-
-
-
-
-
-
- Al utilizar la Versión preliminar, usted reconoce que la implementación de algunas características aún se encuentra en desarrollo y que no debe confiar en que la Versión preliminar contará con todas las funcionalidades de una versión estable. Usted acepta no distribuir públicamente ni enviar ninguna aplicación que utilice esta Versión preliminar, ya que esta Versión preliminar ya no se admitirá tras el lanzamiento del SDK oficial de Android. 5.
-
- Sus credenciales de desarrollador 5.1 Usted acepta que es responsable de mantener la confidencialidad de toda credencial de desarrollador que Google pudiera otorgarle o que usted pudiera escoger, y que será el único responsable de todas las aplicaciones que se desarrollen con sus credenciales de desarrollador. 6.
-
-
-
- Privacidad e información 6.1 A fin de poder innovar y mejorar de forma continua la Versión preliminar, Google podría recopilar ciertas estadísticas de uso del software, lo que incluye, entre otras características, un identificador único, la dirección IP asociada, el número de versión del software e información sobre las herramientas o los servicios de la Versión preliminar que se estén utilizando y la manera en que se estén utilizando.
-
- Antes de que se recopile esta información, la Versión preliminar se lo notificará y le solicitará su permiso. Si no otorga su permiso, no se recopilará la información. 6.2 Los datos recopilados se analizan en el agregado para mejorar la Versión preliminar y se conservan de acuerdo con la política de privacidad de Google que se encuentra en el sitio http://www.google.com/policies/privacy/. 7.
-
-
-
- Aplicaciones de terceros 7.1 Si utiliza la Versión preliminar para ejecutar aplicaciones desarrolladas por un tercero o que accedan a datos, contenido o recursos proporcionados por un tercero, usted acepta que Google no es responsable de esas aplicaciones, datos, contenido ni recursos.
-
- Usted comprende que todos los datos, contenidos o recursos a los que podría acceder a través de esas aplicaciones de terceros son exclusiva responsabilidad de la persona que los origina y que Google no es responsable de las pérdidas ni los daños que usted pudiera experimentar como consecuencia del uso o acceso de cualquiera de esas aplicaciones, datos, contenido o recursos de terceros. 7.2 Usted debe saber que los datos, el contenido y los recursos que se le presentan a través de esa aplicación de un tercero pueden estar protegidos por derechos de propiedad intelectual que les pertenecen a sus proveedores (o a otras personas o compañías en representación de estos).
-
- No puede modificar, alquilar, arrendar, prestar, vender, distribuir ni crear obras derivadas basadas en esos datos, contenidos o recursos (en su totalidad o en parte), a menos que los propietarios pertinentes le hayan otorgado permiso específicamente para hacerlo. 7.3 Usted acepta que el uso que haga de las aplicaciones, los datos, el contenido o los recursos de ese tercero puede estar sujeto a términos independientes entre usted y el tercero correspondiente. 8.
-
-
-
- Uso de las API de Google 8.1 API de Google 8.1.1 Si utiliza alguna API para recuperar datos de Google, usted acepta que los datos pueden estar protegidos por derechos de propiedad intelectual que le pertenecen a Google o a las partes que proporcionan esos datos (o a otras personas o empresas en representación de estos).
-
-
-
- El uso que realice de cualquiera de esas API puede estar sujeto a términos de servicio adicionales. No puede modificar, alquilar, arrendar, prestar, vender, distribuir ni crear obras derivadas basadas en esos datos (en su totalidad o en parte), a menos que los términos de servicio correspondientes lo permitan. 8.1.2 Si utiliza alguna API para recuperar datos de un usuario de Google, usted acepta y acuerda que solo podrá recuperar datos con el consentimiento explícito del usuario y solo con los fines limitados para los que el usuario le haya otorgado permiso para hacerlo. 9.
-
-
-
- Finalización del Contrato de licencia 9.1 Este Contrato de licencia tendrá vigencia hasta que lo revoquen usted o Google, como se indica a continuación. 9.2 Si desea rescindir el Contrato de licencia, puede hacerlo al interrumpir el uso que realiza de la Versión preliminar y de las credenciales de desarrollador pertinentes. 9.3 Google puede, en cualquier momento, rescindir el Contrato de licencia, con causa o sin ella, después de notificárselo a usted. 9.4 El Contrato de licencia finalizará automáticamente, sin previo aviso ni acción alguna, tras la primera de las siguientes situaciones: (A) cuando Google deje de proporcionar la Versión preliminar o ciertas partes de esta a los usuarios en el país donde usted reside o desde el que utiliza el servicio; y (B) cuando Google emita una versión final del SDK de Android. 9.5 Si el Contrato de licencia se rescinde, se revocará la licencia que usted recibió en virtud de dicho contrato; usted deberá suspender inmediatamente todo uso de la Versión preliminar y las disposiciones de los párrafos 10, 11, 12 y 14 seguirán vigentes indefinidamente. 10.
-
-
-
-
-
-
-
-
-
-
-
-
-
- EXENCIONES DE RESPONSABILIDAD 10.1 USTED COMPRENDE Y ACEPTA EXPRESAMENTE QUE EL USO QUE REALICE DE LA VERSIÓN PRELIMINAR ES BAJO SU PROPIO RIESGO Y QUE LA VERSIÓN PRELIMINAR SE PROPORCIONA “EN LAS CONDICIONES EN LAS QUE SE ENCUENTRA” Y “SUJETA A DISPONIBILIDAD” SIN GARANTÍAS DE NINGÚN TIPO POR PARTE DE GOOGLE. 10.2 EL USO QUE USTED REALICE DE LA VERSIÓN PRELIMINAR Y DE TODO MATERIAL DESCARGADO U OBTENIDO DE ALGUNA OTRA MANERA MEDIANTE EL USO DE LA VERSIÓN PRELIMINAR ES A SU ENTERO RIESGO Y DISCRECIÓN, Y USTED ES EL ÚNICO RESPONSABLE DE CUALQUIER DAÑO QUE PUDIERA SUFRIR SU SISTEMA INFORMÁTICO U OTRO DISPOSITIVO, O DE LA PÉRDIDA DE DATOS COMO CONSECUENCIA DE DICHO USO.
-
-
-
- SIN PERJUICIO DE LO MENCIONADO ANTERIORMENTE, USTED COMPRENDE QUE LA VERSIÓN PRELIMINAR NO ES UNA VERSIÓN ESTABLE, Y PUEDE CONTENER ERRORES, DEFECTOS Y VULNERABILIDADES DE SEGURIDAD QUE PUEDEN PROVOCAR DAÑOS SIGNIFICATIVOS, LO QUE INCLUYE LA PÉRDIDA COMPLETA E IRRECUPERABLE DEL USO DE SU SISTEMA INFORMÁTICO U OTRO DISPOSITIVO. 10.3 GOOGLE TAMBIÉN RECHAZA TODAS LAS GARANTÍAS Y CONDICIONES DE CUALQUIER TIPO, EXPRESAS O IMPLÍCITAS, INCLUIDAS, ENTRE OTRAS, LAS GARANTÍAS Y CONDICIONES DE COMERCIABILIDAD, IDONEIDAD PARA UN FIN DETERMINADO Y NO VIOLACIÓN. 11.
-
-
-
- LIMITACIÓN DE RESPONSABILIDADES 11.1 USTED COMPRENDE Y ACEPTA EXPRESAMENTE QUE GOOGLE, SUS SUBSIDIARIAS Y FILIALES, Y SUS LICENCIANTES NO SERÁN RESPONSABLES ANTE USTED, EN VIRTUD DE NINGUNA TEORÍA DE RESPONSABILIDAD, POR NINGÚN DAÑO DIRECTO, INDIRECTO, INCIDENTAL, ESPECIAL, RESULTANTE NI PUNITIVO EN EL QUE PODRÍA HABER INCURRIDO, LO QUE INCLUYE LA PÉRDIDA DE DATOS, YA SEA QUE SE LE HAYA NOTIFICADO O NO A GOOGLE O A SUS REPRESENTANTES, O SOBRE CUYA POSIBILIDAD ESTOS DEBERÍAN HABER SABIDO. 12.
-
-
-
- Indemnización 12.1 Hasta el grado máximo que permita la ley, usted acepta defender, indemnizar y eximir de responsabilidades a Google, sus filiales y sus respectivos directores, funcionarios, empleados y agentes, de todo tipo de reclamo, acción legal y proceso judicial, así como de las pérdidas, responsabilidades, daños, costos y gastos (incluidos los honorarios razonables de abogados) que surjan o se acumulen (a) del uso que usted realiza de la Versión preliminar, (b) de cualquier aplicación que desarrolle en la Versión preliminar que infrinja algún derecho de propiedad intelectual de cualquier persona, o que difame a cualquier persona o viole sus derechos de publicidad o privacidad, y (c) del incumplimiento por su parte del Contrato de licencia. 13.
-
-
-
- Cambios en el Contrato de licencia 13.1 Google puede realizar cambios en el Contrato de licencia a medida que distribuye nuevas versiones de la Versión preliminar.
-
- Cuando se realicen esos cambios, Google emitirá una nueva versión del Contrato de licencia, que estará disponible en el sitio web donde se ponga a la venta la Versión preliminar. 14.
-
- Términos legales generales 14.1 El Contrato de licencia constituye el contrato legal integral entre usted y Google, y rige el uso que usted realice de la Versión preliminar (a excepción de los servicios que Google pueda proporcionarle en virtud de un contrato por escrito independiente), y reemplaza totalmente cualquier contrato anterior entre usted y Google en relación con la Versión preliminar. 14.2 Usted acepta que, si Google no ejerce ni impone un derecho o recurso legal especificados en el Contrato de licencia (o sobre el que Google tenga beneficios conforme a cualquier ley aplicable), esto no se considerará una renuncia formal a los derechos por parte de Google y Google aún seguirá recibiendo los beneficios de esos derechos o recursos legales. 14.3 Si algún tribunal judicial con jurisdicción para decidir sobre este asunto determina que alguna de las disposiciones de este Contrato de licencia no es válida, se eliminará esa disposición del Contrato de licencia sin que eso afecte la validez del resto del contrato.
-
-
-
-
-
- Las disposiciones restantes del Contrato de licencia continuarán siendo válidas y aplicables. 14.4 Usted reconoce y acepta que cada miembro del grupo de compañías de las que Google es la compañía central serán terceros beneficiarios del Contrato de licencia, y que esas otras empresas tendrán el derecho de imponer directamente cualquier disposición y ampararse en las disposiciones de este Contrato de licencia que les confieran un beneficio (o que confieran derechos a su favor).
-
- Además de esto, ninguna otra persona o compañía serán terceros beneficiarios del Contrato de licencia. 14.5 RESTRICCIONES DE EXPORTACIÓN.
-
- LA VERSIÓN PRELIMINAR ESTÁ SUJETA A LAS LEYES Y REGULACIONES DE EXPORTACIÓN DE LOS ESTADOS UNIDOS. DEBE CUMPLIR CON TODAS LAS LEYES Y REGULACIONES DE EXPORTACIÓN NACIONALES E INTERNACIONALES QUE SE APLIQUEN A LA VERSIÓN PRELIMINAR. ESTAS LEYES INCLUYEN RESTRICCIONES EN RELACIÓN CON LOS DESTINOS, USUARIOS FINALES Y USO FINAL. 14.6 Usted no puede asignar ni transferir el Contrato de licencia sin la aprobación previa por escrito de Google y todo intento de asignación sin dicha aprobación no tendrá validez.
-
- No podrá delegar sus responsabilidades u obligaciones otorgados en virtud del Contrato de licencia sin la aprobación previa por escrito de Google. 14.7 El Contrato de licencia y su relación con Google conforme al Contrato de licencia se regirán por las leyes del estado de California, independientemente de los principios de conflictos entre leyes.
-
- Usted y Google aceptan presentarse ante la jurisdicción exclusiva de los tribunales del condado de Santa Clara, California, para resolver cualquier asunto legal que pudiera surgir del Contrato de licencia. Sin perjuicio de esto, usted acepta que Google aún podrá aplicar reparaciones conforme a mandato judicial (o a un tipo equivalente de desagravio legal) en cualquier jurisdicción.
- </div><!-- sdk terms -->
-
-
-
- <div id="sdk-terms-form">
- <p>
- <input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
- <label id="agreeLabel" for="agree">He leído y acepto los términos y las condiciones anteriores.</label>
- </p>
- <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
- </div>
-
-
- </div><!-- end TOS -->
-
-
- <div id="landing">
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Contenido del documento</h2>
- <ol>
- <li><a href="#sdk">SDK de la versión preliminar</a></li>
- <li><a href="#docs">Documentación para desarrolladores</a></li>
- <li><a href="#images">Imágenes del sistema de hardware</a></li>
- </ol>
-
- <h2>Legacy downloads</h2>
- <ol>
- <li><a href="{@docRoot}preview/download_mp1.html">Developer Preview Archive</a></li>
- </ol>
- </div>
-</div>
-
-
-<p>
- El SDK de la versión preliminar de Android M incluye herramientas de desarrollo, archivos de sistema de Android y archivos de biblioteca que lo ayudarán a probar su aplicación y las nuevas API que se incluirán en la próxima versión de la plataforma.
- En este documento, se describe la manera de obtener los componentes que se pueden descargar de la versión preliminar para probar su aplicación.
-
-</p>
-
-
-<h2 id="sdk">SDK de la versión preliminar</h2>
-
-<p>
- El SDK de la versión preliminar se encuentra disponible para descargarlo a través del <a href="{@docRoot}tools/help/sdk-manager.html">Administrador de SDK de Android</a>. Para obtener más información sobre cómo descargar y configurar el SDK de la versión preliminar, consulte la sección <a href="{@docRoot}preview/setup-sdk.html#downloadSdk">Configurar el SDK de la versión preliminar</a>.
-
-</p>
-
-
-<h2 id="docs">Documentación para desarrolladores</h2>
-
-<p>
- El paquete de descarga de documentación para desarrolladores brinda información detallada de referencia sobre las API y un informe de diferencias de las API para la versión preliminar.
-</p>
-
-<table>
- <tr>
- <th scope="col">Description</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="docs-dl">
- <td>Android M Preview 2<br>Developer Docs</td>
- <td><a href="#top" onclick="onDownload(this)"
- >m-preview-2-developer-docs.zip</a><br>
- MD5: 1db6fff9c722b0339757e1cdf43663a8<br>
- SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157
- </td>
- </tr>
-</table>
-
-
-<h2 id="images">Imágenes del sistema de hardware</h2>
-
-<p>
- Estas imágenes del sistema le permiten instalar una versión preliminar de la plataforma en un dispositivo físico para realizar pruebas.
- Al configurar un dispositivo con una de estas imágenes, puede instalar y probar su aplicación para ver cómo funciona en la próxima versión de la plataforma.
- El proceso de instalación de una imagen del sistema en un dispositivo <em>elimina todos los datos del dispositivo</em>, por lo que debe hacer una copia de seguridad de los datos antes de instalar una imagen del sistema.
-
-
-</p>
-
-<p class="warning">
- <b>Advertencia:</b> Las siguientes imágenes del sistema de Android son versiones preliminares y están sujetas a cambios. El uso que haga de estas imágenes del sistema se rige por el Contrato de licencia de la versión preliminar del SDK de Android.
- Las imágenes del sistema de la versión preliminar de Android no son versiones estables y pueden contener errores y defectos que pueden generar daños en sus sistemas informáticos, dispositivos y datos.
-
- Las imágenes del sistema de la versión preliminar de Android no se someten a las mismas pruebas que el OS de fábrica y podrían hacer que el teléfono, y las aplicaciones y los servicios instalados dejen de funcionar.
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">Device</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="hammerhead">
- <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >hammerhead-MPZ79M-preview-b1f4bde4.tgz</a><br>
- MD5: 2ca9f18bf47a061b339bab52647ceb0d<br>
- SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939
- </td>
- </tr>
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-MPZ79M-preview-e1024040.tgz</a><br>
- MD5: 24a2118da340b9afedfbdfc026f6ff81<br>
- SHA-1: e10240408859d5188c4aae140e1c539130ba614b
- </td>
- </tr>
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-MPZ79M-preview-9f305342.tgz</a><br>
- MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e<br>
- SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-MPZ79N-preview-fb63af98.tgz</a><br>
- MD5: e8d081137a20b66df595ee69523314b5<br>
- SHA-1: fb63af98302dd97be8de9313734d389ccdcce250
- </td>
- </tr>
-
-</table>
-
-<h3 id="install-image">Instalar una imagen en un dispositivo</h3>
-
-<p>
- Si desea utilizar una imagen del dispositivo para realizar pruebas, debe instalarla en un dispositivo compatible. Siga las instrucciones que se ofrecen a continuación para instalar una imagen del sistema:
-
-</p>
-
-<ol>
- <li>Descargue y descomprima uno de los paquetes de imágenes del sistema que se enumeran aquí.</li>
- <li>Realice una copia de seguridad de los datos del dispositivo que desee conservar.</li>
- <li>Siga las instrucciones que se describen en el sitio <a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
- para actualizar la imagen en su dispositivo.
-</li>
-</ol>
-
-<p class="note">
- <strong>Nota:</strong> Cuando haya actualizado un dispositivo de desarrollo con la imagen del sistema de la versión preliminar, se actualizará automáticamente con la próxima versión preliminar a través de actualizaciones OTA.
-
-</p>
-
-<h3 id="revertDevice">Restablecer las especificaciones de fábrica en un dispositivo</h3>
-
-<p>
- Si desea desinstalar la versión preliminar y restablecer las especificaciones de fábrica en un dispositivo, visite el sitio <a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a> y descargue la imagen con la que desea actualizar su dispositivo.
-
- Siga las instrucciones que se describen en esa página para actualizar la imagen en su dispositivo.
-
-</p>
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/";
- function onDownload(link) {
-
- $("#downloadForRealz").html("Download " + $(link).text());
- $("#downloadForRealz").attr('href', urlRoot + $(link).text());
-
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
-
- return true;
- }
-
-
- function onAgreeChecked() {
- /* verify that the TOS is agreed */
- if ($("input#agree").is(":checked")) {
- /* reveal the download button */
- $("a#downloadForRealz").removeClass('disabled');
- } else {
- $("a#downloadForRealz").addClass('disabled');
- }
- }
-
- function onDownloadForRealz(link) {
- if ($("input#agree").is(':checked')) {
- /*
- $("#tos").fadeOut('fast');
- $("#landing").fadeIn('fast');
- */
-
- ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html());
-
- /*
- location.hash = "";
- */
- return true;
- } else {
- return false;
- }
- }
-
- $(window).hashchange( function(){
- if (location.hash == "") {
- location.reload();
- }
- });
-
-</script>
diff --git a/docs/html-intl/intl/es/preview/features/background-optimization.jd b/docs/html-intl/intl/es/preview/features/background-optimization.jd
deleted file mode 100644
index c061a09..0000000
--- a/docs/html-intl/intl/es/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,391 +0,0 @@
-page.title=Optimizaciones en segundo plano
-page.metaDescription=Nuevas restricciones para transmisiones implícitas.
-page.keywords="android N", "implicit broadcasts", "job scheduler"
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>
- En este documento
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">Restricciones en CONNECTIVITY_ACTION</a>
- </li>
-
- <li>
- <a href="#sched-jobs">Programación de trabajos en red en conexiones
- sin medición de uso</a>
- </li>
-
- <li>
- <a href="#monitor-conn">Control de la conectividad de la red mientras la aplicación
- se está ejecutando</a>
- </li>
-
- <li>
- <a href="#media-broadcasts">Restricciones en NEW_PICTURE y
- NEW_VIDEO</a>
- </li>
-
- <li>
- <a href="#new-jobinfo">Nuevos métodos de JobInfo</a>
- </li>
-
- <li>
- <a href="#new-jobparam">Nuevos métodos de JobParameter</a>
- </li>
-
- <li>
- <a href="#further-optimization">Cómo optimizar aún más tu aplicación</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Los procesos en segundo plano pueden consumir mucha memoria y batería. Por ejemplo, una
- transmisión implícita puede iniciar muchos procesos en segundo plano registrados para
- escucharla, aunque esos procesos quizá no desempeñen un trabajo considerable. Esto puede
- afectar de forma significativa tanto el rendimiento del dispositivo como la experiencia de usuario.
-</p>
-
-<p>
- Para corregir este problema, en Android N se aplican las siguientes
- restricciones:
-</p>
-
-<ul>
- <li>Las aplicaciones orientadas a la Preview no reciben transmisiones {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} si
- en su manifiesto registran que las reciben. Las aplicaciones que se ejecutan aún pueden
- escuchar {@code CONNECTIVITY_CHANGE} en su subproceso principal mediante el registro de un
- {@link android.content.BroadcastReceiver} con {@link
- android.content.Context#registerReceiver Context.registerReceiver()}.
- </li>
-
- <li>Las aplicaciones no pueden enviar ni recibir transmisiones {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} ni {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Esta optimización
- afecta a todas las aplicaciones, no solo a aquellas orientadas a la Preview.
- </li>
-</ul>
-
-<p>
- Si la aplicación utiliza cualquiera de estas intents, debes quitar las dependencias en
- ellas lo antes posible a fin de poder orientar los dispositivos Android N correctamente.
- El framework de Android ofrece varias soluciones para mitigar la necesidad de
- estas transmisiones implícitas. Por ejemplo, {@link android.app.job.JobScheduler}
- y <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> proporcionan mecanismos sólidos para programar operaciones
- de red cuando se cumplen las condiciones especificadas, como una conexión a una
- red de uso no medido. Ahora también puedes usar {@link android.app.job.JobScheduler}
- para reaccionar a cambios en relación con los proveedores de contenido. Los objetos {@link android.app.job.JobInfo}
- encapsulan los parámetros que usa {@link android.app.job.JobScheduler}
- para programar el trabajo. Cuando se cumplen las condiciones del trabajo, el sistema
- ejecuta ese trabajo en el {@link android.app.job.JobService} de tu aplicación.
-</p>
-
-<p>
- En este documento, aprenderemos cómo usar métodos alternativos, como
- {@link android.app.job.JobScheduler}, para adaptar tu aplicación a esas nuevas
- restricciones.
-</p>
-
-<h2 id="connectivity-action">
- Restricciones en CONNECTIVITY_ACTION
-</h2>
-
-<p>
- Las aplicaciones orientadas a Android N no reciben transmisiones {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} si en su manifiesto
- registran que las reciben, y los procesos que dependan de esta
- transmisión no se iniciarán. Esto podría ser un problema para aplicaciones que buscan
- escuchar los cambios en la red o realizar múltiples actividades en red cuando el
- dispositivo se conecta a una red sin medición de uso. Ya existen varias soluciones
- en relación con esta restricción en el framework de Android, pero elegir
- la correcta depende de lo que quieras lograr con tu aplicación.
-</p>
-
-<p class="note">
- <strong>Nota:</strong> Un {@link android.content.BroadcastReceiver} registrado con
- {@link android.content.Context#registerReceiver Context.registerReceiver()}
- continúa recibiendo estas transmisiones mientras se ejecuta la aplicación.
-</p>
-
-<h3 id="sched-jobs">
- Programación de trabajos en red en conexiones sin medición de uso
-</h3>
-
-<p>
- Cuando uses la clase {@link android.app.job.JobInfo.Builder JobInfo.Builder}
- para crear tu objeto {@link android.app.job.JobInfo}, aplica el método {@link
- android.app.job.JobInfo.Builder#setRequiredNetworkType
- setRequiredNetworkType()} y pasa {@link android.app.job.JobInfo
- JobInfo.NETWORK_TYPE_UNMETERED} como parámetro de trabajo. El siguiente ejemplo de código
- programa la ejecución de un servicio cuando el dispositivo se conecta a una red sin
- medición de uso y se está cargando:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-</pre>
-
-<p>
- Cuando se cumplan las condiciones para tu trabajo, tu aplicación recibirá un callback para ejecutar
- el método {@link android.app.job.JobService#onStartJob onStartJob()} en la
- {@code JobService.class} especificada. Para ver más ejemplos de la implementación de {@link
- android.app.job.JobScheduler}, consulta la <a href="{@docRoot}samples/JobScheduler/index.html">aplicación de ejemplo JobScheduler</a>.
-</p>
-
-<p>
- Las aplicaciones que usan servicios de GMSCore y están orientadas a Android 5.0 (API nivel 21)
- o anterior, pueden usar <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> y especificar {@code Task.NETWORK_STATE_UNMETERED}.
-</p>
-
-<h3 id="monitor-conn">
- Control de la conectividad de la red mientras la aplicación se está ejecutando
-</h3>
-
-<p>
- Las aplicaciones que se ejecutan aún pueden escuchar {@code CONNECTIVITY_CHANGE} con un
- {@link android.content.BroadcastReceiver} registrado. No obstante, la API {@link
- android.net.ConnectivityManager} ofrece un método más robusto para solicitar
- un callback solo cuando se cumplen las condiciones de red especificadas.
-</p>
-
-<p>
- Los objetos {@link android.net.NetworkRequest} definen los parámetros del
- callback de la red en términos de {@link android.net.NetworkCapabilities}. Creas
- objetos {@link android.net.NetworkRequest} con la clase {@link
- android.net.NetworkRequest.Builder NetworkRequest.Builder}. {@link
- android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
- android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
- y luego pasa el objeto {@link android.net.NetworkRequest} al sistema. Cuando
- se cumplen las condiciones de la red, la aplicación recibe un callback para ejecutar el método
- {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
- onAvailable()} definido en su clase {@link
- android.net.ConnectivityManager.NetworkCallback}.
-</p>
-
-<p>
- La aplicación continuará recibiendo callbacks hasta que la aplicación salga o llame a
- {@link android.net.ConnectivityManager#unregisterNetworkCallback
- unregisterNetworkCallback()}.
-</p>
-
-<h2 id="media-broadcasts">
- Restricciones en NEW_PICTURE y NEW_VIDEO
-</h2>
-
-<p>
- En Android N, las aplicaciones no pueden enviar ni recibir transmisiones {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} ni {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Esta restricción ayuda a
- aliviar el impacto en el rendimiento y la experiencia de usuario cuando varias aplicaciones deben
- activarse para procesar una nueva imagen o video. Android N
- extiende {@link android.app.job.JobInfo} y {@link
- android.app.job.JobParameters} para proporcionar una solución alternativa.
-</p>
-
-<h3 id="new-jobinfo">
- Nuevos métodos de JobInfo
-</h3>
-
-<p>
- Para activar trabajos en los cambios del URI de contenido, Android N extiende
- la API {@link android.app.job.JobInfo} con los siguientes métodos:
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- Encapsula parámetros necesarios para activar un trabajo en cambios del URI de contenido.
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- Pasa un objeto {@code TriggerContentUri} a {@link
- android.app.job.JobInfo}. Un {@link android.database.ContentObserver}
- controla el URI de contenido encapsulado. Si hay múltiples objetos {@code
- TriggerContentUri} asociados a un trabajo, el sistema proporciona un
- callback aunque se informe un cambio en un solo URI de contenido.
- </dd>
-
- <dd>
- Si cambia algún desencadenante del URI determinado, agrega el marcador {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} para
- activar el trabajo. Este marcador
- corresponde al parámetro {@code notifyForDescendants} pasado a {@link
- android.content.ContentResolver#registerContentObserver
- registerContentObserver()}.
- </dd>
-</dl>
-
-<p class="note">
- <strong>Nota:</strong> No se puede usar {@code TriggerContentUri()} junto
- con {@link android.app.job.JobInfo.Builder#setPeriodic
- setPeriodic()} ni {@link android.app.job.JobInfo.Builder#setPersisted
- setPersisted()}. Para controlar de forma constante la presencia de cambios en el contenido, programa un nuevo
- {@link android.app.job.JobInfo} antes de que el {@link
- android.app.job.JobService} de la aplicación termine de administrar la callback más reciente.
-</p>
-
-<p>
- El siguiente código de ejemplo programa la activación de un trabajo cuando el sistema informe
- un cambio en el URI de contenido, {@code MEDIA_URI}:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-</pre>
-<p>
- Cuando el sistema informa un cambio en el(los) URI de contenido especificado(s), tu aplicación
- recibe un callback y se pasa un objeto {@link android.app.job.JobParameters}
- al método {@link android.app.job.JobService#onStartJob onStartJob()}
- en {@code MediaContentJob.class}.
-</p>
-
-<h3 id="new-jobparam">
- Nuevos métodos de JobParameter
-</h3>
-
-<p>
- Android N también amplía {@link android.app.job.JobParameters} para
- permitir que tu aplicación reciba información útil sobre qué autoridades de contenido
- y URI activaron el trabajo:
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- Devuelve el arreglo de los URI que activaron el trabajo. Ese arreglo será {@code
- null} si ningún URI activó el trabajo (por ejemplo, el trabajo
- se activó debido al cumplimiento de un plazo o por otro motivo), o la cantidad de URI
- modificados es superior a 50.
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- Devuelve el arreglo de cadenas de autoridades de contenido que activaron el trabajo.
- Si el arreglo devuelto no es {@code null}, usa {@code getTriggeredContentUris()}
- para recuperar los detalles de los URI que se modificaron.
- </dd>
-</dl>
-
-<p>
- El siguiente código de ejemplo anula el método {@link
- android.app.job.JobService#onStartJob JobService.onStartJob()} y
- registra las autoridades de contenido y los URI que activaron el trabajo:
-</p>
-
-<pre>
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-</pre>
-
-<h2 id="further-optimization">
- Cómo optimizar aún más tu aplicación
-</h2>
-
-<p>
- Optimizar tus aplicaciones para que se ejecuten en dispositivos con poca memoria o en condiciones de niveles bajos
- de memoria puede mejorar el rendimiento y la experiencia del usuario. Eliminar
- dependencias en servicios en segundo plano y receptores de transmisiones implícitas
- registrados estadísticamente puede ayudar a que tu aplicación se ejecute mejor en esos dispositivos. Si bien
- Android N toma medidas para reducir algunos de estos problemas, te
- recomendamos que optimices tu aplicación para que pueda ejecutarse sin utilizar esos
- procesos en segundo plano.
-</p>
-
-<p>
- Android N presenta algunos comandos adicionales de <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a> que
- puedes usar para probar el comportamiento de la aplicación con esos procesos en segundo plano deshabilitados:
-</p>
-
-<ul>
- <li>Para simular condiciones en las que no hay transmisiones implícitas ni servicios en segundo plano
- disponibles, ingresa el siguiente comando:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>Para volver a habilitar las transmisiones implícitas y los servicios en segundo plano, ingresa el
- siguiente comando:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
diff --git a/docs/html-intl/intl/es/preview/features/icu4j-framework.jd b/docs/html-intl/intl/es/preview/features/icu4j-framework.jd
deleted file mode 100644
index e87c4dd..0000000
--- a/docs/html-intl/intl/es/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,159 +0,0 @@
-page.title=API de ICU4J en el framework de Android
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>En este documento:</h2>
-<ol>
- <li><a href="#relation">Relación con ICU4J</a></li>
- <li><a href="#migration">Migración hacia API de android.icu desde ICU4J</a></li>
- <li><a href="#licence">Licencias</a></li>
-</ol>
-
-<h2>Consulta también</h2>
-<ol>
- <li>
- <a class="external-link" href="http://userguide.icu-project.org">Documentación para ICU4J</a>
- </li>
-
- <li>
- <a class="external-link" href="http://site.icu-project.org/#TOC-What-is-ICU-">Últimos estándares compatibles
- con ICU4J</a>
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- ICU4J es un conjunto de bibliotecas de Java de código abierto y amplio uso que brinda soporte de Unicode
- y de globalización para aplicaciones de software. Android N
- expone un subconjunto de las API de ICU4J en el framework de Android para que los desarrolladores de aplicaciones
- lo usen debajo del paquete {@code android.icu}. Estas API usan
- datos de ubicación que están presentes en el dispositivo. Como resultado, puedes reducir la superficie de APK
- evitando la compilación de las bibliotecas de ICU4J en APK. En lugar de esto, puedes
- llamarlas en el framework. (En este caso, posiblemente debas brindar
- <a href="{@docRoot}google/play/publishing/multiple-apks.html">versiones múltiples
- del APK</a>, de modo que los usuarios que usan versiones de Android inferiores a Android N
- puedan descargar una versión de la aplicación que incluya las bibliotecas de ICU4J).
-</p>
-
-<p>
- Al principio de este documento, encontrarás información básica sobre el mínimo de niveles de Android API
- necesarios para soportar estas bibliotecas. Más adelante, encontrarás explicaciones sobre qué
- necesitas saber acerca de la implementación de ICU4J específica para Android. Por último,
- encontrarás explicaciones sobre cómo usar las API de ICU4J en el framework de Android.
-</p>
-
-<h2 id="relation">Relación con ICU4J</h2>
-
-<p>
- Android N expone un subconjunto de las API de ICU4J mediante el
- paquete <code>android.icu</code>, en lugar de <code>com.ibm.icu</code>. El
-framework de Android puede elegir no
- exponer las API de ICU4J por varias razones; por ejemplo, Android N no expone
- algunas API obsoletas o algunas que el equipo de ICU aún no ha declarado como
- estables. A medida que el equipo de ICU deje de usar API en el futuro, Android también las marcará
- como obsoletas, pero las seguirá incluyendo.
-</p>
-
-<p class="table-caption"><strong>Tabla 1.</strong> Versiones de ICU y CLDR usadas
- en Android N.</p>
-<table>
-<tr>
-<th>Nivel de Android API</th>
-<th>Versión de ICU</th>
-<th>Versión de CLDR</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>Debes tener en cuenta lo siguiente:</p>
-
-<ul>
-<li>Las API de ICU4J del framework de Android no incluyen todas las API de ICU4J.</li>
-<li>Los desarrolladores de NDK deben saber que ICU4C de Android no es compatible.</li>
-<li>Las API del framework de Android no reemplazan la compatibilidad de Android para
-<a href="{@docRoot}guide/topics/resources/localization.html">localizar con
-recursos</a>.</li>
-</ul>
-
-<h2 id="migration">Migración hacia el paquete android.icu desde com.ibm.icu</h2>
-
-<p>
- Si ya estás usando las API de ICU4J en tu aplicación y las
- API de <code>android.icu</code> cumplen con tus requisitos, migrar hacia las
- API del framework implicará que cambies tus importaciones de Java
- de <code>com.ibm.icu</code> a <code>android.icu</code>. Luego, puedes
- quitar tu propia copia de los archivos de ICU4J del APK.
-</p>
-
-<p class="note">
- <b>Nota</b>: Las API del framework de ICU4J usan el espacio de nombres {@code android.icu}
- en lugar de {@code com.ibm.icu}. El motivo de esto es evitar conflictos de espacio de nombres
- en APK que contienen sus propias bibliotecas de {@code com.ibm.icu}.
-</p>
-
-<h3 id="migrate-from-android">
- Migración hacia API de android.icu desde otras Android SDK API
-</h3>
-
-<p>
- Algunas clases de los paquetes de <code>java</code> y de <code>android</code> son
- equivalentes a las clases de ICU4J. Sin embargo, ICU4J a menudo brinda una compatibilidad
- más amplia para estándares e idiomas.
-</p>
-<p>Aquí tienes algunos ejemplos para comenzar:</p>
-<table>
-<tr>
-<th>Clase</th>
-<th>Alternativa</th>
-</tr>
-<tr>
-<td><code>java.lang.Character</code> </td>
-<td><code>android.icu.lang.UCharacter</code> </td>
-</tr>
-<tr>
-<td><code>java.text.BreakIterator</code> </td>
-<td><code>android.icu.text.BreakIterator</code> </td>
-</tr>
-<tr>
-<td><code>java.text.DecimalFormat</code> </td>
-<td><code>android.icu.text.DecimalFormat</code> </td>
-</tr>
-<tr>
-<td><code>java.util.Calendar</code></td>
-<td>
-<code>android.icu.util.Calendar</code></td>
-</tr>
-<tr>
-<td><code>android.text.BidiFormatter</code>
- </td>
-<td><code>android.icu.text.Bidi</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateFormat</code>
- </td>
-<td><code>android.icu.text.DateFormat</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateUtils</code> </td>
-<td><code>android.icu.text.DateFormat</code>
-<code>android.icu.text.RelativeDateTimeFormatter</code>
-</td>
-</tr>
-</table>
-
-<h2 id="licence">Licencias</h2>
-
-<p>
- ICU4J se presenta bajo la licencia de ICU. Para obtener información más detallada, consulta la <a class="external-link" href="http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">Guía de usuario
- de ICU.</a>
-</p>
diff --git a/docs/html-intl/intl/es/preview/features/multilingual-support.jd b/docs/html-intl/intl/es/preview/features/multilingual-support.jd
deleted file mode 100644
index b03777c..0000000
--- a/docs/html-intl/intl/es/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,221 +0,0 @@
-page.title=Idioma y configuración regional
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>En este documento:</h2>
-<ol>
- <li><a href="#preN">Desafíos para la resolución de recursos de idioma</a></li>
- <li><a href="#postN">Mejoras de la estrategia de resolución de recursos</a></li>
- <li><a href="#design">Diseño de la aplicación para permitir configuraciones regionales
- adicionales</a></li>
-
-</ol>
-
-</div>
-</div>
-
-<p>Android N brinda un soporte mejorado para los usuarios de diferentes idiomas
-y les permite seleccionar múltiples configuraciones regionales en la configuración. Android N
-brinda esta capacidad expandiendo ampliamente la cantidad de configuraciones regionales compatibles
-y cambiando la forma en que el sistema resuelve los recursos. El nuevo método de resolución
-de recursos es más robusto y está diseñado para ser compatible con APK existentes, pero
-debes tener especial cuidado para detectar cualquier comportamiento inesperado. Por ejemplo, debes
-realizar pruebas para asegurarte de que tu aplicación muestre el idioma esperado de forma predeterminada. Además,
-si tu aplicación permite múltiples idiomas, debes asegurarte de que esta compatibilidad funcione
-como debería. Por último, debes tratar de asegurarte de que tu aplicación administre con facilidad
-los idiomas para los cuales no diseñaste explícitamente la aplicación.</p>
-
-<p>Al inicio de este documento, encontrarás una explicación sobre la estrategia de resolución de recursos anterior a
-Android N. Luego, encontrarás una descripción de la estrategia de resolución de recursos
-mejorada de Android N. Por último, encontrarás una explicación sobre cómo aprovechar
-la cantidad expandida de configuraciones regionales para permitir acceso a más usuarios de diferentes idiomas.</p>
-
-<h2 id="preN">Desafíos para la resolución de recursos de idioma</h2>
-
-<p>Antes de Android N, Android no siempre podía
- hacer coincidir correctamente las configuraciones regionales de la aplicación y del sistema.</p>
-
- <p>Por ejemplo, imagina que tienes la siguiente situación:</p>
- <ul>
- <li>El idioma predeterminado de la aplicación es {@code en_US} (inglés de EE. UU.), y también tiene
- cadenas en español localizadas en archivos de recursos {@code es_ES}
-.</li>
- <li> Se configura un dispositivo en {@code es_MX}. </li>
-
-<p>Cuando el código Java hace referencia a cadenas, el sistema carga
- las cadenas del archivo de recursos ({@code en_US}) predeterminado, incluso si la aplicación tiene
- recursos en español localizados en {@code es_ES}. Esto se debe a que, cuando el sistema
- no puede encontrar una coincidencia exacta, continúa buscando recursos y se quita el
- código del país de la configuración regional. Finalmente, si no se encuentra una coincidencia, el sistema regresa
- a la configuración predeterminada, que es {@code en_US}. </p>
-
-
-<p>El sistema también usaba {@code en_US} de forma predeterminada si el usuario elegía un idioma que
- no era compatible con la aplicación, como el francés. Por ejemplo:</p>
-
-<p class="table-caption" id="t-resource-res">
-<strong>Tabla 1.</strong> Resolución de recursos sin una coincidencia de configuración regional exacta.
-</p>
-<table>
-<tbody>
-<tr>
-<th>Configuración del usuario</th>
-<th>Recursos de la aplicación</th>
-<th>Resolución de recursos</th>
-</tr>
-<tr>
-<td>fr_CH</td>
-<td>
-Predeterminado (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
- <td>
-Intentar fr_CH => Error<br>
-Intentar fr => Error<br>
-Usar predeterminado (en)
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>En este ejemplo, el sistema muestra las cadenas en inglés sin
-saber si el usuario comprende este idioma. Este comportamiento es muy común
-hoy en día. Android N debería reducir sustancialmente la frecuencia
-de resultados como este.</p>
-
-<h2 id="postN">Mejoras de la estrategia de resolución de recursos</h2>
-<p>Android N brinda una resolución de recursos más robusta y
-encuentra mejores recursos de forma automática. Sin embargo, para acelerar la resolución y mejorar la
-facilidad de mantenimiento, debes almacenar los recursos en el dialecto primario.
- Por ejemplo, si antes almacenabas los recursos en español en el directorio {@code es-US}
-, pásalos al directorio {@code es-419}, que contiene la variante de Latinoamérica.
- De forma similar, si tienes cadenas de recursos en una carpeta llamada {@code en-GB}, cámbiale
- el nombre a {@code en-001} (inglés internacional), ya que el dialecto primario más común
- para las cadenas en <code>en-GB</code> es {@code en-001}.
- Los siguientes ejemplos explican por qué estas prácticas mejoran el desempeño
- y la confiabilidad de la resolución de recursos.</p>
-
-<h3>Ejemplos de resolución de recursos</h3>
-
-<p>Con Android N, el caso descrito en la <strong>Tabla 1</strong> se resuelve
-de otra forma:</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>Tabla 2.</strong> Una estrategia de resolución mejorada para los casos en que no
-hay una coincidencia de configuración regional exacta.</p>
-<table>
-<tr>
-<th>Configuración del usuario</th>
-<th>Recursos de la aplicación</th>
-<th>Resolución de recursos</th>
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-</ol>
-</td>
-<td>
-Predeterminado (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
-<td>
-Intentar fr_CH => Error<br>
-Intentar fr => Error<br>
-Intentar secundario de fr => fr_FR<br>
-Usar fr_FR
-</td>
-</tr>
-
-</table>
-
-
-<p>Así, los recursos se muestran en francés en lugar de en inglés. Este ejemplo también muestra
- por qué deberías almacenar las cadenas en francés en {@code fr} en lugar de en {@code fr_FR}
- para Android N. Aquí, el procedimiento se basa en hacer coincidir el dialecto primario más cercano,
- lo cual hace que la resolución sea más rápida y más predecible.</p>
-
-<p>Además de esta lógica de resolución mejorada, Android ofrece ahora más
- idiomas de usuario de entre los cuales elegir. Volvamos a ver el ejemplo anterior con el idioma italiano
- especificado como un idioma de usuario adicional, pero sin compatibilidad de la aplicación con el idioma francés. </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>Tabla 3.</strong> Resolución de recursos cuando la aplicación solo hace coincidir la
-configuración regional de segunda preferencia del usuario.</p>
-<table>
-<tr>
-<th>Configuración del usuario</th>
-<th>Recursos de la aplicación</th>
-<th>Resolución de recursos</th>
-
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-<li> it_CH</li>
-</ol>
-</td>
-<td>
-Predeterminado (en)<br>
-de_DE<br>
-es_ES<br>
-it_IT<br>
-</td>
-<td>
-Intentar fr_CH => Error<br>
-Intentar fr => Error<br>
-Intentar secundario de fr => Error<br>
-Intentar it_CH => Error<br>
-Intentar it => Error<br>
-Intentar secundario de it => it_IT<br>
-Usar it_IT
-</td>
-
-</tr>
-
-</table>
-<p>El usuario recibe la información en un idioma que comprende, si bien la aplicación no
-es compatible con el idioma francés.</p>
-
-
-<h2 id="design">Diseño de la aplicación para permitir configuraciones regionales adicionales</h2>
-<h3>API LocaleList</h3>
-
-<p>Android N incorpora una nueva API, {@code LocaleList.getDefault()},
-que les permite a las aplicaciones consultar directamente la lista de idiomas que ha especificado el usuario. Esta API
- te permite crear un comportamiento de la aplicación
- más sofisticado y una presentación de contenido más optimizada. Por ejemplo, las búsquedas
- pueden mostrar resultados en múltiples idiomas según la configuración del usuario. Las aplicaciones de navegadores
- pueden evitar ofrecer la traducción de páginas que están en un idioma que el usuario comprende,
- y las aplicaciones de teclado pueden habilitar automáticamente todos los diseños correctos. </p>
-
-<h3>Formateadores</h3>
-
-<p>Hasta Android 6.0 (API nivel 23), Android solo permitía una o dos
- configuraciones regionales para muchos idiomas comunes
- (en, es, ar, fr, ru). Debido a que había solo unas pocas variantes para cada idioma,
-las aplicaciones podían almacenar algunos números y fechas como cadenas preprogramadas
-en los archivos de recursos. Sin embargo, con el conjunto ampliado de configuraciones regionales
-compatibles de Android, puede haber diferencias importantes
-en los formatos de fecha, hora, moneda e
-información similar, incluso dentro de una sola configuración regional. Preprogramar los formatos puede generar
-una experiencia confusa para los usuarios. Por lo tanto, cuando desarrolles aplicaciones para Android,
-asegúrate de usar formateadores en lugar de preprogramar las cadenas de números y fechas.</p>
-
-<p>Un muy buen ejemplo es el árabe. Android N expandió su compatibilidad de
-una configuración regional, {@code ar_EG}, a 27 configuraciones regionales. Estas configuraciones regionales pueden compartir la mayoría de los recursos,
-pero algunas prefieren dígitos ASCII, mientras que otras prefieren dígitos nativos. Por ejemplo,
-cuando desees crear una oración con una variable de dígito, como
-"Elige un PIN de 4 dígitos", usa formateadores como se muestra a continuación:</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html-intl/intl/es/preview/features/notification-updates.jd b/docs/html-intl/intl/es/preview/features/notification-updates.jd
deleted file mode 100644
index ff0635e..0000000
--- a/docs/html-intl/intl/es/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,393 +0,0 @@
-page.title=Notificaciones
-page.tags=notifications
-helpoutsWidget=true
-page.image=/preview/images/notifications-card.png
-
-trainingnavtop=true
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<!-- table of contents -->
-<h2>Este documento incluye lo siguiente:</h2>
-<ol>
- <li><a href="#direct">Respuesta directa</a></li>
- <li><a href="#bundle">Notificaciones integradas</a></li>
- <li><a href="#custom">Vistas personalizadas</a></li>
- <li><a href="#style">Estilo de mensajería</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N presenta varias API nuevas que permiten a las aplicaciones publicar
-notificaciones altamente visibles e interactivas.</p>
-
-<p>Android N amplía la API de notificación existente {@link android.support.v4.app.RemoteInput}
-para admitir respuestas en línea en teléfonos celulares. Esta función permite a los usuarios
- responder rápidamente desde el panel de notificaciones sin tener que visitar tu aplicación.</p>
-
-<p>
- Android N también te permite agrupar notificaciones similares para que
- aparezcan como una sola notificación. Para que esto sea posible, Android N usa el método existente {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()}. Los usuarios pueden expandir cada una de las
- notificaciones y realizar acciones como responder e ignorar en cada una
- de ellas, de forma individual desde el panel de notificaciones.
-</p>
-
-<p>Por último, Android N también suma nuevas API que te permiten aprovechar las decoraciones
-del sistema en las vistas de notificación personalizadas de tu aplicación. Estas API ayudan a
-garantizar que las vistas de notificaciones compartan una presentación acorde a las
-plantillas estándar.</p>
-
-<p>En este documento se destacan algunos de los cambios clave que puedes tener en cuenta
- al usar las nuevas funciones de notificación en tus aplicaciones.</p>
-
-<h2 id="direct">Respuesta directa</h2>
-
-<p>Con la función de respuesta directa en Android N, los usuarios pueden responder
-rápidamente mensajes de texto o actualizar listas de tareas directamente dentro de la interfaz de
-notificación. En un dispositivo portátil, la acción de respuesta en línea aparece como un botón adicional
- anexado a la notificación. Cuando un usuario responde mediante el teclado, el sistema adjunta
- la respuesta de texto a la intent
- que especificaste para la acción de notificación y envía la intención a tu
- aplicación para dispositivos portátiles.
-
-
-<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
- {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
-<p class="img-caption">
- <strong>Figura 1.</strong> Android N agrega el botón de acción <strong>Reply</strong>
-.
-</p>
-
-<h3>Adición de acciones de respuesta en línea</h3>
-
-<p>Para crear una acción de notificación que admita respuesta directa:
-</p>
-
-<ol>
-<li>Crea una instancia de {@link android.support.v4.app.RemoteInput.Builder}
- que puedas agregar a tu acción de
-notificación. El constructor de esta clase acepta una cadena que el sistema usa como clave
- para la inserción de texto. Luego, tu aplicación para dispositivos portátiles usará esa clave para recuperar el texto
- de la entrada.
-
-<pre>
-// Key for the string that's delivered in the action's intent.
-private static final String KEY_TEXT_REPLY = "key_text_reply";
-String replyLabel = getResources().getString(R.string.reply_label);
-RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
- .setLabel(replyLabel)
- .build();
-</pre>
-</li>
-<li>Adjunta el objeto {@link android.support.v4.app.RemoteInput}
- a una acción usando <code>addRemoteInput()</code>.
-
-<pre>
-// Create the reply action and add the remote input.
-Notification.Action action =
- new Notification.Action.Builder(R.drawable.ic_reply_icon,
- getString(R.string.label), replyPendingIntent)
- .addRemoteInput(remoteInput)
- .build();
-</pre>
-</li>
-
-<li>Aplica la acción a una notificación y emite la notificación.
-
-<pre>
-// Build the notification and add the action.
-Notification newMessageNotification =
- new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_message)
- .setContentTitle(getString(R.string.title))
- .setContentText(getString(R.string.content))
- .addAction(action))
- .build();
-
-// Issue the notification.
-NotificationManager notificationManager =
- NotificationManager.from(mContext);
-notificationManager.notify(notificationId, newMessageNotification);
-
-</pre>
-</li>
-
-</ol>
-
-
-<p> Cuando se active la acción de notificación,
-el sistema le solicitará al usuario que ingrese una respuesta. </p>
-
-<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
- {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Figura 2.</strong> El usuario ingresa texto desde el panel de notificaciones.
-</p>
-
-<h3>
- Recuperación de entradas del usuario a partir de la respuesta en línea
-</h3>
-
-<p>
- Para recibir entradas del usuario de la interfaz de notificación a la actividad que
- declaraste en la intent de la acción de respuesta:
-</p>
-
-<ol>
- <li>Llama a {@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()} pasando la intent de la acción de notificación como
- el parámetro de entrada. Este método devuelve un {@link android.os.Bundle} que
- contiene la respuesta de texto.
-
- <pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
- </li>
-
- <li>Consulta el paquete con la clave de resultado (proporcionada al constructor {@link
- android.support.v4.app.RemoteInput.Builder}). Puedes completar
- este proceso y recuperar el texto de entrada mediante la creación de un método, como en el
- siguiente fragmento de código:
-
- <pre>
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-</pre>
- </li>
-
- <li>Crea y emite otra notificación, utilizando la misma ID de notificación que
- proporcionaste para la notificación anterior. El indicador de progreso
- desaparece de la interfaz de notificación para informarles a los usuarios que la respuesta
- fue exitosa. Al trabajar con esta nueva notificación, usa el contexto que se
- pasa al método {@code onReceive()} del receptor.
-
- <pre>
-// Build a new notification, which informs the user that the system
-// handled their interaction with the previous notification.
-Notification repliedNotification =
- new Notification.Builder(context)
- .setSmallIcon(R.drawable.ic_message)
- .setContentText(getString(R.string.replied))
- .build();
-
-// Issue the new notification.
-NotificationManager notificationManager =
- NotificationManager.from(context);
-notificationManager.notify(notificationId, repliedNotification);
-</pre>
- </li>
-</ol>
-
-<p>
- En el caso de las aplicaciones interactivas, como los chats, podría ser útil incluir
- contexto adicional cuando se administra texto recuperado. Por ejemplo, en estas aplicaciones, se podrían mostrar
- múltiples líneas de historial de chat. Cuando el usuario responde a través de {@link
- android.support.v4.app.RemoteInput}, puedes actualizar el historial de respuestas
- por medio del método {@code setRemoteInputHistory()}.
-</p>
-
-<p>
- La notificación se debe actualizar o cancelar luego de que la aplicación haya
- recibido entradas remotas. Cuando el usuario responde a una actualización remota
- por medio de la respuesta directa,
- no canceles la notificación. En cambio, actualiza la notificación para mostrar la respuesta del usuario.
-En el caso de las notificaciones que utilizan {@code MessagingStyle}, debes agregar
-la respuesta como el mensaje más reciente. Cuando se utilizan otras plantillas, puedes
-agregar la respuesta del usuario al historial de entradas remotas.
-</p>
-
-<h2 id="bundle">Notificaciones integradas</h2>
-
-<p>Android N ofrece a los desarrolladores una nueva manera de representar
- una cola de notificaciones: <i>notificaciones integradas</i>. Esto es similar a la función
- <a href="{@docRoot}training/wearables/notifications/stacks.html">Pilas de
- notificaciones</a> en Android Wear. Por ejemplo, si tu aplicación crea notificaciones
- para los mensajes recibidos, cuando se recibe más de un mensaje, agrupa las
- notificaciones en un solo paquete. Puedes
- usar el método existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()} para agrupar notificaciones similares.</p>
-
-<p>
- El grupo de notificaciones impone una jerarquía en las notificaciones que lo integran.
- En la parte superior de esa jerarquía se encuentra una notificación principal que muestra información
- resumida para el grupo. El usuario puede expandir
- progresivamente el grupo de notificaciones, y el sistema muestra más información a medida que el
- usuario continúa indagando. Cuando el usuario expande el paquete, el sistema revela más
- información para todas sus notificaciones secundarias; cuando el usuario
- expande una de esas notificaciones, el sistema revela todo su contenido.
-</p>
-
-<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
- {@docRoot}preview/images/bundles_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Figura 3.</strong> El usuario puede expandir progresivamente el grupo de
- notificaciones.
-</p>
-
-<p class="note">
- <strong>Nota:</strong> Si la misma aplicación envía cuatro o más notificaciones
- y no se especifica un grupo, el
- sistema las agrupa automáticamente.
-</p>
-
-<p>Para obtener información acerca de cómo agregar notificaciones a un grupo, consulta
-<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Agregar
-cada notificación a un grupo</a>.</p>
-
-
-<h3 id="best-practices">Prácticas recomendadas para las notificaciones integradas</h3>
-<p>Esta sección proporciona pautas acerca de cuándo usar grupos de notificaciones en lugar
-de las notificaciones {@link android.app.Notification.InboxStyle InboxStyle}
-que estaban disponibles en versiones anteriores de la
-plataforma Android.</p>
-
-<h3>Cuándo usar notificaciones integradas</h3>
-
-<p>Solo debes usar grupos de notificaciones si se cumplen todas las siguientes condiciones
-para tu caso de uso:</p>
-
-<ul>
- <li>Las notificaciones secundarias son notificaciones completas y se pueden mostrar
- individualmente sin la necesidad de un resumen del grupo.</li>
- <li>El aislamiento de notificaciones secundarias de forma individual tiene un beneficio. Por
- ejemplo:
- </li>
- <ul>
- <li>Son interactivas, con acciones específicas para cada notificación secundaria.</li>
- <li>Hay más información sobre la notificación secundaria que el usuario quiere leer.</li>
- </ul>
-</ul>
-
-<p>Algunos ejemplos de buenos casos de uso para grupos de notificaciones incluyen: una aplicación de mensajería
-que exhiba una lista de mensajes entrantes, o una aplicación de correo electrónico que exhiba una lista de
-correos electrónicos recibidos.</p>
-
-<p>
-Algunos ejemplos de casos en los que se prefiere una sola notificación
- incluyen mensajes individuales de una sola persona, o una lista de
- elementos de texto de una sola línea. Para lograr esto, puedes usar
-({@link android.app.Notification.InboxStyle InboxStyle} o
-{@link android.app.Notification.BigTextStyle BigTextStyle})
-.
-</p>
-
-<h3 id ="post">Visualización de notificaciones integradas</h3>
-
-<p>
- La aplicación siempre debe publicar un resumen del grupo, aún si el grupo contiene una sola
- notificación secundaria. Si contiene una sola notificación, el sistema suprimirá el resumen y mostrará directamente la
- notificación secundaria. Esto garantiza
- que el sistema pueda proporcionar una experiencia uniforme cuando el usuario quita con un gesto de "deslizar" notificaciones
- secundarias de un grupo.
-</p>
-
-<p class="note">
- <strong>Nota:</strong> Esta versión de Android N aún no
- suprime el resumen para los grupos de notificaciones que contienen una sola notificación secundaria. Esta
- funcionalidad se agregará en una versión posterior de Android N.
-</p>
-
-<h3>Inspección de notificaciones</h3>
-
-<p>Si bien el sistema generalmente muestra las notificaciones secundarias como un grupo, puedes configurarlas
- para que aparezcan temporalmente como
- <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
- notificaciones emergentes</a>. Esta función es especialmente útil porque permite
- el acceso inmediato a la notificación secundaria más reciente y a las acciones asociadas a ella.
-</p>
-
-
-<h3>Compatibilidad con versiones anteriores</h3>
-
-<p>
- Tanto los grupos de notificaciones como las entradas remotas han formado parte de la API {@link
- android.app.Notification} desde Android 5.0 (API nivel 21) para soportar dispositivos
- con Android Wear. Si ya compilaste notificaciones con esas API,
- lo único que debes hacer es verificar que el comportamiento de la aplicación concuerde
- las pautas antes descritas y considerar la implementación de {@code
- setRemoteInputHistory()}.
-</p>
-
-<p>
- Para poder ser compatible con versiones anteriores, están disponibles las mismas API con
- la clase {@link android.support.v4.app.NotificationCompat}
- de la biblioteca de soporte, que te permite crear notificaciones que funcionan en versiones de Android
- anteriores. En dispositivos portátiles y tablets, los usuarios solo ven la notificación de resumen
- de modo que una aplicación aún debe tener un estilo de bandeja de entrada o una notificación equivalente
- que represente todo el contenido del grupo. Dado que los dispositivos con Android
- Wear permiten a los usuarios ver todas las notificaciones secundarias incluso en
- niveles anteriores de la plataforma, debes crear notificaciones secundarias independientemente del nivel de
- API.
-</p>
-
-<h2 id="custom"> Vistas personalizadas</h2>
-<p>A partir de la versión Android N, puedes personalizar vistas de notificaciones y
-aún obtener decoraciones del sistema, como encabezados de notificaciones, acciones y diseños
-expandibles.</p>
-
-<p>Para habilitar esta característica, Android N suma las siguientes API para que puedas diseñar tu
- vista personalizada:</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> Permite diseñar notificaciones que no sean notificaciones
-de medios.</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> Permite diseñar notificaciones de medios.</dd>
-</dl>
-
-<p>Para usar esta nueva API, llama al método {@code setStyle()} y pásale
-el estilo de la vista personalizada que hayas elegido.</p>
-
-<p>Este fragmento muestra cómo crear un objeto de notificación personalizada con el método
-{@code DecoratedCustomViewStyle()}.</p>
-
-<pre>
-Notification notification = new Notification.Builder()
- .setSmallIcon(R.drawable.ic_stat_player)
- .setLargeIcon(albumArtBitmap))
- .setCustomContentView(contentView);
- .setStyle(new Notification.DecoratedCustomViewStyle())
- .build();
-
-</pre>
-
-<h2 id="style">Estilo de mensajería</h2>
-<p>
- Android N presenta una nueva API para personalizar el estilo de una notificación.
- Por medio de la clase <code>MessageStyle</code>, puedes modificar varias de las
- etiquetas que aparecen en la notificación, incluidos el título de la conversación,
- mensajes adicionales y la vista de contenido para la notificación.
-</p>
-
-<p>
- El siguiente fragmento de código demuestra cómo personalizar el estilo
- de una notificación mediante la clase <code>MessageStyle</code>.
-</p>
-
-<pre>
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-</pre>
diff --git a/docs/html-intl/intl/in/about/versions/nougat/android-7.0-testing.jd b/docs/html-intl/intl/in/about/versions/nougat/android-7.0-testing.jd
deleted file mode 100644
index 94bc74c..0000000
--- a/docs/html-intl/intl/in/about/versions/nougat/android-7.0-testing.jd
+++ /dev/null
@@ -1,190 +0,0 @@
-page.title=Panduan Pengujian
-page.image=images/cards/card-n-guide_2x.png
-meta.tags="preview", "testing"
-page.tags="preview", "developer preview"
-
-@jd:body
-
-<div id="tb-wrapper">
- <div id="tb">
- <h2>Dalam dokumen ini</h2>
- <ol>
- <li><a href="#runtime-permissions">Izin Pengujian</a></li>
- <li><a href="#doze-standby">Menguji Istirahatkan dan Aplikasi Siaga</a></li>
- <li><a href="#ids">Pencadangan Otomatis dan Identifier Perangkat</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N memberi Anda kesempatan untuk memastikan aplikasi bekerja pada
- platform versi berikutnya. Pratinjau ini berisi beberapa API dan perubahan perilaku yang bisa
- memengaruhi aplikasi Anda, sebagaimana dijelaskan dalam <a href="{@docRoot}preview/api-overview.html">Ringkasan
- API</a> dan <a href="{@docRoot}preview/behavior-changes.html">Perubahan Perilaku</a>. Dalam menguji
- aplikasi dengan pratinjau, ada beberapa perubahan sistem spesifik yang harus Anda fokuskan untuk
- memastikan pengguna mendapatkan pengalaman yang bagus.
-</p>
-
-<p>
- Panduan ini menjelaskan apa dan bagaimana menguji fitur pratinjau dengan aplikasi Anda. Anda harus
- mengutamakan pengujian fitur pratinjau spesifik ini, dikarenakan pengaruhnya yang besar pada
- perilaku aplikasi Anda:
-</p>
-
-<ul>
- <li><a href="#runtime-permissions">Izin</a>
- </li>
- <li><a href="#doze-standby">Istirahatkan dan Aplikasi Siaga</a>
- </li>
- <li><a href="#ids">Pencadangan Otomatis dan Identifier Perangkat</a></li>
-</ul>
-
-<p>
- Untuk informasi selengkapnya tentang cara menyiapkan perangkat atau perangkat maya dengan citra sistem pratinjau
- untuk pengujian, lihat <a href="{@docRoot}preview/setup-sdk.html">Menyiapkan
-Android N SDK</a>.
-</p>
-
-
-<h2 id="runtime-permissions">Izin Pengujian</h2>
-
-<p>
- Model <a href="{@docRoot}preview/features/runtime-permissions.html">Izin</a> yang baru
- mengubah cara alokasi izin untuk aplikasi Anda oleh pengguna. Sebagai ganti memberi semua
- izin selama prosedur pemasangan, aplikasi Anda harus meminta izin kepada pengguna secara individual
- pada waktu proses. Bagi pengguna, perilaku ini memberi kontrol yang lebih detail atas setiap aktivitas aplikasi, dan
- juga konteks yang lebih untuk memahami sebab aplikasi meminta izin tertentu. Pengguna
- bisa memberi atau mencabut izin yang diberikan pada suatu aplikasi secara individual kapan saja. Fitur
- pratinjau ini kemungkinan besar memengaruhi perilaku aplikasi Anda dan mungkin menghambat fungsi beberapa
- fitur aplikasi Anda, atau mengurangi kualitas kerjanya.
-</p>
-
-<p class="caution">
- Perubahan ini memengaruhi semua aplikasi yang berjalan di platform baru, bahkan aplikasi yang tidak menargetkan versi
- platform baru. Platform ini memberikan perilaku kompatibilitas terbatas untuk aplikasi lawas, namun Anda
- harus mulai merencanakan migrasi aplikasi ke model izin baru sekarang juga, dengan tujuan
- mempublikasikan versi terbaru aplikasi Anda saat peluncuran platform secara resmi.
-</p>
-
-
-<h3 id="permission-test-tips">Tip pengujian</h3>
-
-<p>
- Gunakan tip berikut untuk membantu Anda merencanakan dan menjalankan pengujian aplikasi dengan
- perilaku izin yang baru.
-</p>
-
-<ul>
- <li>Identifikasi izin aplikasi Anda saat ini dan jalur kode terkait.</li>
- <li>Uji alur pengguna pada semua layanan dan data yang dilindungi izin.</li>
- <li>Uji dengan berbagai kombinasi izin yang diberikan/dicabut.</li>
- <li>Gunakan alat bantu {@code adb} untuk mengelola izin dari baris perintah:
- <ul>
- <li>Cantumkan daftar izin dan status berdasarkan kelompok:
- <pre>adb shell pm list permissions -d -g</pre>
- </li>
- <li>Beri atau cabut satu atau beberapa izin menggunakan sintaks berikut:<br>
- <pre>adb shell pm [grant|revoke] <permission.name> ...</pre>
- </li>
- </ul>
- </li>
- <li>Analisis aplikasi Anda untuk layanan yang menggunakan izin.</li>
-</ul>
-
-<h3 id="permission-test-strategy">Strategi pengujian</h3>
-
-<p>
- Perubahan izin memengaruhi struktur dan desain aplikasi Anda, begitu juga
- pengalaman pengguna dan alur yang Anda sediakan untuk pengguna. Anda harus menilai penggunaan izin
- aplikasi saat ini dan mulai merencanakan alur baru yang ingin ditawarkan. Rilis platform
- resmi menyediakan perilaku kompatibilitas, namun Anda harus merencanakan pembaruan aplikasi dan tidak
- bergantung pada perilaku ini.
-</p>
-
-<p>
- Identifikasi izin yang sebenarnya diperlukan dan digunakan aplikasi Anda, kemudian temukan berbagai
- jalur kode yang menggunakan layanan yang dilindungi izin. Anda bisa melakukan ini melalui kombinasi
- pengujian pada platform baru dan analisis kode. Dalam pengujian, Anda harus fokus pada pemilihan
- izin waktu proses dengan mengubah {@code targetSdkVersion} aplikasi ke versi pratinjau. Untuk
- informasi selengkapnya, lihat <a href="{@docRoot}preview/setup-sdk.html#">Menyiapkan
-Android N SDK</a>.
-</p>
-
-<p>
- Uji dengan berbagai kombinasi izin yang dicabut dan ditambahkan, untuk menyoroti alur pengguna yang
- bergantung pada izin. Jika dependensi tidak jelas atau logis, Anda harus mempertimbangkan
-optimalisasi atau kompartementalisasi alur tersebut untuk mengeliminasi dependensi atau menjelaskan alasan
- diperlukannya izin.
-</p>
-
-<p>
- Untuk informasi selengkapnya tentang perilaku izin waktu proses, pengujian, dan praktik terbaik, lihat
- halaman pratinjau <a href="{@docRoot}preview/features/runtime-permissions.html">Izin</a>
- pengembang.
-</p>
-
-
-<h2 id="doze-standby">Menguji Istirahatkan dan Aplikasi Siaga</h2>
-
-<p>
- Fitur penghematan daya Istirahatkan dan Aplikasi Siaga membatasi jumlah pemrosesan latar belakang yang
- bisa dikerjakan aplikasi Anda saat perangkat dalam keadaan diam atau saat aplikasi Anda sedang tidak fokus. Pembatasan
- yang dapat diberlakukan oleh sistem pada aplikasi termasuk akses jaringan terbatas atau tidak ada,
- tugas latar belakang yang ditangguhkan, Pemberitahuan yang ditangguhkan, permintaan membangunkan yang diabaikan, serta alarm. Untuk memastikan
- aplikasi Anda berperilaku dengan benar pada optimalisasi penghematan daya ini, Anda harus menguji aplikasi dengan
- menyimulasikan keadaan baterai yang sedang tinggal sedikit ini.
-</p>
-
-<h4 id="doze">Menguji aplikasi Anda dengan Istirahatkan</h4>
-
-<p>Untuk menguji Istirahatkan dengan aplikasi Anda:</p>
-
-<ol>
-<li>Konfigurasikan perangkat keras atau perangkat maya dengan citra sistem Android N.</li>
-<li>Hubungkan perangkat dengan mesin pengembangan dan pasang aplikasi Anda.</li>
-<li>Jalankan aplikasi Anda dan biarkan aktif.</li>
-<li>Simulasikan perangkat yang sedang masuk ke dalam mode Istirahatkan dengan menjalankan perintah berikut:
-
-<pre>
-$ adb shell dumpsys battery unplug
-$ adb shell dumpsys deviceidle step
-$ adb shell dumpsys deviceidle -h
-</pre>
-
- </li>
- <li>Amati perilaku aplikasi Anda saat perangkat diaktifkan kembali. Pastikan aplikasi
- pulih dengan baik saat perangkat keluar dari Istirahatkan.</li>
-</ol>
-
-
-<h4 id="standby">Menguji aplikasi dengan Aplikasi Siaga</h4>
-
-<p>Untuk menguji mode Aplikasi Siaga dengan aplikasi Anda:</p>
-
-<ol>
- <li>Konfigurasikan perangkat keras atau perangkat maya dengan citra sistem Android N.</li>
- <li>Hubungkan perangkat dengan mesin pengembangan dan pasang aplikasi Anda.</li>
- <li>Jalankan aplikasi Anda dan biarkan aktif.</li>
- <li>Simulasikan aplikasi yang sedang masuk ke dalam mode siaga dengan menjalankan perintah berikut:
-
-<pre>
-$ adb shell am broadcast -a android.os.action.DISCHARGING
-$ adb shell am set-idle <packageName> true
-</pre>
-
- </li>
- <li>Simulasikan membangunkan aplikasi Anda menggunakan perintah berikut:
- <pre>$ adb shell am set-idle <packageName> false</pre>
- </li>
- <li>Amati perilaku aplikasi Anda saat dibangunkan. Pastikan aplikasi pulih dengan baik
- dari mode siaga. Secara khusus, Anda harus memeriksa apakah Pemberitahuan aplikasi dan pekerjaan latar belakang
- tetap berjalan sebagaimana yang diharapkan.</li>
-</ol>
-
-<h2 id="ids">Auto Backup for Apps dan Identifier Perangkat Spesifik</h2>
-
-<p>Jika aplikasi Anda mempertahankan identifier perangkat spesifik, seperti ID pendaftaran Google
-Cloud Messaging, dalam penyimpanan internal,
-pastikan Anda mengikuti praktik terbaik untuk mengecualikan lokasi
-penyimpanan dari pencadangan otomatis, seperti dijelaskan dalam <a href="{@docRoot}preview/backup/index.html">Auto
-Backup for Apps</a>. </p>
diff --git a/docs/html-intl/intl/in/about/versions/nougat/index.jd b/docs/html-intl/intl/in/about/versions/nougat/index.jd
index a8f61eb..212870a 100644
--- a/docs/html-intl/intl/in/about/versions/nougat/index.jd
+++ b/docs/html-intl/intl/in/about/versions/nougat/index.jd
@@ -1,107 +1,72 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<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 N Developer Preview</h1>
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- Bersiaplah menyambut Android N!
+ Bersiaplah menyambut Android Nougat!
<strong>Uji aplikasi Anda</strong> pada perangkat Nexus dan perangkat lainnya. Dukung perilaku sistem
baru untuk <strong>menghemat daya dan memori</strong>.
Tambah aplikasi Anda dengan <strong>UI multi-jendela</strong>,
<strong>pemberitahuan balasan langsung</strong> dan lainnya.
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
Mulai
- </a><!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ </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}images/home/n-preview-hero.png" srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
+ srcset="{@docRoot}images/home/n-preview-hero.png 1x,
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
+ data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
+ data-maxResults="3"></div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Laporkan masalah
- </a>
- </li>
- <li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- Lihat catatan rilis
- </a>
+ </a>
</li>
<li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Bergabunglah dengan komunitas pengembang
- </a>
+ </a>
</li>
</ul>
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
-
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Laporkan masalah
- </a></div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Lihat catatan rilis
- </a></div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Bergabunglah dengan komunitas pengembang
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
<h2 class="norule">Terbaru</h2>
<div class="resource-widget resource-flow-layout col-16"
@@ -113,19 +78,33 @@
data-initial-results="3"></div>
</div></section>
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">Sumber Daya</h1>
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
- Informasi penting guna membantu mempersiapkan aplikasi untuk Android N.
+ New Android capabilities and the right way to use them in your apps.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
+ 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-light" id="resources"><div class="wrap">
+ <h1 class="dac-section-title">Sumber Daya</h1>
+ <div class="dac-section-subtitle">
+ Informasi penting guna membantu mempersiapkan aplikasi untuk Android Nougat.
+ </div>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
-
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html-intl/intl/in/preview/features/background-optimization.jd b/docs/html-intl/intl/in/preview/features/background-optimization.jd
deleted file mode 100644
index c6bf175..0000000
--- a/docs/html-intl/intl/in/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,391 +0,0 @@
-page.title=Optimalisasi Latar Belakang
-page.metaDescription=Pembatasan baru pada siaran implisit.
-page.keywords="android N", "implicit broadcasts", "job scheduler"
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>
- Dalam dokumen ini
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">Pembatasan pada CONNECTIVITY_ACTION</a>
- </li>
-
- <li>
- <a href="#sched-jobs">Menjadwalkan Pekerjaan Jaringan pada Koneksi
- Berbiaya Tetap</a>
- </li>
-
- <li>
- <a href="#monitor-conn">Memantau Konektivitas Jaringan Saat Aplikasi
- Dijalankan</a>
- </li>
-
- <li>
- <a href="#media-broadcasts">Pembatasan pada NEW_PICTURE dan
- NEW_VIDEO</a>
- </li>
-
- <li>
- <a href="#new-jobinfo">Metode JobInfo Baru</a>
- </li>
-
- <li>
- <a href="#new-jobparam">Metode JobParameter Baru</a>
- </li>
-
- <li>
- <a href="#further-optimization">Mengoptimalkan Aplikasi Anda Lebih Jauh</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Proses latar belakang bisa menguras memori dan baterai. Misalnya, sebuah
- siaran implisit dapat memulai banyak proses latar belakang yang telah didaftarkan
- untuk mendengarkannya, sekalipun proses-proses itu mungkin tidak melakukan banyak pekerjaan. Hal ini bisa
- berdampak besar pada kinerja perangkat dan pengalaman pengguna.
-</p>
-
-<p>
- Untuk meringankan masalah ini, Android N menerapkan pembatasan
- berikut:
-</p>
-
-<ul>
- <li>Aplikasi yang menargetkan Pratinjau tidak menerima siaran {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} jika mereka
- mendaftar untuk menerimanya dalam manifes mereka. Aplikasi yang berjalan tetap
- bisa mendengarkan {@code CONNECTIVITY_CHANGE} pada thread utama mereka dengan mendaftarkan
- {@link android.content.BroadcastReceiver} pada {@link
- android.content.Context#registerReceiver Context.registerReceiver()}.
- </li>
-
- <li>Aplikasi tidak bisa mengirim atau menerima siaran {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} atau {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Optimalisasi ini
- memengaruhi semua aplikasi, tidak hanya aplikasi yang menargetkan Pratinjau.
- </li>
-</ul>
-
-<p>
- Jika aplikasi Anda menggunakan intent ini, Anda harus membuang dependensi padanya
- secepat mungkin agar Anda bisa menargetkan perangkat Android N dengan benar.
- Kerangka kerja Android menyediakan beberapa solusi untuk mengurangi kebutuhan akan
- siaran implisit ini. Misalnya, {@link android.app.job.JobScheduler}
- dan<a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> menyediakan mekanisme yang tangguh untuk menjadwalkan operasi
- jaringan bila kondisi yang ditetapkan, seperti koneksi ke jaringan
- berbiaya tetap, terpenuhi. Anda sekarang juga bisa menggunakan {@link android.app.job.JobScheduler}
- untuk bereaksi terhadap perubahan penyedia materi. Objek {@link android.app.job.JobInfo}
- membungkus parameter yang digunakan {@link android.app.job.JobScheduler}
- untuk menjadwalkan pekerjaan Anda. Bila syarat-syarat pekerjaan sudah terpenuhi, sistem
- akan mengeksekusi pekerjaan ini pada {@link android.app.job.JobService} aplikasi Anda.
-</p>
-
-<p>
- Dalam dokumen ini, kita akan mempelajari cara menggunakan metode alternatif, seperti
- {@link android.app.job.JobScheduler}, untuk menyesuaikan aplikasi Anda dengan pembatasan
- yang baru.
-</p>
-
-<h2 id="connectivity-action">
- Pembatasan pada CONNECTIVITY_ACTION
-</h2>
-
-<p>
- Aplikasi yang menargetkan Android N tidak menerima siaran {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} jika mereka
- mendaftar untuk menerimanya dalam manifes mereka, dan proses yang bergantung pada siaran
- ini tidak akan dimulai. Hal ini bisa menimbulkan masalah bagi aplikasi yang ingin
- memantau perubahan jaringan atau melakukan aktivitas jaringan dalam jumlah besar bila perangkat
- menghubungkan ke jaringan berbiaya tetap. Beberapa solusi untuk menyiasati pembatasan
- ini sudah ada dalam kerangka kerja Android, namun pemilihan solusi
- yang tepat bergantung pada apa yang ingin dicapai oleh aplikasi Anda.
-</p>
-
-<p class="note">
- <strong>Catatan:</strong> Sebuah {@link android.content.BroadcastReceiver} yang mendaftar pada
- {@link android.content.Context#registerReceiver Context.registerReceiver()}
- akan terus menerima siaran ini saat aplikasi berjalan.
-</p>
-
-<h3 id="sched-jobs">
- Menjadwalkan Pekerjaan Jaringan pada Koneksi Berbiaya Tetap
-</h3>
-
-<p>
- Saat menggunakan kelas {@link android.app.job.JobInfo.Builder JobInfo.Builder}
- untuk membangun objek {@link android.app.job.JobInfo} Anda, terapkan metode {@link
- android.app.job.JobInfo.Builder#setRequiredNetworkType
- setRequiredNetworkType()} dan teruskan {@link android.app.job.JobInfo
- JobInfo.NETWORK_TYPE_UNMETERED} sebagai parameter pekerjaan. Contoh kode berikut
- menjadwalkan layanan yang akan dijalankan ketika perangkat terhubung ke jaringan
- berbiaya tetap dan dikenai biaya:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-</pre>
-
-<p>
- Bila syarat untuk pekerjaan Anda terpenuhi, aplikasi Anda akan menerima callback untuk menjalankan
- metode {@link android.app.job.JobService#onStartJob onStartJob()} dalam
- {@code JobService.class} yang ditetapkan. Untuk melihat contoh selengkapnya mengenai implementasi {@link
- android.app.job.JobScheduler}, lihat <a href="{@docRoot}samples/JobScheduler/index.html">aplikasi contoh JobScheduler</a>.
-</p>
-
-<p>
- Aplikasi yang menggunakan layanan GMSCore, dan menargetkan Android 5.0 (API level 21)
- atau yang lebih rendah, bisa menggunakan <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> dan menetapkan {@code Task.NETWORK_STATE_UNMETERED}.
-</p>
-
-<h3 id="monitor-conn">
- Memantau Konektivitas Jaringan Saat Aplikasi Dijalankan
-</h3>
-
-<p>
- Aplikasi yang berjalan tetap bisa memantau {@code CONNECTIVITY_CHANGE} dengan
- {@link android.content.BroadcastReceiver} yang telah didaftarkan. Akan tetapi, {@link
- android.net.ConnectivityManager} API menyediakan metode yang lebih tangguh untuk meminta
- callback hanya bila persyaratan jaringan yang ditetapkan terpenuhi.
-</p>
-
-<p>
- Objek {@link android.net.NetworkRequest} mendefinisikan parameter
- callback jaringan dari segi {@link android.net.NetworkCapabilities}. Anda
- membuat objek {@link android.net.NetworkRequest} dengan kelas {@link
- android.net.NetworkRequest.Builder NetworkRequest.Builder}. {@link
- android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
- android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
- kemudian meneruskan objek {@link android.net.NetworkRequest} ke sistem. Bila
- syarat jaringan terpenuhi, aplikasi akan menerima callback untuk mengeksekusi
- metode {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
- onAvailable()} yang didefinisikan dalam kelas {@link
- android.net.ConnectivityManager.NetworkCallback}.
-</p>
-
-<p>
- Aplikasi akan terus menerima callback hingga aplikasi keluar atau memanggil
- {@link android.net.ConnectivityManager#unregisterNetworkCallback
- unregisterNetworkCallback()}.
-</p>
-
-<h2 id="media-broadcasts">
- Pembatasan pada NEW_PICTURE dan NEW_VIDEO
-</h2>
-
-<p>
- Di Android N, aplikasi tidak bisa mengirim atau menerima siaran {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} atau {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Pembatasan ini membantu
- meringankan dampak terhadap kinerja dan pengalaman pengguna bila beberapa aplikasi harus
- aktif untuk memproses gambar atau video baru. Android N
- memperluas {@link android.app.job.JobInfo} dan {@link
- android.app.job.JobParameters} untuk menyediakan solusi alternatif.
-</p>
-
-<h3 id="new-jobinfo">
- Metode JobInfo baru
-</h3>
-
-<p>
- Untuk memicu pekerjaan saat perubahan URI materi, Android N memperluas
- {@link android.app.job.JobInfo} API dengan metode berikut:
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- Membungkus parameter yang diperlukan untuk memicu pekerjaan saat perubahan URI materi.
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- Meneruskan objek {@code TriggerContentUri} ke {@link
- android.app.job.JobInfo}. Sebuah {@link android.database.ContentObserver}
- akan memantau URI materi yang dibungkus. Jika terdapat beberapa objek {@code
- TriggerContentUri} yang berhubungan dengan pekerjaan, sistem memberikan sebuah
- callback bahkan jika itu hanya melaporkan perubahan pada salah satu URI materi.
- </dd>
-
- <dd>
- Tambahkan flag {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} untuk
- memicu pekerjaan jika ada turunan dari perubahan URI yang diberikan. Flag ini
- berkaitan dengan parameter {@code notifyForDescendants} yang diteruskan ke {@link
- android.content.ContentResolver#registerContentObserver
- registerContentObserver()}.
- </dd>
-</dl>
-
-<p class="note">
- <strong>Catatan:</strong> {@code TriggerContentUri()} tidak bisa digunakan
- bersama-sama dengan {@link android.app.job.JobInfo.Builder#setPeriodic
- setPeriodic()} atau {@link android.app.job.JobInfo.Builder#setPersisted
- setPersisted()}. Untuk terus memantau perubahan materi, jadwalkan
- {@link android.app.job.JobInfo} baru sebelum {@link
- android.app.job.JobService} aplikasi selesai menangani callback terbaru.
-</p>
-
-<p>
- Kode contoh berikut menjadwalkan pekerjaan yang akan dipicu bila sistem melaporkan
- perubahan ke URI materi, {@code MEDIA_URI}:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-</pre>
-<p>
- Bila sistem melaporkan perubahan dalam URI materi yang ditetapkan, aplikasi Anda
- akan menerima callback dan objek {@link android.app.job.JobParameters}
- akan diteruskan ke metode {@link android.app.job.JobService#onStartJob onStartJob()}
- dalam {@code MediaContentJob.class}.
-</p>
-
-<h3 id="new-jobparam">
- Metode JobParameter Baru
-</h3>
-
-<p>
- Android N juga memperluas {@link android.app.job.JobParameters} untuk
- memungkinkan aplikasi Anda menerima informasi yang berguna tentang otoritas materi
- dan URI yang memicu pekerjaan:
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- Mengembalikan larik URL yang telah memicu pekerjaan. Ini akan berupa {@code
- null} jika tidak ada URI yang memicu pekerjaan (misalnya, pekerjaan
- dipicu karena batas waktu atau alasan lainnya), atau jumlah
- URI yang berubah lebih dari 50.
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- Mengembalikan larik string otoritas materi yang telah memicu pekerjaan.
- Jika larik yang dikembalikan bukan {@code null}, gunakan {@code getTriggeredContentUris()}
- untuk mengambil detail URI yang telah berubah.
- </dd>
-</dl>
-
-<p>
- Kode contoh berikut mengganti metode {@link
- android.app.job.JobService#onStartJob JobService.onStartJob()} dan
- mencatat otoritas materi serta URI yang telah memicu pekerjaan:
-</p>
-
-<pre>
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-</pre>
-
-<h2 id="further-optimization">
- Mengoptimalkan Aplikasi Anda Lebih Jauh
-</h2>
-
-<p>
- Mengoptimalkan aplikasi Anda untuk berjalan pada perangkat yang mempunyai memori rendah, atau dalam kondisi
- memori rendah, dapat meningkatkan kinerja dan pengalaman pengguna. Membuang
- dependensi pada layanan latar belakang dan penerima siaran
- implisit yang terdaftar secara statis bisa membantu aplikasi Anda berjalan lebih baik pada perangkat demikian. Meskipun
- Android N telah mengambil langkah-langkah untuk mengurangi sebagian masalah ini, Anda disarankan
- agar mengoptimalkan aplikasi untuk berjalan tanpa menggunakan
- proses latar belakang ini sama sekali.
-</p>
-
-<p>
- Android N memperkenalkan beberapa tambahan perintah <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a> yang
- bisa Anda gunakan untuk menguji perilaku aplikasi dengan proses latar belakang dinonaktifkan:
-</p>
-
-<ul>
- <li>Untuk mensimulasikan kondisi saat siaran implisit dan layanan latar belakang
- tidak tersedia, masukkan perintah berikut:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>Untuk mengaktifkan kembali siaran implisit dan layanan latar belakang, masukkan
- perintah berikut:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
diff --git a/docs/html-intl/intl/in/preview/features/icu4j-framework.jd b/docs/html-intl/intl/in/preview/features/icu4j-framework.jd
deleted file mode 100644
index 1d97623..0000000
--- a/docs/html-intl/intl/in/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,159 +0,0 @@
-page.title=ICU4J Android Framework API
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Dalam dokumen ini:</h2>
-<ol>
- <li><a href="#relation">Hubungan dengan ICU4J</a></li>
- <li><a href="#migration">Migrasi ke android.icu API dari ICU4J </a></li>
- <li><a href="#licence">Lisensi</a></li>
-</ol>
-
-<h2>Lihat Juga</h2>
-<ol>
- <li>
- <a class="external-link" href="http://userguide.icu-project.org">Dokumentasi untuk ICU4J</a>
- </li>
-
- <li>
- <a class="external-link" href="http://site.icu-project.org/#TOC-What-is-ICU-">Standar terbaru yang didukung
- oleh ICU4J</a>
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- ICU4J merupakan serangkaian pustaka Java sumber terbuka yang banyak digunakan dan menyediakan Unicode
- serta dukungan globalisasi untuk aplikasi perangkat lunak. Android N
- mengekspos subset ICU4J API dalam kerangka kerja Android bagi pengembang aplikasi
- untuk digunakan pada paket {@code android.icu}. API ini menggunakan
- data pelokalan yang ada pada perangkat. Hasilnya, Anda bisa mengurangi footprint
- APK dengan tidak mengompilasi pustaka ICU4J ke APK Anda; sebagai gantinya,
- cukup memanggilnya dalam kerangka kerja. (Dalam hal ini, Anda mungkin perlu menyediakan
- <a href="{@docRoot}google/play/publishing/multiple-apks.html">beberapa versi
- APK Anda</a>, sehingga pengguna yang menjalankan versi Android lebih rendah dari Android N
- bisa mengunduh versi aplikasi yang berisi pustaka ICU4J.)
-</p>
-
-<p>
- Dokumen ini diawali dengan menyediakan beberapa informasi dasar tentang level Android API
- minimum yang diperlukan untuk mendukung pustaka-pustaka ini. Kemudian dijelaskan tentang apa
- yang perlu Anda ketahui tentang implementasi ICU4J spesifik Android. Terakhir,
- Anda akan diberi tahu cara menggunakan ICU4J API dalam kerangka kerja Android.
-</p>
-
-<h2 id="relation">Hubungan dengan ICU4J</h2>
-
-<p>
- Android N mengekspos subset ICU4J API lewat
- paket <code>android.icu</code>, bukannya <code>com.ibm.icu</code>. Kerangka kerja
- Android dapat memilih untuk tidak
- mengekspos ICU4J API karena berbagai alasan; misalnya, Android N tidak mengekspos
- beberapa API yang tidak digunakan lagi atau yang dinyatakan belum
- stabil oleh tim ICU. Karena tim ICU tidak lagi menggunakan API di masa mendatang, Android juga akan menandainya
- sebagai tidak digunakan lagi namun akan terus menyertakannya.
-</p>
-
-<p class="table-caption"><strong>Tabel 1.</strong> Versi ICU dan CLDR yang digunakan
- di Android N.</p>
-<table>
-<tr>
-<th>Level Android API</th>
-<th>Versi ICU</th>
-<th>Versi CLDR</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>Inilah beberapa hal penting yang harus diperhatikan:</p>
-
-<ul>
-<li>ICU4J Android Framework API tidak menyertakan semua ICU4J API.</li>
-<li>Pengembang NDK harus mengetahui bahwa Android ICU4C tidak didukung.</li>
-<li>API dalam kerangka kerja Android tidak menggantikan dukungan Android untuk
-<a href="{@docRoot}guide/topics/resources/localization.html">melokalkan dengan
-sumber daya</a>.</li>
-</ul>
-
-<h2 id="migration">Migrasi ke paket android.icu dari com.ibm.icu</h2>
-
-<p>
- Jika Anda sudah menggunakan ICU4J API dalam aplikasi, dan
- <code>android.icu</code> API memenuhi persyaratan Anda, maka migrasi ke
- API kerangka kerja mengharuskan Anda untuk mengubah impor Java
- dari <code>com.ibm.icu</code> ke <code>android.icu</code>. Kemudian Anda bisa
- membuang salinan file ICU4J dari APK.
-</p>
-
-<p class="note">
- <b>Catatan</b>: API kerangka kerja ICU4J menggunakan ruang nama {@code android.icu}
- sebagai ganti {@code com.ibm.icu}. Hal ini untuk menghindari konflik
- ruang nama di APK yang berisi pustaka {@code com.ibm.icu} sendiri.
-</p>
-
-<h3 id="migrate-from-android">
- Migrasi ke API android.icu dari Android SDK API lainnya
-</h3>
-
-<p>
- Beberapa kelas dalam paket <code>java</code> dan <code>android</code> memiliki
- padanannya dengan yang ditemukan di ICU4J. Akan tetapi, ICU4J seringkali menyediakan dukungan
- yang lebih luas untuk standar dan bahasa.
-</p>
-<p>Inilah beberapa contoh untuk membantu Anda memulai:</p>
-<table>
-<tr>
-<th>Kelas</th>
-<th>Alternatif</th>
-</tr>
-<tr>
-<td><code>java.lang.Character</code> </td>
-<td><code>android.icu.lang.UCharacter</code> </td>
-</tr>
-<tr>
-<td><code>java.text.BreakIterator</code> </td>
-<td><code>android.icu.text.BreakIterator</code> </td>
-</tr>
-<tr>
-<td><code>java.text.DecimalFormat</code> </td>
-<td><code>android.icu.text.DecimalFormat</code> </td>
-</tr>
-<tr>
-<td><code>java.util.Calendar</code></td>
-<td>
-<code>android.icu.util.Calendar</code></td>
-</tr>
-<tr>
-<td><code>android.text.BidiFormatter</code>
- </td>
-<td><code>android.icu.text.Bidi</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateFormat</code>
- </td>
-<td><code>android.icu.text.DateFormat</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateUtils</code> </td>
-<td><code>android.icu.text.DateFormat</code>
-<code>android.icu.text.RelativeDateTimeFormatter</code>
-</td>
-</tr>
-</table>
-
-<h2 id="licence">Lisensi</h2>
-
-<p>
- ICU4J dirilis dengan lisensi ICU. Untuk detailnya, lihat <a class="external-link" href="http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">Panduan Pengguna
- ICU.</a>
-</p>
diff --git a/docs/html-intl/intl/in/preview/features/multilingual-support.jd b/docs/html-intl/intl/in/preview/features/multilingual-support.jd
deleted file mode 100644
index 29104cb..0000000
--- a/docs/html-intl/intl/in/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,221 +0,0 @@
-page.title=Bahasa dan Lokal
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Dalam dokumen ini:</h2>
-<ol>
- <li><a href="#preN">Tantangan dalam Mengatasi Masalah Sumber Daya Bahasa</a></li>
- <li><a href="#postN">Peningkatan pada Strategi Resolusi Sumber Daya</a></li>
- <li><a href="#design">Mendesain Aplikasi Anda untuk Mendukung Lokal
- Tambahan</a></li>
-
-</ol>
-
-</div>
-</div>
-
-<p>Android N memberikan dukungan yang disempurnakan untuk pengguna multibahasa,
-yang memungkinkan mereka memilih beberapa lokal dalam setelan. Android N
-menyediakan kemampuan ini dengan memperbanyak jumlah lokal yang didukung
-dan mengubah cara sistem mengatasi masalah sumber daya. Metode baru mengatasi
-masalah sumber daya ini lebih tangguh dan didesain agar kompatibel dengan APK yang ada, namun
-Anda harus ekstra hati-hati terhadap perilaku tak terduga. Misalnya, Anda
-harus menguji untuk memastikan aplikasi Anda secara default diatur ke bahasa yang diinginkan. Juga,
-jika aplikasi Anda mendukung beberapa bahasa, Anda harus memastikan dukungan ini berfungsi
-sebagaimana diinginkan. Terakhir, Anda harus mencoba memastikan aplikasi Anda dengan lancar menangani
-bahasa yang tidak secara eksplisit Anda dukung dalam desain.</p>
-
-<p>Dokumen ini diawali dengan menjelaskan strategi resolusi sumber daya sebelum
-Android N. Berikutnya, akan dijelaskan strategi
-resolusi sumber daya Android N yang telah ditingkatkan. Terakhir, akan djelaskan cara memanfaatkan
-jumlah lokal yang telah diperbanyak untuk mendukung lebih banyak pengguna multibahasa.</p>
-
-<h2 id="preN">Tantangan dalam Mengatasi Masalah Sumber Daya Bahasa</h2>
-
-<p>Sebelum Android N, Android tidak selalu
- berhasil mencocokkan lokal aplikasi dan lokal sistem.</p>
-
- <p>Misalnya, anggaplah Anda menghadapi situasi berikut:</p>
- <ul>
- <li>Bahasa default aplikasi Anda adalah {@code en_US} (US English), dan aplikasi juga
- berisi string bahasa Spanyol yang telah dilokalkan di file sumber daya {@code es_ES}.
-</li>
- <li> Perangkat telah disetel ke {@code es_MX} </li>
-
-<p>Bila kode Java Anda merujuk ke string, sistem akan memuat
-string dari file sumber daya default ({@code en_US}), sekalipun aplikasi memiliki
-sumber daya bahasa Spanyol yang dilokalkan pada {@code es_ES}. Hal ini karena bila sistem
- tidak bisa menemukan hasil yang persis, sistem akan terus mencari sumber daya dengan menghilangkan
- kode negara dari lokal tersebut. Akhirnya, jika tidak ada hasil yang ditemukan, sistem akan mengembalikan
- ke default, yakni {@code en_US}. </p>
-
-
-<p>Sistem juga akan default ke {@code en_US} jika pengguna memilih
-bahasa yang sama sekali tidak didukung oleh aplikasi, seperti bahasa Prancis. Misalnya:</p>
-
-<p class="table-caption" id="t-resource-res">
-<strong>Tabel 1.</strong> Resolusi sumber daya tanpa lokal yang persis sama.
-</p>
-<table>
-<tbody>
-<tr>
-<th>Setelan Pengguna</th>
-<th>Sumber Daya Aplikasi</th>
-<th>Resolusi Sumber Daya</th>
-</tr>
-<tr>
-<td>fr_CH</td>
-<td>
-default (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
- <td>
-Coba fr_CH => Gagal<br>
-Coba fr => Gagal<br>
-Gunakan default (en)
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>Dalam contoh ini, sistem menampilkan string bahasa Inggris
-tanpa mengetahui apakah pengguna memahami bahasa Inggris. Perilaku ini sudah sangat umum
-sekarang. Android N harus mengurangi frekuensi
-hasil seperti ini secara substansial.</p>
-
-<h2 id="postN">Peningkatan pada Strategi Resolusi Sumber Daya</h2>
-<p>Android N menghadirkan resolusi sumber daya yang lebih handal, dan
-secara otomatis menemukan solusi yang lebih baik. Akan tetapi, untuk mempercepat resolusi dan meningkatkan
-kemudahan pemeliharaan, Anda harus menyimpan sumber daya dalam dialek induk yang paling umum.
- Misalnya, jika sebelumnya Anda telah menyimpan sumber daya bahasa Spanyol di direktori {@code es-US}
-, pindahkan ke direktori {@code es-419}, yang berisi bahasa Spanyol Amerika Latin.
- Demikian pula, jika Anda memiliki string sumber daya dalam folder bernama {@code en-GB}, ganti nama
- folder itu menjadi {@code en-001} (bahasa Inggris internasional), karena induk yang paling umum
- untuk string <code>en-GB</code> adalah {@code en-001}.
- Contoh berikut menjelaskan mengapa praktik-praktik ini meningkatkan kinerja dan
-reliabilitas resolusi sumber daya.</p>
-
-<h3>Contoh resolusi sumber daya</h3>
-
-<p>Dengan Android N, kasus yang dijelaskan dalam <strong>Tabel 1</strong> diatasi
-secara berbeda:</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>Tabel 2.</strong> Strategi resolusi yang ditingkatkan bila tidak ada
-lokal yang sama persis.</p>
-<table>
-<tr>
-<th>Setelan Pengguna</th>
-<th>Sumber Daya Aplikasi</th>
-<th>Resolusi Sumber Daya</th>
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-</ol>
-</td>
-<td>
-default (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
-<td>
-Coba fr_CH => Gagal<br>
-Coba fr => Gagal<br>
-Coba anak dari fr => fr_FR<br>
-Gunakan fr_FR
-</td>
-</tr>
-
-</table>
-
-
-<p>Sekarang pengguna mendapatkan sumber daya bahasa Prancis sebagai ganti bahasa Inggris. Contoh ini juga menunjukkan
- mengapa Anda harus menyimpan string bahasa Prancis di {@code fr} bukan pada {@code fr_FR}
- untuk Android N. Arah aksi di sini adalah untuk mencocokkan dengan induk dialek terdekat,
- membuat resolusi lebih cepat dan lebih dapat diprediksi.</p>
-
-<p>Selain logika resolusi yang diperbaiki ini, Android sekarang menawarkan lebih banyak
-pilihan bahasa untuk pengguna. Mari kita coba lagi contoh di atas dengan menetapkan bahasa Italia
- sebagai bahasa pengguna tambahan, tetapi tanpa dukungan aplikasi untuk bahasa Prancis. </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>Tabel 3.</strong> Resolusi sumber daya bila aplikasi hanya mencocokkan
-setelan lokal yang disukai kedua oleh pengguna.</p>
-<table>
-<tr>
-<th>Setelan Pengguna</th>
-<th>Sumber Daya Aplikasi</th>
-<th>Resolusi Sumber Daya</th>
-
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-<li> it_CH</li>
-</ol>
-</td>
-<td>
-default (en)<br>
-de_DE<br>
-es_ES<br>
-it_IT<br>
-</td>
-<td>
-Coba fr_CH => Gagal<br>
-Coba fr => Gagal<br>
-Coba anak dari fr => Gagal<br>
-Coba it_CH => Gagal<br>
-Coba it => Gagal<br>
-Coba anak dari it => it_IT<br>
-Gunakan it_IT
-</td>
-
-</tr>
-
-</table>
-<p>Pengguna tetap mendapatkan bahasa yang mereka pahami, meskipun aplikasi tidak
-mendukung bahasa Prancis.</p>
-
-
-<h2 id="design">Mendesain Aplikasi Anda untuk Mendukung Lokal Tambahan</h2>
-<h3>LocaleList API</h3>
-
-<p>Android N menambahkan API baru {@code LocaleList.getDefault()}
-yang memungkinkan aplikasi langsung kueri daftar bahasa yang telah ditetapkan pengguna. API ini
-memungkinkan Anda membuat
- perilaku aplikasi yang lebih canggih dan tampilan materi yang lebih optimal. Misalnya, Telusur
- bisa menampilkan hasil dalam beberapa bahasa berdasarkan setelan pengguna. Aplikasi browser
- bisa menghindari penawaran menerjemahkan halaman dalam bahasa yang sudah diketahui pengguna,
- dan aplikasi keyboard bisa mengaktifkan otomatis semua layout yang sesuai. </p>
-
-<h3>Formatter</h3>
-
-<p>Hingga Android 6.0 (API level 23), Android hanya mendukung satu atau dua lokal
- untuk banyak bahasa umum
-(en, es, ar, fr, ru). Karena hanya ada beberapa varian dari setiap bahasa,
-aplikasi bisa menghindar dengan menyimpan beberapa nomor dan tanggal sebagai string hard-code
-dalam file sumber daya. Akan tetapi, dengan perluasan set lokal yang didukung Android,
-maka akan ada
-perbedaan format yang signifikan untuk tanggal, waktu, mata uang, dan informasi
-serupa bahkan dalam lokal tunggal. Menjadikan format Anda sebagai hard-code bisa menghasilkan
-pengalaman yang membingungkan bagi pengguna akhir. Karena itu, saat mengembangkan untuk Android N
-pastikan menggunakan formatter sebagai ganti menjadikan string angka dan tanggal sebagai hard-code.</p>
-
-<p>Contoh terbaik adalah bahasa Arab, yang mendukung Android N berkembang dari
-satu {@code ar_EG} menjadi 27 lokal bahasa Arab. Bahasa lokal ini bisa berbagi hampir semua sumber daya,
-namun sebagian lebih memilih digit ASCII, sementara yang lain memilih digit asli. Misalnya,
-bila Anda ingin membuat kalimat dengan variabel digit, seperti
-"Pilih PIN 4 digit", gunakan formatter seperti yang ditampilkan di bawah ini:</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html-intl/intl/in/preview/features/notification-updates.jd b/docs/html-intl/intl/in/preview/features/notification-updates.jd
deleted file mode 100644
index 0ad2770..0000000
--- a/docs/html-intl/intl/in/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,393 +0,0 @@
-page.title=Pemberitahuan
-page.tags=pemberitahuan
-helpoutsWidget=true
-page.image=/preview/images/notifications-card.png
-
-trainingnavtop=true
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<!-- table of contents -->
-<h2>Dokumen ini berisi</h2>
-<ol>
- <li><a href="#direct">Balasan Langsung</a></li>
- <li><a href="#bundle">Bundel Pemberitahuan</a></li>
- <li><a href="#custom">Tampilan Khusus</a></li>
- <li><a href="#style">Gaya Pesan</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N memperkenalkan beberapa API baru yang memungkinkan aplikasi untuk mengeposkan
-pemberitahuan yang sangat mudah terlihat dan interaktif.</p>
-
-<p>Android N menambahkan API pemberitahuan{@link android.support.v4.app.RemoteInput}
-yang ada untuk mendukung balasan inline pada handset. Fitur ini memungkinkan pengguna
- merespons dengan cepat dari bayangan pemberitahuan tanpa mengunjungi aplikasi Anda.</p>
-
-<p>
- Android N juga memungkinkan Anda menggabungkan pemberitahuan yang serupa agar
- muncul sebagai satu pemberitahuan. Untuk memungkinkan hal ini, Android N menggunakan metode {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()} yang sudah ada. Pengguna bisa memperluas setiap
- pemberitahuan, dan melakukan tindakan seperti membalas dan menutup setiap
- pemberitahuan, satu per satu dari bayangan pemberitahuan.
-</p>
-
-<p>Terakhir, Android N juga menambahkan API baru yang memungkinkan Anda untuk memanfaatkan dekorasi
-sistem dalam tampilan pemberitahuan yang disesuaikan untuk aplikasi Anda. API ini membantu
-memastikan semua tampilan pemberitahuan sama-sama menggunakan penyajian yang konsisten dengan
-template standar.</p>
-
-<p>Dokumen ini menyoroti beberapa perubahan penting yang harus Anda
- perhitungkan saat menggunakan fitur pemberitahuan baru dalam aplikasi Anda.</p>
-
-<h2 id="direct">Balasan Langsung</h2>
-
-<p>Dengan fitur Balasan Langsung di Android N, pengguna bisa dengan cepat
-merespons pesan teks atau memperbarui daftar tugas secara langsung dalam antarmuka
-pemberitahuan. Pada perangkat genggam, tindakan balasan inline muncul sebagai tombol tambahan
- yang dilampirkan pada pemberitahuan. Bila pengguna membalas lewat keyboard, sistem akan melampirkan
- respons teks ke intent
- yang telah Anda tetapkan untuk tindakan pemberitahuan dan mengirimkan intent ke
- aplikasi perangkat genggam Anda.
-
-
-<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
- {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
-<p class="img-caption">
- <strong>Gambar 1.</strong> Android N menambahkan tombol tindakan <strong>Reply</strong>.
-
-</p>
-
-<h3>Menambahkan tindakan balasan inline</h3>
-
-<p>Untuk membuat tindakan pemberitahuan yang mendukung balasan langsung:
-</p>
-
-<ol>
-<li>Buat instance {@link android.support.v4.app.RemoteInput.Builder}
- yang bisa Anda tambahkan ke tindakan
-pemberitahuan. Konstruktor kelas ini akan menerima string bahwa sistem menggunakannya sebagai kunci
- untuk masukan teks. Kemudian, aplikasi perangkat genggam Anda akan menggunakan kunci itu untuk mengambil teks
- masukan tersebut.
-
-<pre>
-// Key for the string that's delivered in the action's intent.
-private static final String KEY_TEXT_REPLY = "key_text_reply";
-String replyLabel = getResources().getString(R.string.reply_label);
-RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
- .setLabel(replyLabel)
- .build();
-</pre>
-</li>
-<li>Lampirkan objek {@link android.support.v4.app.RemoteInput}
- pada tindakan dengan menggunakan <code>addRemoteInput()</code>.
-
-<pre>
-// Create the reply action and add the remote input.
-Notification.Action action =
- new Notification.Action.Builder(R.drawable.ic_reply_icon,
- getString(R.string.label), replyPendingIntent)
- .addRemoteInput(remoteInput)
- .build();
-</pre>
-</li>
-
-<li>Terapkan tindakan pada pemberitahuan dan keluarkan pemberitahuan.
-
-<pre>
-// Build the notification and add the action.
-Notification newMessageNotification =
- new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_message)
- .setContentTitle(getString(R.string.title))
- .setContentText(getString(R.string.content))
- .addAction(action))
- .build();
-
-// Issue the notification.
-NotificationManager notificationManager =
- NotificationManager.from(mContext);
-notificationManager.notify(notificationId, newMessageNotification);
-
-</pre>
-</li>
-
-</ol>
-
-
-<p> Sistem akan meminta pengguna memasukkan respons bila mereka memicu
-tindakan pemberitahuan. </p>
-
-<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
- {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Gambar 2.</strong> Pengguna memasukkan teks dari bayangan pemberitahuan.
-</p>
-
-<h3>
- Mengambil masukan pengguna dari balasan inline
-</h3>
-
-<p>
- Untuk menerima masukan pengguna dari antarmuka pemberitahuan ke aktivitas yang Anda
-deklarasikan dalam intent tindakan balasan:
-</p>
-
-<ol>
- <li>Panggil {@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()} dengan meneruskan intent tindakan pemberitahuan sebagai
- parameter masukan. Metode ini mengembalikan {@link android.os.Bundle} yang
- berisi respons teks.
-
- <pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
- </li>
-
- <li>Lakukan kueri pada bundel menggunakan kunci hasil (diberikan ke konstruktor {@link
- android.support.v4.app.RemoteInput.Builder}). Anda bisa menyelesaikan
- proses ini dan mengambil teks masukan dengan membuat sebuah metode, seperti dalam
- cuplikan kode berikut:
-
- <pre>
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-</pre>
- </li>
-
- <li>Kompilasilah dan keluarkan pemberitahuan lain, menggunakan ID pemberitahuan yang sama dengan
- yang Anda berikan untuk pemberitahuan sebelumnya. Indikator kemajuan
- menghilang dari antarmuka pemberitahuan untuk memberi tahu pengguna mengenai balasan
- yang berhasil. Saat menangani pemberitahuan baru ini, gunakan konteks yang
- diteruskan ke metode {@code onReceive()} penerima.
-
- <pre>
-// Build a new notification, which informs the user that the system
-// handled their interaction with the previous notification.
-Notification repliedNotification =
- new Notification.Builder(context)
- .setSmallIcon(R.drawable.ic_message)
- .setContentText(getString(R.string.replied))
- .build();
-
-// Issue the new notification.
-NotificationManager notificationManager =
- NotificationManager.from(context);
-notificationManager.notify(notificationId, repliedNotification);
-</pre>
- </li>
-</ol>
-
-<p>
- Untuk aplikasi interaktif, seperti chat, akan berguna bila menyertakan
- konteks tambahan saat menangani teks yang diambil. Misalnya, aplikasi ini bisa menampilkan
- beberapa baris riwayat chat sekaligus. Bila pengguna merespons melalui {@link
- android.support.v4.app.RemoteInput}, Anda bisa memperbarui riwayat balasan
- menggunakan metode {@code setRemoteInputHistory()}.
-</p>
-
-<p>
- Pemberitahuan harus diperbarui atau dibatalkan setelah aplikasi
- menerima masukan jarak jauh. Bila pengguna membalas ke pembaruan jarak jauh
- menggunakan Balasan Langsung,
- jangan batalkan pemberitahuan. Melainkan, perbarui pemberitahuan untuk menampilkan balasan pengguna.
-Untuk pemberitahuan yang menggunakan {@code MessagingStyle}, Anda harus menambahkan
-balasannya sebagai pesan terbaru. Saat menggunakan template lain, Anda bisa
-menambahkan balasan pengguna ke riwayat masukan jarak jauh.
-</p>
-
-<h2 id="bundle">Bundel Pemberitahuan</h2>
-
-<p>Android N membekali pengembang dengan sebuah cara baru untuk menyatakan
- antrean pemberitahuan: <i>bundel pemberitahuan</i>. Ini mirip dengan fitur
- <a href="{@docRoot}training/wearables/notifications/stacks.html">Tumpukan
- Pemberitahuan</a> dalam Android Wear. Misalnya, jika aplikasi Anda membuat pemberitahuan
- untuk pesan yang diterima, bila lebih dari satu pesan diterima, pemberitahuan tersebut akan
- dibundel sebagai satu grup. Anda bisa
- menggunakan metode {@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()} yang ada untuk membundel pemberitahuan yang sama.</p>
-
-<p>
- Grup pemberitahuan menerapkan hierarki pada pemberitahuan yang ada di dalamnya.
- Di bagian teratas hierarki adalah pemberitahuan induk yang menampilkan informasi
- rangkuman untuk grup tersebut. Pengguna secara bertahap bisa
- memperbesar grup pemberitahuan, dan sistem akan menampilkan informasi lebih banyak saat
- pengguna menggali lebih dalam. Bila pengguna memperbesar bundel, sistem akan memperlihatkan informasi lebih
- banyak untuk semua pemberitahuan anak; bila pengguna
- memperbesar salah satu pemberitahuan tersebut, sistem akan memperlihatkan seluruh isinya.
-</p>
-
-<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
- {@docRoot}preview/images/bundles_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Gambar 3.</strong> Pengguna secara bertahap bisa memperluas grup
- pemberitahuan.
-</p>
-
-<p class="note">
- <strong>Catatan:</strong> Jika aplikasi yang sama mengirim empat atau beberapa pemberitahuan
- dan tidak menetapkan pengelompokan,
- sistem secara otomatis akan mengelompokannya.
-</p>
-
-<p>Untuk mengetahui cara menambahkan pemberitahuan ke grup, lihat
-<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Menambahkan
-Setiap Pemberitahuan ke Grup</a>.</p>
-
-
-<h3 id="best-practices">Praktik terbaik untuk bundel pemberitahuan</h3>
-<p>Bagian ini memberikan panduan tentang kapan menggunakan grup pemberitahuan sebagai ganti
-pemberitahuan {@link android.app.Notification.InboxStyle InboxStyle}
-yang telah tersedia di
-platform Android versi sebelumnya.</p>
-
-<h3>Kapan menggunakan bundel pemberitahuan</h3>
-
-<p>Anda harus menggunakan grup pemberitahuan hanya jika semua kondisi berikut ini
-bernilai benar untuk kasus penggunaan Anda:</p>
-
-<ul>
- <li>Pemberitahuan anak adalah pemberitahuan lengkap dan bisa ditampilkan
- masing-masing tanpa perlu rangkuman grup.</li>
- <li>Ada untungnya memunculkan pemberitahuan anak satu per satu. Misalnya:
-
- </li>
- <ul>
- <li>Mereka dapat diaplikasikan, dengan tindakan khusus untuk masing-masing anak.</li>
- <li>Ada lebih banyak informasi pada anak yang ingin dibaca oleh pengguna.</li>
- </ul>
-</ul>
-
-<p>Contoh kasus penggunaan yang baik untuk grup pemberitahuan antara lain: aplikasi perpesanan
-yang menampilkan daftar pesan yang masuk, atau aplikasi email yang menampilkan daftar email
-yang diterima.</p>
-
-<p>
-Contoh kasus penggunaan saat pemberitahuan tunggal lebih disukai
- meliputi pesan pribadi dari satu orang, atau representasi daftar dari
- item teks baris tunggal. Anda bisa menggunakan
-({@link android.app.Notification.InboxStyle InboxStyle} atau
-{@link android.app.Notification.BigTextStyle BigTextStyle}) untuk mencapai
-hal ini.
-</p>
-
-<h3 id ="post">Menampilkan bundel pemberitahuan</h3>
-
-<p>
- Aplikasi ini harus selalu mengeposkan rangkuman grup, sekalipun grup hanya berisi
- satu anak. Sistem akan menyembunyikan rangkuman dan langsung menampilkan
- pemberitahuan anak jika hanya berisi pemberitahuan tunggal. Hal ini akan memastikan
- sistem bisa memberikan pengalaman yang konsisten saat pengguna menggeser
- anak grup.
-</p>
-
-<p class="note">
- <strong>Catatan:</strong> Versi Android N ini tidak menyembunyikan
- rangkuman untuk grup pemberitahuan yang berisi satu anak. Fungsionalitas
- ini akan ditambahkan dalam Android N versi berikutnya.
-</p>
-
-<h3>Mengintip pemberitahuan</h3>
-
-<p>Walaupun sistem biasanya menampilkan pemberitahuan anak sebagai sebuah grup, Anda bisa menyetelnya
- agar muncul untuk sementara muncul sebagai
- <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
- pemberitahuan pendahuluan</a>. Fitur ini khususnya berguna karena memungkinkan
- akses langsung ke pemberitahuan anak terbaru dan tindakan yang dikaitkan dengannya.
-</p>
-
-
-<h3>Kompatibilitas mundur</h3>
-
-<p>
- Baik grup pemberitahuan maupun masukan jauh telah menjadi bagian dari {@link
- android.app.Notification} API sejak Android 5.0 (API level 21) untuk mendukung
- perangkat Android Wear. Jika Anda sudah membuat pemberitahuan dengan API ini,
- satu-satunya tindakan yang harus Anda ambil adalah memverifikasi apakah perilaku aplikasi sesuai dengan panduan yang
- dijelaskan di atas, dan mempertimbangkan implementasi {@code
- setRemoteInputHistory()}.
-</p>
-
-<p>
- Untuk mendukung kompatibilitas mundur, tersedia API yang sama bersama
- kelas {@link android.support.v4.app.NotificationCompat}
- pustaka dukungan, yang memungkinkan Anda untuk membuat pemberitahuan yang bekerja pada versi Android
- sebelumnya. Pada perangkat genggam dan tablet, pengguna hanya melihat pemberitahuan rangkuman,
- sehingga aplikasi masih memiliki model inbox atau pemberitahuan sama yang
- mewakili seluruh materi informasi grup. Karena perangkat Android
- Wear memungkinkan pengguna melihat semua pemberitahuan anak bahkan pada level platform
- yang lebih lama, maka Anda harus membangun pemberitahuan anak dengan mengabaikan level
- API.
-</p>
-
-<h2 id="custom"> Tampilan Khusus</h2>
-<p>Mulai dari Android N, Anda bisa menyesuaikan tampilan pemberitahuan dan
-tetap mendapatkan dekorasi sistem seperti header pemberitahuan, tindakan, dan
-layout yang bisa diperluas.</p>
-
-<p>Untuk mengaktifkan kemampuan ini, Android N menambahkan API berikut untuk menata gaya
- tampilan khusus Anda:</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> Menata gaya pemberitahuan selain pemberitahuan
-media.</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> Menata gaya pemberitahuan media.</dd>
-</dl>
-
-<p>Untuk menggunakan API baru ini, panggil metode {@code setStyle()}, dengan meneruskan
-gaya tampilan khusus yang diinginkan padanya.</p>
-
-<p>Cuplikan ini menampilkan cara membuat objek pemberitahuan khusus dengan metode
-{@code DecoratedCustomViewStyle()}.</p>
-
-<pre>
-Notification notification = new Notification.Builder()
- .setSmallIcon(R.drawable.ic_stat_player)
- .setLargeIcon(albumArtBitmap))
- .setCustomContentView(contentView);
- .setStyle(new Notification.DecoratedCustomViewStyle())
- .build();
-
-</pre>
-
-<h2 id="style">Gaya Perpesanan</h2>
-<p>
- Android N memperkenalkan API baru untuk menyesuaikan gaya pemberitahuan.
- Dengan menggunakan kelas <code>MessageStyle</code>, Anda bisa mengubah beberapa
- label yang ditampilkan pada pemberitahuan, termasuk judul percakapan,
- pesan tambahan, dan tampilan materi untuk pemberitahuannya.
-</p>
-
-<p>
- Cuplikan kode berikut memperagakan cara menyesuaikan sebuah
- gaya pemberitahuan menggunakan kelas <code>MessageStyle</code>.
-</p>
-
-<pre>
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-</pre>
diff --git a/docs/html-intl/intl/ja/about/versions/nougat/android-7.0-testing.jd b/docs/html-intl/intl/ja/about/versions/nougat/android-7.0-testing.jd
deleted file mode 100644
index 9f03412..0000000
--- a/docs/html-intl/intl/ja/about/versions/nougat/android-7.0-testing.jd
+++ /dev/null
@@ -1,190 +0,0 @@
-page.title=テストガイド
-page.image=images/cards/card-n-guide_2x.png
-meta.tags="preview", "testing"
-page.tags="preview", "developer preview"
-
-@jd:body
-
-<div id="tb-wrapper">
- <div id="tb">
- <h2>このドキュメントの内容</h2>
- <ol>
- <li><a href="#runtime-permissions">パーミッションをテストする</a></li>
- <li><a href="#doze-standby">Doze とアプリ スタンバイをテストする</a></li>
- <li><a href="#ids">自動バックアップと端末識別子</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N を利用すると、次期バージョンのプラットフォームでアプリが動作するか確認できます。
-このプレビューには、<a href="{@docRoot}preview/api-overview.html">API の概要</a>と<a href="{@docRoot}preview/behavior-changes.html">動作の変更点</a>に記載されているように、アプリに影響を与える可能性のある多くの API と動作の変更が含まれています。
-
-このプレビューでアプリをテストするときには、アプリの良好な使用感を確保するために、システムのいくつかの変更点に特に注意する必要があります。
-
-
-</p>
-
-<p>
- このガイドでは、アプリでプレビューの機能の何をどのようにテストすればよいか説明します。以下のプレビュー機能は、アプリの動作に大きな影響を与える可能性があるので、優先してテストする必要があります。
-
-
-</p>
-
-<ul>
- <li><a href="#runtime-permissions">パーミッション</a>
- </li>
- <li><a href="#doze-standby">Doze とアプリ スタンバイ</a>
- </li>
- <li><a href="#ids">自動バックアップと端末識別子</a></li>
-</ul>
-
-<p>
- テスト用のプレビュー システム イメージを使用した端末または仮想端末のセットアップ方法の詳細については、<a href="{@docRoot}preview/setup-sdk.html">Android N SDK のセットアップ</a>をご覧ください。
-
-
-</p>
-
-
-<h2 id="runtime-permissions">パーミッションをテストする</h2>
-
-<p>
- <a href="{@docRoot}preview/features/runtime-permissions.html">パーミッション</a> モデルの変更により、ユーザーがアプリにパーミッションを付与する方法が変わりました。
-アプリでは、インストール時にすべてのパーミッションを要求するのではなく、実行時に個々のパーミッションをユーザーに要求する必要があります。
-
-これにより、ユーザーは、各アプリのアクティビティをより細かくコントロールできるようになるだけではなく、アプリが各パーミッションを要求する理由をこれまでよりもよく理解できるようになります。
-ユーザーは、いつでもアプリに個別にパーミッションを付与したり、付与したパーミッションを個別に取り消したりできます。
-プレビューのこの機能は、アプリの動作に大きな影響を与える可能性があり、アプリの一部の機能が動作しなくなったり、限定された機能しか使えなくなったりする可能性もあります。
-
-
-</p>
-
-<p class="caution">
- この変更は、アプリがこの新しいバージョンを対象にしているかどうかにかかわらず、この新しいプラットフォーム上で実行されるすべてのアプリに影響します。
-このプラットフォームは以前のアプリに限定的な互換動作を提供しますが、公式版のプラットフォームのリリースに合わせてアップデート版のアプリを公開できるように、新しいパーミッション モデルに対応させるためのアプリの移行を今から計画することを強くお勧めします。
-
-
-</p>
-
-
-<h3 id="permission-test-tips">テストのヒント</h3>
-
-<p>
- 以下のテストのヒントを活用して、アプリでの新しいパーミッション動作のテストを計画し、実行してください。
-
-</p>
-
-<ul>
- <li>アプリの現在のパーミッションと関連するコードパスを確認します。</li>
- <li>パーミッションで保護されているサービスとデータ間のユーザーフローをテストします。</li>
- <li>付与されたパーミッションと取り消されたパーミッションのさまざまな組み合わせをテストします。</li>
- <li>{@code adb} ツールを使用して、コマンドラインからパーミッションを管理します。
- <ul>
- <li>パーミッションとステータスをグループ化して表示します。
- <pre>adb shell pm list permissions -d -g</pre>
- </li>
- <li>以下の構文を使用して 1 つまたは複数のパーミッションを付与または取り消します。<br>
- <pre>adb shell pm [grant|revoke] <permission.name> ...</pre>
- </li>
- </ul>
- </li>
- <li>アプリでパーミッションを使用しているサービスを分析します。</li>
-</ul>
-
-<h3 id="permission-test-strategy">テスト方針</h3>
-
-<p>
- このパーミッションの変化は、アプリの構造と設計、ユーザー エクスペリエンスとフローに影響を与えます。
-アプリの現在のパーミッション利用の状況を調査し、新しいフローの検討を開始する必要があります。
-このプラットフォームの公式リリースは互換動作を提供しますが、互換動作に頼ることなくアプリのアップデートを計画することを強くお勧めします。
-
-
-</p>
-
-<p>
- まずアプリが実際に必要とし使用しているパーミッションを特定してから、パーミッションで保護されたサービスを使用している各コードパスを探してください。
-これには、新しいプラットフォーム上でのテストと、コードの解析が必要です。
-テストでは、アプリの {@code targetSdkVersion} をこのプレビュー版に変えて、ランタイム パーミッションのオプトインに重点的にテストする必要があります。
-詳細については、<a href="{@docRoot}preview/setup-sdk.html#">Android N SDK のセットアップ</a>をご覧ください。
-
-
-</p>
-
-<p>
- パーミッションの取り消しと追加のさまざまな組み合わせをテストし、パーミッションに依存するユーザーフローを確認します。
-パーミッションへの依存性が明白または論理的ではない箇所では、依存性を取り除くため、またはパーミッションが必要な理由を明白にするために、フローのリファクタリングまたはコンパートメント化を検討する必要があります。
-
-
-</p>
-
-<p>
- ランタイム パーミッションの動作、テスト、ベスト プラクティスについては、Developer Preview ページの<a href="{@docRoot}preview/features/runtime-permissions.html">パーミッション</a>をご覧ください。
-
-
-</p>
-
-
-<h2 id="doze-standby">Doze とアプリ スタンバイをテストする</h2>
-
-<p>
- 省電力機能である Doze とアプリ スタンバイにより、端末がアイドル状態のときやそのアプリにフォーカスがないときに、アプリが実行できるバックグラウンド処理の量が制限されます。
-システムによってアプリに加えられる可能性のある制限には、ネットワーク アクセスの制限や停止、バックグラウンド タスクの停止、通知の停止、ウェイク リクエストの無視、アラームなどがあります。
-
-これらの省電力のための最適化が行われた状態で確実にアプリが適切に動作するように、これらの省電力状態をシミュレートしてアプリをテストする必要があります。
-
-
-</p>
-
-<h4 id="doze">アプリで Doze をテストする</h4>
-
-<p>アプリで Doze をテストするには: </p>
-
-<ol>
-<li>Android N のシステム イメージを使用して、ハードウェア端末または仮想端末を設定します。</li>
-<li>端末を開発マシンに接続し、アプリをインストールします。</li>
-<li>アプリを実行し、アクティブ状態のままにします。</li>
-<li>以下のコマンドを実行して、端末の Doze モードへの移行をシミュレートします。
-
-<pre>
-$ adb shell dumpsys battery unplug
-$ adb shell dumpsys deviceidle step
-$ adb shell dumpsys deviceidle -h
-</pre>
-
- </li>
- <li>端末がアクティブ状態に戻ったときのアプリの動作を観察します。端末が Doze モードから抜けるときに、アプリがスムーズに復帰することを確認します。
-</li>
-</ol>
-
-
-<h4 id="standby">アプリでアプリ スタンバイをテストする</h4>
-
-<p>アプリでアプリ スタンバイ モードをテストするには: </p>
-
-<ol>
- <li>Android N のシステム イメージを使用して、ハードウェア端末または仮想端末を設定します。</li>
- <li>端末を開発マシンに接続し、アプリをインストールします。</li>
- <li>アプリを実行し、アクティブ状態のままにします。</li>
- <li>以下のコマンドを実行して、アプリのスタンバイ モードへの移行をシミュレートします。
-
-<pre>
-$ adb shell am broadcast -a android.os.action.DISCHARGING
-$ adb shell am set-idle <packageName> true
-</pre>
-
- </li>
- <li>以下のコマンドを使用して、アプリのウェイクをシミュレートします。
- <pre>$ adb shell am set-idle <packageName> false</pre>
- </li>
- <li>アプリがウェイク状態に戻ったときのアプリの動作を観察します。アプリがスタンバイ モードからスムーズに復帰することを確認します。
-特に、アプリの通知とバックグラウンド ジョブが想定通りの動作を続けているかを確認する必要があります。
-</li>
-</ol>
-
-<h2 id="ids">アプリの自動バックアップと端末固有識別子</h2>
-
-<p>アプリが、Google Cloud Messaging の登録 ID などのなんらかの端末固有の識別子を内部ストレージに保持している場合、<a href="{@docRoot}preview/backup/index.html">アプリの自動バックアップ</a>の説明に従って、そのストレージのロケーションを自動バックアップの対象から除外してください。
-
-
-
- </p>
diff --git a/docs/html-intl/intl/ja/about/versions/nougat/index.jd b/docs/html-intl/intl/ja/about/versions/nougat/index.jd
index 774e065..7c5fe5d 100644
--- a/docs/html-intl/intl/ja/about/versions/nougat/index.jd
+++ b/docs/html-intl/intl/ja/about/versions/nougat/index.jd
@@ -1,107 +1,72 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<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 N Developer Preview</h1>
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- Android N が正式リリースされる前に、
+ Android Nougat が正式リリースされる前に、
Nexus や他の端末で事前に<strong>アプリの動作をご確認いただけます</strong>。新しいシステム動作をサポートして、<strong>電力やメモリの使用量を削減しましょう</strong>。
<strong>マルチ ウィンドウ UI</strong> や<strong>ダイレクト リプライ通知</strong>などの機能も利用して、アプリを拡張してみてください。
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
- スタートガイド</a>
-<!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ スタートガイド
+ </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}images/home/n-preview-hero.png" srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
+ srcset="{@docRoot}images/home/n-preview-hero.png 1x,
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
+ data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
+ data-maxResults="3"></div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- 問題の報告</a>
-
- </li>
- <li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- リリースノートの確認</a>
-
+ 問題の報告
+ </a>
</li>
<li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- 開発者コミュニティに参加</a>
-
+ 開発者コミュニティに参加
+ </a>
</li>
</ul>
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
-
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 問題の報告</a>
-</div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- リリースノートの確認</a>
-</div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 開発者コミュニティに参加</a>
-</div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
<h2 class="norule">新着</h2>
<div class="resource-widget resource-flow-layout col-16"
@@ -113,19 +78,33 @@
data-initial-results="3"></div>
</div></section>
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">リソース</h1>
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
- Android N 向けにアプリを開発する上で役立つ必須情報をご提供します。
+ New Android capabilities and the right way to use them in your apps.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
+ 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-light" id="resources"><div class="wrap">
+ <h1 class="dac-section-title">リソース</h1>
+ <div class="dac-section-subtitle">
+ Android Nougat 向けにアプリを開発する上で役立つ必須情報をご提供します。
+ </div>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
-
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ja/index.jd b/docs/html-intl/intl/ja/index.jd
index 755ec62..3220f19 100644
--- a/docs/html-intl/intl/ja/index.jd
+++ b/docs/html-intl/intl/ja/index.jd
@@ -5,49 +5,36 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-invert" style="background-color:#455A64">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="col-7of16 col-push-9of16" style="padding-left:2em;">
- <a href="{@docRoot}preview/index.html">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Get ready for the next version of Android!
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
- behaviors to <strong>save power and memory</strong>.
+<section class="dac-expand dac-hero" style="background-color:#b2dfdb;">
+ <div class="wrap" style="max-width:1000px;margin-top:0">
+ <div class="col-7of16 col-push-8of16">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <h1 class="dac-hero-title" style="color:#004d40">Android 7.0 Nougat!</h1>
+ <p class="dac-hero-description" style="color:#004d40">
+ <strong>Android 7.0 Nougat is here!</strong>
+ Get your apps ready for the latest version of Android, with new system
+ behaviors to <strong>save battery and memory</strong>.
Extend your apps with <strong>multi-window UI</strong>,
<strong>direct reply notifications</strong> and more.
</p>
- <a class="dac-hero-cta" href="/preview/index.html">
- <span class="dac-sprite dac-auto-chevron"></span>
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron" style="background-color:#b2dfdb"></span>
Learn more
- </a><!--<br>
- <a class="dac-hero-cta" href="/preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Developer Preview (final SDK)
- </a><br>-->
+ </a>
+ </a>
</a>
</div>
- <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:0em;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,
- /images/home/n-preview-hero_2x.png 2x">
+ <div class="col-6of16 col-pull-6of16 dac-hero-figure" style="padding-left:1em;padding-top:1em;">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/nougat_bg.jpg"
+ srcset="{@docRoot}images/home/nougat_bg.jpg 1x,
+ {@docRoot}images/home/nougat_bg_2x.jpg 2x">
</a>
</div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
<i class="dac-sprite dac-arrow-down-gray"></i>
@@ -75,28 +62,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
- <i class="dac-sprite dac-arrow-down-gray"></i>
- </a>
- <div class="actions">
- <div><a href="{@docRoot}sdk/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Get the SDK
- </a></div>
- <div><a href="{@docRoot}samples/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Browse Samples
- </a></div>
- <div><a href="{@docRoot}distribute/stories/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Watch Stories
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light" id="build-apps"><div class="wrap">
<h1 class="dac-section-title">Build Beautiful Apps</h1>
<div class="dac-section-subtitle">
diff --git a/docs/html-intl/intl/ja/preview/download_mp2.jd b/docs/html-intl/intl/ja/preview/download_mp2.jd
deleted file mode 100644
index 67b1bc4..0000000
--- a/docs/html-intl/intl/ja/preview/download_mp2.jd
+++ /dev/null
@@ -1,359 +0,0 @@
-page.title=ダウンロード
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Android Preview SDK のコンポーネントをダウンロード、インストールする前に、次の利用規約に同意する必要があります。
-</p>
-
- <h2 class="norule">利用規約</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-以下は、Android SDK Preview の使用許諾契約です(以下「本契約」)。
-
-1.はじめに
-
-1.1 Android SDK Preview(以下、本契約で「Preview」という。具体的には利用可能な場合には Android システム ファイル、パッケージ型 API、Preview ライブラリ ファイルを含む)は、本契約の規定に従ってライセンス許可されます。本契約では、デベロッパーの Preview の使用に関して、デベロッパーと Google の間で法的拘束力のある契約を結びます。
-
-1.2 「Android」とは、Android オープン ソース プロジェクト(http://source.android.com/ にて随時更新)にて利用可能な、端末向けの Android ソフトウェア スタックを意味します。
-
-1.3 「Google」とは、1600 Amphitheatre Parkway, Mountain View, CA 94043, United States に主たる事業所を有するデラウェア州法人である Google Inc. を意味します。
-
-2.本契約の同意
-
-2.1 Preview を使用するには、まず本契約に同意する必要があります。本契約に同意しない場合は Preview を使用できません。
-
-2.2 同意するかまたは Preview を使用するためにクリックすると、本契約に同意したことになります。
-
-2.3 米国またはその他の国(デベロッパーが居住している国かまたはデベロッパーが Preview を使用する国を含む)の法律により Preview の使用を禁止されている人である場合、Preview を使用することも、使用許諾契約に同意することもできません。
-
-2.4 雇用主またはその他の事業体を代表または代理して本契約に拘束されることに同意し Preview を企業または組織の内部で使用する場合、担当者の雇用主またはその他の事業体を本契約に法的に拘束する完全な法的権限を有していることを表明および保証するものとします。担当者が必要な権限を有していない場合は、担当者の雇用主またはその他の事業体を代表または代理して、本契約に同意することも、Preview を使用することもできません。
-
-3.Google Preview ライセンス
-
-3.1 本契約の規定に従い、Google は Android プラットフォーム上で実行するアプリケーションの開発に Preview を個人的にもしくは企業または組織の内部で使用するための、ロイヤリティ フリーな、譲渡不可で、非排他的な、サブライセンス不可の、限定された、取り消し可能なライセンスを付与するものとします。
-
-3.2 Preview に関するすべての法的権利、所有権、利益(Preview に含まれる知的財産権を含む)は Google またはサードパーティが所有するものとします。「知的財産権」とは、特許法、著作権法、営業秘密法、商標法、不当競争防止法に基づいて発生するすべての権利、およびその他のすべての所有権を意味します。デベロッパーに明示的に付与されていない権利は、すべて Google が所有します。
-
-3.3 本契約で明示的に許可されている目的以外においては、Preview を使用できません。当該のサードパーティのライセンスで必要とされる場合を除き、デベロッパーは、(a) Preview または Preview の一部をコピー(バックアップ目的を除く)、修正、改造、再配布、逆コンパイル、リバース エンジニアリング、逆アセンブルまたは派生物の作成、または(b)モバイル ハンドセットまたは個人用 PC 以外のハードウェア端末への Preview の読み込み、Preview と他のソフトウェアとの結合、または Preview の一部を組み込んだソフトウェアや端末の配布はできません。
-
-3.4 デベロッパーは、Android の断片化につながるような行為をしないことに同意します。これには、Preview から派生したソフトウェア開発キットの配布、作成への参加、宣伝を含みます(ただし必ずしもこれらには限定されません)。
-
-3.5 オープンソース ソフトウェア ライセンス下でライセンス付与された Preview のコンポーネントの使用、複製、配布は、本契約ではなく、そのオープンソース ソフトウェアのライセンスに準拠するものとします。デベロッパーは、許諾されるすべての権利下で、そのようなオープンソース ソフトウェア ライセンスに対して、優良ライセンシーのままでいることに同意し、そのような権利を終了、停止、または違反する可能性のあるいかなる行為も差し控えることに同意するものとします。
-
-3.6 デベロッパーは、Google が提供する Preview の形式および性質は事前の通知なしに変更される場合があり、今後リリースされる Preview のバージョンでは、以前のバージョンの Preview で開発されたアプリケーションとの互換性がない可能性があることに同意します。デベロッパーは、Google が事前の通知なく、Google の単独の裁量でデベロッパーまたはユーザーへの Preview(または Preview 内の一部の機能)の提供を(恒久的または一時的に)停止する場合があることに同意します。
-
-3.7 本契約のいかなる部分も、Google のいかなる商標名、商標、サービスマーク、ロゴ、ドメイン名、またはその他のブランド識別表示を使用する権利もデベロッパーに付与するものではありません。
-
-3.8 デベロッパーは、Preview に添付または収録されているすべての知的財産権に関する通知(著作権および商標の通知を含む)の削除、隠ぺい、改ざんを行わないことに同意します。
-
-4.デベロッパーによる Preview の使用
-
-4.1 Google は、本契約に基づき Preview を使用してデベロッパーが開発したソフトウェア アプリケーションに関して、デベロッパー(またはデベロッパーのライセンサー)からいかなる権利、所有権、または利益(当該アプリケーションに含まれる知的財産権を含む)も取得するものではないことに同意します。
-
-4.2 デベロッパーは、Preview を(a)本契約、および(b)該当する司法管轄区における適用される法律、規則、または一般に認められた慣行またはガイドライン(米国またはその他の該当国におけるデータまたはソフトウェアの輸出入に関する法律を含む)で認められている目的にのみ使用することに同意します。
-
-4.3 Preview を使用してアプリケーションを開発する場合、デベロッパーはユーザーのプライバシーおよび法的権利を保護することに同意します。ユーザーからデベロッパーにユーザー名、パスワード、またはその他のログイン情報または個人情報が提供される場合、デベロッパーは、情報がデベロッパーのアプリケーションに提供されることをユーザーに認識させ、当該ユーザーについてプライバシーに関する法的に十分な通知および保護を行わなければなりません。デベロッパーのアプリケーションに個人情報または秘密情報が保存される場合、この保存は保護された方法で行われなければなりません。ユーザーからデベロッパーのアプリケーションに Google アカウントの情報が提供された場合、デベロッパーのアプリケーションでは、ユーザーが許可したタイミングで、かつユーザーが許可した限定された目的にのみ、当該情報を使用してユーザーの Google アカウントにアクセスすることが認められるものとします。
-
-4.4 デベロッパーは、Preview に関して、第三者(Google、およびあらゆる携帯電話会社を含むが、これらに限定されない)のサーバー、ネットワーク、またはその他の財産またはサービスへの妨害、中断、損害、または許可されていない態様でのアクセスとなる行為(そのような行為に該当する対象製品の開発または販売 / 配布を含む)に関与しないことに同意します。
-
-4.5 デベロッパーは、デベロッパーが Android および Android のアプリケーションを介して作成、送信、表示するデータ、コンテンツ、リソース、および自身の行為の結果(Google に発生する可能性のあるあらゆる損失および損害を含む)について、自身が単独で責任を負うこと(および Google がこれについてデベロッパーまたはいかなる第三者に対しても一切責任を負わないこと)に同意します。
-
-4.6 デベロッパーは、本契約、適用される第三者の契約もしくは利用規約、または適用される法律もしくは規則に基づく自身の義務に違反したこと、および当該違反の結果(Google または第三者に発生したあらゆる損失および損害を含む)について、自身が単独で責任を負うこと(および Google がこれについてデベロッパーまたはいかなる第三者に対しても一切責任を負わないこと)に同意します。
-
-4.7 Preview は開発中であり、デベロッパーによるテスティングやフィードバックは開発プロセスの重要な一部となります。デベロッパーは、Preview の使用により、一部の機能の実装が開発中であると認識し、Preview が安定したリリースの完全な機能性を持つことに依存すべきでないことを認識するものとします。本 Preview は、公式の Android SDK のリリース後はサポート対象でなくなるため、デベロッパーは、Preview を使用するいかなるアプリケーションも公然と配布または引き渡さないことに同意するものとします。
-
-5.デベロッパーの資格情報
-
-5.1 デベロッパーは、Google が発行した、またはデベロッパー自身で選択した、自身のデベロッパー用資格情報の秘密を保持する責任を負うこと、および自身のデベロッパー用資格情報のもとで開発されたすべてのアプリケーションについて単独で責任を負うことに同意します。
-
-6.プライバシーおよび情報
-
-6.1 Google は、Preview の継続的な技術革新と改良のために、ソフトウェアから特定の使用状況統計情報(一意識別子、関連する IP アドレス、ソフトウェアのバージョン番号、Preview のどのツール/サービスがどのように使用されているかに関する情報を含むが、これらに限定されない)を収集できます。この情報が収集される前に、Preview に通知が表示され、デベロッパーの同意が求められます。デベロッパーが同意しない場合は、情報は収集されません。
-
-6.2 収集されるデータは、Preview の改良のために集約された形で精査され、Google のプライバシー ポリシー(http://www.google.com/policies/privacy/)に従って管理されます。
-
-7.第三者のアプリケーション
-
-7.1 デベロッパーが、Preview を使用して第三者が開発したアプリケーションを実行する、あるいは第三者から提供されたデータ、コンテンツ、リソースにアクセスする場合、デベロッパーは、Google がそれらのアプリケーション、データ、コンテンツ、リソースについて責任を負わないことに同意します。デベロッパーは、そのような第三者のアプリケーションを介してアクセスするすべてのデータ、コンテンツ、リソースについては、それらを生成した者が単独で責任を負うものであり、Google はそれらの第三者のアプリケーション、データ、コンテンツ、またはリソースの使用もしくはアクセスによって生じたあらゆる損失および損害について一切責任を負わないことを理解します。
-
-7.2 デベロッパーは、そのような第三者のアプリケーションを介して表示されるデータ、コンテンツ、リソースは、提供者(あるいは代理の第三者または事業体)が所有する知的財産権で保護されている場合があることを認識するものとします。デベロッパーは、当該所有者からの明確な許可がない限り、それらのデータ、コンテンツ、リソース(全体または一部)の変更、貸与、賃貸、担保、配布または派生物の作成を行うことはできません。
-
-7.3 デベロッパーは、そのような第三者のアプリケーション、データ、コンテンツまたはリソースの使用が、デベロッパーと当該第三者間の別の規約に従うものであることを認識するものとします。
-
-8.Google API の使用
-
-8.1 Google API
-
-8.1.1 API を使用して Google からデータを取得する場合、デベロッパーは、そのデータは、Google またはデータを提供する事業体(あるいは代理の第三者または事業体)が所有する知的財産権で保護されている場合があることを認識するものとします。そのような API の使用は追加の利用規約に従うものとします。デベロッパーは、当該の利用規約による許可がない限り、そのデータ(全体または一部)の変更、貸与、賃貸、担保、配布または派生物の作成を行うことはできません。
-
-8.1.2 デベロッパーは、API を使用して Google からユーザーのデータを取得する場合、ユーザーが明示的に同意した場合のみ、およびユーザーが許可したタイミングとその目的にのみ、データを取得できることを理解し、同意します。
-
-9.本契約の終了
-
-9.1 本契約は、下記の規定に従ってデベロッパーまたは Google のいずれかによって解約されるまで、継続して適用されるものとします。
-
-9.2 デベロッパーが本契約の解約を希望する場合は、Preview および関連するデベロッパー資格情報の使用を停止することで、契約を終了するものとします。
-
-9.3 Google は、理由の有無にかかわらず、書面で通知することでいつでもデベロッパーとの本契約を解約することができます。
-
-9.4 本契約は事前の通知またはその他の措置なく、次のうち早い方に自動的に終了します。
-(A)Google が、デベロッパーが居住している国またはデベロッパーがサービスを使用する国での Preview または Preview の一部の配布を停止したとき。
-(B)Google が Android SDK の最終バージョンをリリースしたとき。
-
-9.5 本契約が終了すると、本契約で付与されていたライセンスは終了し、デベロッパーは速やかに Preview のすべての使用を停止するものとし、第 10 条、第 11 条、第 12 条、第 14 条の規定は無期限に効力を有するものとします。
-
-10.免責事項
-
-10.1 デベロッパーは、デベロッパーによる Preview の使用はデベロッパー自身の責任において行うものであること、および Preview は「現状有姿」かつ「提供可能な限りにおいて」、Google からのいかなる種類の保証もなく提供されるものであることを明示的に理解し、これに同意します。
-
-10.2 デベロッパーによる Preview および Preview の使用を通じてダウンロードまたはその他の方法で取得されたマテリアルの使用は、デベロッパー自身の裁量および責任において行うものであり、当該使用の結果として生じるデベロッパーのコンピュータ システムもしくはその他の端末への損害またはデータの喪失についての責任はデベロッパーが単独で負います。前述を制限することなく、Preview は安定したリリースではなく、コンピュータやその他の端末の利用の完全な回復不可能な損失を含む、重大な損害を引き起こす可能性のあるエラー、欠陥、およびセキュリティ上の脆弱性が含まれている可能性があることを理解します。
-
-10.3 Google はまた、商品性、特定目的への適合性、および権利侵害がないことの黙示的な保証および条件を含む(ただしこれらに限定されない)、明示的か黙示的かを問わずあらゆる種類のすべての保証および条件を明示的に否定します。
-
-11.責任の制限
-
-11.1 デベロッパーは、Google、その子会社および関連会社、ならびにそのライセンサーが、デベロッパーに発生した直接損害、間接損害、偶発的損害、特別損害、結果的損害、または懲罰的損害(データの喪失を含む)について、Google またはその代表者が当該損失が発生する可能性について告知されていたかどうか、または知っていたはずであるかどうかにかかわらず、いかなる責任法理のもとでもデベロッパーに対して責任を負わないことを明示的に理解し、これに同意します。
-
-12.補償
-
-12.1 法律で認められる最大限の範囲内において、デベロッパーは、(a)デベロッパーが Preview を使用したこと、および(b)デベロッパーが Preview で開発したアプリケーションが他者のいかなる知的財産権を侵害していること、または他者の名誉を毀損している、もしくは他者のパブリシティ権もしくはプライバシー権を侵害していること、および(c)デベロッパーが本契約に違反したことから発生したあらゆる申し立て、普通法上の訴訟、衡平法上の訴訟、または法的手続き、ならびにあらゆる損失、責任、損害、費用、および経費(合理的な弁護士報酬を含む)について、Google、その関連会社、ならびに当該各社の取締役、役員、従業員、代理人を防御し、補償し、免責することに同意します。
-
-13.契約の変更
-
-13.1 Google は、Preview の新しいバージョンを配布することにより、いつでも本契約を変更することができます。変更が生じた場合、Google は、Preview の提供ウェブサイト上に使用許諾契約の改訂版を公開します。
-
-14.法的一般条項
-
-14.1 本契約は、デベロッパーと Google の間の法的な合意のすべてを表し、デベロッパーによる Preview の使用(別の契約下で Google が提供するサービスを除く)に適用され、Preview に関するデベロッパーと Google の間のあらゆる事前の合意に完全に取って代わるものです。
-
-14.2 デベロッパーは、Google が本契約に定める(または適用される法律のもとで Google が享受できる)法的な権利または救済措置を行使または執行しなかった場合でも、Google の権利が正式に放棄されたとはみなされないこと、および Google が以後も引き続き当該権利および救済措置を行使または執行できることに同意します。
-
-14.3 本件について判断を下す管轄権を有する司法裁判所によって、本契約のいずれかの条項が無効と判断された場合、当該条項は、本契約の残りの部分に影響を与えることなく本契約から削除されるものとします。本契約の残りの条項は、以後も引き続き有効かつ執行可能であるものとします。
-
-14.4 デベロッパーは、Google が親会社となっている各グループ企業が、本契約の第三受益者となること、および当該企業が、当該企業に利益(または受益権)を付与する本契約の条項を直接執行する、また当該条項に依拠する権利を有することを了承し、これに同意します。上記以外のいかなる人または法人も、本契約の第三受益者とはならないものとします。
-
-14.5 輸出規制。Preview は、米国輸出管理法令の対象です。デベロッパーは、Preview に適用されるすべての国内および国際の輸出管理法令に従わなければなりません。これらの法律には、仕向け地、ユーザー、および最終用途に関する制限が含まれます。
-
-14.6 デベロッパーは、Google から事前に書面で承認を得ずに、本契約を譲渡または移転することはできません。また、そのような承認を得ずに計画された譲渡はすべて無効になります。デベロッパーは、Google から事前に書面で承認を得ずに、本契約に基づく自身の責任または義務を他者に委任してはなりません。
-
-14.7 本契約あるいは本契約に基づくデベロッパーと Google の関係から発生または関連するすべての申し立ては、米国カリフォルニア州の抵触法を除いて、カリフォルニア州法に準拠するものとします。デベロッパーおよび Google は、本契約あるいは本契約に基づくデベロッパーと Google の関係から発生または関連する法的事項の解決について、米国カリフォルニア州サンタクララ郡に所在の連邦裁判所または州立裁判所が専属管轄権を有することに合意します。上記にかかわらず、デベロッパーは、Google が任意の司法管轄区において差し止め命令による救済(または同等の緊急法的救済)を求める申し立てを行うことが認められることに同意します。
- </div><!-- sdk terms -->
-
-
-
- <div id="sdk-terms-form">
- <p>
- <input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
- <label id="agreeLabel" for="agree">上記の利用規約を読み、同意します。</label>
- </p>
- <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
- </div>
-
-
- </div><!-- end TOS -->
-
-
- <div id="landing">
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>本書の内容</h2>
- <ol>
- <li><a href="#sdk">Preview SDK</a></li>
- <li><a href="#docs">デベロッパー ドキュメント</a></li>
- <li><a href="#images">ハードウェアのシステム イメージ</a></li>
- </ol>
-
- <h2>Legacy downloads</h2>
- <ol>
- <li><a href="{@docRoot}preview/download_mp1.html">Developer Preview Archive</a></li>
- </ol>
- </div>
-</div>
-
-
-<p>
- Android M Preview SDK には、アプリとプラットフォームの次期リリースで提供される新しい API とのテストに役立つ開発ツール、Android システム ファイル、ライブラリ ファイルが含まれています。
-このドキュメントでは、アプリのテスト用にダウンロードできる Preview のコンポーネントを入手する方法について説明します。
-
-</p>
-
-
-<h2 id="sdk">Preview SDK</h2>
-
-<p>
- Preview SDK <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK マネージャー</a>経由でダウンロードできます。Preview SDK のダウンロードと設定の詳細については、<a href="{@docRoot}preview/setup-sdk.html#downloadSdk">Set Up the Preview SDK</a> をご覧ください。
-
-</p>
-
-
-<h2 id="docs">デベロッパー ドキュメント</h2>
-
-<p>
- デベロッパー ドキュメントのダウンロード パッケージでは、詳細な Preview の API リファレンス情報や API の比較レポートが提供されます。
-</p>
-
-<table>
- <tr>
- <th scope="col">Description</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="docs-dl">
- <td>Android M Preview 2<br>Developer Docs</td>
- <td><a href="#top" onclick="onDownload(this)"
- >m-preview-2-developer-docs.zip</a><br>
- MD5: 1db6fff9c722b0339757e1cdf43663a8<br>
- SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157
- </td>
- </tr>
-</table>
-
-<h2 id="images">ハードウェアのシステム イメージ</h2>
-
-<p>
- これらのシステム イメージでは、テスト用に物理端末にプラットフォームのプレビュー バージョンをインストールできます。
-端末にこれらのイメージを 1 つ以上設定すると、アプリをインストールして、プラットフォームの次期バージョンでアプリがどのように動作するかをテストできます。
-端末にシステム イメージをインストールするプロセスでは、<em>端末からすべてのデータが削除</em>されるため、システム イメージのインストール前にデータをバックアップする必要があります。
-
-
-</p>
-
-<p class="warning">
- <b>警告:</b> 次の Android システム イメージはプレビュー版であり、今後変更される可能性があります。デベロッパーによるシステム イメージの使用は、Android SDK Preview 使用許諾契約に準拠するものとします。
-Android Preview システム イメージは安定したリリースではなく、お使いのコンピュータ システム、端末、データに影響を与える可能性のあるエラーや欠陥が含まれている場合があります。
-
-プレビュー版の Android システム イメージは工場出荷版の OS と同等のテストを受けておらず、お使いの電話やインストールされているサービス、アンインストールの動作停止を引き起こす場合があります。
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">Device</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="hammerhead">
- <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >hammerhead-MPZ79M-preview-b1f4bde4.tgz</a><br>
- MD5: 2ca9f18bf47a061b339bab52647ceb0d<br>
- SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939
- </td>
- </tr>
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-MPZ79M-preview-e1024040.tgz</a><br>
- MD5: 24a2118da340b9afedfbdfc026f6ff81<br>
- SHA-1: e10240408859d5188c4aae140e1c539130ba614b
- </td>
- </tr>
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-MPZ79M-preview-9f305342.tgz</a><br>
- MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e<br>
- SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-MPZ79N-preview-fb63af98.tgz</a><br>
- MD5: e8d081137a20b66df595ee69523314b5<br>
- SHA-1: fb63af98302dd97be8de9313734d389ccdcce250
- </td>
- </tr>
-
-</table>
-
-<h3 id="install-image">端末にイメージをインストールする</h3>
-
-<p>
- テスト用に端末イメージを使用するには、互換性のある端末にインストールする必要があります。次の手順に従って、システム イメージをインストールします。
-
-</p>
-
-<ol>
- <li>この一覧の中からいずれかのシステム イメージ パッケージをダウンロードして、解凍します。</li>
- <li>保持するデータを端末からバックアップします。</li>
- <li>
-<a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
- の手順に従って端末にイメージをフラッシュします。</li>
-</ol>
-
-<p class="note">
- <strong>注:</strong> 開発用端末に Preview のシステム イメージをフラッシュすると、OTA アップデートを通じて次のプレビュー リリースに自動的にアップグレードされます。
-
-</p>
-
-<h3 id="revertDevice">端末を工場出荷時の仕様に戻す</h3>
-
-<p>
- Preview をアンインストールして、工場出荷時の仕様に戻すには、
-<a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a> にアクセス
-して、端末にフラッシュするイメージをダウンロードします。同じページの手順に従って端末にイメージをフラッシュします。
-
-</p>
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/";
- function onDownload(link) {
-
- $("#downloadForRealz").html("Download " + $(link).text());
- $("#downloadForRealz").attr('href', urlRoot + $(link).text());
-
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
-
- return true;
- }
-
-
- function onAgreeChecked() {
- /* verify that the TOS is agreed */
- if ($("input#agree").is(":checked")) {
- /* reveal the download button */
- $("a#downloadForRealz").removeClass('disabled');
- } else {
- $("a#downloadForRealz").addClass('disabled');
- }
- }
-
- function onDownloadForRealz(link) {
- if ($("input#agree").is(':checked')) {
- /*
- $("#tos").fadeOut('fast');
- $("#landing").fadeIn('fast');
- */
-
- ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html());
-
- /*
- location.hash = "";
- */
- return true;
- } else {
- return false;
- }
- }
-
- $(window).hashchange( function(){
- if (location.hash == "") {
- location.reload();
- }
- });
-
-</script>
diff --git a/docs/html-intl/intl/ja/preview/features/background-optimization.jd b/docs/html-intl/intl/ja/preview/features/background-optimization.jd
deleted file mode 100644
index 04921c7..0000000
--- a/docs/html-intl/intl/ja/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,391 +0,0 @@
-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">
- <div id="qv">
- <h2>
- このドキュメントの内容
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">CONNECTIVITY_ACTION に対する制限</a>
- </li>
-
- <li>
- <a href="#sched-jobs">従量制ではない接続でネットワーク ジョブをスケジュールする</a>
-
- </li>
-
- <li>
- <a href="#monitor-conn">アプリを実行しているときにネットワーク接続を監視する</a>
-
- </li>
-
- <li>
- <a href="#media-broadcasts">NEW_PICTURE と NEW_VIDEO に対する制限</a>
-
- </li>
-
- <li>
- <a href="#new-jobinfo">新しい JobInfo メソッド</a>
- </li>
-
- <li>
- <a href="#new-jobparam">新しい JobParameter メソッド</a>
- </li>
-
- <li>
- <a href="#further-optimization">アプリをさらに最適化する</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- バックグラウンド処理が多くのメモリと電池を消費する場合があります。たとえば、多くのバックグラウンド処理が暗黙的なブロードキャストをリッスンするように登録されていますが、バックグラウンド処理が有用でない場合でも、暗黙的なブロードキャストによりこれらの処理が開始されることがあります。
-
-バックグラウンド処理が端末のパフォーマンスとユーザー エクスペリエンスの両方に多大な影響を及ぼす可能性があります。
-
-</p>
-
-<p>
- Android N では、こういった問題を緩和するために、以下の制限が適用されます。
-
-</p>
-
-<ul>
- <li>プレビュー向けのアプリは、マニフェストで {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストの受信登録をしていても、このブロードキャストを受信しません。
-実行中のアプリは、{@link
- android.content.Context#registerReceiver Context.registerReceiver()} で {@link android.content.BroadcastReceiver} を登録することにより、メインスレッドで {@code CONNECTIVITY_CHANGE} を引き続きリッスンできます。
-
-
- </li>
-
- <li>アプリは、{@link
- android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストまたは {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストを送受信できません。この最適化は、プレビューをターゲットにしたアプリだけでなく、すべてのアプリに影響を及ぼします。
-
- </li>
-</ul>
-
-<p>
- アプリでこれらのインテントのいずれかを使用する場合は、Android N 端末を適切にターゲットにできるように、可能な限りインテントとの依存性を削除する必要があります。
-
- Android フレームワークは、これらの暗黙的なブロードキャストの必要性を軽減するいくつかのソリューションを提供します。
-たとえば、{@link android.app.job.JobScheduler} と <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
-{@code GcmNetworkManager}</a> は、従量制ではないネットワークへの接続など、指定条件が満たされたときに、ネットワーク操作をスケジュールするための堅牢なメカニズムを提供します。
-
-
-また、コンテンツ プロバイダの変更に対応するために、{@link android.app.job.JobScheduler} を使用することもできます。{@link android.app.job.JobInfo} オブジェクトは、{@link android.app.job.JobScheduler} がジョブをスケジュールするために使用するパラメータをカプセル化します。
-
-
-ジョブの条件が満たされると、システムはこのジョブをアプリの {@link android.app.job.JobService} で実行します。
-
-</p>
-
-<p>
- このドキュメントでは、アプリをこれらの新しい制限に対応させるために、
-{@link android.app.job.JobScheduler} などの代替メソッドの使用法について説明します。
-
-</p>
-
-<h2 id="connectivity-action">
- CONNECTIVITY_ACTION に対する制限
-</h2>
-
-<p>
- Android N 向けのアプリは、マニフェストで {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} ブロードキャストの受信登録をしていても、このブロードキャストを受信しません。また、このブロードキャストに依存している処理は開始されません。
-
-これにより、ネットワークの変更をリッスンするアプリ、または端末が従量制ではないネットワークに接続したときにネットワーク アクティビティをまとめて実行するアプリに問題が発生する可能性があります。
-
-Android フレームワークは、この制限を回避するためのいくつかのソリューションを備えていますが、アプリで実行するタスクに応じて、適切なソリューションを選択してください。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>
-{@link android.content.Context#registerReceiver Context.registerReceiver()} で登録された {@link android.content.BroadcastReceiver} は、アプリが実行中のときにこれらのブロードキャストを継続して受信します。
-
-</p>
-
-<h3 id="sched-jobs">
- 従量制ではない接続でネットワーク ジョブをスケジュールする
-</h3>
-
-<p>
- {@link android.app.job.JobInfo} オブジェクトをビルドするために {@link android.app.job.JobInfo.Builder JobInfo.Builder} を使用するときは、{@link
- android.app.job.JobInfo.Builder#setRequiredNetworkType
- setRequiredNetworkType()} メソッドを適用し、{@link android.app.job.JobInfo
- JobInfo.NETWORK_TYPE_UNMETERED} をジョブ パラメータとして渡します。
-次のコードサンプルは、端末が従量制ではないネットワークに接続し、充電しているときに実行するサービスをスケジュールします。
-
-
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-</pre>
-
-<p>
- ジョブの条件が満たされたとき、アプリはコールバックを受け取り、指定された {@code JobService.class} で {@link android.app.job.JobService#onStartJob onStartJob()} メソッドを実行します。
-
-{@link
- android.app.job.JobScheduler} 実装の例については、<a href="{@docRoot}samples/JobScheduler/index.html">JobScheduler サンプルアプリ</a>をご覧ください。
-</p>
-
-<p>
- GMSCore サービスを使用し、Android 5.0(API レベル 21)以前をターゲットにしているアプリは、<a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
-{@code GcmNetworkManager}</a> を使用して {@code Task.NETWORK_STATE_UNMETERED} を指定できます。
-
-</p>
-
-<h3 id="monitor-conn">
- アプリを実行しているときにネットワーク接続を監視する
-</h3>
-
-<p>
- 実行されているアプリは、登録された {@link android.content.BroadcastReceiver} を使用して {@code CONNECTIVITY_CHANGE} を引き続きリッスンできます。
-ただし、{@link
- android.net.ConnectivityManager} API は、特定のネットワーク条件が満たされたときだけコールバックをリクエストするより堅牢なメソッドを提供します。
-
-</p>
-
-<p>
- {@link android.net.NetworkRequest} オブジェクトは、{@link android.net.NetworkCapabilities} に応じてネットワーク コールバックのパラメータを定義します。
-{@link
- android.net.NetworkRequest.Builder NetworkRequest.Builder} クラスを使って {@link android.net.NetworkRequest} オブジェクトを作成します。次に、{@link
- android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
- android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()} は、{@link android.net.NetworkRequest} オブジェクトをシステムに渡します。
-
-ネットワーク条件が満たされると、アプリはコールバックを受け取り、{@link
- android.net.ConnectivityManager.NetworkCallback} クラスで定義された {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
- onAvailable()} メソッドを実行します。
-
-
-</p>
-
-<p>
- アプリは終了するか、{@link android.net.ConnectivityManager#unregisterNetworkCallback
- unregisterNetworkCallback()} を呼び出すまで、コールバックを受信し続けます。
-
-</p>
-
-<h2 id="media-broadcasts">
- NEW_PICTURE と NEW_VIDEO に対する制限
-</h2>
-
-<p>
- Android N では、アプリは、{@link
- android.hardware.Camera#ACTION_NEW_PICTURE} ブロードキャストまたは {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} ブロードキャストを送受信できません。この制限は、新しいイメージや動画を処理するためにいくつかのアプリを起動する必要があるときに、パフォーマンスとユーザー エクスペリエンスへの影響を軽減するのに役立ちます。
-
-Android N では、{@link android.app.job.JobInfo} と {@link
- android.app.job.JobParameters} を拡張することにより、代わりのソリューションを提供しています。
-
-</p>
-
-<h3 id="new-jobinfo">
- 新しい JobInfo メソッド
-</h3>
-
-<p>
- Android N では、コンテンツ URI の変更でジョブをトリガーするために、{@link android.app.job.JobInfo} API に次のメソッドが追加されています。
-
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- コンテンツ URI の変更でジョブをトリガーするために必要なパラメータをカプセル化します。
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- {@code TriggerContentUri} オブジェクトを {@link
- android.app.job.JobInfo} に渡します。{@link android.database.ContentObserver} は、カプセル化されたコンテンツ URI を監視します。
-ジョブに関連する複数の {@code
- TriggerContentUri} オブジェクトがある場合、システムは、1 つのコンテンツ URI のみの変更を通知する場合でも、コールバックを提供します。
-
- </dd>
-
- <dd>
- 指定した URI の子孫のいずれかが変更された場合、ジョブをトリガーするために、{@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} フラグを追加します。
-このフラグは、{@link
- android.content.ContentResolver#registerContentObserver
- registerContentObserver()} に渡される {@code notifyForDescendants} パラメータに相当します。
-
- </dd>
-</dl>
-
-<p class="note">
- <strong>注:</strong> {@code TriggerContentUri()} は、{@link android.app.job.JobInfo.Builder#setPeriodic
- setPeriodic()} または {@link android.app.job.JobInfo.Builder#setPersisted
- setPersisted()} と組み合わせて使うことはできません。
-コンテンツの変更を継続的に監視するには、アプリの {@link
- android.app.job.JobService} が最新のコールバックの処理を完了する前に、新しい
-{@link android.app.job.JobInfo} をスケジュールします。
-</p>
-
-<p>
- 次のサンプルコードは、システムが変更をコンテンツ URI {@code MEDIA_URI} に通知するときにトリガーされるジョブをスケジュールします。
-
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-</pre>
-<p>
- システムが特定のコンテンツ URI の変更を通知すると、アプリはコールバックを受け取り、{@link android.app.job.JobParameters} オブジェクトが {@code MediaContentJob.class} の {@link android.app.job.JobService#onStartJob onStartJob()} メソッドに渡されます。
-
-
-
-</p>
-
-<h3 id="new-jobparam">
- 新しい JobParameter メソッド
-</h3>
-
-<p>
- また、Android N では、{@link android.app.job.JobParameters} が拡張され、ジョブをトリガーしたコンテンツ権限や URI についての有用な情報をアプリが受け取れるようになっています。
-
-
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- ジョブをトリガーした URI の配列を返します。この配列は、ジョブをトリガーした URI がない場合(たとえば、期限切れ、またはその他の理由でジョブがトリガーされた場合)、または変更された URI の数が 50 を超える場合は、{@code
- null} になります。
-
-
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- ジョブをトリガーしたコンテンツ権限の文字列配列を返します。
- 返された配列が {@code null} ではない場合、どの URI が変更されたかについて、詳細を取得するために {@code getTriggeredContentUris()} を使用します。
-
- </dd>
-</dl>
-
-<p>
- 次のサンプルコードは、{@link
- android.app.job.JobService#onStartJob JobService.onStartJob()} メソッドをオーバーライドし、ジョブを起動したコンテンツ権限と URI を記録します。
-
-</p>
-
-<pre>
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-</pre>
-
-<h2 id="further-optimization">
- アプリをさらに最適化する
-</h2>
-
-<p>
- アプリをメモリ不足の端末またはメモリ不足の状況で実行するために最適化すると、パフォーマンスとユーザー エクスペリエンスが向上します。
-バックグラウンド サービスと静的に登録された暗黙的なブロードキャスト レシーバーへの依存関係を削除すると、そのような端末上のアプリの動作が向上します。
-
-Android N では、これらの問題を削減するための措置が講じられていますが、これらのバックグラウンド処理をまったく使用せずに、アプリが実行されるように最適化することをお勧めします。
-
-
-
-</p>
-
-<p>
- Android N には、それらのバックグラウンド処理を無効にした状態でアプリの動作をテストするために使用できるいくつかの <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge(ADB)</a>コマンドが追加されています。
-
-</p>
-
-<ul>
- <li>暗黙的なブロードキャストとバックグラウンド サービスが利用できない状態をシミュレートするには、次のコマンドを入力します。
-
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>暗黙的なブロードキャストとバックグラウンド サービスを再度有効にするには、次のコマンドを入力します。
-
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
diff --git a/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd
deleted file mode 100644
index 6a25cec..0000000
--- a/docs/html-intl/intl/ja/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,159 +0,0 @@
-page.title=ICU4J Android フレームワーク API
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>このドキュメントの内容:</h2>
-<ol>
- <li><a href="#relation">ICU4J との関係</a></li>
- <li><a href="#migration">ICU4J から android.icu API に移行する</a></li>
- <li><a href="#licence">ライセンス</a></li>
-</ol>
-
-<h2>関連ドキュメント</h2>
-<ol>
- <li>
- <a class="external-link" href="http://userguide.icu-project.org">ICU4J のドキュメント</a>
- </li>
-
- <li>
- <a class="external-link" href="http://site.icu-project.org/#TOC-What-is-ICU-">ICU4J でサポートされている最新の標準</a>
-
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- ICU4J は幅広く使用されている、オープンソースの Java ライブラリのセットで、Unicode のほか、ソフトウェア アプリのグローバル化のサポートを提供しています。
-Android N では、アプリのデベロッパー向けの Android フレームワーク内で ICU4J API のサブセットを公開しており、{@code android.icu} パッケージ内で使用できます。
-
-これらの API は、端末上のローカライズ データを使用します。
-そのため、ICU4J ライブラリを APK にコンパイルせず、フレームワーク内にあるライブラリを呼び出せばよいので、APK のフットプリントを削減できます
-
-(この場合、Android N より前のバージョンの Android を実行しているユーザーも、ICU4J ライブラリを含むバージョンのアプリをダウンロードできるようにするには、<a href="{@docRoot}google/play/publishing/multiple-apks.html">APK を複数のバージョン</a>用意する必要があります)。
-
-
-
-</p>
-
-<p>
- ここではまず、これらのライブラリをサポートするために必要な最低限の Android API レベルについて基本的な情報を説明します。
-次に、Android 固有の ICU4J の実装に必要な情報を説明します。
-最後に、Android フレームワーク内で ICU4J API を使用する方法について説明します。
-
-</p>
-
-<h2 id="relation">ICU4J との関係</h2>
-
-<p>
- Android N では、<code>com.ibm.icu</code> ではなく
-<code>android.icu</code> パッケージを介して ICU4J API のサブセットを公開しています。Android フレームワークでは、さまざまな理由により ICU4J API を公開しないという選択も考えられます。たとえば、Android N で廃止された API を公開しないため、または ICU チームからまだ安定版の発表がないため、などの理由があります。
-
-
-
-ICU チームが今後 API を廃止した場合、Android でも廃止と見なすことになりますが、引き続きそれらの API を含める予定です。
-
-</p>
-
-<p class="table-caption"><strong>表 1.</strong> Android N で使用される ICU および CLDR のバージョン
-</p>
-<table>
-<tr>
-<th>Android API レベル</th>
-<th>ICU バージョン</th>
-<th>CLDR バージョン</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>いくつか注意事項があります。</p>
-
-<ul>
-<li>ICU4J Android フレームワーク API には、すべての ICU4J API が含まれているわけではありません。</li>
-<li>NDK デベロッパーは、Android ICU4C がサポートされていない点にご注意ください。</li>
-<li>Android フレームワーク内の API は、Android の<a href="{@docRoot}guide/topics/resources/localization.html">リソースを使用したローカライズ</a>に対するサポートに代わるものではありません。
-
-</li>
-</ul>
-
-<h2 id="migration">com.ibm.icu から android.icu パッケージに移行する</h2>
-
-<p>
- アプリ内で既に ICU4J API を使用しており、
-<code>android.icu</code> API がその要件を満たしている場合、このフレームワーク API に移行するには、Java のインポートを <code>com.ibm.icu</code> から <code>android.icu</code> に変更します。
-
-次に、APK から ICU4J ファイルのコピーを削除します。
-
-</p>
-
-<p class="note">
- <b>注</b>:ICU4J フレームワーク API では、名前空間に {@code com.ibm.icu} ではなく{@code android.icu} を使用します。
-これは、独自の {@code com.ibm.icu} ライブラリを含む APK で名前空間が競合しないようにするためです。
-
-</p>
-
-<h3 id="migrate-from-android">
- その他の Android SDK API から android.icu API に移行する
-</h3>
-
-<p>
- <code>java</code> および <code>android</code> パッケージには、ICU4J にあるクラスと同等のクラスが一部含まれています。
-しかし多くの場合、ICU4J では、より幅広い標準と言語のサポートを提供しています。
-
-</p>
-<p>次に、すぐに利用できる例をいくつか示します。</p>
-<table>
-<tr>
-<th>クラス</th>
-<th>代替クラス</th>
-</tr>
-<tr>
-<td><code>java.lang.Character</code> </td>
-<td><code>android.icu.lang.UCharacter</code> </td>
-</tr>
-<tr>
-<td><code>java.text.BreakIterator</code> </td>
-<td><code>android.icu.text.BreakIterator</code> </td>
-</tr>
-<tr>
-<td><code>java.text.DecimalFormat</code> </td>
-<td><code>android.icu.text.DecimalFormat</code> </td>
-</tr>
-<tr>
-<td><code>java.util.Calendar</code></td>
-<td>
-<code>android.icu.util.Calendar</code></td>
-</tr>
-<tr>
-<td><code>android.text.BidiFormatter</code>
- </td>
-<td><code>android.icu.text.Bidi</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateFormat</code>
- </td>
-<td><code>android.icu.text.DateFormat</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateUtils</code> </td>
-<td><code>android.icu.text.DateFormat</code>
-<code>android.icu.text.RelativeDateTimeFormatter</code>
-</td>
-</tr>
-</table>
-
-<h2 id="licence">ライセンス</h2>
-
-<p>
- ICU4J は ICU ライセンスでリリースされています。詳細については、<a class="external-link" href="http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">ICU ユーザーガイド</a>をご覧ください。
-
-</p>
diff --git a/docs/html-intl/intl/ja/preview/features/multilingual-support.jd b/docs/html-intl/intl/ja/preview/features/multilingual-support.jd
deleted file mode 100644
index 44686d2..0000000
--- a/docs/html-intl/intl/ja/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,221 +0,0 @@
-page.title=言語とロケール
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>このドキュメントの内容:</h2>
-<ol>
- <li><a href="#preN">言語リソースの解決における課題</a></li>
- <li><a href="#postN">リソース解決方針の改善</a></li>
- <li><a href="#design">追加のロケールをサポートするためのアプリ設計
-</a></li>
-
-</ol>
-
-</div>
-</div>
-
-<p>Android N では、複数言語のユーザーのサポートが強化されており、設定で複数のロケールを選択できます。
-Android N ではこの機能を提供するために、サポート対象のロケール数を大幅に拡大し、システムがリソースを解決する方法を変更しました。
-
-この新しいリソース解決方法は、より堅牢で、既存の APK との互換性を保つよう設計されていますが、予想外の動作には十分に注意してください。
-
-たとえば、アプリで目的の言語がデフォルトに設定されているかをテストする必要があります。
-また、アプリで複数の言語をサポートする場合、そのサポートが意図したとおりに機能するかを確かめてください。
-
-最後に、明示的にサポートを設計していない言語については、アプリで適切に処理する必要があります。
-</p>
-
-<p>このドキュメントでは最初に、Android N より前のバージョンのリソース解決方針について説明します。次に、Android N の改善されたリソース解決方針について説明します。
-
-最後に、増大したロケールを活用し、より多くの複数言語ユーザーをサポートする方法について説明します。
-</p>
-
-<h2 id="preN">言語リソースの解決における課題</h2>
-
-<p>Android N より前のバージョンの Android では、アプリとシステムのロケールを一致させることができない場合がありました。
-</p>
-
- <p>たとえば、以下の状況を想定します。</p>
- <ul>
- <li>アプリのデフォルトの言語が {@code en_US}(米国英語)で、{@code es_ES} リソース ファイルでスペイン語の文字列もローカライズされています。
-
-</li>
- <li> 端末は {@code es_MX} に設定されています。 </li>
-
-<p>Java コードが文字列を参照するときに、アプリでスペイン語のリソースが {@code es_ES} でローカライズされている場合でも、システムではデフォルト({@code en_US})リソース ファイルから文字列が読み込まれます。
-
-これは、システムで完全一致が見つからない場合に、ロケールから国コードを削除して引き続きリソースを探すためです。
-
-最後に、一致が見つからない場合は、デフォルトである {@code en_US} にフォールバックされます。
- </p>
-
-
-<p>ユーザーがアプリでまったくサポートされていないフランス語などを選択した場合にも、システムはデフォルトの {@code en_US} を読み込みます。
-次に例を示します。</p>
-
-<p class="table-caption" id="t-resource-res">
-<strong>表 1.</strong> ロケールの完全一致がない場合のリソース解決
-</p>
-<table>
-<tbody>
-<tr>
-<th>ユーザー設定</th>
-<th>アプリのリソース</th>
-<th>リソース解決</th>
-</tr>
-<tr>
-<td>fr_CH</td>
-<td>
-デフォルト(en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
- <td>
-fr_CH を試行 => 失敗<br>
-fr を試行 => 失敗<br>
-デフォルト(en)を使用
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>この例では、システムはユーザーが英語を理解できるかどうかを認識せず、英語の文字列を表示します。
-この動作は現在、ごく一般的です。
-Android N では、このような状況が大幅に削減されるはずです。
-</p>
-
-<h2 id="postN">リソース解決方針の改善</h2>
-<p>Android N は、より堅牢なリソース解決を導入しており、自動的に適切な代替言語を見つけます。
-ただし、解決を迅速化し保守性を向上させるには、最も一般的な親言語でリソースを保存する必要があります。
-
- たとえば、これまで {@code es-US} ディレクトリにスペイン語のリソースを保存していた場合、{@code es-419} ディレクトリに移動します。ここには、ラテンアメリカのスペイン語が格納されます。
-
- 同様に {@code en-GB} という名前のフォルダにリソースを保存している場合、そのフォルダの名前を {@code en-001}(国際英語)に変更します。<code>en-GB</code> 文字列の最も一般的な親言語は {@code en-001} であるためです。
-
-
- 次の例では、このような対応がリソース解決のパフォーマンスと信頼性を向上する根拠について説明します。
-</p>
-
-<h3>リソース解決の例</h3>
-
-<p>Android N では、<strong>表 1</strong> で説明した例の解決方法が異なります。
-</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>表 2.</strong> ロケールの完全一致が存在しない場合の改善された解決方針
-</p>
-<table>
-<tr>
-<th>ユーザー設定</th>
-<th>アプリのリソース</th>
-<th>リソース解決</th>
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-</ol>
-</td>
-<td>
-デフォルト(en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
-<td>
-fr_CH を試行 => 失敗<br>
-fr を試行 => 失敗<br>
-fr の子言語を試行 => fr_FR<br>
-fr_FR を使用
-</td>
-</tr>
-
-</table>
-
-
-<p>これで、ユーザーは英語ではなくフランス語のリソースを利用できます。この例は、フランス語の文字列を Android N の {@code fr_FR} ではなく {@code fr} に保存すべき理由も示しています。これが、最も近い親言語と一致させ、迅速に解決し、予測しやすくするための対策になります。
-
-
-</p>
-
-<p>この改善された解決ロジックに加えて、Android では、選択できるユーザー言語を増やしました。
-もう一度上記の例で説明します。今回は、追加のユーザー言語としてイタリア語が指定され、アプリはフランス語をサポートしていません。
- </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>表 3.</strong> アプリがユーザーの 2 番目に優先されるロケール設定のみと一致する場合のリソース解決
-</p>
-<table>
-<tr>
-<th>ユーザー設定</th>
-<th>アプリのリソース</th>
-<th>リソース解決</th>
-
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-<li> it_CH</li>
-</ol>
-</td>
-<td>
-デフォルト(en)<br>
-de_DE<br>
-es_ES<br>
-it_IT<br>
-</td>
-<td>
-fr_CH を試行 => 失敗<br>
-fr を試行 => 失敗<br>
-fr の子を試行 => 失敗<br>
-it_CH を試行 => 失敗<br>
-it を試行 => 失敗<br>
-it の子言語を試行 => it_IT<br>
-it_IT を使用
-</td>
-
-</tr>
-
-</table>
-<p>アプリでフランス語をサポートしていなくても、ユーザーが理解できる言語が使用されます。
-</p>
-
-
-<h2 id="design">追加のロケールをサポートするためのアプリ設計</h2>
-<h3>LocaleList API</h3>
-
-<p>Android N では、新しい API {@code LocaleList.getDefault()} が加わりました。これにより、アプリは直接、ユーザーが指定した言語のリストを問い合わせることができます。
-この API を使用すると、アプリの動作がさらに洗練され、コンテンツの表示がより最適化されます。
-
-たとえば検索で、ユーザーの設定に基づいて複数の言語で結果を表示できます。
-ブラウザ アプリは、ユーザーが理解できる言語の翻訳ページを表示することがなくなり、キーボード アプリは、自動的に最適なレイアウトを有効にすることができます。
-
- </p>
-
-<h3>フォーマッタ</h3>
-
-<p>Android 6.0(API レベル 23)までは、Android は多くの一般的な言語(en、es、ar、fr、ru)に対して 1 つか 2 つのロケールのみをサポートしていました。
-
-各言語にはわずかなバリエーションしかなかったため、アプリはリソース ファイルでハードコーディングされた文字列として数字や日付を保存し、処理することができました。
-
-しかし Android で幅広いロケールのセットがサポートされるようになったため、日付、時刻、通貨などの情報は、1 つのロケール内でも形式が大幅に異なる場合があります。
-
-
-形式をハードコーディングすると、エンドユーザーが混乱するおそれがあります。
-したがって、Android N で開発するときは、数字や日付の文字列をハードコーディングせず、必ずフォーマッタを使用してください。
-</p>
-
-<p>その良い例がアラビア語です。アラビア語のロケールのサポートは {@code ar_EG} の 1 つだけでしたが、Android N では 27 に増えました。
-これらのロケールは、ほとんどのリソースを共有できますが、数字は ASCII 表記とネイティブ表記で好みが分かれています。
-たとえば、「4 桁の PIN を選択してください」など、数字の変数を含む文を作成する場合、以下のようにフォーマッタを使用します。
-
-</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html-intl/intl/ja/preview/features/notification-updates.jd b/docs/html-intl/intl/ja/preview/features/notification-updates.jd
deleted file mode 100644
index d7cdc36..0000000
--- a/docs/html-intl/intl/ja/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,393 +0,0 @@
-page.title=通知
-page.tags=notifications
-helpoutsWidget=true
-page.image=/preview/images/notifications-card.png
-
-trainingnavtop=true
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<!-- table of contents -->
-<h2>このドキュメントの内容</h2>
-<ol>
- <li><a href="#direct">ダイレクト リプライ</a></li>
- <li><a href="#bundle">バンドル通知</a></li>
- <li><a href="#custom">カスタムビュー</a></li>
- <li><a href="#style">メッセージ スタイル</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N には、アプリが視認性の高いインタラクティブな通知を投稿できるようにする新しい API がいくつか導入されています。
-</p>
-
-<p>Android N では、ハンドセットでインライン リプライをサポートするために、既存の {@link android.support.v4.app.RemoteInput} 通知 API が拡張されています。
-これらの機能を使用すると、ユーザーは、アプリにアクセスすることなく、通知シェードからすばやく応答できます。
-</p>
-
-<p>
- Android N では、類似した通知をバンドルして、単一の通知として表示することもできます。
-このバンドルを可能にするために、Android N では、既存の {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()} メソッドが使用されます。ユーザーは、各通知を展開して、通知シェードから個別に返信や消去などのアクションを各通知に対して行うことができます。
-
-
-</p>
-
-<p>最後に、Android N には、アプリのカスタマイズした通知ビューでシステム デコレーションを活用できるようにする新しい API が追加されています。
-これらの API は、通知ビューで、標準のテンプレートを使った一貫した表示を共有できるようにします。
-
-</p>
-
-<p>このドキュメントでは、アプリでこれらの新しい通知機能を使用するときに考慮する必要のある主な変更点について説明します。
-</p>
-
-<h2 id="direct">ダイレクト リプライ</h2>
-
-<p>Android N のダイレクト リプライ機能を使用すると、ユーザーは、テキスト メッセージにすばやく応答したり、通知インターフェース内でタスクリストを直接アップデートしたりできます。
-
-ハンドヘルド デバイスでは、インライン リプライ アクションが、通知にアタッチされた追加ボタンとして表示されます。
-ユーザーがキーボード経由で返信する場合、通知アクション向けに指定したインテントにテキストによる応答がアタッチされ、そのインテントがハンドヘルド デバイス用アプリに送信されます。
-
-
-
-
-
-<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
- {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
-<p class="img-caption">
- <strong>図 1.</strong> Android N に追加された [<strong>Reply</strong>] アクション ボタン。
-
-</p>
-
-<h3>インライン リプライ アクションを追加する</h3>
-
-<p>ダイレクト リプライをサポートする通知アクションを作成する方法は次のとおりです。
-</p>
-
-<ol>
-<li>通知アクションに追加できる {@link android.support.v4.app.RemoteInput.Builder} のインスタンスを作成します。
-
-このクラスのコンストラクタは、システムがテキスト入力のキーとして使用する文字列を受け取ります。
-その後、ハンドヘルド デバイス用アプリはそのキーを使用して、入力テキストを取得します。
-
-
-<pre>
-// Key for the string that's delivered in the action's intent.
-private static final String KEY_TEXT_REPLY = "key_text_reply";
-String replyLabel = getResources().getString(R.string.reply_label);
-RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
- .setLabel(replyLabel)
- .build();
-</pre>
-</li>
-<li> <code>addRemoteInput()</code> を使用して、{@link android.support.v4.app.RemoteInput} オブジェクトをアクションにアタッチします。
-
-
-<pre>
-// Create the reply action and add the remote input.
-Notification.Action action =
- new Notification.Action.Builder(R.drawable.ic_reply_icon,
- getString(R.string.label), replyPendingIntent)
- .addRemoteInput(remoteInput)
- .build();
-</pre>
-</li>
-
-<li>アクションを通知に適用し、通知を発行します。
-
-<pre>
-// Build the notification and add the action.
-Notification newMessageNotification =
- new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_message)
- .setContentTitle(getString(R.string.title))
- .setContentText(getString(R.string.content))
- .addAction(action))
- .build();
-
-// Issue the notification.
-NotificationManager notificationManager =
- NotificationManager.from(mContext);
-notificationManager.notify(notificationId, newMessageNotification);
-
-</pre>
-</li>
-
-</ol>
-
-
-<p> ユーザーが通知アクションをトリガーすると、ユーザーは応答を入力するよう求められます。
- </p>
-
-<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
- {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>図 2.</strong> ユーザーは通知シェードでテキスト メッセージを入力できます。
-</p>
-
-<h3>
- インライン リプライからユーザー入力を取得する
-</h3>
-
-<p>
- リプライ アクションのインテントで宣言したアクティビティで、通知インターフェースからのユーザー入力を取得する方法は次のとおりです。
-
-</p>
-
-<ol>
- <li>通知アクションのインテントを入力パラメータとして渡すことにより、{@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()} を呼び出します。
-このメソッドは、テキストによる応答が含まれた {@link android.os.Bundle} を返します。
-
-
- <pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
- </li>
-
- <li>result キー({@link
- android.support.v4.app.RemoteInput.Builder} コンストラクタに提供されている)を使用して、バンドルへのクエリを実行します。次のコード スニペットに示すようにメソッドを作成することにより、このプロセスを完了して入力テキストを取得できます。
-
-
-
- <pre>
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-</pre>
- </li>
-
- <li>以前の通知に指定したのと同じ通知 ID を使用して、別の通知をビルドして発行します。
-進捗インジケーターが通知インターフェースに表示されなくなり、リプライが正常に行われたことがわかります。
-
-この新しい通知で作業するときは、レシーバーの {@code onReceive()} メソッドに渡されるコンテキストを使用します。
-
-
- <pre>
-// Build a new notification, which informs the user that the system
-// handled their interaction with the previous notification.
-Notification repliedNotification =
- new Notification.Builder(context)
- .setSmallIcon(R.drawable.ic_message)
- .setContentText(getString(R.string.replied))
- .build();
-
-// Issue the new notification.
-NotificationManager notificationManager =
- NotificationManager.from(context);
-notificationManager.notify(notificationId, repliedNotification);
-</pre>
- </li>
-</ol>
-
-<p>
- チャットなどのインタラクティブなアプリでは、取得されたテキストを処理するときに、追加のコンテキストを含めると役立つ場合があります。
-たとえば、このようなアプリでは複数行のチャット履歴が表示されることがあります。
-{@link
- android.support.v4.app.RemoteInput} を介してユーザーが応答した場合、{@code setRemoteInputHistory()} メソッドを使用してリプライ履歴を更新できます。
-
-</p>
-
-<p>
- アプリがリモート入力を受け取った後、通知は更新またはキャンセルされる必要があります。
-ユーザーがダイレクト リプライを使用してリモート更新にリプライする場合は、通知をキャンセルしないでください。
-
-代わりに、通知を更新してユーザーのリプライを表示します。{@code MessagingStyle} を使用した通知の場合は、リプライを最新のメッセージとして追加する必要があります。
-
-他のテンプレートを使用する場合は、ユーザーのリプライをリモート入力履歴に追加できます。
-
-</p>
-
-<h2 id="bundle">バンドル通知</h2>
-
-<p>Android N は、通知のキューを表す新しい方法である
- <i>バンドル通知</i>をデベロッパーに提供します。この機能は、Android Wear の<a href="{@docRoot}training/wearables/notifications/stacks.html">通知スタック</a>機能に似ています。
-
-たとえば、受信したメッセージの通知をアプリで作成する場合、複数のメッセージが受信されると、通知が単一のグループにバンドルされます。
-
-既存の {@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()} メソッドを使用して、同様の通知をバンドルできます。
-</p>
-
-<p>
- 通知グループでは、通知グループを構成する通知が階層化されます。
- この階層の最上位には、そのグループの概要情報を表示する親通知があります。
-ユーザーは通知グループを順次展開できます。ユーザーが階層を深くたどると、より多くの情報が表示されます。
-
-ユーザーがバンドルを展開すると、すべての子通知の詳細情報が表示されます。ユーザーがいずれかの通知を展開すると、そのコンテンツがすべて表示されます。
-
-
-</p>
-
-<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
- {@docRoot}preview/images/bundles_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>図 3.</strong> ユーザーは通知グループを順次展開できます。
-
-</p>
-
-<p class="note">
- <strong>注:</strong>同じアプリが 4 つ以上の通知を送信するときにグループ化が指定されていない場合、システムにより自動的に通知がグループ化されます。
-
-
-</p>
-
-<p>通知をグループに追加する方法については、<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">各通知をグループに追加する</a>をご覧ください。
-
-</p>
-
-
-<h3 id="best-practices">バンドル通知のベストプラクティス</h3>
-<p>このセクションでは、前のバージョンの Android プラットフォームで利用可能な {@link android.app.Notification.InboxStyle InboxStyle} 通知の代わりに、通知グループを使用する必要がある状況についてのガイドラインを提供します。
-
-
-</p>
-
-<h3>バンドル通知を使用するとき</h3>
-
-<p>ユースケースで次のすべての条件が満たされた場合にのみ通知グループを使用する必要があります。
-</p>
-
-<ul>
- <li>子通知が完全な通知であり、グループの概要なしに、子通知を個別に表示できる。
-</li>
- <li>子通知を個別に表示するメリットがある。次に例を示します。
-
- </li>
- <ul>
- <li>子通知がアクション可能であり、各子通知に固有のアクションがある。</li>
- <li>ユーザーが読みたい多くの情報が子通知にある。</li>
- </ul>
-</ul>
-
-<p>通知グループの適切なユースケースの例には、着信メッセージのリストを表示するメッセージング アプリや受信したメールのリストを表示するメールアプリなどが含まれます。
-
-</p>
-
-<p>
-単一の通知が望ましいユースケースの例には、1 人のユーザーからの個別メッセージや、1 行のテキスト メッセージ アイテムのリスト表示が含まれます。
-
-このリスト表示を行うには、
-{@link android.app.Notification.InboxStyle InboxStyle} または {@link android.app.Notification.BigTextStyle BigTextStyle} を使用します。
-
-
-</p>
-
-<h3 id ="post">バンドル通知を表示する</h3>
-
-<p>
- アプリは、グループに単一の子通知が含まれている場合でも、グループの概要を常に送信する必要があります。
-グループに単一の通知のみが含まれている場合、システムによって、概要の表示が非表示になり、子通知が直接表示されます。
-これにより、ユーザーがグループの子通知をスワイプして消すときに一貫した使用感が出ます。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>このバージョンの Android N では、単一の子通知が含まれる通知グループの概要を非表示にできません。
-この機能は、将来のバージョンの Android N に追加されます。
-
-</p>
-
-<h3>通知をピークする</h3>
-
-<p>通常、子通知はグループとして表示されますが、子通知を<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">ヘッドアップ通知</a>として一時的に表示するように設定できます。
-
-
-この機能は、特に最新の子通知とその関連するアクションへの即時アクセスを可能にするので便利です。
-
-</p>
-
-
-<h3>下位互換性</h3>
-
-<p>
- Android 5.0(API レベル 21)以降では、Android Wear 端末をサポートするために、通知グループとリモート入力が {@link
- android.app.Notification} API の一部になっています。
-これらの API を使用して通知を既に作成している場合は、アプリの動作が上記のガイドラインに適合していることの確認と、{@code
- setRemoteInputHistory()} の実装検討のみを行ってください。
-
-
-</p>
-
-<p>
- 下位互換性をサポートするために、サポート ライブラリの {@link android.support.v4.app.NotificationCompat} クラスで同じ API が利用できるようになっているため、前の Android バージョンで機能する通知を作成できます。
-
-
-携帯端末とタブレットでは、概要通知のみがユーザーに表示されるため、アプリは、受信トレイスタイルやグループの全情報を表す同等の通知を引き続きサポートする必要があります。
-
-Android Wear 端末では、古いプラットフォーム レベル上にもすべての子通知が表示されるため、API レベルに関係なく、子通知を作成する必要があります。
-
-
-
-</p>
-
-<h2 id="custom"> カスタムビュー</h2>
-<p>Android N 以降では通知ビューをカスタマイズでき、通知ヘッダー、アクション、展開レイアウトなどのシステム デコレーションを引き続き取得できます。
-
-</p>
-
-<p>この機能を有効にするために、Android N には、カスタムビューにスタイルを適用する次の API が追加されています。
-</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> メディア通知以外の通知にスタイルを適用します。
-</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> メディア通知にスタイルを適用します。</dd>
-</dl>
-
-<p>この新しい API を使用するには、{@code setStyle()} メソッドを呼び出し、目的のカスタムビュー スタイルに渡します。
-</p>
-
-<p>次のコード スニペットは、
-{@code DecoratedCustomViewStyle()} メソッドでカスタム通知オブジェクトを作成する方法を示しています。</p>
-
-<pre>
-Notification notification = new Notification.Builder()
- .setSmallIcon(R.drawable.ic_stat_player)
- .setLargeIcon(albumArtBitmap))
- .setCustomContentView(contentView);
- .setStyle(new Notification.DecoratedCustomViewStyle())
- .build();
-
-</pre>
-
-<h2 id="style">メッセージング スタイル</h2>
-<p>
- Android N では、通知スタイルをカスタマイズするための新しい API が提供されます。
- <code>MessageStyle</code> クラスを使用して、会話タイトル、追加メッセージ、通知のコンテンツ ビューなど、通知に表示される複数のラベルを変更できます。
-
-
-</p>
-
-<p>
- 次のコード スニペットは、<code>MessageStyle</code> クラスを使用して通知のスタイルをカスタマイズする方法を示しています。
-
-</p>
-
-<pre>
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-</pre>
diff --git a/docs/html-intl/intl/ko/about/versions/nougat/android-7.0-testing.jd b/docs/html-intl/intl/ko/about/versions/nougat/android-7.0-testing.jd
deleted file mode 100644
index 1222227..0000000
--- a/docs/html-intl/intl/ko/about/versions/nougat/android-7.0-testing.jd
+++ /dev/null
@@ -1,190 +0,0 @@
-page.title=테스트 가이드
-page.image=images/cards/card-n-guide_2x.png
-meta.tags="preview", "testing"
-page.tags="preview", "developer preview"
-
-@jd:body
-
-<div id="tb-wrapper">
- <div id="tb">
- <h2>이 문서의 내용</h2>
- <ol>
- <li><a href="#runtime-permissions">권한 테스트</a></li>
- <li><a href="#doze-standby">잠자기 및 앱 대기 모드 테스트</a></li>
- <li><a href="#ids">자동 백업 및 기기 식별자</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android N에서는 앱이 차기 버전의 플랫폼에서 제대로 작동하는지 확인해볼 수 있습니다.
- 이 프리뷰에는 앱에 영향을 미칠 수 있는 수많은 API와 동작 변경 사항이 포함되어 있습니다. 이에 대해서는 <a href="{@docRoot}preview/api-overview.html">API 개요</a>와 <a href="{@docRoot}preview/behavior-changes.html">동작 변경 사항</a>에 설명되어 있습니다.
-
- 프리뷰로 앱을 테스트할 때에는 사용자에게 좋은 환경을 제공하기 위해 개발자 여러분이 꼭 초점을 맞춰야 하는 몇 가지 특정한 시스템 변경사항이 있습니다.
-
-
-</p>
-
-<p>
- 이 가이드에서는 앱에서 테스트할 프리뷰 기능은 어떤 것이고, 테스트 방법은 어떤지에 대해 설명합니다. 이와 같은 특정 프리뷰 기능을 먼저 테스트하는 것이 좋습니다. 왜냐하면 이들 기능은 앱의 동작에 큰 영향을 미칠 가능성이 높기 때문입니다.
-
-
-</p>
-
-<ul>
- <li><a href="#runtime-permissions">권한</a>
- </li>
- <li><a href="#doze-standby">잠자기 및 앱 대기 모드</a>
- </li>
- <li><a href="#ids">자동 백업 및 기기 식별자</a></li>
-</ul>
-
-<p>
- 테스트용 프리뷰 시스템 이미지로 기기 또는 가상 기기를 설정하는 방법에 대한 자세한 정보는 <a href="{@docRoot}preview/setup-sdk.html">Android N SDK 설정</a>을 참조하세요.
-
-
-</p>
-
-
-<h2 id="runtime-permissions">권한 테스트</h2>
-
-<p>
- 새로운 <a href="{@docRoot}preview/features/runtime-permissions.html">권한</a> 모델은 사용자가 여러분의 앱에 권한을 할당하는 방법을 바꿔 놓습니다.
- 설치 절차 중에 모든 권한을 허용하는 것이 아니라, 앱이 런타임에 사용자에게 각각의 권한을 요청해야 합니다.
-
- 사용자 입장에서는 이러한 동작으로 각 앱의 액티비티에 대해 더 세분화된 제어권을 행사할 수 있을 뿐만 아니라 이 앱이 어째서 특정한 권한을 요청하고 있는 것인지 맥락을 더 잘 이해할 수 있게 되기도 합니다.
- 사용자는 언제든 앱에 개별적으로 권한을 허용할 수 있고, 이를 취소할 수도 있습니다.
- 미리 보기의 이러한 기능은 앱의 동작에 영향을 미칠 가능성이 가장 높고, 앱의 몇 가지 기능이 작동하지 않도록 막거나 저하된 상태로 작동하게 할 수도 있습니다.
-
-
-</p>
-
-<p class="caution">
- 이 변경 내용은 새 플랫폼에서 실행되는 모든 앱에 영향을 비치며, 새 플랫폼 버전을 대상으로 하지 않는 앱도 예외가 아닙니다.
- 레거시 앱에 대해 플랫폼이 제한된 호환성 동작을 제공하기는 하지만, 지금 바로 새 권한 모델로 앱의 마이그레이션 계획을 시작하는 편이 좋습니다. 플랫폼이 공식적으로 출시될 때에 맞춰 앱의 업데이트된 버전을 게시하는 것을 목표로 하십시오.
-
-
-</p>
-
-
-<h3 id="permission-test-tips">테스트 팁</h3>
-
-<p>
- 다음은 새 권한 동작에 대해 앱 테스트를 계획하고 실행하는 데 유용한 몇 가지 테스트 팁입니다.
-
-</p>
-
-<ul>
- <li>앱의 현재 권한과 관련된 코드 경로를 확인합니다.</li>
- <li>권한 보호된 서비스 및 데이터 전반에 걸친 사용자 흐름을 테스트합니다.</li>
- <li>허용된/취소된 권한을 여러 가지로 조합하여 테스트합니다.</li>
- <li>명령줄에서 권한을 관리할 때 {@code adb} 도구를 사용합니다.
- <ul>
- <li>권한과 상태를 그룹별로 목록으로 나열합니다.
- <pre>adb shell pm list permissions -d -g</pre>
- </li>
- <li>하나 이상의 권한을 다음과 같은 구문을 사용하여 허용하거나 취소합니다.<br>
- <pre>adb shell pm [grant|revoke] <permission.name> ...</pre>
- </li>
- </ul>
- </li>
- <li>권한을 사용하는 서비스에 대해 앱을 분석해봅니다.</li>
-</ul>
-
-<h3 id="permission-test-strategy">테스트 전략</h3>
-
-<p>
- 권한을 변경하면 앱의 구조와 디자인은 물론 사용자 환경과, 개발자가 사용자에게 제공하는 흐름에도 영향을 미칩니다.
- 앱의 현재 권한 사용 내용을 평가한 다음 제공하고자 하는 새로운 흐름을 계획하기 시작해야 합니다.
- 플랫폼의 공식 릴리스에서 호환성 동작을 제공할 예정이지만, 이와 같은 동작에만 의존하지 말고 앱 업데이트를 계획하는 것이 좋습니다.
-
-
-</p>
-
-<p>
- 앱이 실제로 필요로 하고 사용하는 권한을 확인한 다음, 권한 보호된 서비스를 사용하는 여러 가지 코드 경로를 찾습니다.
- 이렇게 하려면 새 플랫폼에서 여러 가지로 조합한 테스트를 거치고 코드 분석을 통해야 합니다.
- 테스트에서는 런타임 권한에 옵트인하는 것에 초점을 맞춰야 합니다. 이를 위해 앱의 {@code targetSdkVersion}을 프리뷰 버전으로 변경하세요.
- 자세한 정보는 <a href="{@docRoot}preview/setup-sdk.html#">Android N SDK 설정</a>을 참조하세요.
-
-
-</p>
-
-<p>
- 다양한 조합의 권한을 해지하고 추가하는 방식으로 테스트를 수행하여 권한에 종속되는 사용자 흐름을 파악합니다.
- 종속성이 분명하지 않거나 논리적인 경우, 리팩터링을 고려해 보거나 해당 흐름을 구분하여 종속성을 제거, 또는 해당 권한이 왜 필요한지 분명히 하는 방안을 고려해야 합니다.
-
-
-</p>
-
-<p>
- 런타임 권한의 동작, 테스트 및 모범 사례에 대한 자세한 정보는 <a href="{@docRoot}preview/features/runtime-permissions.html">권한</a> 개발자 미리 보기 페이지를 참조하십시오.
-
-
-</p>
-
-
-<h2 id="doze-standby">잠자기 및 앱 대기 모드 테스트</h2>
-
-<p>
- 잠자기 및 앱 대기 모드의 절전 기능은 기기가 유휴 상태에 있을 때 또는 사용자가 앱에 초점을 맞추고 있지 않을 때 앱이 수행할 수 있는 배경 처리의 양을 제한합니다.
- 시스템이 앱에 부과할 수 있는 제한 사항에는 네트워크 액세스를 제한하거나 없애기, 배경 작업을 일시 중지시키기, 알림 일시 중지, 절전 모드 해제 및 알람 요청 무시 등이 포함됩니다.
-
- 이러한 절전 기능에 앱이 적절히 동작하도록 확실히 해 두려면 이와 같은 저전력 상태를 시뮬레이트하여 앱을 테스트해보아야 합니다.
-
-
-</p>
-
-<h4 id="doze">앱에서 잠자기 모드 테스트하기</h4>
-
-<p>앱에서 잠자기 모드를 테스트하려면:</p>
-
-<ol>
-<li>Android N 시스템 이미지로 하드웨어 기기 또는 가상 기기를 구성합니다.</li>
-<li>기기를 개발 머신에 연결하고 앱을 설치합니다.</li>
-<li>앱을 실행시킨 다음 활성 상태로 그냥 둡니다.</li>
-<li>다음 명령을 실행하여 기기가 잠자기 모드에 들어가는 것을 시뮬레이션합니다.
-
-<pre>
-$ adb shell dumpsys battery unplug
-$ adb shell dumpsys deviceidle step
-$ adb shell dumpsys deviceidle -h
-</pre>
-
- </li>
- <li>기기가 다시 활성화되면 앱이 어떻게 동작하는지 살펴봅니다. 기기가 잠자기 모드를 종료할 때 정상적으로 복구되는지 확인해야 합니다.
-</li>
-</ol>
-
-
-<h4 id="standby">앱에서 앱 대기 모드 테스트하기</h4>
-
-<p>앱에서 앱 대기 모드를 테스트하려면:</p>
-
-<ol>
- <li>Android N 시스템 이미지로 하드웨어 기기 또는 가상 기기를 구성합니다.</li>
- <li>기기를 개발 머신에 연결하고 앱을 설치합니다.</li>
- <li>앱을 실행시킨 다음 활성 상태로 그냥 둡니다.</li>
- <li>다음 명령을 실행하여 앱이 대기 모드에 들어가는 것을 시뮬레이션합니다.
-
-<pre>
-$ adb shell am broadcast -a android.os.action.DISCHARGING
-$ adb shell am set-idle <packageName> true
-</pre>
-
- </li>
- <li>다음 명령을 사용하여 앱이 대기 모드에서 해제되는 것을 시뮬레이션합니다.
- <pre>$ adb shell am set-idle <packageName> false</pre>
- </li>
- <li>앱이 대기 모드에서 해제된 상태에서 어떻게 동작하는지 살펴봅니다. 대기 모드에서 정상적으로 복구되는지 확인해야 합니다.
- 특히, 앱의 알림과 배경 작업이 계속 예상했던 대로 기능하는지 확인해야 합니다.
-</li>
-</ol>
-
-<h2 id="ids">앱용 자동 백업 및 기기별 식별자</h2>
-
-<p>앱이 내부 저장소에서 각 기기에 따라 다른 식별자(예: Google Cloud Messaging 등록 ID)를 유지하는 경우, 모범 사례를 따라 저장소 위치를 자동 백업에서 배제해야 합니다. 이 내용은 <a href="{@docRoot}preview/backup/index.html">앱용 자동 백업</a>에 설명되어 있습니다.
-
-
-
- </p>
diff --git a/docs/html-intl/intl/ko/about/versions/nougat/index.jd b/docs/html-intl/intl/ko/about/versions/nougat/index.jd
index 4b0ccc5..20561a4 100644
--- a/docs/html-intl/intl/ko/about/versions/nougat/index.jd
+++ b/docs/html-intl/intl/ko/about/versions/nougat/index.jd
@@ -1,78 +1,62 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<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 N Developer Preview</h1>
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- Android N을 맞이할 준비를 하세요!
+ Android Nougat을 맞이할 준비를 하세요!
Nexus와 다른 기기에서 <strong>앱을 테스트하세요</strong>. <strong>전력과 메모리를 절약</strong>하는 새로운 시스템
동작을 지원하세요.
<strong>다중 창 UI</strong>,
<strong>직접 회신 알림</strong> 등으로 앱을 확장하세요.
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
시작하기
- </a><!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ </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}images/home/n-preview-hero.png" srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
+ srcset="{@docRoot}images/home/n-preview-hero.png 1x,
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
+ data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
+ data-maxResults="3"></div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
문제 보고
</a>
</li>
<li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- 릴리스 노트 보기
- </a>
- </li>
- <li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
개발자 커뮤니티 가입
@@ -82,26 +66,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
-
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 문제 보고
- </a></div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 릴리스 노트 보기
- </a></div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 개발자 커뮤니티 가입
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
<h2 class="norule">최신</h2>
<div class="resource-widget resource-flow-layout col-16"
@@ -113,19 +77,34 @@
data-initial-results="3"></div>
</div></section>
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">리소스</h1>
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
- 앱을 Android N에서 사용할 수 있도록 준비하는 데 유용한 중요 정보입니다.
+ New Android capabilities and the right way to use them in your apps.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
+ 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-light" id="resources"><div class="wrap">
+ <h1 class="dac-section-title">리소스</h1>
+ <div class="dac-section-subtitle">
+ 앱을 Android Nougat에서 사용할 수 있도록 준비하는 데 유용한 중요 정보입니다.
+ </div>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ko/index.jd b/docs/html-intl/intl/ko/index.jd
index 01c8587..b459df7 100644
--- a/docs/html-intl/intl/ko/index.jd
+++ b/docs/html-intl/intl/ko/index.jd
@@ -5,49 +5,36 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-invert" style="background-color:#455A64">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="col-7of16 col-push-9of16" style="padding-left:2em;">
- <a href="{@docRoot}preview/index.html">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Get ready for the next version of Android!
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
- behaviors to <strong>save power and memory</strong>.
+<section class="dac-expand dac-hero" style="background-color:#b2dfdb;">
+ <div class="wrap" style="max-width:1000px;margin-top:0">
+ <div class="col-7of16 col-push-8of16">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <h1 class="dac-hero-title" style="color:#004d40">Android 7.0 Nougat!</h1>
+ <p class="dac-hero-description" style="color:#004d40">
+ <strong>Android 7.0 Nougat is here!</strong>
+ Get your apps ready for the latest version of Android, with new system
+ behaviors to <strong>save battery and memory</strong>.
Extend your apps with <strong>multi-window UI</strong>,
<strong>direct reply notifications</strong> and more.
</p>
- <a class="dac-hero-cta" href="/preview/index.html">
- <span class="dac-sprite dac-auto-chevron"></span>
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron" style="background-color:#b2dfdb"></span>
Learn more
- </a><!--<br>
- <a class="dac-hero-cta" href="/preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Developer Preview (final SDK)
- </a><br>-->
+ </a>
+ </a>
</a>
</div>
- <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:0em;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,
- /images/home/n-preview-hero_2x.png 2x">
+ <div class="col-6of16 col-pull-6of16 dac-hero-figure" style="padding-left:1em;padding-top:1em;">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/nougat_bg.jpg"
+ srcset="{@docRoot}images/home/nougat_bg.jpg 1x,
+ {@docRoot}images/home/nougat_bg_2x.jpg 2x">
</a>
</div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
<i class="dac-sprite dac-arrow-down-gray"></i>
@@ -75,28 +62,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
- <i class="dac-sprite dac-arrow-down-gray"></i>
- </a>
- <div class="actions">
- <div><a href="{@docRoot}sdk/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Get the SDK
- </a></div>
- <div><a href="{@docRoot}samples/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Browse Samples
- </a></div>
- <div><a href="{@docRoot}distribute/stories/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Watch Stories
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light" id="build-apps"><div class="wrap">
<h1 class="dac-section-title">Build Beautiful Apps</h1>
<div class="dac-section-subtitle">
diff --git a/docs/html-intl/intl/ko/preview/download_mp2.jd b/docs/html-intl/intl/ko/preview/download_mp2.jd
deleted file mode 100644
index ff9dd7e..0000000
--- a/docs/html-intl/intl/ko/preview/download_mp2.jd
+++ /dev/null
@@ -1,360 +0,0 @@
-page.title=다운로드
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Android 미리 보기 SDK의 구성 요소를 다운로드하고 설치하기 전에 우선 다음과 같은 사용 약관에 동의해야 합니다.
-</p>
-
- <h2 class="norule">사용 약관</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-이것은 Android SDK 미리 보기 라이선스 계약서입니다(이하 "라이선스 계약").
-
-1. 개요
-
-1.1 Android SDK 미리 보기(본 라이선스 계약에서는 "미리 보기"라고 칭하며, 구체적으로 Android 시스템 파일, 패키지 API 및 미리 보기 라이브러리 파일이 이용 가능한 경우 및 이용 가능하게 전환된 경우 이를 포함한 것을 가리킴)는 본 라이선스 계약 조건에 따라 계약자에게 사용을 허여합니다. 본 라이선스 계약은 미리 보기 사용과 관련하여 계약자와 Google 간에 법적 구속력이 있는 계약을 체결합니다.
-
-1.2 "Android"는 기기를 위한 Android 소프트웨어 스택을 의미합니다. 이는 http://source.android.com/ URL에 위치하며 수시로 업데이트되는 Android 오픈 소스 프로젝트에서 제공됩니다.
-
-1.3 "Google"은 미국 1600 Amphitheatre Parkway, Mountain View, CA 94043에 본사를 두고 있는 델라웨어주 법인인 Google Inc.를 의미합니다.
-
-2. 라이선스 계약에 동의
-
-2.1 이 미리 보기를 사용하려면, 먼저 라이선스 계약에 동의해야 합니다. 이 라이선스 계약에 동의하지 않고 미리 보기를 사용해서는 안 됩니다.
-
-2.2 수락을 클릭하고/거나 미리 보기를 사용하면 본 라이선스 계약 조건에 동의하는 것으로 간주됩니다.
-
-2.3 미국법 또는 현재 거주 중이거나 미리 보기를 사용하는 국가를 포함하여 다른 국가의 법에 따라 미리 보기를 받는 것이 금지된 경우, 미리 보기를 사용할 수 없으며 본 라이선스 계약을 수락할 수 없습니다.
-
-2.4 회사 또는 단체 내에서 내부적으로 미리 보기를 사용하며 고용주 또는 기타 단체를 대신하여 본 라이선스 계약 준수에 동의하는 경우, 계약자의 고용주나 그 단체에 본 라이선스 계약에 대한 구속력을 부여할 수 있는 모든 법적 권한을 계약자가 갖고 있음을 진술하고 보증합니다. 구속력을 부여할 수 있는 법적 권한이 없을 경우, 고용주 또는 기타 단체를 대신하여 본 라이선스 계약에 동의하거나 미리 보기를 사용할 수 없습니다.
-
-3. Google이 허하는 미리 보기 라이선스
-
-3.1 본 라이선스 계약의 조건에 따라 Google은 계약자에게 로열티 없고 양도 불가능하며 비독점적이고 2차 인가를 불허하며, 한정되고 무효화할 수 있는 미리 보기 사용 권한을 허용하여 회사 또는 조직 내에서 개인적 또는 내부적으로 사용할 수 있도록 합니다. 이는 Android 플랫폼에서 실행되는 애플리케이션을 개발할 목적으로만 사용해야 합니다.
-
-3.2 계약자는 SDK에 존재하는 지적 재산권을 포함한 SDK에 대한 모든 법적인 권리, 소유권 및 이익이 Google 또는 제3자에게 있음에 동의합니다 "지적 재산권"은 모든 특허법, 저작권법, 영업비밀법, 상표법상 존재하는 모든 권리 및 기타 모든 재산권을 의미합니다. Google은 계약자에게 명시적으로 부여하지 않은 모든 권리를 보유합니다.
-
-3.3 본 라이선스 계약에 명시적으로 허용된 용도 외에는 미리 보기를 사용할 수 없습니다. 해당 제3자 라이선스 요건이 허용하는 범위를 제외하고 계약자는 미리 보기의 일부분을 (a) 복사(백업 목적 제외), 수정, 개작, 재배포, 역컴파일, 리버스 엔지니어링, 분해하거나 이를 통해 파생물을 생성하거나 (b) 개인 컴퓨터를 제외한 모바일 단말기 또는 기타 모든 하드웨어 기기에 미리 보기의 일부를 로드하거나, 미리 보기의 일부를 다른 소프트웨어와 결합하거나 미리 보기의 일부가 통합된 일체의 소프트웨어나 기기를 배포해서는 안 됩니다.
-
-3.4 계약자는 미리 보기에서 파생된 소프트웨어 개발 키트의 배포, 이러한 키트 생성에 참여 또는 홍보를 포함하되 이에 국한되지 않고, Android의 단편화를 야기하는 어떠한 행동도 취하지 않을 것임에 동의합니다.
-
-3.5 오픈 소스 소프트웨어 라이선스에 의거한 미리 보기 구성요소의 사용, 재생산, 배포에는 본 라이선스 계약이 아닌, 해당 오픈 소스 소프트웨어 라이선스의 조건이 적용됩니다. 계약자는 허용된 모든 권한 하에서 그러한 오픈 소스 소프트웨어 라이선스에 관해 충실한 피허가자로서의 자세를 견지할 것이며 그러한 권한을 종료, 일시 중단 또는 침해하는 행위를 삼갈 것을 동의합니다.
-
-3.6 계약자는 Google이 제공하는 SDK의 형태 및 특성이 사전 통지 없이 변경될 수 있음에 동의하며, 이전 버전의 미리 보기에서 개발된 애플리케이션이 이후 버전의 SDK와 호환되지 않을 수 있음에 동의합니다. 계약자는 계약자 또는 사용자에게 사전 통지 없이 SDK(또는 SDK에 포함된 기능) 제공을(영구적 또는 일시적으로) 중단할 수 있는 권한이 Google에게 있음에 동의합니다.
-
-3.7 본 라이선스 계약은 계약자에게 Google의 상표명, 상표, 서비스 표시, 로고, 도메인 이름, 기타 독특한 브랜드 특징에 대한 사용 권한을 부여하지 않습니다.
-
-3.8 계약자는 SDK에 부착되어 있거나 포함되어 있는 모든 소유권 고지 사항(저작권 및 상표 고지 사항 포함)을 제거, 변경 또는 불분명하게 만들지 않을 것에 동의합니다.
-
-4. 계약자의 미리 보기 사용
-
-4.1 Google은 본 라이선스 계약의 어떤 조항도 계약자(또는 계약자의 사용 허가자)가 미리 보기를 사용하여 개발한 소프트웨어 애플리케이션에 대한 권리, 소유권 또는 이익, 그리고 해당 애플리케이션에 존재하는 모든 지적 재산권을 부여하지 않는다는 점에 동의합니다.
-
-4.2 계약자는 (a) 본 라이선스 계약 그리고 (b) 모든 준거법, 규정 또는 관련 관할권 내에서 일반적으로 수용되는 관행 또는 지침(미국 또는 기타 관련 국가로/에서의 데이터 또는 소프트웨어 수출과 관련된 모든 법률 포함)에서 허용하는 용도에 한하여 미리 보기를 사용하고 애플리케이션을 작성하는 것에 동의합니다.
-
-4.3 계약자는 일반 대중 사용자를 대상으로 미리 보기를 사용하여 애플리케이션을 개발하는 경우, 해당 사용자의 프라이버시 및 법적 권리를 보호하는 것에 동의합니다. 사용자가 계약자에게 사용자 이름, 비밀번호 또는 기타 로그인 정보나 개인 정보를 제공하는 경우, 계약자는 제공된 정보가 자신의 애플리케이션에 제공된다는 사실을 사용자에게 알려야 하며, 반드시 법적으로 적절한 개인정보 보호정책 고지 및 보호를 해당 사용자에게 제공해야 합니다. 애플리케이션에서 사용자가 제공한 개인정보나 민감한 정보를 저장하는 경우, 이를 안전하게 처리해야 합니다. 사용자들이 애플리케이션에 Google 계정 정보를 제공하는 경우, 애플리케이션은 해당 사용자의 Google 계정에 액세스하는 목적으로만, 그리고 각 사용자가 허용한 범위 내의 한정된 목적으로만 이러한 정보를 사용해야 합니다.
-
-4.4 계약자는 Google 또는 기타 모든 타사의 서버, 네트워크 또는 기타 모든 재산 또는 서비스를 허가 없이 방해, 교란, 손상 또는 액세스하는 애플리케이션의 개발 또는 배포를 포함한 하등의 행위에 미리 보기를 이용하지 않을 것임을 동의합니다.
-
-4.5 계약자는 자신이 Android 및/또는 Android용 애플리케이션을 통해 생성, 전송 또는 표시하는 모든 데이터, 콘텐츠 또는 리소스 그리고 그로 인한 결과(Google이 입을 수 있는 모든 피해나 손실 포함)에 대해 전적으로 책임이 있다는 것(그리고 Google은 계약자 또는 모든 제3자에 대한 책임이 없다는 것)에 동의합니다.
-
-4.6 계약자는 본 라이선스 계약, 모든 해당 제3자 계약 또는 서비스 약관, 또는 모든 준거법 또는 규정에 의거한 계약자 의무 위반, 그리고 그로 인한 결과(Google 또는 제3자가 입을 수 있는 모든 피해나 손실 포함)에 전적으로 책임이 있다는 것(그리고 Google은 계약자 또는 모든 제3자에 대한 책임이 없다는 것)에 동의합니다.
-
-4.7 이 미리 보기는 현재 개발 단계에 있으며, 계약자의 테스트와 피드백은 그러한 개발 과정에 중요한 부분을 차지합니다. 미리 보기를 사용함으로써 계약자는 일부 기능의 구현은 아직 개발 중인 상태이며 미리 보기가 안정된 릴리스처럼 완벽하게 기능할 것이라 믿고 사용해서는 안 된다는 점을 인지하는 것으로 간주합니다. 계약자는 이 미리 보기를 사용한 애플리케이션을 공개적으로 배포 또는 배송하지 않기로 동의합니다. 이 미리 보기는 공식 Android SDK가 출시된 이후에는 더 이상 지원되지 않기 때문입니다.
-
-5. 계약자의 개발자 자격 증명
-
-5.1 계약자는 Google이 발급했거나 자신이 선택한 모든 개발자 자격 증명에 대한 기밀성을 유지할 책임이 있으며 계약자의 개발자 자격 증명 하에 개발된 모든 애플리케이션에 대한 전적인 책임이 있음에 동의합니다.
-
-6. 개인정보 보호정책 및 정보
-
-6.1 미리 보기를 지속적으로 혁신하고 개선하기 위해, Google은 고유 식별자, 관련 IP 주소, 소프트웨어 버전 번호, 미리 보기에서 사용 중인 도구 및/또는 서비스와 도구의 사용법에 대한 정보를 포함하되 이에 국한되지 않고 소프트웨어에서 특정 사용량 통계 정보를 수집할 수 있습니다. 그러한 정보를 수집하기 전에 미리 보기는 계약자에게 이를 통지하고 동의를 구할 것입니다. 계약자가 동의하지 않을 경우 정보를 수집하지 않습니다.
-
-6.2 수집된 데이터는 모두 취합된 형태로 미리 보기 개선을 위해 검토되며, Google의 개인정보 보호정책에 따라 유지 관리됩니다. 이 정보는 http://www.google.com/policies/privacy/를 참조하십시오.
-
-7. 제3자 애플리케이션
-
-7.1 제3자가 개발한 애플리케이션을 실행하거나 제3자가 제공한 데이터, 콘텐츠 또는 리소스에 액세스하기 위해 미리 보기를 사용하는 경우, 계약자는 Google이 그러한 애플리케이션, 데이터, 콘텐츠 또는 리소스에 대한 책임이 없음에 동의합니다. 계약자는 그러한 제3자 애플리케이션을 통해 자신이 액세스한 모든 데이터, 콘텐츠 또는 리소스에 대한 책임은 그것을 만든 사람에게 있음에 동의합니다. 또한 계약자가 그러한 모든 제3자 애플리케이션, 데이터, 콘텐츠 또는 리소스를 사용하거나 액세스함으로써 비롯된 모든 피해나 손실에 대한 책임이 Google에게 없음에 동의합니다.
-
-7.2 그러한 제3자 애플리케이션을 통해 계약자에게 제공된 데이터, 콘텐츠 그리고 리소스는 그것을 제공한 제공자(또는 제공자를 대신하는 기타 개인 또는 기업)가 소유한 지적 재산권에 의해 보호될 수 있음을 유의해야 합니다. 그러한 데이터, 콘텐츠 또는 리소스(전부 또는 일부)를 수정, 임대, 리스, 대여, 판매, 배포하거나 이를 기반으로 파생물을 생성해서는 안 됩니다. 단, 관련 소유자로부터 그러한 작업을 수행해도 좋다는 허락을 받은 경우에는 예외입니다.
-
-7.3 계약자는 그러한 제3자 애플리케이션, 데이터, 콘텐츠 또는 리소스의 사용은 계약자와 관련 제3자 간에 체결하는 별도의 계약 조건의 적용을 받는다는 것을 인정합니다.
-
-8. Google API 사용
-
-8.1 Google Data API
-
-8.1.1 Google에서 데이터를 검색하기 위해 API를 사용하는 경우, 그러한 데이터가 Google 또는 데이터를 제공하는 당사자(또는 당사자를 대신하는 기타 개인 또는 기업)가 소유한 지적 재산권에 의해 보호될 수 있음을 인정합니다. 그러한 API를 사용하는 경우, 추가적인 서비스 약관의 적용을 받을 수 있습니다. 관련 서비스 약관에 허용되지 않은 한, 그러한 데이터(전부 또는 일부)를 변경, 임대, 리스, 대여, 판매, 배포하거나 이를 기반으로 파생물을 생성해서는 안 됩니다.
-
-8.1.2 Google에서 사용자 데이터를 검색하기 위해 API를 사용하는 경우, 계약자는 사용자로부터 명시적인 동의를 얻은 경우에 한하여, 그리고 해당 사용자가 허용한 범위 내의 한정된 목적으로만 데이터를 검색해야 합니다.
-
-9. 라이선스 계약 종료
-
-9.1 본 라이선스 계약은 계약자 또는 Google에 의해 아래와 같은 조건 하에 종료될 때까지 계속 적용됩니다.
-
-9.2 계약자가 라이선스 계약을 종료하고자 하는 경우, 미리 보기 및 관련 개발자 자격 증명 일체의 사용을 중단하는 것으로 그러한 의사를 피력할 수 있습니다.
-
-9.3 Google은 언제든 이유 여하를 불문하고 계약자에게 통고하여 라이선스 계약을 종료할 수 있습니다.
-
-9.4 본 라이선스 계약은 통보 또는 여타의 행위 없이도 자동으로 종료됩니다. 이에 해당되려면 다음과 같은 조건이 수반되어야 합니다.
-(A) Google이 계약자가 거주하는 국가 또는 계약자가 서비스를 사용하는 지역에서 미리 보기 또는 미리 보기의 특정 부분 제공을 중지하는 경우 및
-(B) Google이 Android SDK의 최종 릴리스 버전을 발행하는 경우.
-
-9.5 본 라이선스 계약이 종료되면 라이선스 계약으로 계약자에게 허용한 라이선스가 취소되며, 이에 따라 계약자는 미리 보기 사용을 즉시 모두 중단해야 하고 제 10, 11, 12 및 14절의 조항이 기한 없이 유지됩니다.
-
-10. 면책 조항
-
-10.1 계약자는 미리 보기 이용에 대한 위험 부담이 전적으로 본인에게 있으며, Google이 일체의 보증 없이 미리 보기를 "있는 그대로" 그리고 "이용 가능한" 상태로 제공한다는 것을 분명히 이해하고 동의합니다.
-
-10.2 미리 보기 이용 및 이용 과정에서 다운로드하거나 얻게 되는 모든 자료를 사용하는 것은 본인의 재량에 따르며 이에 대한 위험 부담이 전적으로 본인에게 있으며, 그러한 사용으로 인해 발생하는 컴퓨터 시스템 또는 다른 기기의 손상 또는 데이터 손실에 대한 책임은 전적으로 본인에게 있습니다. 전술한 조항을 제한하지 않는 범위 내에서 계약자는 미리 보기가 안정된 릴리스가 아니며 오류, 결함 및 보안 취약성이 포함되어 있을 수 있어 그 결과로 중대한 손상을 유발할 수 있다는 점을 이해하는 것으로 간주합니다. 여기에는 계약자의 컴퓨터 시스템 또는 기타 기기의 완전하고 돌이킬 수 없는 손실도 포함됩니다.
-
-10.3 더 나아가, Google은 상품성, 특정 목적에 대한 적합성 및 비침해의 묵시적 보증 등을 포함하되 이에 국한되지 않고 명시적이든 묵시적이든 모든 종류의 보증 및 조건을 명시적으로 부인합니다.
-
-11. 책임 한계
-
-11.1 계약자는 계약자에게 발생할 수 있는 직접, 간접, 부수적, 특별, 결과적 또는 징벌적 손해에 대해 그 어떤 책임 이론에 근거해서도 Google, 해당 자회사, 계열사 및 사용 허가자가 어떠한 책임도 지지 아니함을 분명히 이해하고 동의합니다. 이러한 손해에는 Google 또는 해당 대리자가 이러한 손실 발생 가능성에 대해 통지를 받았거나 이러한 사항을 인식했는지에 상관없이 모든 데이터 손실이 포함됩니다.
-
-12. 면책
-
-12.1 법률에 의해 허용되는 최대한의 범위 안에서 계약자는 (a) 미리 보기 사용, (b) 계약자가 미리 보기에서 개발한 일체의 애플리케이션에서 초래된 모든 사람의 저작권, 상표, 영업비밀, 트레이드 드레스, 특허 또는 기타 지적 재산권의 침해, 또는 어떤 사람의 명예를 훼손하거나 초상권 또는 개인정보 보호정책을 침해함 또는 (C)계약자 본인이 본 라이선스 계약을 위반함으로써 발생하거나 생기는 모든 청구, 조치, 소송 또는 절차, 그리고 모든 손실, 책임, 손해, 경비(합리적인 변호사 비용 포함)로부터 Google을 옹호하고, 면책시키고, Google이 손해를 입지 않도록 하는 데 동의합니다.
-
-13. 라이선스 계약 변경
-
-13.1 미리 보기의 새로운 버전을 배포할 때, Google은 본 라이선스 계약의 내용을 변경할 수 있습니다. 그러한 변경이 이뤄진 경우, Google은 미리 보기가 제공되는 웹사이트에 새로운 라이선스 계약 버전을 게재할 것입니다.
-
-14. 일반 법적 조건
-
-14.1 본 라이선스 계약은 계약자와 Google 간의 모든 법적 계약을 구성하며, 계약자의 미리 보기 사용을 규제하고(별도의 서면 계약을 통해 Google이 계약자에게 제공하는 모든 서비스는 제외), 미리 보기와 관련하여 이전에 계약자와 Google이 맺은 모든 계약을 완전히 대체합니다.
-
-14.2 계약자는 Google이 라이선스 계약에 포함된(또는 관련 법률에 의해 Google이 향유하는) 법적 권리 또는 구제수단을 행사하거나 집행하지 않더라도, Google이 권리를 공식적으로 포기한 것으로 간주하지 않으며, Google이 계속해서 그러한 권리 또는 구제수단을 이용할 수 있음에 동의합니다.
-
-14.3 본 라이선스 계약의 조항이 무효라고 이 사안에 관한 판결을 할 수 있는 관할권을 가진 법원이 판결할 경우, 그 조항은 라이선스 계약의 나머지 조항에 영향을 미치지 않는 형태로 라이선스 계약에서 제거됩니다. 본 라이선스 계약의 나머지 조항은 여전히 유효하며 집행 가능합니다.
-
-14.4 계약자는 Google이 모회사가 되는 회사 그룹에 속한 각 회사가 본 라이선스 계약의 제3수익자이며, 그러한 다른 회사들이 그들에게 이익(또는 유리한 권리)을 부여하는 본 라이선스 계약의 모든 조항을 직접 행사하고 적용할 수 있는 권리를 가진다는 데 동의합니다. 그 외에는 다른 어떤 개인이나 회사도 본 라이선스 계약의 제3수익자가 될 수 없습니다.
-
-14.5 수출 규제. 미리 보기는 미국의 수출법과 규정의 적용을 받습니다. 계약자는 미리 보기에 적용되는 모든 국내 및 국제 수출법과 규정을 준수해야 합니다. 그러한 법에는 수출 대상국, 최종 사용자 및 최종 용도에 대한 제한이 포함됩니다.
-
-14.6 계약자 또는 Google은 상대 당사자의 사전 서면 승인 없이 본 라이선스 계약에서 부여된 권리를 제3자에게 양도하거나 이전할 수 없으며, 그러한 승인 없이 이루어진 양도 시도는 모두 무효입니다. 계약자는 Google의 사전 승인 없이 본 라이선스 계약 상의 책임 또는 의무를 위임할 수 없습니다.
-
-14.7 본 라이선스 계약, 그리고 본 라이선스 계약 상의 계약자와 Google의 관계는 법률 조항 간의 충돌과는 무관하게 캘리포니아주법에 의한 규제를 받습니다. 계약자와 Google은 본 라이선스 계약으로부터 발생하는 모든 법적 문제 해결을 캘리포니아주 산타 클라라(Santa Clara) 카운티 내에 소재한 전속 관할 법원에 의뢰하는 것에 동의합니다. 위 규정에도 불구하고, 계약자는 Google이 여전히 모든 관할권에서 강제 구제책(또는 동등한 유형의 긴급 법적 구제)을 신청할 수 있음에 동의합니다.
- </div><!-- sdk terms -->
-
-
-
- <div id="sdk-terms-form">
- <p>
- <input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
- <label id="agreeLabel" for="agree">본인은 상기 사용 약관을 읽었으며 이에 동의합니다.</label>
- </p>
- <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
- </div>
-
-
- </div><!-- end TOS -->
-
-
- <div id="landing">
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>이 문서의 내용</h2>
- <ol>
- <li><a href="#sdk">미리 보기 SDK</a></li>
- <li><a href="#docs">개발자 관련 문서</a></li>
- <li><a href="#images">하드웨어 시스템 이미지</a></li>
- </ol>
-
- <h2>Legacy downloads</h2>
- <ol>
- <li><a href="{@docRoot}preview/download_mp1.html">Developer Preview Archive</a></li>
- </ol>
- </div>
-</div>
-
-
-<p>
- Android M 미리 보기 SDK에는 개발 도구, Android 시스템 파일 및 라이브러리 파일이 포함되어 있어 앱을 테스트하고 플랫폼의 다음 릴리스에 도입되는 새 API를 테스트하는 데 유용합니다.
- 이 문서에서는 미리 보기의 다운로드할 수 있는 구성 요소를 가져와 앱을 테스트하는 방법에 대해 설명합니다.
-
-</p>
-
-
-<h2 id="sdk">미리 보기 SDK</h2>
-
-<p>
- 미리 보기 SDK는 <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK Manager</a>를 통해 다운로드할 수 있습니다. 미리 보기 SDK를 다운로드하고 구성하는 데 관한 자세한 정보는 <a href="{@docRoot}preview/setup-sdk.html#downloadSdk">미리 보기 SDK 설정하기</a>를 참조하십시오.
-
-</p>
-
-
-<h2 id="docs">개발자 관련 문서</h2>
-
-<p>
- 개발자 관련 문서 다운로드 패키지에서는 자세한 API 참조 정보와 미리 보기에 대한 API 차이점 보고서를 제공합니다.
-</p>
-
-<table>
- <tr>
- <th scope="col">Description</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="docs-dl">
- <td>Android M Preview 2<br>Developer Docs</td>
- <td><a href="#top" onclick="onDownload(this)"
- >m-preview-2-developer-docs.zip</a><br>
- MD5: 1db6fff9c722b0339757e1cdf43663a8<br>
- SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157
- </td>
- </tr>
-</table>
-
-
-<h2 id="images">하드웨어 시스템 이미지</h2>
-
-<p>
- 이러한 시스템 이미지를 사용하면 물리적인 기기에서 플랫폼의 미리 보기 버전을 설치하여 테스트할 수 있게 해줍니다.
- 이러한 이미지 중 한 가지로 기기를 구성하면, 앱을 설치하고 테스트하여 앱이 플랫폼의 다음 버전에서 어떤 성능을 보일지 확인할 수 있습니다.
- 기기에 시스템 이미지를 설치하는 과정은<em>기기에서 모든 데이터를 제거하므로</em>, 시스템 이미지를 설치하기에 앞서 데이터를 백업하는 것이 좋습니다.
-
-
-</p>
-
-<p class="warning">
- <b>경고:</b> 다음 Android 시스템 이미지는 미리 보기이며 사정에 따라 변동될 수 있습니다. 이러한 시스템 이미지를 사용할 때에는 Android SDK 미리 보기 라이선스 계약을 따라야 합니다.
- Android 미리 보기 시스템 이미지는 안정된 릴리스가 아니며, 오류나 결함이 들어있을 수 있고 이 때문에 컴퓨터 시스템, 기기 및 데이터에 손상을 초래할 수 있습니다.
-
- 미리 보기 Android 시스템 이미지는 공장 OS와 같은 테스트를 거치며 전화기 및 설치된 서비스와 애플리케이션의 작동이 중단되는 결과를 낳을 수 있습니다.
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">Device</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="hammerhead">
- <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >hammerhead-MPZ79M-preview-b1f4bde4.tgz</a><br>
- MD5: 2ca9f18bf47a061b339bab52647ceb0d<br>
- SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939
- </td>
- </tr>
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-MPZ79M-preview-e1024040.tgz</a><br>
- MD5: 24a2118da340b9afedfbdfc026f6ff81<br>
- SHA-1: e10240408859d5188c4aae140e1c539130ba614b
- </td>
- </tr>
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-MPZ79M-preview-9f305342.tgz</a><br>
- MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e<br>
- SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-MPZ79N-preview-fb63af98.tgz</a><br>
- MD5: e8d081137a20b66df595ee69523314b5<br>
- SHA-1: fb63af98302dd97be8de9313734d389ccdcce250
- </td>
- </tr>
-
-</table>
-
-<h3 id="install-image">기기에 이미지 설치</h3>
-
-<p>
- 기기 이미지를 테스트용으로 사용하려면, 이를 호환되는 기기에 설치해야만 합니다. 시스템 이미지를 설치하려면 아래의 지침을 따르십시오.
-
-</p>
-
-<ol>
- <li>여기 목록에 나열된 시스템 이미지 중 하나를 다운로드하여 압축을 해제합니다.</li>
- <li>기기에서 보존하고자 하는 데이터를 모두 백업합니다.</li>
- <li>이미지를 기기에 플래시하려면 <a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>에 있는 지침을 따릅니다.
-
-</li>
-</ol>
-
-<p class="note">
- <strong>참고:</strong> 일단 개발 기기에 미리 보기 시스템 이미지를 플래시하고 나면 이것은 OTA(over-the-air) 업데이트를 통해 다음 미리 보기 릴리스에 맞춰 자동으로 업그레이드됩니다.
-
-</p>
-
-<h3 id="revertDevice">기기를 공장 사양으로 되돌리기</h3>
-
-<p>
- 미리 보기의 설치를 제거하고 기기를 공장 사양으로 되돌리고자 하는 경우, <a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a>를 방문하여 기기에 플래시하고자 하는 이미지를 다운로드하십시오.
-
- 해당 페이지에 있는 지침을 따라 기기에 이미지를 플래시하면 됩니다.
-
-</p>
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/";
- function onDownload(link) {
-
- $("#downloadForRealz").html("Download " + $(link).text());
- $("#downloadForRealz").attr('href', urlRoot + $(link).text());
-
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
-
- return true;
- }
-
-
- function onAgreeChecked() {
- /* verify that the TOS is agreed */
- if ($("input#agree").is(":checked")) {
- /* reveal the download button */
- $("a#downloadForRealz").removeClass('disabled');
- } else {
- $("a#downloadForRealz").addClass('disabled');
- }
- }
-
- function onDownloadForRealz(link) {
- if ($("input#agree").is(':checked')) {
- /*
- $("#tos").fadeOut('fast');
- $("#landing").fadeIn('fast');
- */
-
- ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html());
-
- /*
- location.hash = "";
- */
- return true;
- } else {
- return false;
- }
- }
-
- $(window).hashchange( function(){
- if (location.hash == "") {
- location.reload();
- }
- });
-
-</script>
diff --git a/docs/html-intl/intl/ko/preview/features/background-optimization.jd b/docs/html-intl/intl/ko/preview/features/background-optimization.jd
deleted file mode 100644
index 3bbc474..0000000
--- a/docs/html-intl/intl/ko/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,391 +0,0 @@
-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">
- <div id="qv">
- <h2>
- 이 문서의 내용
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">CONNECTIVITY_ACTION에 대한 제한</a>
- </li>
-
- <li>
- <a href="#sched-jobs">무제한 연결에서 네트워크 작업
-예약</a>
- </li>
-
- <li>
- <a href="#monitor-conn">앱이 실행되는 중에 네트워크 연결
-모니터링</a>
- </li>
-
- <li>
- <a href="#media-broadcasts">NEW_PICTURE 및 NEW_VIDEO에
-대한 제한</a>
- </li>
-
- <li>
- <a href="#new-jobinfo">새로운 JobInfo 메서드</a>
- </li>
-
- <li>
- <a href="#new-jobparam">새로운 JobParameter 메서드</a>
- </li>
-
- <li>
- <a href="#further-optimization">추가적인 앱 최적화</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- 백그라운드 프로세스는 메모리와 배터리를 많이 소모할 수 있습니다. 예를 들어, 암시적 브로드캐스트는
-이 브로드캐스트를 수신하도록 등록된 많은 백그라운드 프로세스를 시작할 수 있지만
-해당 프로세스가 많은 작업을 수행하지 못할 경우가 있습니다. 이로 인해 기기 성능과
- 사용자 환경에 모두 상당한 영향을 미칠 수 있습니다.
-</p>
-
-<p>
- 이 문제를 완화하기 위해, Android N은 다음과 같은 제한을
-적용합니다.
-</p>
-
-<ul>
- <li>브로드캐스트를 수신하도록 매니페스트에 등록되어 있더라도, Preview를 대상으로 하는 앱은 {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION}
- 브로드캐스트를 수신하지 않습니다. 실행 중인 앱은 {@link android.content.Context#registerReceiver Context.registerReceiver()}로
-{@link android.content.BroadcastReceiver}를 등록하여
-여전히 기본 스레드에서 {@code CONNECTIVITY_CHANGE}를 수신할
- 수 있습니다.
- </li>
-
- <li>앱은 {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 또는 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를 송수신할 수 없습니다. 이 최적화는 Preview를 대상으로
- 하는 앱뿐 아니라 모든 앱에 영향을 미칩니다.
- </li>
-</ul>
-
-<p>
- 앱이 이들 인텐트 중 하나라도 사용하는 경우에는,
-Android N 기기를 올바로 대상으로 삼을 수 있도록 이들 인텐트에 대한 종속성을 최대한 빨리 제거해야 합니다.
- Android 프레임워크는 이러한 암시적 브로드캐스트의
- 필요성을 줄이기 위한 여러 가지 해결책을 제공합니다. 예를 들어, {@link android.app.job.JobScheduler}
-및 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a>는 지정된
-조건(예: 비 데이터 통신 네트워크에 연결)이 충족될 경우 네트워크 작업을
-예약할 수 있는 강력한 메커니즘을 제공합니다. 이제 {@link android.app.job.JobScheduler}를
-사용하여 콘텐츠 제공자의 변경에 대응할 수도 있습니다. {@link android.app.job.JobInfo}
-객체는 {@link android.app.job.JobScheduler}가
-작업 예약에 사용하는 매개변수를 캡슐화합니다. 작업 조건이 충족되면 시스템은
-이 작업을 앱의 {@link android.app.job.JobService}에서 실행합니다.
-</p>
-
-<p>
- 이 문서에서는 대체 메서드(예: {@link android.app.job.JobScheduler})를
-사용하여 이러한 새로운 제한에 맞게 앱을 적용하는 방법에 대해
-배워보겠습니다.
-</p>
-
-<h2 id="connectivity-action">
- CONNECTIVITY_ACTION에 대한 제한
-</h2>
-
-<p>
- Android N을 대상으로 하는 앱은 {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} 브로드캐스트를 수신하지 않으며(이 브로드캐스트를 수신하도록 매니페스트에 등록하는 경우), 이
-브로드캐스트에 의존하는 프로세스는
-시작되지 않습니다. 이 경우에는 기기가 고정 요금제 네트워크에 연결될 때,
-네트워크 변경 사항을 수신하려는 앱이나 대량의 네트워크 액티비티를
-수행하려는 앱에 문제가 생길 수 있습니다. 이 제한을 해결하기 위한 여러 가지
-해결책이 Android 프레임워크에 이미 있지만, 올바른 해결책을 선택하는 것은
-앱의 용도에 따라 다릅니다.
-</p>
-
-<p class="note">
- <strong>참고:</strong> {@link android.content.Context#registerReceiver Context.registerReceiver()}로
- 등록된 {@link android.content.BroadcastReceiver}는 앱이
- 실행되는 중에 계속해서 이 브로드캐스트를 수신합니다.
-</p>
-
-<h3 id="sched-jobs">
- 고정 요금제 연결에서 네트워크 작업 예약
-</h3>
-
-<p>
- {@link android.app.job.JobInfo.Builder JobInfo.Builder} 클래스를
-사용하여 {@link android.app.job.JobInfo} 객체를 빌드하는 경우, {@link
- android.app.job.JobInfo.Builder#setRequiredNetworkType
- setRequiredNetworkType()} 메서드를 적용하고 {@link android.app.job.JobInfo
- JobInfo.NETWORK_TYPE_UNMETERED}를 작업 매개변수로 전달합니다. 다음의 코드 샘플에서는 기기가 비 데이터 통신
-네트워크에 연결되어 충전 중일 때 실행할 서비스를
-예약합니다.
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-</pre>
-
-<p>
- 작업의 조건이 충족되면, 앱은
-{@link android.app.job.JobService#onStartJob onStartJob()} 메서드를 지정된 {@code JobService.class}에서 실행하기 위한 콜백을
-수신합니다. {@link
- android.app.job.JobScheduler} 구현의 더 많은 예를 보려면, <a href="{@docRoot}samples/JobScheduler/index.html">JobScheduler 샘플 앱</a>을 참조하세요.
-</p>
-
-<p>
- GMSCore 서비스를 사용하고 Android 5.0(API 레벨 21) 이하를 대상으로 하는 앱은 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
-{@code GcmNetworkManager}</a>를 사용하고 {@code Task.NETWORK_STATE_UNMETERED}를
-지정할 수 있습니다.
-</p>
-
-<h3 id="monitor-conn">
- 앱이 실행되는 중에 네트워크 연결 모니터링
-</h3>
-
-<p>
- 실행 중인 앱은 등록된 {@link android.content.BroadcastReceiver}로 {@code CONNECTIVITY_CHANGE}를 여전히 수신할 수
-있습니다. 하지만 {@link
- android.net.ConnectivityManager} API는 지정된 네트워크 조건이 충족될 경우에만 콜백을 요청하는
- 더욱 강력한 메서드를 제공합니다.
-</p>
-
-<p>
- {@link android.net.NetworkRequest} 객체는 {@link android.net.NetworkCapabilities}의
-관점에서 네트워크 콜백의 매개변수를 정의합니다. {@link
- android.net.NetworkRequest.Builder NetworkRequest.Builder} 클래스로 {@link android.net.NetworkRequest} 객체를
-생성합니다. 이어서 {@link
- android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
- android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
-이 {@link android.net.NetworkRequest} 객체를 시스템에 전달합니다. 네트워크 조건이 충족되면, 앱은 {@link
- android.net.ConnectivityManager.NetworkCallback} 클래스에 정의된 {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
- onAvailable()} 메서드를
-실행하기 위한 콜백을
-수신합니다.
-</p>
-
-<p>
- 앱이 종료되거나 앱이 {@link android.net.ConnectivityManager#unregisterNetworkCallback
- unregisterNetworkCallback()}을 호출할 때까지 계속해서
-콜백을 수신합니다.
-</p>
-
-<h2 id="media-broadcasts">
- NEW_PICTURE 및 NEW_VIDEO에 대한 제한
-</h2>
-
-<p>
- Android N에서 앱은 {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 또는 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} 브로드캐스트를 송수신할 수 없습니다. 이 제한은 새로운 이미지나
- 동영상을 처리하기 위해 여러 앱을 깨워야 하는 경우, 성능 및 사용자 환경에
- 미치는 영향을 줄여줍니다. Android N은
- {@link android.app.job.JobInfo} 및 {@link
- android.app.job.JobParameters}를 확장하여 대체 해결책을 제공합니다.
-</p>
-
-<h3 id="new-jobinfo">
- 새로운 JobInfo 메서드
-</h3>
-
-<p>
- 콘텐츠 URI 변경에 대한 작업을 트리거하기 위해, Android N은
- 다음과 같은 메서드로 {@link android.app.job.JobInfo} API를 확장합니다.
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- 콘텐츠 URI 변경에 대한 작업을 트리거하는 데 필요한 매개변수를 캡슐화합니다.
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- {@code TriggerContentUri} 객체를 {@link
- android.app.job.JobInfo}에 전달합니다. {@link android.database.ContentObserver}는
-캡슐화된 콘텐츠 URI를 모니터링합니다. 하나의 작업과 연관된 여러 {@code
- TriggerContentUri} 객체가 있는 경우, 콘텐츠 URI 중 하나에서만 변경이 보고되더라도 시스템이
-콜백을 제공합니다.
- </dd>
-
- <dd>
- 지정된 URI의 하위 항목이 하나라도 변경되면, {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} 플래그를
-추가하여 작업을 트리거합니다. 이 플래그는
-{@link
- android.content.ContentResolver#registerContentObserver
- registerContentObserver()}로 전달된 {@code notifyForDescendants} 매개변수에 해당합니다.
- </dd>
-</dl>
-
-<p class="note">
- <strong>참고:</strong> {@code TriggerContentUri()}는 {@link android.app.job.JobInfo.Builder#setPeriodic
- setPeriodic()} 또는 {@link android.app.job.JobInfo.Builder#setPersisted
- setPersisted()}와
-조합으로 사용될 수 없습니다. 콘텐츠 변경을 계속해서 모니터링하려면, 앱의 {@link
- android.app.job.JobService}가 가장 최근 콜백의 처리를 완료하기 전에 새로운
-{@link android.app.job.JobInfo}를 예약하세요.
-</p>
-
-<p>
- 다음 샘플 코드에서는 콘텐츠 URI, {@code MEDIA_URI}의
-변경을 시스템이 보고할 때 트리거할 작업을 예약합니다.
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-</pre>
-<p>
- 지정된 콘텐츠 URI에서의 변경을 시스템이 보고할 때,
-앱이 콜백을 수신하고 {@link android.app.job.JobParameters} 객체가
-{@code MediaContentJob.class}의 {@link android.app.job.JobService#onStartJob onStartJob()}메서드에
-전달됩니다.
-</p>
-
-<h3 id="new-jobparam">
- 새로운 JobParameter 메서드
-</h3>
-
-<p>
- 또한, Android N에서는 어떤 콘텐츠 기관과
- URI가 해당 작업을 트리거했는지에 대한 유용한 정보를 앱이
- 수신할 수 있도록 {@link android.app.job.JobParameters}를 확장합니다.
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- 작업을 트리거한 URI의 배열을 반환합니다. 작업을 트리거한
-URI가 없거나(예: 시한 또는 기타 이유로 인해 작업이 트리거된 경우) 또는
-변경된 URI의 수가 50보다 크면 {@code
- null}이 됩니다.
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- 작업을 트리거한 콘텐츠 기관의 문자열 배열을 반환합니다.
- 반환된 배열이 {@code null}이 아닌 경우, {@code getTriggeredContentUris()}를
-사용하여 변경된 URI의 세부정보를 검색합니다.
- </dd>
-</dl>
-
-<p>
- 다음 샘플 코드에서는 {@link
- android.app.job.JobService#onStartJob JobService.onStartJob()} 메서드를 재정의하고
-, 작업을 트리거한 콘텐츠 기관과 URI를 기록합니다.
-</p>
-
-<pre>
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-</pre>
-
-<h2 id="further-optimization">
- 추가적인 앱 최적화
-</h2>
-
-<p>
- 저용량 메모리 기기나 저용량 메모리 조건에서
-앱이 실행되도록 최적화하면 성능과 사용자 환경을 개선할 수 있습니다. 백그라운드 서비스에 대한 종속성과 정적으로 등록된
- 암시적 브로드캐스트 수신기에 대한 종속성을 제거하면 해당 기기에서 앱을
- 더욱 빨리 실행할 수 있습니다. Android N은 이러한 문제 중 일부를 줄이기 위한
- 조치를 취하고 있지만, 백그라운드
- 프로세스를 전혀 사용하지 않고 앱이 실행되도록
- 최적화하는 것이 좋습니다.
-</p>
-
-<p>
- Android N에서는 백그라운드 프로세스를
-비활성화하고 앱 동작을 테스트하는 데 사용할 수 있는 몇 가지 추가적인 <a href="{@docRoot}tools/help/adb.html">ADB(Android 디버그 브리지)</a> 명령을 도입했습니다.
-</p>
-
-<ul>
- <li>암시적 브로드캐스트와 백그라운드 서비스를 사용할
-수 없는 조건을 시뮬레이션하려면 다음 명령을 입력합니다.
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>암시적 브로드캐스트와 백그라운드 서비스를 다시 활성화하려면
-다음 명령을 입력합니다.
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
diff --git a/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd
deleted file mode 100644
index 921873d..0000000
--- a/docs/html-intl/intl/ko/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,159 +0,0 @@
-page.title=ICU4J Android 프레임워크 API
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>이 문서의 내용</h2>
-<ol>
- <li><a href="#relation">ICU4J와의 관계</a></li>
- <li><a href="#migration">android.icu API에서 ICU4J로 마이그레이션</a></li>
- <li><a href="#licence">라이선스</a></li>
-</ol>
-
-<h2>참고 항목</h2>
-<ol>
- <li>
- <a class="external-link" href="http://userguide.icu-project.org">ICU4J 문서</a>
- </li>
-
- <li>
- <a class="external-link" href="http://site.icu-project.org/#TOC-What-is-ICU-">
-ICU4J가 지원하는 최신 표준</a>
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- ICU4J는 오픈 소스이며 널리 사용되는 Java 라이브러리 세트로, 소프트웨어 애플리케이션에 유니코드와
-세계화 지원을 제공합니다. Android N은
-Android 프레임워크에서 앱 개발자가
-{@code android.icu} 패키지에서 사용할 수 있는 ICU4J API의 하위 세트를 노출합니다. 이 API는
-기기의 현지화 데이터를 사용합니다. 따라서 ICU4J 라이브러리를 APK로 컴파일하지 않고
-프레임워크에서 호출하여APK
-풋프린트를 줄일 수 있습니다. (이 경우, Android N 이하 버전의 Android를
-실행하는 사용자가 ICU4J 라이브러리를 포함한 앱 버전을 다운로드할 수 있도록
-<a href="{@docRoot}google/play/publishing/multiple-apks.html">여러 버전의
-APK</a>를 제공해야 할 수도 있습니다.)
-</p>
-
-<p>
- 이 문서에서는 먼저 이 라이브러리 지원에 필요한 최소
-Android API 레벨과 관련된 몇 가지 기본 정보를 제공합니다. 그 후,
-각 Android에서 ICU4J를 구현하는 데 무엇이 필요한지 설명합니다. 마지막으로,
-Android 프레임워크에서 ICU4J API를 사용하는 방법을 설명합니다.
-</p>
-
-<h2 id="relation">ICU4J와의 관계</h2>
-
-<p>
- Android N은
-<code>com.ibm.icu</code>가 아니라 <code>android.icu</code> 패키지를 통해 ICU4J API의 하위 세트를 노출합니다.
-Android 프레임워크는 여러 가지 이유로
-ICU4J API를 노출하지 않을 수 있습니다. 예컨대 Android N은
-일부 사용 중단된 API나 ICU 팀에서 안정적이라고 선언하지 않은 API를
-노출하지 않습니다. ICU 팀이 이후 API의 사용을 중단하면, Android도
-이를 사용 중단됨으로 표시하지만 계속 포함합니다.
-</p>
-
-<p class="table-caption"><strong>표 1.</strong>
-Android N에서 사용된 ICU 및 CLDR 버전.</p>
-<table>
-<tr>
-<th>Android API 레벨</th>
-<th>ICU 버전</th>
-<th>CLDR 버전</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>중요한 참고 사항:</p>
-
-<ul>
-<li>ICU4J Android 프레임워크 API에는 모든 ICU4J API가 포함되지 않습니다.</li>
-<li>NDK 개발자는 Android ICU4C가 지원되지 않는다는 것을 알아야 합니다.</li>
-<li>Android 프레임워크의 API는 Android의
-<a href="{@docRoot}guide/topics/resources/localization.html">리소스로
-현지화</a> 지원을 대체하지 못합니다.</li>
-</ul>
-
-<h2 id="migration">com.ibm.icu에서 android.icu 패키지로 마이그레이션</h2>
-
-<p>
- 앱에서 이미 ICU4J API를 사용하고 있고
-<code>android.icu</code> API가 요구사항을 충족한다면
-프레임워크 API로 마이그레이션할 때 Java 가져오기를
-<code>com.ibm.icu</code>에서 <code>android.icu</code>로 변경해야 합니다. 그러면 APK에서
-ICU4J 파일 사본을 삭제할 수 있습니다.
-</p>
-
-<p class="note">
- <b>참고</b>: ICU4J 프레임워크 API는 {@code com.ibm.icu} 대신 {@code android.icu}
-네임스페이스를 사용합니다. 이는 자체 {@code com.ibm.icu} 라이브러리가 포함된 APK에서
-네임스페이스 충돌을 피하기 위해서입니다.
-</p>
-
-<h3 id="migrate-from-android">
- 다른 Android SDK API에서 android.icu API로 마이그레이션
-</h3>
-
-<p>
- <code>java</code>와 <code>android</code> 패키지의 일부 클래스는
-ICU4J의 클래스와 같습니다. 그러나 ICU4J는 종종 더욱 폭넓은
-표준과 언어를 지원합니다.
-</p>
-<p>시작하기 위한 몇 가지 예시는 다음과 같습니다.</p>
-<table>
-<tr>
-<th>클래스</th>
-<th>대체</th>
-</tr>
-<tr>
-<td><code>java.lang.Character</code> </td>
-<td><code>android.icu.lang.UCharacter</code> </td>
-</tr>
-<tr>
-<td><code>java.text.BreakIterator</code> </td>
-<td><code>android.icu.text.BreakIterator</code> </td>
-</tr>
-<tr>
-<td><code>java.text.DecimalFormat</code> </td>
-<td><code>android.icu.text.DecimalFormat</code> </td>
-</tr>
-<tr>
-<td><code>java.util.Calendar</code></td>
-<td>
-<code>android.icu.util.Calendar</code></td>
-</tr>
-<tr>
-<td><code>android.text.BidiFormatter</code>
- </td>
-<td><code>android.icu.text.Bidi</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateFormat</code>
- </td>
-<td><code>android.icu.text.DateFormat</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateUtils</code> </td>
-<td><code>android.icu.text.DateFormat</code>
-<code>android.icu.text.RelativeDateTimeFormatter</code>
-</td>
-</tr>
-</table>
-
-<h2 id="licence">라이선스</h2>
-
-<p>
- ICU4J는 ICU 라이선스에 따라 배포됩니다. 자세한 내용은 <a class="external-link" href="http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">ICU
- 사용자 가이드</a>를 참조하세요.
-</p>
diff --git a/docs/html-intl/intl/ko/preview/features/multilingual-support.jd b/docs/html-intl/intl/ko/preview/features/multilingual-support.jd
deleted file mode 100644
index 6b3e999..0000000
--- a/docs/html-intl/intl/ko/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,221 +0,0 @@
-page.title=언어 및 로케일
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>이 문서의 내용</h2>
-<ol>
- <li><a href="#preN">언어 리소스 결정에서의 과제</a></li>
- <li><a href="#postN">리소스 결정 전략 개선</a></li>
- <li><a href="#design">추가 로케일 지원을 위한
-앱 설계</a></li>
-
-</ol>
-
-</div>
-</div>
-
-<p>Android N에서는 다국어 사용자를 위한 지원이 개선되었으므로
-이러한 사용자가 이제 설정에서 여러 로케일을 선택할 수 있습니다. Android N은
-지원되는 로케일 수를 대폭 확대하고
-시스템이 리소스를 결정하는 방식을 변경하여 이 기능을 제공합니다. 새로 도입된 리소스 결정 방법은
-더욱 안정적이고 기존 APK와 호환되도록 설계되어 있지만
-예상치 못한 동작이 없는지 신중히 살펴봐야 합니다. 예를 들어,
-앱이 예상 언어로 기본 설정되어 있는지 테스트해야 합니다. 또한,
-앱이 여러 언어를 지원한다면
-원하는 대로 작동하는지 확인해야 합니다. 마지막으로
-앱이 지원하도록 명시하지 않은 언어를 무리 없이 처리하는지 확인해야 합니다.</p>
-
-<p>이 문서에서는
-Android N 이전의 리소스 결정 전략을 설명한 뒤에, Android N의 개선된
-리소스 결정 전략을 설명합니다. 마지막으로
-더 많은 다국어 사용자를 지원하기 위해 확장된 로케일을 활용하는 방법을 설명합니다.</p>
-
-<h2 id="preN">언어 리소스 결정에서의 과제</h2>
-
-<p>Android N 이전의 Android에서는
- 앱과 시스템 로케일을 매칭하지 못하는 경우가 가끔 있었습니다.</p>
-
- <p>예를 들어, 다음과 같은 상황이라고 가정해 봅시다.</p>
- <ul>
- <li>앱의 기본 언어가 {@code en_US}(미국 영어)인데
-, {@code es_ES}
- 리소스 파일에 스페인어 문자열도 현지화했습니다.</li>
- <li> 기기는 {@code es_MX}로 설정되어 있습니다. </li>
-
-<p>Java 코드가 문자열을 참조할 때
-앱에서 {@code es_ES} 아래에 스페인어 리소스를 현지화했더라도, 시스템은 기본({@code en_US}) 리소스 파일로부터 문자열을
-로드합니다. 그 이유는 시스템이
-정확한 일치 항목을 찾을 수 없을 때 해당 로케일에서 국가 코드를
-제거하여 리소스를 계속 찾기 때문입니다. 마지막으로, 일치 항목을 찾지 못한 경우 시스템은 기본값({@code en_US})으로 다시
-돌아갑니다. </p>
-
-
-<p>또한, 앱에서 전혀 지원하지 않는 언어(예: 프랑스어)를 사용자가 선택하면 시스템은 기본값을 {@code en_US}로
-설정합니다. 예를 들면 다음과 같습니다.</p>
-
-<p class="table-caption" id="t-resource-res">
-<strong>표 1.</strong> 정확한 로케일 일치가 없는 경우 리소스 결정.
-</p>
-<table>
-<tbody>
-<tr>
-<th>사용자 설정</th>
-<th>앱 리소스</th>
-<th>리소스 결정</th>
-</tr>
-<tr>
-<td>fr_CH</td>
-<td>
-기본값(en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
- <td>
-fr_CH 시도 => 실패<br>
-fr 시도 => 실패<br>
-기본값(en) 사용
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>이 예시에서 시스템은
-사용자가 영어를 이해할 수 있는지 여부와 관계없이 영어 문자열을 표시합니다. 현재 이러한 동작이 상당히
-일반적입니다. Android N은 이런
-결과가 나타나는 빈도를 상당히 낮추었습니다.</p>
-
-<h2 id="postN">리소스 결정 전략 개선</h2>
-<p>Android N은 더욱 안정적인 리소스 결정을 사용하고
-자동으로 더욱 알맞은 대안책을 찾습니다. 그러나 결정 속도를 높이고
-관리성을 개선하려면 가장 일반적인 상위 방언에 리소스를 저장해야 합니다.
- 예를 들어, 전에 {@code es-US} 디렉터리에
-스페인어 리소스를 저장했다면 남미 스페인어가 있는 {@code es-419} 디렉터리로 이동합니다.
- 마찬가지로 {@code en-GB}란 폴더에 리소스 문자열이 있다면
-폴더 이름을 {@code en-001}(국제 영어)로 변경합니다.
-<code>en-GB</code> 문자열의 가장 일반적인 상위 리소스는 {@code en-001}이기 때문입니다.
- 다음은 이러한 방법이
-성능과 리소스 결정의 신뢰성을 개선하는 이유를 설명하는 예시입니다.</p>
-
-<h3>리소스 결정 예시</h3>
-
-<p>Android N의 경우, <strong>표 1</strong>의 사례는
-다르게 결정됩니다.</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>표 2.</strong> 정확한 로케일 일치가 없을 경우
-개선된 결정 전략.</p>
-<table>
-<tr>
-<th>사용자 설정</th>
-<th>앱 리소스</th>
-<th>리소스 결정</th>
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-</ol>
-</td>
-<td>
-기본값(en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
-<td>
-fr_CH 시도 => 실패<br>
-fr 시도 => 실패<br>
-Fr의 하위 리소스 시도 => fr_FR<br>
-fr_FR 사용
-</td>
-</tr>
-
-</table>
-
-
-<p>이제 사용자는 영어 대신 프랑스어 리소스를 보게 됩니다. 이 예시에서는
-Android N에서 프랑스어 문자열을 {@code fr_FR}
-이 아니라 {@code fr}에 저장해야 하는 이유를 알 수 있습니다. 이러한 동작을 통해 가장 가까운 상위 방언과 일치시켜서
-더욱 빠르고 예측 가능하게 결정합니다.</p>
-
-<p>Android는 이러한 결정 논리를 개선했을 뿐만 아니라
-선택 가능한 언어를 더 많이 제공합니다. 위의 예시에 이탈리아어가 추가 사용자 언어로 지정되었지만
-앱에서 프랑스어를 지정하지 않는 경우를 적용해 보겠습니다. </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>표 3.</strong> 앱이 사용자의 두 번째 선호 로케일 설정에만 일치할 때
-리소스 결정.</p>
-<table>
-<tr>
-<th>사용자 설정</th>
-<th>앱 리소스</th>
-<th>리소스 결정</th>
-
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-<li> it_CH</li>
-</ol>
-</td>
-<td>
-기본값(en)<br>
-de_DE<br>
-es_ES<br>
-it_IT<br>
-</td>
-<td>
-fr_CH 시도 => 실패<br>
-fr 시도 => 실패<br>
-fr의 하위 리소스 시도 => 실패<br>
-it_CH 시도 => 실패<br>
-it 시도 => 실패<br>
-it의 하위 리소스 시도 => it_IT<br>
-it_IT 사용
-</td>
-
-</tr>
-
-</table>
-<p>앱이 프랑스어를 지원하지 않지만
-사용자는 여전히 자신이 이해하는 언어를 볼 수 있습니다.</p>
-
-
-<h2 id="design">추가 로케일 지원을 위한 앱 설계</h2>
-<h3>LocaleList API</h3>
-
-<p>Android N에서는 앱이 사용자가 지정한 언어 목록을 직접 쿼리할 수 있는 새로운 API {@code LocaleList.getDefault()}가
-추가되었습니다. 이 API는
-앱 동작을 더욱 정교하게 해주고
- 콘텐츠 표시를 더 최적화해 줍니다. 예를 들어, 검색 시
-사용자 설정에 따라 여러 언어로 결과를 표시할 수 있습니다. 브라우저 앱은
-사용자가 이미 알고 있는 언어로
-번역 페이지를 제공하지 않고, 키보드 앱은 모든 적절한 레이아웃을 자동 활성화할 수 있습니다. </p>
-
-<h3>포맷터</h3>
-
-<p>Android 6.0(API 레벨 23)까지 Android는 많은 공통 언어(en, es, ar, fr, ru)에 대해
-1~2개의 로케일만
-지원했습니다. 각 언어의 변종은 몇 개뿐이기 때문에
-리소스 파일에 하드코딩된 문자열로 몇 개의 숫자와 날짜를 저장하는 것만으로
-충분했습니다. 그러나 Android에서 지원되는 로케일 세트가 확장되면서
-단일 로케일 내에서조차
-날짜, 시간, 통화 및 유사 정보에
-큰 차이가 생길 수 있게 되었습니다. 형식 하드코딩은
-최종 사용자에게 혼란을 줄 수 있습니다. 그러므로 Android N을 개발할 때는
-숫자와 날짜 문자열을 하드코딩하는 대신 포맷터를 사용하도록 하세요.</p>
-
-<p>가장 좋은 예시로는 아랍어가 있습니다. Android N에서 아랍어 지원이
-{@code ar_EG} 1개에서 27개 아랍어 로케일로 확장되었습니다. 이러한 로케일은 대부분의 리소스를 공유할 수 있지만
-어떤 로케일은 ASCII 숫자를 선호하고 어떤 로케일은 네이티브 숫자를 선호합니다. 예를 들어,
-"4자리 PIN 선택"과 같은 숫자 변수가 포함된 문장을 생성하려면
-아래와 같이 포맷터를 사용합니다.</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html-intl/intl/ko/preview/features/notification-updates.jd b/docs/html-intl/intl/ko/preview/features/notification-updates.jd
deleted file mode 100644
index 480eda0..0000000
--- a/docs/html-intl/intl/ko/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,393 +0,0 @@
-page.title=알림
-page.tags=알림
-helpoutsWidget=true
-page.image=/preview/images/notifications-card.png
-
-trainingnavtop=true
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<!-- table of contents -->
-<h2>이 문서의 내용</h2>
-<ol>
- <li><a href="#direct">직접 회신</a></li>
- <li><a href="#bundle">묶음 알림</a></li>
- <li><a href="#custom">사용자 지정 뷰</a></li>
- <li><a href="#style">메시지 스타일</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N에서는 가시성과 상호 작용이 뛰어난 알림을
-앱이 게시할 수 있도록 여러 가지 새로운 API를 도입했습니다.</p>
-
-<p>Android N에서는 핸드셋에서 인라인 회신을 지원하기 위해 기존의 {@link android.support.v4.app.RemoteInput}
-알림 API를 확장합니다. 이 기능을 사용하면 앱을 방문하지 않고도 알림 창에서
-신속하게 응답할 수 있습니다.</p>
-
-<p>
- Android N에서는 또한 비슷한 알림을 묶어서 단일 알림으로
-표시할 수도 있습니다. 이것이 가능하도록, Android N에서는 기존의 {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()} 메서드를 사용합니다. 사용자가 각 알림을 확장할 수 있으며, 각 알림에 대해 회신 및
-닫기와 같은 동작을 알림 창에서 개별적으로 수행할
-수 있습니다.
-</p>
-
-<p>마지막으로, Android N에서는 또한 앱의 사용자 지정된 알림
-뷰에서 시스템 장식을 활용할 수 있는 새 API를 추가합니다. 이들 API는 표준 템플릿을 통해 알림 뷰가
-일관된 프레젠테이션을 공유하도록 보장해
-줍니다.</p>
-
-<p>이 문서에서는 새 알림 기능을 앱에서 사용할 때 고려해야
-하는 몇 가지 주요 변경 사항을 중점적으로 다룹니다.</p>
-
-<h2 id="direct">직접 회신</h2>
-
-<p>Android N에 있는 직접 회신 기능을 사용하여, 사용자가 문자
-메시지에 신속하게 응답하거나 알림 인터페이스 내에서 직접
-작업 목록을 업데이트할 수 있습니다. 핸드헬드에서 인라인 회신 동작은 알림에 연결된 추가적인
-버튼으로 나타납니다. 사용자가 키보드를 통해 회신하면
-시스템은 여러분이 알림 동작에 지정했던
-인텐트에 텍스트 응답을 첨부하고 이 인텐트를
- 핸드헬드 앱으로 보냅니다.
-
-
-<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
- {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
-<p class="img-caption">
- <strong>그림 1.</strong> Android N이 <strong>Reply</strong>
- 동작 버튼을 추가합니다.
-</p>
-
-<h3>인라인 회신 동작 추가</h3>
-
-<p>직접 회신을 지원하는 알림 동작을 만들려면:
-</p>
-
-<ol>
-<li>알림 동작에 추가할 수 있는 {@link android.support.v4.app.RemoteInput.Builder}의
-인스턴스를
-만듭니다. 이 클래스의 생성자는 시스템이 텍스트 입력의 키로
- 사용하는 문자열을 수락합니다. 나중에 핸드헬드 앱은 이 키를 사용하여 입력 텍스트를
-검색합니다.
-
-<pre>
-// Key for the string that's delivered in the action's intent.
-private static final String KEY_TEXT_REPLY = "key_text_reply";
-String replyLabel = getResources().getString(R.string.reply_label);
-RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
- .setLabel(replyLabel)
- .build();
-</pre>
-</li>
-<li><code>addRemoteInput()</code>을 사용하여 {@link android.support.v4.app.RemoteInput}
-객체를 동작에 첨부합니다.
-
-<pre>
-// Create the reply action and add the remote input.
-Notification.Action action =
- new Notification.Action.Builder(R.drawable.ic_reply_icon,
- getString(R.string.label), replyPendingIntent)
- .addRemoteInput(remoteInput)
- .build();
-</pre>
-</li>
-
-<li>동작을 알림에 적용하고 알림을 발생합니다.
-
-<pre>
-// Build the notification and add the action.
-Notification newMessageNotification =
- new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_message)
- .setContentTitle(getString(R.string.title))
- .setContentText(getString(R.string.content))
- .addAction(action))
- .build();
-
-// Issue the notification.
-NotificationManager notificationManager =
- NotificationManager.from(mContext);
-notificationManager.notify(notificationId, newMessageNotification);
-
-</pre>
-</li>
-
-</ol>
-
-
-<p> 시스템이 사용자에게 알림 동작이 트리거될 때 응답을 입력하라는
-메시지를 표시합니다. </p>
-
-<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
- {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>그림 2.</strong> 사용자가 알림 창에서 텍스트를 입력합니다.
-</p>
-
-<h3>
- 인라인 회신에서 사용자 입력을 검색
-</h3>
-
-<p>
- 회신 동작의 인텐트에 선언하셨던 액티비티에 대해 알림
- 인터페이스로부터 사용자 입력을 수신하려면:
-</p>
-
-<ol>
- <li>알림 동작의 인텐트를 입력 매개변수로서 전달하여 {@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()}를
- 호출합니다. 이 메서드는 텍스트 응답이 포함된 {@link android.os.Bundle}을
- 반환합니다.
-
- <pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
- </li>
-
- <li>({@link
- android.support.v4.app.RemoteInput.Builder} 생성자에 제공된) 결과 키를 사용하여 번들에 쿼리를 수행합니다. 다음 코드 조각에서처럼, 메서드를 만들어 이 프로세스를
-완료하고 입력 텍스트를
-검색할 수 있습니다.
-
- <pre>
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-</pre>
- </li>
-
- <li>이전 알림에 대해 제공했던 것과 동일한 알림 ID를
- 사용하여, 다른 알림을 작성하고 발급합니다. 사용자에게 성공적으로 회신했음을
-알려주기 위해 알림 인터페이스에서
-알림 표시기가 사라집니다. 이 새로운 알림으로 작업할 때, 수신기의
-{@code onReceive()} 메서드로 전달되는 컨텍스트를 사용하세요.
-
- <pre>
-// Build a new notification, which informs the user that the system
-// handled their interaction with the previous notification.
-Notification repliedNotification =
- new Notification.Builder(context)
- .setSmallIcon(R.drawable.ic_message)
- .setContentText(getString(R.string.replied))
- .build();
-
-// Issue the new notification.
-NotificationManager notificationManager =
- NotificationManager.from(context);
-notificationManager.notify(notificationId, repliedNotification);
-</pre>
- </li>
-</ol>
-
-<p>
- 채팅과 같은 대화형 앱의 경우, 검색된 텍스트를 처리할 때
- 추가 컨텍스트를 포함하는 것이 유용할 수 있습니다. 예를 들어, 이들 앱은 여러 줄의 채팅 기록을
-표시할 수 있습니다. 사용자가 {@link
- android.support.v4.app.RemoteInput}을 통해 응답하는 경우,
-{@code setRemoteInputHistory()} 메서드를 사용하여 회신 기록을 업데이트할 수 있습니다.
-</p>
-
-<p>
- 앱이 원격 입력을 수신한 후에는 알림이 업데이트되거나
- 취소되어야 합니다. 사용자가 Direct Reply를 사용하여 원격 업데이트에
-회신할 때는 알림을
-취소하지 마세요. 그 대신, 사용자의 회신을 표시하도록 알림을 업데이트하세요.
-{@code MessagingStyle}을 사용하는 알림의 경우, 회신을 최신 메시지로서
-추가해야 합니다. 다른 템플릿을 사용할 경우 사용자의
-회신을 원격 입력 기록에 추가할 수 있습니다.
-</p>
-
-<h2 id="bundle">묶음 알림</h2>
-
-<p>Android N에서는 일련의 알림을 표시하기 위한 새로운 방식을
-개발자에게 제공합니다. <i>묶음 알림</i>. 이것은
-Android Wear의 <a href="{@docRoot}training/wearables/notifications/stacks.html">알림
-스택</a> 기능과 유사합니다. 예를 들어, 수신된 메시지에 대해 앱이 알림을 생성하는 경우,
-둘 이상의 메시지가 수신되면 그 알림을 하나의
-단일 그룹으로 묶습니다. 기존의
-{@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()} 메서드를 사용하여 유사한 알림을 묶을 수 있습니다.</p>
-
-<p>
- 알림 그룹은 이 그룹을 구성하는 알림을 계층 구조로 만듭니다.
- 계층 구조의 맨 위는 그룹의 요약 정보가 표시되는 상위
-알림입니다. 사용자는 알림 그룹을 점진적으로 확장할 수 있으며, 시스템은
-사용자가 더 깊이 파고들수록 더 많은 정보를
-표시합니다. 사용자가 번들을 확장하면 시스템은 모든 하위 알림에 대해
-더 많은 정보를 표시하며, 사용자가 이들 알림 중 하나를 확장하면
-시스템은 알림의 전체 콘텐츠를 표시합니다.
-</p>
-
-<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
- {@docRoot}preview/images/bundles_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>그림 3.</strong> 사용자는 알림 그룹을 점진적으로 확장할 수
- 있습니다.
-</p>
-
-<p class="note">
- <strong>참고:</strong> 동일 앱이 4개 이상의 알림을 보내면서
-그룹화를 지정하지 않으면,
-시스템에서 이들 알림을 자동으로 그룹화합니다.
-</p>
-
-<p>알림을 그룹에 추가하는 방법을 알아보려면
-<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">각
-알림을 그룹에 추가</a>를 참조하세요.</p>
-
-
-<h3 id="best-practices">묶음 알림의 모범 사례</h3>
-<p>이 섹션에서는 이전 버전의 Android 플랫폼에서
-사용되었던 {@link android.app.Notification.InboxStyle InboxStyle}
-알림 대신에 알림 그룹을 사용할 때의 지침을
-제공합니다.</p>
-
-<h3>묶음 알림을 사용하는 경우</h3>
-
-<p>자신의 사용 사례에서 다음의 모든 조건이 충족되는 경우에만
-알림 그룹을 사용해야 합니다.</p>
-
-<ul>
- <li>하위 알림은 완전한 알림이며 그룹 요약이 필요 없이
-개별적으로 표시될 수 있습니다.</li>
- <li>하위 알림을 개별적으로 표시하는 경우 이점이 있습니다. 예를 들면 다음과 같습니다.
-
- </li>
- <ul>
- <li>알림이 실행 가능하며, 각 하위 알림에 맞는 동작이 있습니다.</li>
- <li>사용자가 읽고 싶어하는 하위 알림에 더 많은 정보가 있습니다.</li>
- </ul>
-</ul>
-
-<p>알림 그룹의 사용 사례에 대한 좋은 예로는, 수신 메시지의
-목록을 표시하는 메시징 앱이나 수신된 이메일의 목록을 표시하는
-이메일 앱이 있습니다.</p>
-
-<p>
-단일 알림이 바람직한 사례의 예로는, 한 사람이 보낸
-개별 메시지나 1줄 텍스트 항목의 목록 표시가
-있습니다. 이를 수행하기 위해
-({@link android.app.Notification.InboxStyle InboxStyle} 또는
-{@link android.app.Notification.BigTextStyle BigTextStyle})을 사용할
-수 있습니다.
-</p>
-
-<h3 id ="post">묶음 알림 표시</h3>
-
-<p>
- 그룹에 하나의 하위 항목만 포함되어 있더라도 앱은
-항상 그룹 요약을 게시해야 합니다. 하나의 알림만 포함된 경우에는 시스템이 요약을
-억제하고 하위 알림을 직접 표시합니다. 이렇게 하면 사용자가 그룹의
-하위 항목을 스와이프할 때 시스템이 일관된 경험을 제공할 수
-있습니다.
-</p>
-
-<p class="note">
- <strong>참고:</strong> 이 버전의 Android N에서는 아직 단일 하위
-항목이 포함된 알림 그룹에 대해 요약을 억제하지 않습니다. 이
-기능은 이후 버전의 Android N에 추가될 것입니다.
-</p>
-
-<h3>피킹 알림</h3>
-
-<p>시스템은
-일반적으로 하위 알림을 그룹으로 표시하지만,
-이 알림이 일시적으로 <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">헤드업 알림</a>으로
-나타나도록 설정할 수 있습니다. 이 기능을 사용하면 가장 최근의 하위 항목과 이에
-관련된 동작에 즉시 액세스할 수 있으므로 특히 유용합니다.
-</p>
-
-
-<h3>이전 버전과의 호환성</h3>
-
-<p>
- Android 5.0(API 레벨 21) 이후로, 알림 그룹과
-원격 입력은 Android Wear 기기를 지원하기 위한 {@link
- android.app.Notification} API의 일부였습니다. 이미 이들 API로 알림을 작성한 경우 수행할 조치는,
-앱 동작이 위에 설명된 지침과 일치하는지 확인하고 {@code
- setRemoteInputHistory()} 구현을
-고려하는 것입니다.
-</p>
-
-<p>
- 이전 버전과의 호환성을 지원하기 위해,
-지원 라이브러리의 {@link android.support.v4.app.NotificationCompat}
-클래스로 동일한 API를 사용할 수 있으며, 이전 Android 버전에서 작동하는 알림을 작성할
-수 있습니다. 핸드헬드와 태블릿에서는 요약 알림만 사용자에게 보이므로,
-앱은 해당 그룹의 전체 정보 콘텐츠에 대해 받은편지함
-스타일이나 이와 동등한 알림 표시를 계속 가져야 합니다. Android
-Wear 기기에서는 구형 플랫폼 레벨에서도
-사용자가 모든 하위 알림을 볼 수 있으므로, API 레벨에 상관없이 하위 알림을
-작성해야 합니다.
-</p>
-
-<h2 id="custom"> 사용자 지정 뷰</h2>
-<p>Android N부터는 알림 뷰를 사용자 지정할 수 있으며
-알림 헤더, 동작 및 확장 가능한 레이아웃과 같은 시스템 장식을 계속
-획득할 수 있습니다.</p>
-
-<p>이 기능을 활성화하기 위해, Android N에서는 다음과
-같은 API를 추가하여 사용자 지정 뷰의 스타일을 지정합니다.</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> 미디어 알림 이외의 스타일
-알림.</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> 스타일 미디어 알림.</dd>
-</dl>
-
-<p>이 새로운 API를 사용하려면, {@code setStyle()} 메서드를 호출하여,
-원하는 사용자 지정 뷰 스타일에 전달합니다.</p>
-
-<p>이 조각에서는
-{@code DecoratedCustomViewStyle()} 메서드로 사용자 지정 알림 객체를 구성하는 방법을 보여줍니다.</p>
-
-<pre>
-Notification notification = new Notification.Builder()
- .setSmallIcon(R.drawable.ic_stat_player)
- .setLargeIcon(albumArtBitmap))
- .setCustomContentView(contentView);
- .setStyle(new Notification.DecoratedCustomViewStyle())
- .build();
-
-</pre>
-
-<h2 id="style">메시징 스타일</h2>
-<p>
- Android N에서는 알림 메시지의 스타일을 사용자 지정하기 위한 새로운 API를 도입했습니다.
- <code>MessageStyle</code> 클래스를 사용하면 대화 제목, 추가 메시지 및 알림에 대한 콘텐츠 뷰를 비롯하여
-알림 메시지에 표시되는 여러 가지 레이블을
-변경할 수 있습니다.
-</p>
-
-<p>
- 다음 코드 조각에서는
- <code>MessageStyle</code> 클래스를 사용하여 알림 스타일을 사용자 지정하는 방법을 보여 줍니다.
-</p>
-
-<pre>
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-</pre>
diff --git a/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0-testing.jd b/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0-testing.jd
deleted file mode 100644
index c00fd21..0000000
--- a/docs/html-intl/intl/pt-br/about/versions/nougat/android-7.0-testing.jd
+++ /dev/null
@@ -1,190 +0,0 @@
-page.title=Guia de teste
-page.image=images/cards/card-n-guide_2x.png
-meta.tags="preview", "testing"
-page.tags="preview", "developer preview"
-
-@jd:body
-
-<div id="tb-wrapper">
- <div id="tb">
- <h2>Neste documento</h2>
- <ol>
- <li><a href="#runtime-permissions">Teste de permissões</a></li>
- <li><a href="#doze-standby">Teste de soneca e App em espera</a></li>
- <li><a href="#ids">Identificadores de dispositivo e backup automático</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- O Android N fornece uma oportunidade de garantir que os aplicativos funcionem
- na próxima versão da plataforma. Esta prévia inclui uma série de mudanças de comportamento e APIs que podem
- ter impacto no aplicativo, como descrito em <a href="{@docRoot}preview/api-overview.html">Visão geral da API
-</a> e <a href="{@docRoot}preview/behavior-changes.html">Mudanças de comportamento</a>. No teste
- do aplicativo com a prévia, há algumas alterações de sistema específicas em que você deve se concentrar
- para garantir que os usuários tenham uma boa experiência.
-</p>
-
-<p>
- Este guia descreve quais recursos de prévia testar e como testá-los com o aplicativo. Você deve
- priorizar o teste destes recursos de prévia específicos devido ao grande impacto potencial no
- comportamento do aplicativo:
-</p>
-
-<ul>
- <li><a href="#runtime-permissions">Permissões</a>
- </li>
- <li><a href="#doze-standby">Soneca e App em espera</a>
- </li>
- <li><a href="#ids">Identificadores de dispositivo e backup automático</a></li>
-</ul>
-
-<p>
- Para obter mais informações sobre como configurar dispositivos físicos ou virtuais com uma imagem do sistema de prévia
- para teste, consulte <a href="{@docRoot}preview/setup-sdk.html">Configuração
-do Android N SDK</a>.
-</p>
-
-
-<h2 id="runtime-permissions">Teste de permissões</h2>
-
-<p>
- O novo modelo de <a href="{@docRoot}preview/features/runtime-permissions.html">permissões</a>
- altera a maneira que as permissões são alocadas ao aplicativo pelo usuário. Em vez de conceder todas as permissões
- durante o procedimento de instalação, o aplicativo deve pedir ao usuário permissões individuais
- em tempo de execução. Para os usuários, este comportamento fornece um controle mais granular sobre as atividades de cada aplicativo, bem
- como um melhor contexto para entender o porquê do aplicativo estar solicitando uma permissão específica. Os usuários
- podem conceder ou revogar as permissões concedidas a um aplicativo individualmente a qualquer momento. É provável que este recurso
- da prévia tenha um impacto no comportamento do aplicativo e pode impedir que alguns
- dos recursos do aplicativo funcionem, ou funcionem em um estado degradado.
-</p>
-
-<p class="caution">
- Esta alteração afeta todos os aplicativos em execução na nova plataforma, mesmo aqueles que não são destinados
- para a versão nova da plataforma. A plataforma fornece um comportamento de compatibilidade limitado para aplicativos legados. No entanto,
- você deve começar a planejar a migração do aplicativo para o novo modelo de permissões agora, com o objetivo
- de publicar uma versão atualizada do aplicativo no lançamento oficial da plataforma.
-</p>
-
-
-<h3 id="permission-test-tips">Dicas de teste</h3>
-
-<p>
- Use as seguintes dicas de teste para ajudar você a planejar e executar os testes do aplicativo com o novo
- comportamento de permissões.
-</p>
-
-<ul>
- <li>Identifique as permissões atuais do aplicativo e os caminhos de código relacionados.</li>
- <li>Teste o fluxo de usuário entre serviços protegidos por permissão e dados.</li>
- <li>Teste com várias combinações de permissões revogadas/concedidas.</li>
- <li>Use a ferramenta {@code adb} para gerenciar as permissões da linha de comando:
- <ul>
- <li>Liste as permissões e o status por grupos:
- <pre>adb shell pm list permissions -d -g</pre>
- </li>
- <li>Conceda ou revogue uma ou mais permissões usando a seguinte sintaxe:<br>
- <pre>adb shell pm [grant|revoke] <permission.name> ...</pre>
- </li>
- </ul>
- </li>
- <li>Analise o aplicativo para encontrar os serviços que usam permissões.</li>
-</ul>
-
-<h3 id="permission-test-strategy">Estratégia de teste</h3>
-
-<p>
- A mudança de permissões afeta a estrutura e o projeto do aplicativo, bem como
- a experiência do usuário e os fluxos fornecidos a eles. Você deve avaliar o uso das permissões atuais
- do aplicativo e começar a planejar novos fluxos que deseja oferecer. O lançamento oficial
- da plataforma fornece comportamento de compatibilidade, mas deve-se planejar a atualização do aplicativo e
- não confiar nestes comportamentos.
-</p>
-
-<p>
- Identifique as permissões que o aplicativo realmente precisa e usa e, em seguida, encontre os vários caminhos
- de código que usam os serviços protegidos por permissões. É possível fazer isto por meio de uma combinação de
- testes na nova plataforma e análise de códigos. Nos testes, você deve se concentrar em usar
- as permissões em tempo de execução alterando {@code targetSdkVersion} do aplicativo para a versão da prévia. Para
- obter mais informações, consulte <a href="{@docRoot}preview/setup-sdk.html#">Configuração
-do Android N SDK</a>.
-</p>
-
-<p>
- Teste com várias combinações de permissões revogadas e concedidas para destacar os fluxos de usuário
-que dependem de permissões. Onde uma dependência não for óbvia ou lógica, considere
-refatorar ou compartimentalizar este fluxo para eliminar a dependência ou para esclarecer por que
-a permissão é necessária.
-</p>
-
-<p>
- Para obter mais informações sobre o comportamento das permissões em tempo de execução, de testes e de melhores práticas, consulte a página
- <a href="{@docRoot}preview/features/runtime-permissions.html">Permissões</a> do Developer
- Preview.
-</p>
-
-
-<h2 id="doze-standby">Teste de soneca e App em espera</h2>
-
-<p>
- Os recursos de economia de energia de App em espera e soneca limitam a quantidade de processamento de segundo plano que o aplicativo
- pode realizar quando um dispositivo está no estado ocioso ou enquanto não está em foco. As
- restrições que o sistema pode impor nos aplicativos inclui acesso a rede limitado ou restrito,
- tarefas de segundo plano suspensas, notificações suspensas, solicitações de soneca ignoradas e despertadores. Para garantir
- que o aplicativo se comportará adequadamente com essas otimizações de economia de energia, deve-se testá-lo
- simulando estes estados de baixa energia.
-</p>
-
-<h4 id="doze">Testar o aplicativo com Soneca</h4>
-
-<p>Para testar a Soneca com o aplicativo:</p>
-
-<ol>
-<li>Configure um dispositivo de hardware ou virtual com uma imagem do sistema Android N.</li>
-<li>Conecte o dispositivo à máquina de desenvolvimento e instale o aplicativo.</li>
-<li>Execute o aplicativo e deixe-o ativo.</li>
-<li>Simule o dispositivo acessando o modo Soneca executando os seguintes comandos:
-
-<pre>
-$ adb shell dumpsys battery unplug
-$ adb shell dumpsys deviceidle step
-$ adb shell dumpsys deviceidle -h
-</pre>
-
- </li>
- <li>Observe o comportamento do aplicativo quando o dispositivo é reativado. Certifique-se de que
- ele se recupere corretamente quando o dispositivo sai do modo Soneca.</li>
-</ol>
-
-
-<h4 id="standby">Testar aplicativos com App em espera</h4>
-
-<p>Para testar o modo de espera do aplicativo:</p>
-
-<ol>
- <li>Configure um dispositivo de hardware ou virtual com uma imagem do sistema Android N.</li>
- <li>Conecte o dispositivo à máquina de desenvolvimento e instale o aplicativo.</li>
- <li>Execute o aplicativo e deixe-o ativo.</li>
- <li>Simule o aplicativo acessando o modo de espera executando os seguintes comandos:
-
-<pre>
-$ adb shell am broadcast -a android.os.action.DISCHARGING
-$ adb shell am set-idle <packageName> true
-</pre>
-
- </li>
- <li>Simule o despertar do aplicativo usando o seguinte comando:
- <pre>$ adb shell am set-idle <packageName> false</pre>
- </li>
- <li>Observe o comportamento do aplicativo quando ele é despertado. Certifique-se de que ele se recupere corretamente
- do modo de espera. Particularmente, deve-se verificar se as notificações e os trabalho de segundo plano
- do aplicativo continuam a funcionar como o esperado.</li>
-</ol>
-
-<h2 id="ids">Backup automático para aplicativos e identificadores específicos do dispositivo</h2>
-
-<p>Caso o aplicativo esteja persistindo qualquer identificador específico do dispositivo, como o ID de registro do Google
-Cloud Messaging, no armazenamento interno,
-certifique-se de seguir as práticas recomendadas para excluir o local de armazenamento
-do backup automático, como descrito em <a href="{@docRoot}preview/backup/index.html">Backup automático
-para aplicativos</a>. </p>
diff --git a/docs/html-intl/intl/pt-br/about/versions/nougat/index.jd b/docs/html-intl/intl/pt-br/about/versions/nougat/index.jd
index 58b2408..ff44f6a 100644
--- a/docs/html-intl/intl/pt-br/about/versions/nougat/index.jd
+++ b/docs/html-intl/intl/pt-br/about/versions/nougat/index.jd
@@ -1,78 +1,62 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<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 N Developer Preview</h1>
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- Prepare-se para o Android N!
+ Prepare-se para o Android Nougat!
<strong>Teste os aplicativos</strong> no Nexus e outros dispositivos. Ofereça suporte aos novos
comportamentos do sistema para <strong>economizar energia e memória</strong>.
Estenda seus aplicativos com a <strong>IU de várias janelas</strong>,
<strong>direcione notificações de resposta</strong> e muito mais.
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
Primeiros passos
- </a><!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ </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}images/home/n-preview-hero.png" srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
+ srcset="{@docRoot}images/home/n-preview-hero.png 1x,
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
+ data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
+ data-maxResults="3"></div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Informe um problema
</a>
</li>
<li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- Veja as notas de versão
- </a>
- </li>
- <li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Participe da comunidade de desenvolvedores
@@ -82,26 +66,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
-
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Informe um problema
- </a></div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Veja as notas de versão
- </a></div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Participe da comunidade de desenvolvedores
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
<h2 class="norule">Mais recente</h2>
<div class="resource-widget resource-flow-layout col-16"
@@ -113,19 +77,33 @@
data-initial-results="3"></div>
</div></section>
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">Recursos</h1>
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
- Informações essenciais para ajudar você a preparar seus aplicativos para o Android N.
+ New Android capabilities and the right way to use them in your apps.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
+ 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-light" id="resources"><div class="wrap">
+ <h1 class="dac-section-title">Recursos</h1>
+ <div class="dac-section-subtitle">
+ Informações essenciais para ajudar você a preparar seus aplicativos para o Android Nougat.
+ </div>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
-
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html-intl/intl/pt-br/index.jd b/docs/html-intl/intl/pt-br/index.jd
index f5e1569..b15ecc8 100644
--- a/docs/html-intl/intl/pt-br/index.jd
+++ b/docs/html-intl/intl/pt-br/index.jd
@@ -5,49 +5,36 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-invert" style="background-color:#455A64">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="col-7of16 col-push-9of16" style="padding-left:2em;">
- <a href="{@docRoot}preview/index.html">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Get ready for the next version of Android!
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
- behaviors to <strong>save power and memory</strong>.
+<section class="dac-expand dac-hero" style="background-color:#b2dfdb;">
+ <div class="wrap" style="max-width:1000px;margin-top:0">
+ <div class="col-7of16 col-push-8of16">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <h1 class="dac-hero-title" style="color:#004d40">Android 7.0 Nougat!</h1>
+ <p class="dac-hero-description" style="color:#004d40">
+ <strong>Android 7.0 Nougat is here!</strong>
+ Get your apps ready for the latest version of Android, with new system
+ behaviors to <strong>save battery and memory</strong>.
Extend your apps with <strong>multi-window UI</strong>,
<strong>direct reply notifications</strong> and more.
</p>
- <a class="dac-hero-cta" href="/preview/index.html">
- <span class="dac-sprite dac-auto-chevron"></span>
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron" style="background-color:#b2dfdb"></span>
Learn more
- </a><!--<br>
- <a class="dac-hero-cta" href="/preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Developer Preview (final SDK)
- </a><br>-->
+ </a>
+ </a>
</a>
</div>
- <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:0em;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,
- /images/home/n-preview-hero_2x.png 2x">
+ <div class="col-6of16 col-pull-6of16 dac-hero-figure" style="padding-left:1em;padding-top:1em;">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/nougat_bg.jpg"
+ srcset="{@docRoot}images/home/nougat_bg.jpg 1x,
+ {@docRoot}images/home/nougat_bg_2x.jpg 2x">
</a>
</div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
<i class="dac-sprite dac-arrow-down-gray"></i>
@@ -75,28 +62,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
- <i class="dac-sprite dac-arrow-down-gray"></i>
- </a>
- <div class="actions">
- <div><a href="{@docRoot}sdk/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Get the SDK
- </a></div>
- <div><a href="{@docRoot}samples/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Browse Samples
- </a></div>
- <div><a href="{@docRoot}distribute/stories/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Watch Stories
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light" id="build-apps"><div class="wrap">
<h1 class="dac-section-title">Build Beautiful Apps</h1>
<div class="dac-section-subtitle">
diff --git a/docs/html-intl/intl/pt-br/preview/download_mp2.jd b/docs/html-intl/intl/pt-br/preview/download_mp2.jd
deleted file mode 100644
index 12ef194..0000000
--- a/docs/html-intl/intl/pt-br/preview/download_mp2.jd
+++ /dev/null
@@ -1,360 +0,0 @@
-page.title=Downloads
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Antes de fazer o download ou instalar componentes do Android Preview
- SDK, você deve concordar com os seguintes termos e condições.</p>
-
- <h2 class="norule">Termos e condições</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-Este é o contrato de licença do Android SDK Preview (o “Contrato de Licença”).
-
-1. Introdução
-
-1.1 O Android SDK Preview (que este Contrato de licença chama de "Preview", incluindo especificamente os arquivos de sistema do Android, APIs integradas e arquivos da biblioteca Preview, se e quando estiverem disponíveis) é licenciado por meio da concordância com os termos deste contrato. O Contrato de licença forma um vínculo contratual legal entre o contratante e a Google em relação ao uso do Preview.
-
-1.2 "Android" se refere à pilha de software do Android para dispositivos, conforme disponibilizado no Projeto de código aberto do Android, localizado no URL a seguir: http://source.android.com/, atualizado periodicamente.
-
-1.3 "Google" refere-se à Google Inc, uma corporação de Delaware, com sede em 1600 Amphitheatre Parkway, Mountain View, CA 94043, Estados Unidos.
-
-2. Aceitação do Contrato de Licença
-
-2.1 A fim de usar o Preview, é necessário concordar com este Contrato de licença. O uso do Preview é proibido àqueles que não concordam com este Contrato de licença.
-
-2.2 Ao clicar em aceitar e/ou usar o Preview, você concorda com os termos do Contrato de licença
-
-2.3 É proibido o uso do Preview e a aceitação deste contrato pelo indivíduo que tenha impedimento legal sobre o recebimento do Preview sob as leis dos Estados Unidos ou de outros países, incluindo o país de residência ou no qual usa o Preview.
-
-2.4 Se for usar o Preview internamente na empresa ou organização, você deverá concordar com o vínculo com este contrato em nome do empregador ou de outra entidade e declarar e garantir que tem total autoridade legal para tanto. Se você não tem a autoridade necessária, não deve concordar com este contrato nem usar o Preview em nome do empregador ou de outra entidade.
-
-3. Licença do Preview da Google
-
-3.1 Sujeito aos termos do Contrato de licença, a Google confere uma licença limitada, revogável, livre de taxas, intransmissível, não sub-licenciável e não exclusiva para o uso apenas do Preview, pessoal ou internamente dentro da sua empresa ou organização, para fins de desenvolvimento de aplicativos executados na plataforma do Android.
-
-3.2 Você concorda que a Google ou terceiros detêm todos os direitos legais, títulos e interesses relativos ao Preview, incluindo quaisquer direitos de propriedade intelectual que subsistam no Preview. "Direitos de propriedade intelectual" se referem a todo e qualquer direito sob as leis de patentes, de direitos autorais, de segredo comercial, de marca registrada e todos os outros direitos de propriedade. A Google reserva todos os direitos não conferidos expressamente a você.
-
-3.3 O uso do Preview não é autorizado para qualquer finalidade não expressamente permitida por este Contrato de licença. Salvo na extensão exigida por licenças aplicáveis de terceiros, é proibido: (a) copiar (exceto para fins de cópia de segurança), modificar, adaptar, redistribuir, descompilar, fazer engenharia reversa, desmontar ou criar trabalhos derivados do Preview ou qualquer parte dele; ou (b) carregar qualquer parte do Preview em um aparelho celular ou outro dispositivo de hardware, exceto em computador pessoal, combinar qualquer parte do Preview com outros softwares ou distribuir qualquer software ou dispositivo que contenha uma parte do Preview.
-
-3.4 Você concorda que não tomará quaisquer medidas que possam causar ou resultar em fragmentação do Android, incluindo, sem limitar-se, a distribuição e a participação na criação ou na promoção, sob quaisquer formas, de um conjunto de desenvolvimento de software derivado do Preview.
-
-3.5 O uso, a reprodução e a distribuição de componentes do Preview licenciado sob licença de software de código aberto são regidos exclusivamente pelos termos daquela licença de software de código aberto, e não por este Contrato de licença. Você concorda em manter uma licença em bom estado para as licenças de software de código aberto sob todos os direitos concedidos e deter quaisquer ações que possam limitar, suspender ou romper tais direitos.
-
-3.6 Você concorda que a forma e a natureza do SDK que a Google fornece podem mudar sem aviso prévio e que as versões futuras do SDK podem ser incompatíveis com aplicativos desenvolvidos em versões anteriores do SDK. Você concorda que a Google pode cessar (permanente ou temporariamente) o fornecimento do Preview (ou quaisquer recursos dentro dele) a você ou a usuários em geral sob critério exclusivo da Google, sem aviso prévio.
-
-3.7 Nada neste Contrato de licença confere o direito de uso de quaisquer nomes comerciais, marcas comerciais, marcas de serviço, logomarcas, nomes de domínios e outros recursos de marcas especiais da Google.
-
-3.8 Você concorda que não removerá, ocultará nem alterará quaisquer observações de direitos de propriedade (incluindo observações de direitos autorais e de marcas registradas) que possam estar afixadas ou contidas no Preview.
-
-4. Uso do Preview por você
-
-4.1 A Google compreende que nada no Contrato de licença dá a ela direito, título nem interesse no usuário (ou em seus licenciadores), sob o presente Contrato de licença, no que tange ao desenvolvimento de aplicativos de software através do uso do Preview, incluindo quaisquer direitos de propriedade intelectual que subsistam nos referidos aplicativos.
-
-4.2 Você concorda em usar o Preview e desenvolver aplicativos somente para as finalidades permitidas por (a) este Contrato de licença e (b) quaisquer leis, normas, diretrizes geralmente aceitas ou orientações aplicáveis nas jurisdições relevantes (incluindo quaisquer leis acerca da exportação e da importação de dados ou softwares nos Estados Unidos ou em outros países relevantes).
-
-4.3 Você concorda que, se usar o Preview para o desenvolvimento de aplicativos, deverá proteger a privacidade e os direitos legais destes usuários. Se nomes de usuário, senhas ou outras informações de acesso ou informações pessoais forem fornecidos ao aplicativo, deve-se informá-los de que tais dados estarão disponíveis para o aplicativo, além de fornecer observações de privacidade e proteção legalmente adequadas a esses usuários. Se o aplicativo armazenar informações pessoais ou confidenciais fornecidas pelos usuários, deve fazê-lo com segurança. Se o usuário fornecer informações da conta do Google, o aplicativo poderá usar essas informações exclusivamente para acessar a conta da Google do usuário quando houver autorização para fazê-lo e para os fins limitados pela autorização.
-
-4.4 Você concorda que não se envolverá em qualquer atividade com o Preview, incluindo o desenvolvimento e a distribuição de um aplicativo que interfira, perturbe, danifique ou acesse, de modo não autorizado, servidores, redes ou outras propriedades ou serviços da Google ou qualquer outro terceiro.
-
-4.5 Você concorda que é exclusivamente responsável por (e que a Google não tem qualquer responsabilidade com você ou terceiro) quaisquer dados, conteúdo ou recursos que criar, transmitir ou exibir por meio do Android e/ou de aplicativos do Android e pelas consequências que suas ações (incluindo perda ou dano que a Google possa sofrer) podem gerar.
-
-4.6 Você concorda que é exclusivamente responsável por (e que a Google não tem qualquer responsabilidade com você ou terceiro) qualquer violação das obrigações exigidas neste Contrato de licença, qualquer contrato ou termos de serviço aplicáveis a terceiros, qualquer lei ou norma aplicável e pelas consequências (incluindo a perda ou dano que a Google ou qualquer terceiro possa sofrer) de quaisquer violações.
-
-4.7 O Preview está em desenvolvimento e o seu teste e feedback são uma parte importante deste processo. Ao usar o Preview, você está ciente de que a implementação de alguns recursos ainda estão em desenvolvimento e que não se deve confiar que o Preview tem a funcionalidade completa de uma versão estável. Você concorda em não distribuir nem enviar publicamente quaisquer aplicativos usando este Preview, pois ele não será mais suportado após o lançamento oficial do Android SDK.
-
-5. Suas credenciais de desenvolvedor
-
-5.1 Você é responsável pela manutenção da confidencialidade de quaisquer credenciais de desenvolvedor que possam ser emitidas pela Google ou escolhidas por você e será o único responsável por todos os aplicativos que forem desenvolvidos sob suas credenciais de desenvolvedor.
-
-6. Privacidade e informações
-
-6.1 A fim de inovar e aprimorar continuamente o Preview, a Google pode coletar certas estatísticas de uso do software, incluindo, sem limitar-se, um identificador exclusivo, endereço IP associado, número de versão do software e informações sobre quais ferramentas e/ou serviços no Preview estão sendo usados e como estão sendo usados. Antes de coletar quaisquer dessas informações, o Preview o notificará e buscará seu consentimento. Se você recusar, as informações não serão coletadas.
-
-6.2 Os dados coletados são examinados coletivamente para aprimorar o Preview e são mantidos em conformidade com a Política de privacidade da Google acessível em http://www.google.com/policies/privacy/.
-
-7. Aplicativos de terceiros
-
-7.1 Ao usar o Preview para executar aplicativos desenvolvidos por terceiros ou que acessam dados, conteúdo ou recursos fornecidos por terceiros, você concorda que a Google não é responsável por tais aplicativos, dados, conteúdo ou recursos. Você compreende que quaisquer dados, conteúdo ou recursos passíveis de aceitação por meio de tais aplicativos de terceiros imputam responsabilidade exclusiva ao indivíduo que os originou. A Google não é responsável por qualquer perda ou dano que possa ocorrer como resultado do uso ou acesso de quaisquer aplicativos, dados, conteúdo ou recursos de terceiros.
-
-7.2 Você deve estar ciente de que os dados, conteúdo e recursos apresentados a você por aplicativos de terceiros podem ser protegidos pelos direitos de propriedade intelectual de posse dos fornecedores (ou de outras pessoas ou empresas em seus nomes). Não é permitido modificar, alugar, arrendar, emprestar, vender, distribuir nem criar trabalhos derivados com base nestes dados, conteúdo ou recursos (na totalidade ou em parte), salvo se houver permissão explícita especificada pelos respectivos detentores de direitos.
-
-7.3 Você reconhece que o uso de tais aplicativos, dados, conteúdo ou recursos de terceiros pode estar sujeito a termos adicionais entre você e o terceiro em questão.
-
-8. Uso de APIs da Google
-
-8.1 APIs da Google
-
-8.1.1 Ao usar qualquer API para recuperar dados da Google, você reconhece que eles podem ser protegidos por direitos de propriedade intelectual de posse da Google ou dos terceiros que fornecem os dados (ou de pessoas ou empresas em nomes deles). O uso de tal API pode estar sujeito a termos de serviço adicionais. Não é permitido modificar, alugar, arrendar, emprestar, vender, distribuir nem criar trabalhos derivados baseados nesses dados (na totalidade ou em parte), salvo se permitido pelos termos de serviço pertinentes.
-
-8.1.2 Se você usar qualquer API para recuperar dados de um usuário a partir da Google, reconhece e concorda que deve recuperar dados somente com consentimento explícito do usuário e somente quando, e para os fins limitados aos quais, o usuário conceder permissão para fazê-lo.
-
-9. Rescisão do Contrato de licença
-
-9.1 O Contrato de licença continuará a se aplicar até que ocorra uma rescisão sua ou da Google, como definido abaixo.
-
-9.2 Caso queira rescindir o Contrato de licença, você pode fazer isto cessando o uso do Preview e de qualquer credencial de desenvolvedor relevante.
-
-9.3 A Google pode, a qualquer momento, rescindir o Contrato de licença, com ou sem causa, com uma notificação.
-
-9.4 O Contrato de licença será encerrado automaticamente sem aviso ou outras ações na ocorrência de:
-(A) a Google interromper o fornecimento do Preview ou de determinadas partes do Preview aos usuários no país em que você reside ou de onde o serviço é usado; e
-(B) a Google emitir uma versão de lançamento final do Android SDK.
-
-9.5 Quando o Contrato de licença é rescindido, a licença concedida a você no Contrato de licença é finalizada, todo o uso do Preview será interrompido e as provisões dos parágrafos 10, 11, 12 e 14 deverão permanecer indefinidamente.
-
-10. EXCLUSÕES
-
-10.1 VOCÊ COMPREENDE E CONCORDA EXPRESSAMENTE QUE O RISCO DO USO DO PREVIEW É EXCLUSIVAMENTE SEU E QUE O PREVIEW É FORNECIDO NA FORMA EM QUE SE ENCONTRA E COMO DISPONIBILIZADO, SEM GARANTIA DE QUALQUER TIPO DA GOOGLE.
-
-10.2 O USO DO PREVIEW E DE QUALQUER MATERIAL BAIXADO OU OBTIDO DE OUTRO MODO PELO USO DO PREVIEW ESTÁ A SEU CRITÉRIO E RISCO E VOCÊ É O ÚNICO RESPONSÁVEL POR QUALQUER DANO AO SEU SISTEMA OPERACIONAL OU OUTRO DISPOSITIVO OU PELA PERDA DE DADOS QUE RESULTEM DE TAL USO. SEM LIMITAR OS PRECEDENTES, VOCÊ ENTENDE QUE O PREVIEW NÃO É UMA VERSÃO ESTÁVEL E QUE PODE CONTER ERROS, DEFEITOS E VULNERABILIDADES DE SEGURANÇA QUE PODEM RESULTAR EM DANOS SIGNIFICANTES, INCLUINDO A PERDA IRRECUPERÁVEL OU COMPLETA DO USO DO SISTEMA DO COMPUTADOR OU DE OUTROS DISPOSITIVOS.
-
-10.3 A GOOGLE EXCLUI EXPRESSAMENTE TODAS AS GARANTIAS E CONDIÇOES DE QUALQUER TIPO, EXPRESSAS OU IMPLÍCITAS, INCLUINDO, MAS NÃO LIMITADO A, GARANTIAS E CONDIÇÕES DE COMERCIALIZAÇÃO IMPLÍCITAS, ADEQUAÇÃO A UMA FINALIDADE PARTICULAR E A NÃO VIOLAÇÃO.
-
-11. LIMITAÇÃO DE RESPONSABILIDADE
-
-11.1 VOCÊ COMPREENDE E CONCORDA EXPRESSAMENTE QUE A GOOGLE, SUAS SUBSIDIÁRIAS, AFILIADAS E SEUS LICENCIADORES NÃO SERÃO RESPONSABILIZADOS POR VOCÊ SOB QUALQUER TEORIA DE RESPONSABILIDADE POR QUAISQUER DANOS, SEJAM ELES DIRETOS, INDIRETOS, INCIDENTAIS, ESPECIAIS, CONSEQUENCIAIS OU DE EXEMPLO QUE POSSAM INCORRER, INCLUINDO QUALQUER PERDA DE DADOS, INDEPENDENTE DE AVISO À GOOGLE OU A SEUS REPRESENTANTES OU DA NECESSIDADE DE AVISO SOBRE A POSSIBILIDADE DA INCORRÊNCIA DE TAIS PERDAS.
-
-12. Indenização
-
-12.1 Ao limite máximo permitido por lei, você concorda em defender, indenizar e isentar a Google, suas afiliadas e respectivos conselheiros, diretores, empregados e agentes com relação a todas e quaisquer reivindicações, ações, processos ou procedimentos, bem como todas e quaisquer perdas, responsabilidades, danos, custos e despesas (incluindo honorários advocatícios) decorrentes ou provenientes de: (a) seu uso do Preview, (b) qualquer aplicativo desenvolvido no Preview que infrinja direitos de propriedade intelectual de qualquer pessoa, difame qualquer pessoa ou viole seus direitos de publicidade ou privacidade e (c) qualquer não cumprimento deste Contrato de licença.
-
-13. Mudanças no Contrato de licença
-
-13.1 A Google pode realizar mudanças no Contrato de licença à medida que distribui novas versões do Preview. Quando essas mudanças forem realizadas, a Google fará uma nova versão do Contrato de licença disponível no site em que o Preview estiver disponível.
-
-14. Termos legais gerais
-
-14.1 Esse Contrato de licença constitui o contrato legal integral entre você e a Google e rege o uso do Preview (excluindo quaisquer serviços que a Google possa fornecer a você sob um contrato escrito em separado), e substitui inteiramente quaisquer contratos anteriores entre você e a Google em relação ao Preview.
-
-14.2 Você concorda que, se a Google não exercer nem impetrar qualquer direito ou recurso legal que esteja contido no Contrato de licença (ou que a Google detenha direitos nos termos de qualquer lei aplicável), não se considerará esse fato como uma renúncia formal aos direitos da Google e esses direitos ou recursos continuarão disponíveis à Google.
-
-14.3 Se qualquer tribunal de justiça que tiver a competência para decidir sobre esse tema determinar que qualquer cláusula do Contrato de licença é inválida, tal cláusula será removida do contrato sem afetar as cláusulas restantes ou sua vigência. As cláusulas restantes do Contrato de licença continuarão válidas e obrigatórias.
-
-14.4 Você reconhece e concorda que cada membro do grupo de empresas das quais a Google é a empresa controladora deve ser beneficiário terceiro do Contrato de licença e que essas outras empresas terão o poder de aplicar diretamente, e apoiar-se em, qualquer cláusula do Contrato de licença que confira um direito (ou direitos em favor) deles. Além disso, nenhuma outra pessoa nem empresa deve ser beneficiário terceiro do Contrato de licença.
-
-14.5 RESTRIÇÕES DE EXPORTAÇÃO. O PREVIEW ESTÁ SUJEITO ÀS LEIS E NORMAS DE EXPORTAÇÃO DOS ESTADOS UNIDOS. VOCÊ DEVE CUMPRIR TODAS AS LEIS E NORMAS DOMÉSTICAS E INTERNACIONAIS QUE SE APLICAREM AO PREVIEW. ESSAS LEIS INCLUEM RESTRIÇÕES SOBRE DESTINOS, USUÁRIOS FINAIS E USO FINAL.
-
-14.6 O Contrato de licença não pode ser atribuído nem transferido por você sem a aprovação prévia por escrito da Google. Qualquer tentativa de atribuição sem a aprovação será inválida. Você não deve delegar as próprias responsabilidades ou obrigações nos termos do Contrato de licença sem aprovação prévia por escrito da Google.
-
-14.7 O Contrato de licença e sua relação com a Google nos termos do contrato serão regidos pelas leis do estado da Califórnia sem considerar conflitos de disposições legais. Você e a Google concordam em se submeter à competência exclusiva dos tribunais localizados na comarca de Santa Clara, Califórnia, para dirimir quaisquer questões legais decorrentes do Contrato de licença. Não obstante a isso, você concorda que a Google continua habilitada a impetrar medidas cautelares (ou mecanismo legal urgente equivalente) em qualquer jurisdição.
- </div><!-- sdk terms -->
-
-
-
- <div id="sdk-terms-form">
- <p>
- <input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
- <label id="agreeLabel" for="agree">Li e concordo com todos os termos e condições expressos acima</label>
- </p>
- <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
- </div>
-
-
- </div><!-- end TOS -->
-
-
- <div id="landing">
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Neste documento</h2>
- <ol>
- <li><a href="#sdk">Preview SDK</a></li>
- <li><a href="#docs">Documentação do desenvolvedor</a></li>
- <li><a href="#images">Imagens do sistema de hardware</a></li>
- </ol>
-
- <h2>Legacy downloads</h2>
- <ol>
- <li><a href="{@docRoot}preview/download_mp1.html">Developer Preview Archive</a></li>
- </ol>
- </div>
-</div>
-
-
-<p>
- O Android M Preview SDK inclui ferramentas de desenvolvimento, arquivos de sistema do Android e arquivos da biblioteca
- para ajudar você a testar o aplicativo e novas APIs da próxima versão da plataforma. Este documento
- descreve como adquirir os componentes disponíveis para download da prévia para o teste do aplicativo.
-</p>
-
-
-<h2 id="sdk">Preview SDK</h2>
-
-<p>
- O Preview SDK está disponível para download no <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK Manager</a>. Para obter mais informações
- sobre o download e a configuração do Preview SDK, consulte <a href="{@docRoot}preview/setup-sdk.html#downloadSdk">Configuração do Preview SDK</a>.
-</p>
-
-
-<h2 id="docs">Documentação do desenvolvedor</h2>
-
-<p>
- O pacote de download da documentação do desenvolvedor fornece informações de referência de API detalhadas e um relatório de diferença de API para a prévia.
-</p>
-
-<table>
- <tr>
- <th scope="col">Description</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="docs-dl">
- <td>Android M Preview 2<br>Developer Docs</td>
- <td><a href="#top" onclick="onDownload(this)"
- >m-preview-2-developer-docs.zip</a><br>
- MD5: 1db6fff9c722b0339757e1cdf43663a8<br>
- SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157
- </td>
- </tr>
-</table>
-
-
-<h2 id="images">Imagens do sistema de hardware</h2>
-
-<p>
- Essas imagens do sistema permitem que você instale uma versão de prévia da plataforma em um dispositivo físico
-para fins de teste. Ao configurar um dispositivo com uma dessas imagens, é possível instalar e testar o aplicativo
- para verificar o seu desempenho na próxima versão da plataforma. O processo de instalação de uma imagem do sistema
- em um dispositivo <em>remove todos os dados do dispositivo</em>. Portanto, deve-se realizar um backup dos dados
- antes de instalar uma imagem do sistema.
-</p>
-
-<p class="warning">
- <b>Aviso:</b> as seguintes imagens do sistema Android são prévias e estão sujeitas a alterações. O uso
- dessas imagens do sistema são governadas pelo Contrato de licença do Android SDK Preview. As imagens do sistema do Android Preview
- não são versões estáveis e podem conter erros e defeitos que podem resultar
- em danos aos sistemas do computador, aos dispositivos e aos dados. As imagens do sistema Android Preview
- não estão sujeitas ao mesmo teste do sistema operacional de fábrica e podem fazer com que o telefone e aplicativos e os serviços
- instalados parem de funcionar.
-</p>
-
-<table>
- <tr>
- <th scope="col">Device</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="hammerhead">
- <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >hammerhead-MPZ79M-preview-b1f4bde4.tgz</a><br>
- MD5: 2ca9f18bf47a061b339bab52647ceb0d<br>
- SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939
- </td>
- </tr>
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-MPZ79M-preview-e1024040.tgz</a><br>
- MD5: 24a2118da340b9afedfbdfc026f6ff81<br>
- SHA-1: e10240408859d5188c4aae140e1c539130ba614b
- </td>
- </tr>
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-MPZ79M-preview-9f305342.tgz</a><br>
- MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e<br>
- SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-MPZ79N-preview-fb63af98.tgz</a><br>
- MD5: e8d081137a20b66df595ee69523314b5<br>
- SHA-1: fb63af98302dd97be8de9313734d389ccdcce250
- </td>
- </tr>
-
-</table>
-
-<h3 id="install-image">Instalar uma imagem no dispositivo</h3>
-
-<p>
- Para usar uma imagem de dispositivo para testes, deve-se instalá-lo em um dispositivo compatível. Siga
- as instruções abaixo para instalar uma imagem de sistema.
-</p>
-
-<ol>
- <li>Faça o download e descompacte um dos pacotes de imagem do sistema listados aqui.</li>
- <li>Faça um backup dos dados do dispositivo que deseja preservar.</li>
- <li>Siga as instruções em
- <a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
- para programar em flash a imagem no dispositivo.</li>
-</ol>
-
-<p class="note">
- <strong>Observação:</strong> ao programar em flash a imagem do sistema de prévia no dispositivo de desenvolvimento,
- ele é atualizado automaticamente com o próximo lançamento da prévia por meio de atualizações over-the-air (OTA).
-</p>
-
-<h3 id="revertDevice">Reverter um dispositivo para as especificações de fábrica</h3>
-
-<p>
- Caso queira desinstalar a prévia e reverter o dispositivo para as especificações de fábrica, acesse
- <a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a> e
- faça o download da imagem que deseja programar em flash no dispositivo. Siga as instruções nesta página
- para programar em flash a imagem no dispositivo.
-</p>
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/";
- function onDownload(link) {
-
- $("#downloadForRealz").html("Download " + $(link).text());
- $("#downloadForRealz").attr('href', urlRoot + $(link).text());
-
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
-
- return true;
- }
-
-
- function onAgreeChecked() {
- /* verify that the TOS is agreed */
- if ($("input#agree").is(":checked")) {
- /* reveal the download button */
- $("a#downloadForRealz").removeClass('disabled');
- } else {
- $("a#downloadForRealz").addClass('disabled');
- }
- }
-
- function onDownloadForRealz(link) {
- if ($("input#agree").is(':checked')) {
- /*
- $("#tos").fadeOut('fast');
- $("#landing").fadeIn('fast');
- */
-
- ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html());
-
- /*
- location.hash = "";
- */
- return true;
- } else {
- return false;
- }
- }
-
- $(window).hashchange( function(){
- if (location.hash == "") {
- location.reload();
- }
- });
-
-</script>
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
deleted file mode 100644
index cf4bbe9..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,391 +0,0 @@
-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">
- <div id="qv">
- <h2>
- Neste documento
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">Restrições sobre CONNECTIVITY_ACTION</a>
- </li>
-
- <li>
- <a href="#sched-jobs">Agendamento de trabalhos de rede em conexões
- ilimitadas</a>
- </li>
-
- <li>
- <a href="#monitor-conn">Monitoramento de conectividade de rede durante a execução
- do aplicativo</a>
- </li>
-
- <li>
- <a href="#media-broadcasts">Restrições sobre NEW_PICTURE e
- NEW_VIDEO</a>
- </li>
-
- <li>
- <a href="#new-jobinfo">Novos métodos JobInfo</a>
- </li>
-
- <li>
- <a href="#new-jobparam">Novos métodos JobParameter</a>
- </li>
-
- <li>
- <a href="#further-optimization">Otimização adicional do aplicativo</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Os processos em segundo plano podem fazer uso intensivo de memória e bateria. Por exemplo, uma
- transmissão implícita poderá iniciar diversos processos em segundo plano registrados
- para escutá-la, mesmo se esses processos não forem muito usados. Isso pode afetar
- substancialmente o desempenho do dispositivo e a experiência do usuário.
-</p>
-
-<p>
- Para aliviar esse problema, o Android N aplica as seguintes
-restrições:
-</p>
-
-<ul>
- <li>Os aplicativos direcionados ao Preview não receberão transmissões {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} se estiverem
- registrados para recebê-las no seu manifesto. Os aplicativos em execução ainda
-poderão escutar {@code CONNECTIVITY_CHANGE} no encadeamento principal registrando um
-{@link android.content.BroadcastReceiver} em {@link
- android.content.Context#registerReceiver Context.registerReceiver()}.
- </li>
-
- <li>Os aplicativos não podem enviar nem receber transmissões {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} ou {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Essa otimização
- afeta todos os aplicativos e não apenas os direcionados ao Preview.
- </li>
-</ul>
-
-<p>
- Se o seu aplicativo usar qualquer uma dessas intenções, remova as dependências delas
- assim que possível para direcionar corretamente os dispositivos Android N.
- A estrutura do Android oferece diversas soluções para reduzir a necessidade dessas
- transmissões implícitas. Por exemplo, {@link android.app.job.JobScheduler}
- e <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
-{@code GcmNetworkManager}</a> oferecem mecanismos robustos para agendar operações
- de rede quando ocorrem condições especificadas, como conexão a uma
- rede ilimitada. Agora, você também pode usar {@link android.app.job.JobScheduler}
- para reagir a mudanças em provedores de conteúdo. Os objetos {@link android.app.job.JobInfo}
- encapsulam os parâmetros usados por {@link android.app.job.JobScheduler}
- para agendar o seu trabalho. Quando as condições do trabalho forem atendidas, o sistema
- executará o trabalho no {@link android.app.job.JobService} do seu aplicativo.
-</p>
-
-<p>
- Neste documento, veremos como usar métodos alternativos, como
- {@link android.app.job.JobScheduler}, para adaptar seu aplicativo a essas novas
- restrições.
-</p>
-
-<h2 id="connectivity-action">
- Restrições sobre CONNECTIVITY_ACTION
-</h2>
-
-<p>
- Os aplicativos direcionados ao Android N não receberão transmissões {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} se estiverem
- registrados para recebê-las no seu manifesto e os processos que dependerem dessas
- transmissões não serão iniciados. Isso pode ser um problema para aplicativos que quiserem
- escutar mudanças de rede ou executar atividades de rede em massa quando o
- dispositivo se conectar a uma rede ilimitada. Já existem várias soluções para contornar essa
- restrição na estrutura do Android, mas a escolha da solução correta
- depende do que o aplicativo pretende realizar.
-</p>
-
-<p class="note">
- <strong>Observação:</strong> Um {@link android.content.BroadcastReceiver} registrado em
- {@link android.content.Context#registerReceiver Context.registerReceiver()}
- continuará a receber essas transmissões enquanto o aplicativo estiver em execução.
-</p>
-
-<h3 id="sched-jobs">
- Agendamento de trabalhos de rede em conexões ilimitadas
-</h3>
-
-<p>
- Ao usar a classe {@link android.app.job.JobInfo.Builder JobInfo.Builder}
- para compilar o objeto {@link android.app.job.JobInfo}, aplique o método {@link
- android.app.job.JobInfo.Builder#setRequiredNetworkType
- setRequiredNetworkType()} e passe {@link android.app.job.JobInfo
- JobInfo.NETWORK_TYPE_UNMETERED} como parâmetro do trabalho. O código a seguir
- agendará a execução de um serviço quando o dispositivo se conectar a uma rede
- ilimitada e estiver carregando:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-</pre>
-
-<p>
- Quando as condições para o trabalho forem atendidas, o aplicativo receberá um retorno de chamada para executar
- o método {@link android.app.job.JobService#onStartJob onStartJob()} na
- {@code JobService.class} especificada. Para ver mais exemplos da implementação de {@link
- android.app.job.JobScheduler}, consulte o <a href="{@docRoot}samples/JobScheduler/index.html">aplicativo de exemplo do JobScheduler</a>.
-</p>
-
-<p>
- Os aplicativos que usarem serviços do GMSCore e forem direcionados ao Android 5.0 (nível da API 21)
- ou anterior poderão usar <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> e especificar {@code Task.NETWORK_STATE_UNMETERED}.
-</p>
-
-<h3 id="monitor-conn">
- Monitoramento de conectividade de rede durante a execução do aplicativo
-</h3>
-
-<p>
- Os aplicativos em execução ainda poderão escutar {@code CONNECTIVITY_CHANGE} com um
- {@link android.content.BroadcastReceiver} registrado. No entanto, a API {@link
- android.net.ConnectivityManager} oferece um método mais robusto para solicitar
- um retorno de chamada apenas quando condições de rede especificadas são atendidas.
-</p>
-
-<p>
- Os objetos {@link android.net.NetworkRequest} definem os parâmetros do
- retorno de chamada de rede em termos de {@link android.net.NetworkCapabilities}. Objetos
- {@link android.net.NetworkRequest} são criados com a classe {@link
- android.net.NetworkRequest.Builder NetworkRequest.Builder}. Em seguida, {@link
- android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
- android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
- passa o objeto {@link android.net.NetworkRequest} ao sistema. Quando
- as condições de rede forem atendidas, o aplicativo receberá um retorno de chamada para executar o
- método {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
- onAvailable()} definido em sua classe {@link
- android.net.ConnectivityManager.NetworkCallback}.
-</p>
-
-<p>
- O aplicativo continuará a receber retornos de chamada até que o aplicativo encerre ou chame
- {@link android.net.ConnectivityManager#unregisterNetworkCallback
- unregisterNetworkCallback()}.
-</p>
-
-<h2 id="media-broadcasts">
- Restrições sobre NEW_PICTURE e NEW_VIDEO
-</h2>
-
-<p>
- No Android N, os aplicativos não conseguem enviar nem receber transmissões {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} ou {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Essa restrição ajuda a
- aliviar os impactos no desempenho e na experiência de usuário quando vários aplicativos devem
- despertar para processar uma nova imagem ou vídeo. O Android N
- estende {@link android.app.job.JobInfo} e {@link
- android.app.job.JobParameters} para oferecer uma solução alternativa.
-</p>
-
-<h3 id="new-jobinfo">
- Novos métodos JobInfo
-</h3>
-
-<p>
- Para acionar trabalhos em mudanças de URI de conteúdo, o Android N estende
- a API {@link android.app.job.JobInfo} com os seguintes métodos:
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- Encapsula os parâmetros necessários para acionar um trabalho quando ocorrem mudanças de URI de conteúdo.
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- Passa um objeto {@code TriggerContentUri} para {@link
- android.app.job.JobInfo}. Um {@link android.database.ContentObserver}
- monitora o URI de conteúdo encapsulado. Se houver vários objetos {@code
- TriggerContentUri} associados a um trabalho, o sistema fornecerá um
- retorno de chamada, mesmo se indicar uma mudança em apenas um dos URIs de conteúdo.
- </dd>
-
- <dd>
- Adicione o sinalizador {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} para
- acionar o trabalho em caso de mudança em qualquer um dos descendentes do URI especificado. Esse indicador
- corresponde ao parâmetro {@code notifyForDescendants} passado para {@link
- android.content.ContentResolver#registerContentObserver
- registerContentObserver()}.
- </dd>
-</dl>
-
-<p class="note">
- <strong>Observação:</strong> não é possível usar {@code TriggerContentUri()}
- juntamente com {@link android.app.job.JobInfo.Builder#setPeriodic
- setPeriodic()} ou {@link android.app.job.JobInfo.Builder#setPersisted
- setPersisted()}. Para monitorar continuamente mudanças de conteúdo, agende um novo
- {@link android.app.job.JobInfo} antes que o {@link
- android.app.job.JobService} do aplicativo encerre o processamento do retorno de chamada mais recente.
-</p>
-
-<p>
- O exemplo de código a seguir agenda um trabalho que será acionado quando o sistema indicar
- uma mudança no URI de conteúdo {@code MEDIA_URI}:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-</pre>
-<p>
- Quando o sistema indicar uma mudança nos URIs de conteúdo especificados, o aplicativo
- receberá um retorno de chamada e um objeto {@link android.app.job.JobParameters} será
- passado para o método {@link android.app.job.JobService#onStartJob onStartJob()}
- na {@code MediaContentJob.class}.
-</p>
-
-<h3 id="new-jobparam">
- Novos métodos JobParameter
-</h3>
-
-<p>
- O Android N também estende {@link android.app.job.JobParameters} para
- permitir que o aplicativo receba informações úteis sobre quais autoridades de conteúdo
- e URIs acionaram o trabalho:
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- Retorna uma matriz de URIs que acionaram o trabalho. O retorno será {@code
- null} se o trabalho não foi acionado por URIs (por exemplo, o trabalho foi
- acionado devido a um prazo ou por outro motivo) ou o número de URIs modificados
- for maior que 50.
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- Retorna uma matriz de strings de autoridades de conteúdo que acionaram o trabalho.
- Se a matriz retornada não for {@code null}, use {@code getTriggeredContentUris()}
- para recuperar os detalhes sobre quais URIs foram modificados.
- </dd>
-</dl>
-
-<p>
- O exemplo de código a seguir substitui o método {@link
- android.app.job.JobService#onStartJob JobService.onStartJob()} e
- registra as autoridades de conteúdo e URIs que acionaram o trabalho:
-</p>
-
-<pre>
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-</pre>
-
-<h2 id="further-optimization">
- Otimização adicional do aplicativo
-</h2>
-
-<p>
- A otimização dos aplicativos para execução em dispositivos com pouca memória ou em
- condições de pouca memória pode melhorar o desempenho e a experiência do usuário. A remoção de
- dependências de serviços em segundo plano e receptores de transmissão
- implícita registrados estatisticamente pode aprimorar a execução do aplicativo nesses dispositivos. Embora
- o Android N avance na redução de alguns desses problemas,
- recomendamos que você otimize os aplicativos para execução sem o uso desses
- processos em segundo plano.
-</p>
-
-<p>
- O Android N introduz alguns comandos adicionais do <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a> que
- podem ser usados para testar o comportamento do aplicativo de teste com esses processos em segundo plano desativados:
-</p>
-
-<ul>
- <li>Para simular condições em que transmissões implícitas e serviços em segundo plano
- não estão disponíveis, insira o seguinte comando:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>Para reativar transmissões implícitas e serviços em segundo plano, insira o
- seguinte comando:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
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
deleted file mode 100644
index df5c3a4..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,159 +0,0 @@
-page.title=ICU4J Android Framework APIs
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Neste documento:</h2>
-<ol>
- <li><a href="#relation">Relação com o ICU4J</a></li>
- <li><a href="#migration">Migrar para APIs android.icu do ICU4J </a></li>
- <li><a href="#licence">Licenciamento</a></li>
-</ol>
-
-<h2>Veja também</h2>
-<ol>
- <li>
- <a class="external-link" href="http://userguide.icu-project.org">Documentação para ICU4J</a>
- </li>
-
- <li>
- <a class="external-link" href="http://site.icu-project.org/#TOC-What-is-ICU-">Últimos padrões com suporte
- do ICU4J</a>
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- O ICU4J é um conjunto de bibliotecas Java de código aberto e amplamente usadas que fornecem suporte para Unicode
- e globalização para aplicativos de software. O Android N
- expõe um subconjunto de APIs do ICU4J na estrutura do Android para uso dos desenvolvedores de aplicativos
- no pacote {@code android.icu}. Essas APIs usam
- dados de localização presentes no dispositivo. Consequentemente, você pode reduzir o uso de APK
- ao não compilar as bibliotecas do ICU4J no seu APK. Em vez disso, pode
- simplesmente chamá-las na estrutura. (Neste caso, pode ser conveniente fornecer
- <a href="{@docRoot}google/play/publishing/multiple-apks.html">várias versões
- do seu APK</a> para que os usuários que tenham versões inferiores ao Android N
- possam fazer o download de uma versão do aplicativo que contenha as bibliotecas do ICU4J.)
-</p>
-
-<p>
- Este documento começa fornecendo informações básicas sobre os níveis mínimos da
- Android API necessários para oferecer suporte a essas bibliotecas. Em seguida, ele explica o que
- você deve saber sobre a implementação do ICU4J específica do Android. Por fim,
- ele informa como usar as APIs do ICU4J na estrutura do Android.
-</p>
-
-<h2 id="relation">Relação com o ICU4J</h2>
-
-<p>
- O Android N expõe um subconjunto de APIs do ICU4J por meio do pacote
- <code>android.icu</code>, não do <code>com.ibm.icu</code>. A
- estrutura do Android pode optar por não
- expor as APIs do ICU4J por diversos motivos. Por exemplo, o Android N não expõe
- algumas APIs obsoletas ou que a equipe do ICU ainda não declarou como
- estáveis. Conforme a equipe do ICU torna APIs obsoletas, o Android também as marcará
- como obsoletas, mas continuará incluindo-as.
-</p>
-
-<p class="table-caption"><strong>Tabela 1.</strong> Versões ICU e CLDR usadas
- no Android N.</p>
-<table>
-<tr>
-<th>Nível da Android API</th>
-<th>Versão ICU</th>
-<th>Versão CLDR</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>Algumas observações importantes:</p>
-
-<ul>
-<li>As APIs de estrutura do Android para ICU4J não incluem todas as APIs do ICU4J.</li>
-<li>Desenvolvedores de NDK devem saber que o Android ICU4C não é compatível.</li>
-<li>As APIs da estrutura do Android não substituem o suporte do Android para a
-<a href="{@docRoot}guide/topics/resources/localization.html">localização com
-recursos</a>.</li>
-</ul>
-
-<h2 id="migration">Migrar do pacote com.ibm.icu para o android.icu</h2>
-
-<p>
- Se você já estiver usando as APIs do ICU4J no seu aplicativo e as APIs
- <code>android.icu</code> atenderem aos seus requisitos, a migração para
- as APIs de estrutura exigirão que você altere as importações Java
- de <code>com.ibm.icu</code> para <code>android.icu</code>. Você, então, poderá
- remover sua própria cópia dos arquivos do ICU4J do APK.
-</p>
-
-<p class="note">
- <b>Observação</b>: As APIs de estrutura do ICU4J usam o namespace {@code android.icu}
- em vez de {@code com.ibm.icu}. Isso ocorre para evitar conflitos
- de namespace em APKs que contêm as próprias bibliotecas {@code com.ibm.icu}.
-</p>
-
-<h3 id="migrate-from-android">
- Migrar para APIs android.icu de outras APIs do Android SDK
-</h3>
-
-<p>
- Algumas classes dos pacotes <code>java</code> e <code>android</code> têm
- equivalentes para as encontradas no ICU4J. No entanto, o ICU4J frequentemente fornece um suporte
- mais amplo para padrões e linguagens.
-</p>
-<p>Alguns exemplos para você começar:</p>
-<table>
-<tr>
-<th>Classe</th>
-<th>Alternativas</th>
-</tr>
-<tr>
-<td><code>java.lang.Character</code> </td>
-<td><code>android.icu.lang.UCharacter</code> </td>
-</tr>
-<tr>
-<td><code>java.text.BreakIterator</code> </td>
-<td><code>android.icu.text.BreakIterator</code> </td>
-</tr>
-<tr>
-<td><code>java.text.DecimalFormat</code> </td>
-<td><code>android.icu.text.DecimalFormat</code> </td>
-</tr>
-<tr>
-<td><code>java.util.Calendar</code></td>
-<td>
-<code>android.icu.util.Calendar</code></td>
-</tr>
-<tr>
-<td><code>android.text.BidiFormatter</code>
- </td>
-<td><code>android.icu.text.Bidi</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateFormat</code>
- </td>
-<td><code>android.icu.text.DateFormat</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateUtils</code> </td>
-<td><code>android.icu.text.DateFormat</code>
-<code>android.icu.text.RelativeDateTimeFormatter</code>
-</td>
-</tr>
-</table>
-
-<h2 id="licence">Licenciamento</h2>
-
-<p>
- O ICU4J é liberado sob a licença do ICU. Para saber mais, consulte o <a class="external-link" href="http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">Guia do usuário do
- ICU.</a>
-</p>
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
deleted file mode 100644
index c00eb9b..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,221 +0,0 @@
-page.title=Idioma e localidades
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Neste documento:</h2>
-<ol>
- <li><a href="#preN">Desafios ao resolver recursos de idioma</a></li>
- <li><a href="#postN">Melhorias na estratégia de resolução de recursos</a></li>
- <li><a href="#design">Projetar seu aplicativo para oferecer suporte a
- localidades adicionais</a></li>
-
-</ol>
-
-</div>
-</div>
-
-<p>O Android N oferece suporte avançado para usuários multilíngues,
-permitindo que eles selecionem várias localidades nas configurações. O Android N
-fornece esse recurso ao expandir significativamente a quantidade de localidades com suporte
-e mudando a forma como o sistema resolve recursos. O novo método para resolver
-recursos é mais robusto e foi projetado para ser compatível com APKs existentes, mas
-tenha cuidado adicional para identificar comportamentos inesperados. Por exemplo, você
-deve testar para garantir que seu aplicativo assuma o idioma esperado por padrão. Além disso,
-se seu aplicativo oferecer suporte a vários idiomas, você deverá garantir que esse suporte funcione da maneira
-esperada. Por fim, garanta que seu aplicativo possa lidar corretamente
-com idiomas que ele não tenha sido explicitamente projetado para suportar.</p>
-
-<p>Este documento começa explicando a estratégia de resolução de recursos anterior ao
-Android N. Em seguida, ele descreve a estratégia
-de resolução de recursos aprimorada do Android N. Por fim, ele explica como aproveitar as vantagens
-do maior número de localidades para oferecer suporte a usuários multilíngues.</p>
-
-<h2 id="preN">Desafios ao resolver recursos de idioma</h2>
-
-<p>Antes do Android N, o Android nem sempre conseguia
- fazer a correspondência correta entre aplicativos e localidades do sistema.</p>
-
- <p>Considere, por exemplo, que temos a seguinte situação:</p>
- <ul>
- <li>o idioma padrão do seu aplicativo é {@code en_US} (inglês - EUA), mas ele também tem
- strings em espanhol localizadas em arquivos de recursos {@code es_ES}
-.</li>
- <li> Um dispositivo está definido para {@code es_MX}. </li>
-
-<p>Quando seu código Java usa strings como referência, o sistema carrega
-strings do arquivo de recursos padrão ({@code en_US}), mesmo que o aplicativo tenha recursos em
-espanhol localizados em {@code es_ES}. Isso acontece porque, quando
- não consegue encontrar uma correspondência exata, o sistema continua procurando recursos após extrair o
- código do país da localidade. Por fim, se não há correspondência, o sistema volta
- ao padrão, que é {@code en_US}. </p>
-
-
-<p>O sistema também usaria {@code en_US} como padrão se o usuário escolhesse um idioma
- não suportado pelo aplicativo, como o francês. Por exemplo:</p>
-
-<p class="table-caption" id="t-resource-res">
-<strong>Tabela 1.</strong> Resolução de recurso sem uma correspondência exata de localidade.
-</p>
-<table>
-<tbody>
-<tr>
-<th>Configurações do usuário</th>
-<th>Recursos do aplicativo</th>
-<th>Resolução do recurso</th>
-</tr>
-<tr>
-<td>fr_CH</td>
-<td>
-padrão (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
- <td>
-Tentativa de fr_CH => Falha<br>
-Tentativa de fr => Falha<br>
-Usar o padrão (en)
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>Neste exemplo, o sistema exibe strings em inglês sem saber
-se o usuário entende inglês. Esse comportamento é bastante comum
-hoje em dia. O Android N deverá reduzir de forma significativa a frequência de
-resultados como esse.</p>
-
-<h2 id="postN">Melhorias na estratégia de resolução de recursos</h2>
-<p>O Android N proporciona uma resolução de recurso mais robusta e
-encontra soluções alternativas melhores. No entanto, para agilizar a resolução e melhorar
- a capacidade de manutenção, você deve armazenar os recursos no dialeto pai mais comum.
- Por exemplo, se você estava armazenando recursos em espanhol no diretório {@code es-US}
- antes, mova-os para o diretório {@code es-419}, que contém o espanhol latino-americano.
- Da mesma maneira, se você tiver strings de recurso em uma pasta {@code en-GB}, renomeie
- essa pasta para {@code en-001} (inglês internacional), pois o pai mais comum
- para strings <code>en-GB</code> é {@code en-001}.
- O exemplo a seguir explica por que essas práticas melhoram o desempenho e
-a confiabilidade da resolução de recursos.</p>
-
-<h3>Exemplos de resolução de recursos</h3>
-
-<p>Com o Android N, o caso descrito na <strong>Tabela 1</strong> é resolvido
-de forma diferente:</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>Tabela 2.</strong> Uma estratégia de resolução melhorada para quando não há
-uma correspondência exata para a localidade.</p>
-<table>
-<tr>
-<th>Configurações do usuário</th>
-<th>Recursos do aplicativo</th>
-<th>Resolução do recurso</th>
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-</ol>
-</td>
-<td>
-padrão (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
-<td>
-Tentativa de fr_CH => Falha<br>
-Tentativa de fr => Falha<br>
-Tentativa de filhos de fr => fr_FR<br>
-Usar fr_FR
-</td>
-</tr>
-
-</table>
-
-
-<p>Agora o usuário obtém recursos em francês em vez de inglês. Esse exemplo também mostra
- por que você deve armazenar strings em francês em {@code fr} em vez de em {@code fr_FR}
- para o Android N. Nesse caso, a ação necessária é fazer a correspondência com o dialeto pai mais próximo,
- tornando a resolução mais rápida e mais previsível.</p>
-
-<p>Além dessa lógica de resolução melhorada, agora o Android oferece mais
- idiomas de usuário dentre os quais escolher. Vamos experimentar o exemplo acima novamente com o italiano
- especificado como um idioma de usuário adicional, mas sem suporte para francês no aplicativo. </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>Tabela 3.</strong> Resolução de recurso quando o aplicativo faz a correspondência apenas da
-segunda configuração de localidade preferencial do usuário.</p>
-<table>
-<tr>
-<th>Configurações do usuário</th>
-<th>Recursos do aplicativo</th>
-<th>Resolução do recurso</th>
-
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-<li> it_CH</li>
-</ol>
-</td>
-<td>
-padrão (en)<br>
-de_DE<br>
-es_ES<br>
-it_IT<br>
-</td>
-<td>
-Tentativa de fr_CH => Falha<br>
-Tentativa de fr => Falha<br>
-Tentativa de filhos de fr => Falha<br>
-Tentativa de it_CH => Falha<br>
-Tentativa de it => Falha<br>
-Tentativa de filhos de it => it_IT<br>
-Usar it_IT
-</td>
-
-</tr>
-
-</table>
-<p>O usuário obtém um idioma que ele compreende, mesmo que o aplicativo não tenha suporte para
-o francês.</p>
-
-
-<h2 id="design">Projetar seu aplicativo para oferecer suporte a localidades adicionais</h2>
-<h3>LocaleList API</h3>
-
-<p>O Android N adiciona uma nova API {@code LocaleList.getDefault()}
-que permite que os aplicativos façam uma consulta direta na lista de idiomas especificados por um usuário. Essa API
-permite que você crie um comportamento mais sofisticado
- para o aplicativo e uma exibição de conteúdo mais otimizada. Por exemplo, uma pesquisa
- pode mostrar resultados em vários idiomas com base nas configurações do usuário. Aplicativos de navegador
- podem evitar ofertas de tradução de páginas em um idioma que o usuário conhece
- e os aplicativos de teclado também podem ativar todos os layouts apropriados automaticamente. </p>
-
-<h3>Formatadores</h3>
-
-<p>Até o Android 6.0 (nível da API 23), o Android oferecia suporte para apenas uma ou duas localidades
- para muitos idiomas comuns
-(en, es, ar, fr, ru). Como só existiam poucas variantes de cada idioma,
-os aplicativos podiam armazenar alguns números e datas como strings no código
-nos arquivos de recurso. No entanto, com o conjunto mais amplo de localidades suportadas do Android,
-podem existir
-diferenças significativas nos formatos de data, hora, moeda e informações
-similares dentro da mesma localidade. Colocar formatos no código pode produzir uma
-experiência confusa para os usuários. Portanto, ao desenvolver para o Android N,
-não deixe de usar formatadores em vez de strings no código para números e datas.</p>
-
-<p>Um bom exemplo é o árabe, cujo suporte no Android N foi expandido de
-uma {@code ar_EG} para 27 localidades de árabe. Essas localidades podem compartilhar a maioria dos recursos,
-mas algumas preferem dígitos ASCII, enquanto outras preferem dígitos nativos. Por exemplo,
-quando você quer criar uma frase com uma variável em dígito, como
-“Choose a 4 digit pin”, use formatadores como mostrado abaixo:</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd b/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd
deleted file mode 100644
index 36988da..0000000
--- a/docs/html-intl/intl/pt-br/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,391 +0,0 @@
-page.title=Notificações
-page.tags=notificações
-helpoutsWidget=true
-page.image=/preview/images/notifications-card.png
-
-trainingnavtop=true
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<!-- table of contents -->
-<h2>Este documento inclui</h2>
-<ol>
- <li><a href="#direct">Resposta direta</a></li>
- <li><a href="#bundle">Notificações empacotadas</a></li>
- <li><a href="#custom">Visualizações personalizadas</a></li>
- <li><a href="#style">Estilo de mensagem</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>O Android N introduz diversas APIs novas que permitem que aplicativos publiquem
- notificações altamente visíveis e interativas.</p>
-
-<p>O Android N estende a API de notificação {@link android.support.v4.app.RemoteInput}
- atual para permitir respostas em linha em celulares. Esse recurso permite que os usuários
- respondam rapidamente na aba de notificações sem acessar o aplicativo.</p>
-
-<p>
- O Android N permite empacotar notificações semelhantes para
- exibição como única notificação. Para que isso seja possível, o Android N usa o método {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()} existente. Os usuários podem expandir todas as
- notificações, executando ações como responder e descartar em cada uma
- delas individualmente na aba de notificações.
-</p>
-
-<p>Por fim, o Android N também adiciona várias APIs que permitem usar decorações
- do sistema nas visualizações de notificação personalizadas do aplicativo. Essas APIs ajudam
- a garantir que as visualizações de notificação compartilhem uma apresentação consistente com os
- modelos padrão.</p>
-
-<p>Este documento destaca algumas principais mudanças que você deve considerar
- ao usar os novos recursos de notificação em aplicativos.</p>
-
-<h2 id="direct">Resposta direta</h2>
-
-<p>Com o recurso de resposta direta no Android N, os usuários podem responder
- rapidamente a mensagens de texto ou atualizar listas de tarefas diretamente na interface de
- notificação. Em um dispositivo portátil, a ação de resposta em linha aparece como botão adicional
- anexado à notificação. Quando um usuário responde pelo teclado, o sistema anexa
- a resposta de texto à intenção especificada como ação de notificação e envia a intenção ao aplicativo no dispositivo.
-
-
-<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
- {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
-<p class="img-caption">
- <strong>Figura 1.</strong>O Android N adiciona o botão de ação <strong>Reply</strong>
-.
-</p>
-
-<h3>Adição de ações de resposta em linha</h3>
-
-<p>Para criar uma ação de notificação com suporte à resposta direta:
-</p>
-
-<ol>
-<li>Crie uma instância de {@link android.support.v4.app.RemoteInput.Builder}
- que possa ser adicionada à ação de
- notificação. O construtor dessa classe aceita uma string, usada pelo sistema como chave
- da entrada de texto. Posteriormente, o aplicativo no dispositivo usará essa chave para recuperar o texto
- da entrada.
-
-<pre>
-// Key for the string that's delivered in the action's intent.
-private static final String KEY_TEXT_REPLY = "key_text_reply";
-String replyLabel = getResources().getString(R.string.reply_label);
-RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
- .setLabel(replyLabel)
- .build();
-</pre>
-</li>
-<li>Anexe o objeto {@link android.support.v4.app.RemoteInput}
- a uma ação usando <code>addRemoteInput()</code>.
-
-<pre>
-// Create the reply action and add the remote input.
-Notification.Action action =
- new Notification.Action.Builder(R.drawable.ic_reply_icon,
- getString(R.string.label), replyPendingIntent)
- .addRemoteInput(remoteInput)
- .build();
-</pre>
-</li>
-
-<li>Aplique a ação a uma notificação e emita a notificação.
-
-<pre>
-// Build the notification and add the action.
-Notification newMessageNotification =
- new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_message)
- .setContentTitle(getString(R.string.title))
- .setContentText(getString(R.string.content))
- .addAction(action))
- .build();
-
-// Issue the notification.
-NotificationManager notificationManager =
- NotificationManager.from(mContext);
-notificationManager.notify(notificationId, newMessageNotification);
-
-</pre>
-</li>
-
-</ol>
-
-
-<p> O sistema solicita que o usuário informe uma resposta quando acionar a
- ação de notificação. </p>
-
-<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
- {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Figura 2.</strong> O usuário insere texto na aba de notificações.
-</p>
-
-<h3>
- Recuperação da entrada do usuário na resposta em linha
-</h3>
-
-<p>
- Para receber a entrada do usuário da interface de notificação para a atividade
- declarada na intenção de ação de resposta:
-</p>
-
-<ol>
- <li>Chame {@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()} passando a intenção da ação de notificação como
- parâmetro de entrada. Esse método retorna um {@link android.os.Bundle} que
- contém a resposta de texto.
-
- <pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
- </li>
-
- <li>Consulte a resposta usando a chave de resultado (fornecida ao construtor {@link
- android.support.v4.app.RemoteInput.Builder}). Você pode concluir
- este processo e recuperar o texto de entrada criando um método, como no
- snippet de código a seguir:
-
- <pre>
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-</pre>
- </li>
-
- <li>Crie e emita outra notificação usando o mesmo código que
- você forneceu para a notificação anterior. O indicador de progresso
- desaparece da interface de notificação para informar os usuários que houve uma resposta
- bem-sucedida. Ao trabalhar com esta nova notificação, use o contexto que é passado
- ao método {@code onReceive()} do receptor.
-
- <pre>
-// Build a new notification, which informs the user that the system
-// handled their interaction with the previous notification.
-Notification repliedNotification =
- new Notification.Builder(context)
- .setSmallIcon(R.drawable.ic_message)
- .setContentText(getString(R.string.replied))
- .build();
-
-// Issue the new notification.
-NotificationManager notificationManager =
- NotificationManager.from(context);
-notificationManager.notify(notificationId, repliedNotification);
-</pre>
- </li>
-</ol>
-
-<p>
- Para aplicativos interativos, como bate-papos, pode ser útil incluir contexto
- adicional ao lidar com texto recebido. Por exemplo, estes aplicativos podem exibir
- várias linhas de histórico de bate-papo. Quando o usuário responde por {@link
- android.support.v4.app.RemoteInput}, você pode atualizar o histórico de respostas
- usando o método {@code setRemoteInputHistory()}.
-</p>
-
-<p>
- A notificação precisará ser atualizada ou cancelada depois que o aplicativo tiver
- recebido a entrada remota. Quando o usuário responde a uma atualização remota
- usando uma Resposta direta,
- não cancele a notificação. Em vez disso, atualize a notificação para exibir a resposta do usuário.
-Para notificações que usam {@code MessagingStyle}, adicione
- a resposta como última mensagem. Ao usar outros modelos, você pode
-anexar a resposta do usuário ao histórico da entrada remota.
-</p>
-
-<h2 id="bundle">Notificações empacotadas</h2>
-
-<p>O Android N oferece aos desenvolvedores uma nova forma de representar
- uma fila de notificações: <i>notificações empacotadas</i>. Essa forma é semelhante ao recurso
- <a href="{@docRoot}training/wearables/notifications/stacks.html">Pilhas
- de Notificações</a> no Android Wear. Por exemplo, se o aplicativo criar notificações
- para mensagens recebidas, quando mais de uma mensagem for recebida, empacote as
- notificações como um único grupo. Você pode
- usar o método existente {@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()} para empacotar notificações semelhantes.</p>
-
-<p>
- Um grupo de notificações impõe uma hierarquia nas notificações que o compõe.
- Na parte superior dessa hierarquia, está a notificação pai, que exibe informações
- resumidas para o grupo. O usuário pode expandir
- progressivamente o grupo de notificações e o sistema mostra mais informações à medida que o
- usuário aumenta o detalhamento. Quando o usuário expande o pacote, o sistema revela
- mais informações para todas as notificações filhas. Quando o usuário
- expande uma das notificações, o sistema revela todo o seu conteúdo.
-</p>
-
-<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
- {@docRoot}preview/images/bundles_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Figura 3.</strong> O usuário pode expandir progressivamente o grupo
- de notificações.
-</p>
-
-<p class="note">
- <strong>Observação:</strong> Se o mesmo aplicativo enviar quatro ou mais notificações
- e não especificar um agrupamento, o
- sistema as agrupará automaticamente.
-</p>
-
-<p>Para saber como adicionar notificações a um grupo, consulte
-<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Adicionar
-cada notificação a um grupo</a>.</p>
-
-
-<h3 id="best-practices">Práticas recomendadas para notificações empacotadas</h3>
-<p>Esta seção oferece diretrizes sobre quando usar grupos de notificações em vez
- de notificações {@link android.app.Notification.InboxStyle InboxStyle}
- que foram disponibilizadas em versões anteriores da
- plataforma Android.</p>
-
-<h3>Quando usar notificações empacotadas</h3>
-
-<p>Você deve usar grupos de notificações apenas quando todas as condições a seguir forem
- verdadeiras para o seu caso de uso:</p>
-
-<ul>
- <li>As notificações filhas são notificações completas e podem ser exibidas
- individualmente sem necessidade de um resumo do grupo.</li>
- <li>A exibição individual de notificações filhas pode ser vantajosa. Por
- exemplo:
- </li>
- <ul>
- <li>Elas são acionáveis, sem ações específicas para cada filha.</li>
- <li>Há mais informações na filha que as que o usuário quer ler.</li>
- </ul>
-</ul>
-
-<p>Os exemplos de bons casos de uso para grupos de notificações incluem: um aplicativo de mensagens
- exibindo uma lista de mensagens recebidas ou um aplicativo de e-mail exibindo uma lista de
- e-mails recebidos.</p>
-
-<p>
-Os exemplos de casos em que uma única notificação é preferível
- incluem mensagens individuais de uma única pessoa ou uma representação em lista
- de itens de texto com uma única linha. Você pode usar
-({@link android.app.Notification.InboxStyle InboxStyle} ou
- {@link android.app.Notification.BigTextStyle BigTextStyle}) para
- isso.
-</p>
-
-<h3 id ="post">Exibição de notificações empacotadas</h3>
-
-<p>
- O aplicativo deve sempre publicar um resumo do grupo, mesmo se o grupo tiver apenas uma
- única filha. O sistema suprimirá o resumo e exibirá diretamente a
- notificação filha se ela contiver apenas uma única notificação. Isso garante
- que o sistema possa oferecer uma experiência consistente quando o usuário deslizar por
- filhas de um grupo.
-</p>
-
-<p class="note">
- <strong>Observação:</strong> esta versão do Android N ainda não
- elimina o resumo de grupos de notificações contendo uma única filha. Essa
- funcionalidade será adicionada em uma versão posterior do Android N.
-</p>
-
-<h3>Observação de notificações</h3>
-
-<p>Embora o sistema normalmente exiba notificações filhas como grupo, você pode
- configurá-las para exibição temporária como
- <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
- notificações heads-up</a>. Esse recurso é particularmente útil porque permite
- acesso imediato à filha mais recente e a suas ações associadas.
-</p>
-
-
-<h3>Compatibilidade com versões anteriores</h3>
-
-<p>
- Os grupos de notificações e as entradas remotas fazem parte da API {@link
- android.app.Notification} desde o Android 5.0 (nível da API 21) para oferecer suporte a
- dispositivos Android Wear. Se você já criou notificações com essas APIs,
- a única ação necessária é verificar se o comportamento do aplicativo corresponde
- às diretrizes descritas acima e considerar a implementação de {@code
- setRemoteInputHistory()}.
-</p>
-
-<p>
- Para compatibilidade com versões anteriores, as mesmas APIs estão disponíveis com
- a classe {@link android.support.v4.app.NotificationCompat} da biblioteca de suporte,
- permitindo criar notificações que funcionem em versões anteriores do
- Android. Em celulares e tablets, os usuários somente visualizam as notificações resumidas.
- Portanto, um aplicativo deve ter uma notificação no estilo de caixa de entrada ou equivalente,
- representativa de todo o conteúdo de informações do grupo. Como os dispositivos Android
- Wear permitem que os usuários vejam todas as notificações filhas, mesmo em níveis
- de plataforma antigos, você deve criar notificações filhas independentemente do nível
- da API.
-</p>
-
-<h2 id="custom"> Visualizações personalizadas</h2>
-<p>Começando com o Android N, é possível personalizar visualizações de notificação e
- continuar obtendo decorações de sistema, como cabeçalhos de notificação, ações e layouts
- expansíveis.</p>
-
-<p>Para ativar esses recursos, o Android N adiciona as seguintes APIs para aplicar estilo à
- visualização personalizada:</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> Aplica estilo a notificações que não sejam notificações
- de mídia.</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> Aplica estilo a notificações de mídia.</dd>
-</dl>
-
-<p>Para usar essa nova API, chame o método {@code setStyle()}, passando o
- estilo de visualização personalizada desejado.</p>
-
-<p>O snippet mostra como construir um objeto de notificação personalizada com o método
-{@code DecoratedCustomViewStyle()}.</p>
-
-<pre>
-Notification notification = new Notification.Builder()
- .setSmallIcon(R.drawable.ic_stat_player)
- .setLargeIcon(albumArtBitmap))
- .setCustomContentView(contentView);
- .setStyle(new Notification.DecoratedCustomViewStyle())
- .build();
-
-</pre>
-
-<h2 id="style">Estilo de mensagens</h2>
-<p>
- O Android N traz uma nova API para personalização do estilo de uma notificação.
- Usando a classe <code>MessageStyle</code>, você pode alterar vários
-rótulos exibidos na notificação, incluindo o título da conversa,
- mensagens adicionais e a visualização de conteúdo para a notificação.
-</p>
-
-<p>
- O seguinte snippet de código demonstra como personalizar o estilo de uma
- notificação usando a classe <code>MessageStyle</code>.
-</p>
-
-<pre>
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-</pre>
diff --git a/docs/html-intl/intl/ru/about/versions/nougat/index.jd b/docs/html-intl/intl/ru/about/versions/nougat/index.jd
index 9bb56ba..0365061 100644
--- a/docs/html-intl/intl/ru/about/versions/nougat/index.jd
+++ b/docs/html-intl/intl/ru/about/versions/nougat/index.jd
@@ -1,78 +1,62 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="предварительная версия", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<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 N Developer Preview</h1>
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- Подготовьтесь к выходу Android N!
+ Подготовьтесь к выходу Android Nougat!
<strong>Протестируйте свои приложения</strong> на Nexus и других устройствах. Поддержите нововведения
системы, позволяющие <strong>снизить потребление энергии и памяти</strong>.
Добавьте в свои приложения <strong>многооконный режим</strong>,
<strong>возможность прямой отправки ответов из уведомлений</strong> и другие функции.
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
Начало работы
- </a><!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ </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}images/home/n-preview-hero.png" srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
+ srcset="{@docRoot}images/home/n-preview-hero.png 1x,
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
+ data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
+ data-maxResults="3"></div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Сообщить о проблеме
</a>
</li>
<li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- См. примечания к выпуску
- </a>
- </li>
- <li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Вступить в сообщество разработчиков
@@ -82,39 +66,45 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
+<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>
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Сообщить о проблеме
- </a></div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- См. примечания к выпуску
- </a></div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Вступить в сообщество разработчиков
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
-<section class="dac-section dac-light"><div class="wrap">
- <h1 class="dac-section-title">Ресурсы</h1>
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
- Важная информация, которая поможет вам подготовить ваши приложения для работы в Android N.
+ New Android capabilities and the right way to use them in your apps.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
+ 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-light" id="resources"><div class="wrap">
+ <h1 class="dac-section-title">Ресурсы</h1>
+ <div class="dac-section-subtitle">
+ Важная информация, которая поможет вам подготовить ваши приложения для работы в Android Nougat.
+ </div>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ru/index.jd b/docs/html-intl/intl/ru/index.jd
index e917a8d..83a506e 100644
--- a/docs/html-intl/intl/ru/index.jd
+++ b/docs/html-intl/intl/ru/index.jd
@@ -5,49 +5,36 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-invert" style="background-color:#455A64">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="col-7of16 col-push-9of16" style="padding-left:2em;">
- <a href="{@docRoot}preview/index.html">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Get ready for the next version of Android!
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
- behaviors to <strong>save power and memory</strong>.
+<section class="dac-expand dac-hero" style="background-color:#b2dfdb;">
+ <div class="wrap" style="max-width:1000px;margin-top:0">
+ <div class="col-7of16 col-push-8of16">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <h1 class="dac-hero-title" style="color:#004d40">Android 7.0 Nougat!</h1>
+ <p class="dac-hero-description" style="color:#004d40">
+ <strong>Android 7.0 Nougat is here!</strong>
+ Get your apps ready for the latest version of Android, with new system
+ behaviors to <strong>save battery and memory</strong>.
Extend your apps with <strong>multi-window UI</strong>,
<strong>direct reply notifications</strong> and more.
</p>
- <a class="dac-hero-cta" href="/preview/index.html">
- <span class="dac-sprite dac-auto-chevron"></span>
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron" style="background-color:#b2dfdb"></span>
Learn more
- </a><!--<br>
- <a class="dac-hero-cta" href="/preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Developer Preview (final SDK)
- </a><br>-->
+ </a>
+ </a>
</a>
</div>
- <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:0em;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,
- /images/home/n-preview-hero_2x.png 2x">
+ <div class="col-6of16 col-pull-6of16 dac-hero-figure" style="padding-left:1em;padding-top:1em;">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/nougat_bg.jpg"
+ srcset="{@docRoot}images/home/nougat_bg.jpg 1x,
+ {@docRoot}images/home/nougat_bg_2x.jpg 2x">
</a>
</div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
<i class="dac-sprite dac-arrow-down-gray"></i>
@@ -75,28 +62,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
- <i class="dac-sprite dac-arrow-down-gray"></i>
- </a>
- <div class="actions">
- <div><a href="{@docRoot}sdk/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Get the SDK
- </a></div>
- <div><a href="{@docRoot}samples/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Browse Samples
- </a></div>
- <div><a href="{@docRoot}distribute/stories/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Watch Stories
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light" id="build-apps"><div class="wrap">
<h1 class="dac-section-title">Build Beautiful Apps</h1>
<div class="dac-section-subtitle">
diff --git a/docs/html-intl/intl/ru/preview/download_mp2.jd b/docs/html-intl/intl/ru/preview/download_mp2.jd
deleted file mode 100644
index 13872d1..0000000
--- a/docs/html-intl/intl/ru/preview/download_mp2.jd
+++ /dev/null
@@ -1,359 +0,0 @@
-page.title=Загрузки
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">Прежде чем приступить к загрузке и установке компонентов пакета SDK Android Preview,
-примите следующие положения и условия.</p>
-
- <h2 class="norule">Положения и условия</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-Это лицензионное соглашение для пакета SDK Android Preview (далее «Лицензионное соглашение»).
-
-1. Введение
-
-1.1. Лицензия на пакет SDK Android Preview (далее по тексту настоящего Лицензионного соглашения – «Preview», который включает системные файлы Android, пакеты API-интерфейсов и файлы библиотеки Preview, если такие доступны) передается в соответствии с положениями настоящего Лицензионного соглашения. Настоящее Лицензионное соглашение является юридически обязывающим договором между компанией Google и любым лицом, использующим Preview.
-
-1.2. В настоящем Лицензионном соглашении термин «Android» означает набор программного обеспечения Android для устройств, предлагаемый к использованию в рамках проекта Android Open Source Project, который доступен на веб-сайте http://source.android.com/ (сведения, размещенные на этом сайте, могут периодически обновляться).
-
-1.3. Под термином «Google» понимается корпорация Google Inc., главный офис которой находится по адресу 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States (США).
-
-2. Принятие лицензионного соглашения
-
-2.1. Использование Preview возможно только после принятия условий настоящего Лицензионного соглашения. Запрещается использовать Preview, если вы не согласны с указанными в настоящем документе условиями и положениями.
-
-2.2. Нажатие кнопки принятия условий и/или использование Preview означает, что вы согласны с положениями настоящего Лицензионного соглашения.
-
-2.3. Вы не вправе использовать Preview и принимать условия данного Лицензионного соглашения, если по законам США или иных стран, включая страну вашего проживания или использования Preview, запрещается передавать Preview в ваш адрес.
-
-2.4. Если вы используете Preview в рамках своей компании или организации, вы соглашаетесь взять на себя обязательства по соблюдению настоящего Лицензионного соглашения от имени своего работодателя или другого юридического лица, и вы тем самым подтверждаете и гарантируете, что обладаете полными юридическими полномочиями связать вашего работодателя или иное подобное юридическое лицо обязательствами по настоящему Лицензионному соглашению. Если вы не обладаете необходимыми полномочиями, вы не вправе принимать указанные в настоящем документе условия и положения или использовать Preview от имени вашего работодателя или другого юридического лица.
-
-3. Лицензия на Preview от Google
-
-3.1. В соответствии с условиями настоящего Лицензионного соглашения Google предоставляет вам ограниченную, бесплатную и неэксклюзивную лицензию без права передачи и подлежащую отмене, на использование Preview, лично или в рамках своей компании или организации, исключительно в целях разработки приложений для платформы Android.
-
-3.2. Вы соглашаетесь с тем, что Google или третьим сторонам принадлежат все юридические и имущественные права, а также правовой интерес в отношении Preview, в том числе любые права на объекты интеллектуальной собственности, которые имеются в Preview. Термин «Права на интеллектуальную собственность» означает все возможные права в рамках патентного права, авторского права, закона о коммерческой тайне, закона о товарных знаках, а также иные возможные имущественные права. Google оставляет за собой все права, не предоставленные вам в явном виде.
-
-3.3. Вам запрещается использовать Preview в любых целях, которые однозначно не определены в настоящем Лицензионном соглашении. За исключением случаев, предусмотренных применимыми сторонними лицензиями, вам запрещается: (a) копировать (кроме случаев резервного копирования), изменять, адаптировать, повторно распространять, декомпилировать, осуществлять инженерный анализ, деассемблировать или создавать производные элементы Preview или иной его части; а также (b) загружать любую часть Preview в мобильные телефоны или иные устройства, помимо персонального компьютера, объединять любые части Preview с другим программным обеспечением, распространять любое программное обеспечение или устройства, содержащие части Preview.
-
-3.4. Вы соглашаетесь с тем, что не будете предпринимать никаких действий, которые прямо или косвенно могут привести к фрагментированию платформы Android, включая помимо прочего распространение набора средств разработки программного обеспечения, полученного из Preview, участие в создании таких средств и содействие их продвижению в любой форме.
-
-3.5. Использование, воспроизведение и распространение компонентов Preview, на которые распространяется лицензия на программное обеспечение с открытым исходным кодом, регулируются исключительно положениями и условиями такой лицензии на программное обеспечение с открытым исходным кодом, а не настоящим Лицензионным соглашением. Вы соглашаетесь обеспечивать хорошую репутацию получателя лицензии в отношении таких лицензии на программное обеспечение с открытым исходным кодом в рамках всех предоставленных ему прав, а также не допускать каких-либо действий, которые могут привести к аннулированию, приостановлению или нарушению таких прав
-
-3.6. Вы соглашаетесь с тем, что форма и содержание Preview , предоставляемого Google, могут быть изменены без предварительного уведомления, а также с тем, что будущие версии Preview могут оказаться несовместимыми с приложениями, разработанными в предыдущих версиях Preview. Вы соглашаетесь с тем, что Google вправе по собственному усмотрению и без предварительного уведомления прекратить (временно или навсегда) предоставление Preview (или любых функций в составе Preview) вам или пользователям.
-
-3.7. Ни одна из частей настоящего Лицензионного соглашения не предусматривает предоставления вам права использовать любые торговые наименования, товарные знаки, знаки обслуживания, логотипы, имена доменов или иные отличительные фирменные знаки, принадлежащие Google.
-
-3.8. Вы соглашаетесь с тем, что обязуетесь не удалять, не скрывать или не изменять любые уведомления об имущественных правах (включая уведомления об авторских правах и товарных знаках), которые могут сопровождать Preview или содержаться в нем.
-
-4. Использование Preview
-
-4.1. Компания Google выражает согласие с тем, что ни по какому положению настоящего Лицензионного соглашения не получает от вас (или ваших лицензиаров) каких-либо юридических и имущественных прав, а также правового интереса в отношении любых программных приложений, разработанных вами с помощью Preview, включая любые права на объекты интеллектуальной собственности, которые имеются в таких приложениях.
-
-4.2. Вы соглашаетесь использовать Preview и создавать приложения исключительно в целях, предусмотренных (a) настоящим Лицензионным соглашением и (b) любым применимым законом, нормативным актом или общепринятыми правилами или рекомендациями в соответствующей юрисдикции (включая любые законы, касающиеся экспорта данных или программного обеспечения из США или иных соответствующих стран, а также импорта в них).
-
-4.3. Вы соглашаетесь с тем, что при использовании Preview для разработки приложений вы обязуетесь обеспечивать конфиденциальность и защищать юридические права пользователей. В случае, если пользователи предоставляют вам свои имена, пароли или иные данные для входа либо свои персональные данные, вы обязуетесь уведомить пользователей о том, что такая информация будет присутствовать в вашем приложении, и вы также обязуетесь предоставить пользователям юридически соответствующие уведомление о конфиденциальности и средства правовой защиты. Если в вашем приложении хранится личная или конфиденциальная информация, предоставленная пользователями, вы обязуетесь обеспечить ее надлежащую защиту. Если пользователь предоставляет вам сведения о своей учетной записи Google, то ваше приложение может использовать такую информацию для доступа к учетной записи Google пользователя только при условии, что пользователь предоставил вам разрешение на это, и только в тех целях, которые обозначил пользователь.
-
-4.4. Вы соглашаетесь с тем, что обязуетесь не использовать Preview для любого рода деятельности, в том числе для разработки или распространения приложений, в целях нарушения работы и повреждения серверов, сетей или иной собственности или служб Google или любой третьей стороны.
-
-4.5. Вы соглашаетесь с тем, что несете единоличную ответственность (и признаете, что компания Google не несет ответственности ни перед вами, ни перед любой третьей стороной) за любые данные, содержимое или ресурсы, которые вы создаете, передаете или демонстрируете посредством Android и/или приложений для Android, а также за любые последствия ваших действий, связанных с этим (в том числе за любые убытки и любой ущерб, которые могут быть причинены Google).
-
-4.6. Вы соглашаетесь с тем, что несете единоличную ответственность (и признаете, что компания Google не несет ответственности ни перед вами, ни перед любой третьей стороной) за любое несоблюдение обязательств по настоящему Лицензионному соглашению, обязательств по любому применимому договору с третьей стороной или предусмотренных Условиями и положениями, за нарушение любых применимых законов или нормативных актов, а также за любые последствия ваших действий, связанных с таким нарушением (в том числе за любые убытки и любой ущерб, которые могут быть причинены Google).
-
-4.7 Preview находится на стадии разработки, поэтому ваши отзывы и результаты тестирования являются важной частью процесса разработки. Используя Preview, вы признаете, что реализация некоторых функций по-прежнему находится на этапе разработки и вам не следует рассчитывать на полную функциональность стабильной версии. Вы соглашаетесь не распространять или предоставлять любые приложения, использующие Preview, поскольку поддержка Preview будет прекращена после выпуска официальной версии пакета SDK Android.
-
-5. Ваши учетные данные разработчика
-
-5.1. Вы соглашаетесь с тем, что несете ответственность за обеспечение конфиденциальности любых учетных данных разработчика, которые компания Google может вам предоставить или которые вы можете самостоятельно выбрать, а также с тем, что вы несете единоличную ответственность за все приложения, разработанные с использованием ваших учетных данных разработчика.
-
-6. Конфиденциальность и личная информация
-
-6.1. В целях постоянного совершенствования и улучшения Preview компания Google вправе собирать определенные статистические данные об использовании программного обеспечения, включая уникальный идентификатор, связанный IP-адрес, номер версии программного обеспечения, а также сведения об используемых в Preview инструментах и/или службах и способах их применения. Перед тем как любые из таких данных будут отправлены в Google, в Preview отобразится соответствующее уведомление с просьбой дать свое согласие. В случае вашего отказа предоставить такие сведения соответствующие данные собираться не будут.
-
-6.2. Собранные данные изучаются в обобщенном виде с целью улучшения Preview и хранятся в соответствии с Политикой конфиденциальности Google, которая опубликована на веб-сайте по адресу http://www.google.com/policies/privacy/.
-
-7. Сторонние приложения
-
-7.1. Если вы используете Preview для запуска приложений, разработанных третьими сторонами или получающих доступ к данным, содержимому или ресурсам, предоставляемым третьей стороной, вы соглашаетесь с тем, что Google не несет ответственности за такие приложения, данные, содержимое или ресурсы. Вы осознаете, что единоличную ответственность за все данные, содержимое или ресурсы, доступ к которым вы можете получить посредством таких приложений третьих сторон, несет лицо, предоставившее их, а также то, что Google не несет ответственности за любые убытки или любой ущерб, которые могут возникнуть в результате использования вами любых таких сторонних приложений, данных, содержимого или ресурсов и в результате обращения к ним.
-
-7.2. Вы должны быть осведомлены о том, что данные, содержимое и ресурсы, предоставляемые вам посредством таких сторонних приложений, могут быть защищены правами на объекты интеллектуальной собственности, принадлежащие предоставляющим их лицам (или иным лицам либо компаниям от их имени). Вам запрещается изменять, сдавать в аренду, передавать, продавать, распространять такие данные, содержимое или ресурсы (полностью или частично), а также создавать на их основе производные элементы, если у вас нет на это разрешения от соответствующих владельцев.
-
-7.3. Вы осознаете, что использование вами таких сторонних приложений, данных или ресурсов может регулироваться отдельными условиями, заключенными между вами и соответствующей третьей стороной.
-
-8. Использование API-интерфейсов Google
-
-8.1. API-интерфейсы для получения данных Google.
-
-8.1.1. В случае использования вами любых API для получения данных из Google вы осознаете, что такие данные могут быть защищены правами на объекты интеллектуальной собственности, принадлежащие Google или предоставляющим их сторонам (или иным лицам либо компаниям от их имени). Использование вами подобных API может регулироваться дополнительными Условиями использования. Вам запрещается изменять, сдавать в аренду, передавать, продавать, распространять такие данные (полностью или частично), а также создавать на их основе производные элементы, если это не разрешено соответствующими Условиями использования.
-
-8.1.2. Если вы используете какие-либо API-интерфейсы для получения данных пользователя из Google, вы осознаете и соглашаетесь с тем, что вы обязуетесь получать такие данные исключительно с прямого согласия пользователя и только в тех целях, которые обозначил пользователь.
-
-9. Прекращение действия Лицензионного соглашения
-
-9.1 Настоящее Лицензионное соглашение остается в силе до тех пор, пока его действие не будет прекращено вами или Google, как указано ниже.
-
-9.2. Если вы желаете прекратить действие настоящего Лицензионного соглашения, вы вправе сделать это, прекратив использование Preview и любых соответствующих учетных данных разработчика.
-
-9.3. Google вправе в любое время прекратить действие настоящего Лицензионного соглашения, отправив предварительное уведомление или без него.
-
-9.4 Действие настоящего Лицензионного соглашения автоматически прекращается без предварительного уведомления или выполнения иных действий сразу после любого из следующих событий:
-(A) компания Google прекращает предоставление Preview или определенных частей Preview пользователям на территории страны, в которой вы проживаете или используете услуги компании;
-(B) компания Google выпускает окончательную версию SDK Android.
-
-9.5 В случае прекращения действия настоящего Лицензионного соглашения прекращается действие лицензии, предоставленной в рамках Лицензионного соглашения, и вам следует незамедлительно прекратить любое использование Preview, тогда как положения, изложенные в разделах 10, 11, 12 и 14 продолжают действовать бессрочно.
-
-10. ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ
-
-10.1. ВЫ ЧЕТКО ОСОЗНАЕТЕ И БЕЗОГОВОРОЧНО СОГЛАШАЕТЕСЬ С ТЕМ, ЧТО ВЫ ИСПОЛЬЗУЕТЕ PREVIEW ИСКЛЮЧИТЕЛЬНО НА СВОЙ СТРАХ И РИСК И ЧТО PREVIEW ПРЕДОСТАВЛЯЕТСЯ ВАМ НА УСЛОВИЯХ «КАК ЕСТЬ» И «КАК ДОСТУПНО» БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ СО СТОРОНЫ КОМПАНИИ GOOGLE.
-
-10.2 ИСПОЛЬЗОВАНИЕ ВАМИ PREVIEW И ЗАГРУЗКА ЛЮБЫХ МАТЕРИАЛОВ И ИХ ПОЛУЧЕНИЕ ИНЫМ СПОСОБОМ С ПОМОЩЬЮ PREVIEW ВЫПОЛНЯЕТСЯ ПО ВАШЕМУ СОБСТВЕННОМУ УСМОТРЕНИЮ НА СВОЙ СТРАХ И РИСК. ВСЯ ОТВЕТСТВЕННОСТЬ ЗА ЛЮБОЙ УЩЕРБ, ПРИЧИНЕННЫЙ ВАШЕЙ ВЫЧИСЛИТЕЛЬНОЙ СИСТЕМЕ ИЛИ ДРУГОМУ ОБОРУДОВАНИЮ, А ТАКЖЕ ЗА ПОТЕРЮ ДАННЫХ, ВЫЗВАННУЮ ПОДОБНЫМ ИСПОЛЬЗОВАНИЕМ, ВОЗЛАГАЕТСЯ НА ВАС. НЕ ОГРАНИЧИВАЯ ВЫШЕСКАЗАННОЕ, ВЫ ПОНИМАЕТЕ, ЧТО PREVIEW НЕ ЯВЛЯЕТСЯ СТАБИЛЬНЫМ ВЫПУСКОМ И МОЖЕТ СОДЕРЖАТЬ ОШИБКИ, ДЕФЕКТЫ И УЯЗВИМОСТИ В СИСТЕМЕ БЕЗОПАСНОСТИ, КОТОРЫЕ МОГУТ ПРИВЕСТИ К СЕРЬЕЗНЫМ ПОВРЕЖДЕНИЯМ, ВКЛЮЧАЯ ПОЛНУЮ И БЕЗВОЗВРАТНУЮ ПОТЕРЮ РАБОТОСПОСОБНОСТИ ВАШЕГО КОМПЬЮТЕРА ИЛИ ИНОГО УСТРОЙСТВА.
-
-10.3. КОМПАНИЯ GOOGLE БЕЗОГОВОРОЧНО ОТКАЗЫВАЕТСЯ ОТ ЯВНЫХ И НЕЯВНЫХ ГАРАНТИЙ И УСЛОВИЙ ЛЮБОГО РОДА, ВКЛЮЧАЯ ПОМИМО ПРОЧЕГО НЕЯВНЫЕ ГАРАНТИИ И УСЛОВИЯ ТОВАРНОГО СОСТОЯНИЯ, ПРИГОДНОСТИ ДЛЯ ОПРЕДЕЛЕННОЙ ЦЕЛИ И ОТСУТСТВИЯ НАРУШЕНИЙ ПРАВ СОБСТВЕННОСТИ.
-
-11. ОГРАНИЧЕНИЕ ОТВЕТСТВЕННОСТИ
-
-11.1. ВЫ ЧЕТКО ОСОЗНАЕТЕ И БЕЗОГОВОРОЧНО СОГЛАШАЕТЕСЬ С ТЕМ, ЧТО КОМПАНИЯ GOOGLE, ЕЕ ДОЧЕРНИЕ И АФФИЛИРОВАННЫЕ КОМПАНИИ И ЛИЦЕНЗИАРЫ НЕ НЕСУТ ПЕРЕД ВАМИ ОТВЕТСТВЕННОСТИ, НЕЗАВИСИМО ОТ ЕЕ ПРИЧИНЫ И ВИДА, ЗА КАКИЕ-ЛИБО ПРЯМЫЕ, КОСВЕННЫЕ, СЛУЧАЙНЫЕ, СПЕЦИАЛЬНЫЕ, ОПОСРЕДОВАННЫЕ И ШТРАФНЫЕ УБЫТКИ, ПОНЕСЕННЫЕ ВАМИ, ВКЛЮЧАЯ ПОТЕРЮ ДАННЫХ, ВНЕ ЗАВИСИМОСТИ ОТ ТОГО, БЫЛА ЛИ КОМПАНИЯ GOOGLE ИЛИ ЕЕ ПРЕДСТАВИТЕЛИ ИЗВЕЩЕНЫ О ВОЗМОЖНОСТИ ТАКОГО УЩЕРБА.
-
-12 Освобождение от ответственности
-
-12.1. В максимально допустимой законом степени вы соглашаетесь защищать, освобождать от ответственности и возможных претензий компанию Google, ее аффилированные компании и их соответствующих руководителей, служащих, сотрудников и агентов от всех возможных правовых требований, действий, судебных исков или разбирательств, а также от всех возможных убытков, обязательств, ущерба, издержек и расходов (включая обоснованные вознаграждения для адвокатов), возникающих в связи (a) с использованием вами Preview, (b) любыми приложениями, разрабатываемыми вами с помощью Preview и нарушающими любые права на объекты интеллектуальной собственности любого лица, а также порочащие любое лицо либо нарушающие права таких лиц на публичность и конфиденциальность, а также (c) в связи с любым несоблюдением вами положений настоящего Лицензионного соглашения.
-
-13. Изменения в Лицензионном соглашении
-
-13.1. Компания Google вправе вносить изменения в настоящее Лицензионное соглашение по мере выхода новых версий Preview. При внесении изменений Google создает новую версию Лицензионного соглашения и размещает ее на веб-сайте, на котором размещен Preview.
-
-14. Общие правовые условия
-
-14.1. Настоящее Лицензионное соглашение составляет полный текст юридического соглашения между вами и компанией Google, регулирует использование вами Preview (за исключением услуг, которые Google предоставляет на основании отдельного письменного соглашения) и полностью заменяет собой все предыдущие соглашения между вами и компанией Google в отношении Preview.
-
-14.2. Вы соглашаетесь с тем, что отсутствие каких-либо действий или судебных исков со стороны Google, направленных на соблюдение каких-либо правовых норм или исполнение средств правовой защиты, установленных настоящим Лицензионным соглашением (или которыми Google обладает в соответствии с каким-либо действующим законом), не означает отказ компании Google от своих прав и не препятствует компании Google использовать эти права или средства защиты.
-
-14.3. Если какой-либо судебный орган, уполномоченный рассматривать этот вопрос, признает недействительность какого-либо положения данного Лицензионного соглашения, то соответствующее положение будет исключено из Лицензионного соглашения с сохранением действия всех остальных его положений. Остальные положения Лицензионного соглашения по-прежнему будут действовать, и их соблюдение может обеспечиваться в судебном порядке.
-
-14.4. Вы признаете и соглашаетесь с тем, что все участники группы компаний, среди которых Google является материнской компанией, являются сторонними бенефициарами Лицензионного соглашения и что эти компании имеют право пользоваться привилегиями (или правами), предоставляемыми по настоящему Лицензионному соглашению, и напрямую требовать их соблюдения в судебном порядке. Все остальные физические и юридические лица не являются сторонними бенефициарами Лицензионного соглашения.
-
-14.5. ОГРАНИЧЕНИЯ НА ЭКСПОРТ. ИСПОЛЬЗОВАНИЕ PREVIEW РЕГУЛИРУЕТСЯ ЗАКОНАМИ И НОРМАТИВНЫМИ АКТАМИ США, КАСАЮЩИМИСЯ ЭКСПОРТА. ВЫ ОБЯЗУЕТЕСЬ СОБЛЮДАТЬ ВСЕ НАЦИОНАЛЬНЫЕ И МЕЖДУНАРОДНЫЕ ЗАКОНЫ ОБ ЭКСПОРТЕ, ПРИМЕНИМЫЕ К PREVIEW. ДАННЫЕ ЗАКОНЫ НАЛАГАЮТ ОГРАНИЧЕНИЯ НА РЕГИОНЫ, КРУГ ЛИЦ И СПОСОБ КОНЕЧНОГО ИСПОЛЬЗОВАНИЯ.
-
-14.6. Вы не вправе переуступать либо передавать права, предоставляемые по настоящему Лицензионному соглашению, без предварительного письменного согласия Google; любые попытки переуступки без такого согласия считаются недействительными. Вы обязуетесь не делегировать свои полномочия или обязательства по настоящему Лицензионному соглашению без предварительного письменного согласия Google.
-
-14.7. Лицензионное соглашение, а также взаимоотношения между вами и компанией Google в рамках настоящего Лицензионного соглашения регулируются законодательством штата Калифорния за исключением его норм коллизионного права. Вы и компания Google признаете, что урегулирование любых правовых вопросов, связанных с данным Лицензионным соглашением, относится исключительно к юрисдикции судов округа Санта-Клара, штат Калифорния. Несмотря на это, вы соглашаетесь с тем, что компания Google по-прежнему имеет право обращаться за наложением судебного запрета (или за получением аналогичного вида неотложной судебной защиты) в суды любой юрисдикции.
- </div><!-- sdk terms -->
-
-
-
- <div id="sdk-terms-form">
- <p>
- <input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
- <label id="agreeLabel" for="agree">Я прочитал(а) и принимаю изложенные выше положения и условия</label>
- </p>
- <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
- </div>
-
-
- </div><!-- end TOS -->
-
-
- <div id="landing">
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>Содержание документа</h2>
- <ol>
- <li><a href="#sdk">SDK Preview</a></li>
- <li><a href="#docs">Документация для разработчиков</a></li>
- <li><a href="#images">Системные образы оборудования</a></li>
- </ol>
- <h2>Legacy downloads</h2>
- <ol>
- <li><a href="{@docRoot}preview/download_mp1.html">Developer Preview Archive</a></li>
- </ol>
- </div>
-</div>
-
-
-<p>
- В состав SDK Android M Preview входят инструменты для разработки, системные файлы Android и файлы библиотеки, призванные
-помочь вам в тестировании ваших приложений и новых API-интерфейсов, которые будут реализованы в предстоящем выпуске платформы. В этом документе
-рассказывается, как загрузить необходимые компоненты Preview для тестирования ваших приложений.
-</p>
-
-
-<h2 id="sdk">SDK Preview</h2>
-
-<p>
- Загрузить SDK Preview можно с помощью <a href="{@docRoot}tools/help/sdk-manager.html">менеджера SDK Android</a>. Дополнительные сведения
-о загрузке и настройке SDK Preview представлены в статье <a href="{@docRoot}preview/setup-sdk.html#downloadSdk">Настройка SDK Preview</a>.
-</p>
-
-
-<h2 id="docs">Документация для разработчиков</h2>
-
-<p>
- В пакете документации для разработчиков, который доступен для загрузки, представлены подробные сведения об API-интерфейсах, а также о различиях между API-интерфейсами для Preview.
-</p>
-
-<table>
- <tr>
- <th scope="col">Description</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="docs-dl">
- <td>Android M Preview 2<br>Developer Docs</td>
- <td><a href="#top" onclick="onDownload(this)"
- >m-preview-2-developer-docs.zip</a><br>
- MD5: 1db6fff9c722b0339757e1cdf43663a8<br>
- SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157
- </td>
- </tr>
-</table>
-
-
-<h2 id="images">Системные образы оборудования</h2>
-
-<p>
- С помощью этих системных образов можно установить предварительную версию платформы на физическое устройство для
-тестирования. Используя один из этих образов для настройки устройства, вы можете установить и протестировать ваше приложение, чтобы узнать, как оно будет работать в будущей версии
-платформы. В процессе установки системного образа
-<em>на устройстве удаляются все данные</em>, поэтому перед установкой образа обязательно сделайте резервное копирование данных.
-
-</p>
-
-<p class="warning">
- <b>Предупреждение.</b> Перечисленные ниже системные образы Android являются предварительными и могут быть изменены. Использование вами
-этих образов регулируется Лицензионным соглашением на использование пакета SDK Android Preview. Системные образы предварительной версии Android
-не являются стабильными и могут содержать ошибки и дефекты,
-способные повредить ваши компьютеры, устройства и данные. Системные образы предварительной версии Android не проходят такое же тестирование,
-как заводская ОС. Поэтому в результате использования этих образов ваш телефон и установленные на нем приложения
-и службы могут перестать работать.
-</p>
-
-<table>
- <tr>
- <th scope="col">Device</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="hammerhead">
- <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >hammerhead-MPZ79M-preview-b1f4bde4.tgz</a><br>
- MD5: 2ca9f18bf47a061b339bab52647ceb0d<br>
- SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939
- </td>
- </tr>
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-MPZ79M-preview-e1024040.tgz</a><br>
- MD5: 24a2118da340b9afedfbdfc026f6ff81<br>
- SHA-1: e10240408859d5188c4aae140e1c539130ba614b
- </td>
- </tr>
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-MPZ79M-preview-9f305342.tgz</a><br>
- MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e<br>
- SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-MPZ79N-preview-fb63af98.tgz</a><br>
- MD5: e8d081137a20b66df595ee69523314b5<br>
- SHA-1: fb63af98302dd97be8de9313734d389ccdcce250
- </td>
- </tr>
-
-</table>
-
-<h3 id="install-image">Установка образа на устройство</h3>
-
-<p>
- Чтобы воспользоваться образом устройства для тестирования, установите его на совместимое устройство. Следуйте
-инструкциям по установке системного образа.
-</p>
-
-<ol>
- <li>Загрузите и распакуйте один из указанных выше пакетов с системным образом.</li>
- <li>Создайте резервные копии данных, которые хотите сохранить.</li>
- <li>Следуйте инструкциям, приведенным на сайте
-<a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>,
-чтобы прошить ваше устройство с использованием выбранного образа.</li>
-</ol>
-
-<p class="note">
- <strong>Примечание.</strong> После прошивки устройства для разработки с использованием системного образа с предварительной версией платформы
-она будет автоматически обновлена до следующего выпуска Preview по беспроводной сети.
-</p>
-
-<h3 id="revertDevice">Сброс параметров устройства до заводских настроек</h3>
-
-<p>
- Чтобы удалить Preview и восстановить заводские настройки устройства, перейдите на сайт
-<a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a>
-и загрузите образ, который требуется использовать для прошивки. Следуйте инструкциям, приведенным на странице,
-чтобы прошить ваше устройство с использованием выбранного образа.
-</p>
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/";
- function onDownload(link) {
-
- $("#downloadForRealz").html("Download " + $(link).text());
- $("#downloadForRealz").attr('href', urlRoot + $(link).text());
-
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
-
- return true;
- }
-
-
- function onAgreeChecked() {
- /* verify that the TOS is agreed */
- if ($("input#agree").is(":checked")) {
- /* reveal the download button */
- $("a#downloadForRealz").removeClass('disabled');
- } else {
- $("a#downloadForRealz").addClass('disabled');
- }
- }
-
- function onDownloadForRealz(link) {
- if ($("input#agree").is(':checked')) {
- /*
- $("#tos").fadeOut('fast');
- $("#landing").fadeIn('fast');
- */
-
- ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html());
-
- /*
- location.hash = "";
- */
- return true;
- } else {
- return false;
- }
- }
-
- $(window).hashchange( function(){
- if (location.hash == "") {
- location.reload();
- }
- });
-
-</script>
diff --git a/docs/html-intl/intl/ru/preview/features/background-optimization.jd b/docs/html-intl/intl/ru/preview/features/background-optimization.jd
deleted file mode 100644
index b84e785..0000000
--- a/docs/html-intl/intl/ru/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,390 +0,0 @@
-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">
- <div id="qv">
- <h2>
- Содержание документа
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">Ограничения для CONNECTIVITY_ACTION</a>
- </li>
-
- <li>
- <a href="#sched-jobs">Планирование сетевых заданий для безлимитных
-подключений</a>
- </li>
-
- <li>
- <a href="#monitor-conn">Отслеживание сетевого подключения во время работы
-приложения</a>
- </li>
-
- <li>
- <a href="#media-broadcasts">Ограничения для NEW_PICTURE и
-NEW_VIDEO</a>
- </li>
-
- <li>
- <a href="#new-jobinfo">Новые методы JobInfo</a>
- </li>
-
- <li>
- <a href="#new-jobparam">Новые методы JobParameter</a>
- </li>
-
- <li>
- <a href="#further-optimization">Дальнейшая оптимизация приложения</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Фоновые процессы могут потреблять много памяти и заряда аккумулятора. Например,
-неявное широковещательное сообщение может запускать множество фоновых процессов,
-которые его прослушивают, даже если они сами не выполняют полезной работы. Это
-может значительно снизить производительность устройства и быстродействие пользовательского интерфейса.
-</p>
-
-<p>
- Чтобы устранить подобные проблемы, в N Developer Preview применяются следующие
-ограничения.
-</p>
-
-<ul>
- <li>Приложения для версии Preview не получают рассылок {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION}, если они
-зарегистрированы для их получения в манифесте. Приложения в активном режиме
-по-прежнему могут прослушивать {@code CONNECTIVITY_CHANGE} в главном потоке,
-зарегистрировав {@link android.content.BroadcastReceiver} с помощью метода {@link
-android.content.Context#registerReceiver Context.registerReceiver()}.
- </li>
-
- <li>Приложения не могут отправлять или получать широковещательные сообщения {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} и {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Эта оптимизация
-затрагивает все приложения, а не только предназначенные для версии Preview.
- </li>
-</ul>
-
-<p>
- Платформа Android предоставляет несколько решений, позволяющих отказаться
-от таких неявных рассылок. Например, в {@link android.app.job.JobScheduler}
-и <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
-{@code GcmNetworkManager}</a> реализованы надежные механизмы для планирования сетевых
-операций, которые запускаются при выполнении определенных условий, таких как наличие безлимитной
-сети. Теперь вы также можете использовать {@link android.app.job.JobScheduler}
-, чтобы реагировать на изменения поставщиков контента. В объектах {@link android.app.job.JobInfo}
-инкапсулированы параметры, которые {@link android.app.job.JobScheduler}
-использует для планирования заданий. Если условия задания выполнены, система
-выполняет его через {@link android.app.job.JobService} вашего приложения.
-</p>
-
-<p>
- Здесь мы рассмотрим, как использовать альтернативные методы, такие как
-{@link android.app.job.JobScheduler}, для адаптации приложения к новым
-ограничениям.
-</p>
-
-<h2 id="connectivity-action">
- Ограничения для CONNECTIVITY_ACTION
-</h2>
-
-<p>
- Приложения для N Developer Preview не получают широковещательные сообщения {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION}, если они
-зарегистрированы для их получения в своем манифесте. При этом процессы, которые зависят от этого
-широковещательного сообщения, не запускаются. Это может вызвать проблемы для приложений, которым необходимо
-прослушивать изменения сети или выполнять
-массовые сетевые операции, когда устройство подключается к безлимитной сети. Платформа Android уже предоставляет ряд способов обойти
-это ограничение, но выбор нужного метода
-зависит от того, чего вы хотите добиться от приложения.
-</p>
-
-<p class="note">
- <strong>Примечание.</strong> Объект {@link android.content.BroadcastReceiver}, зарегистрированный с помощью метода
-{@link android.content.Context#registerReceiver Context.registerReceiver()},
-продолжает получать такие рассылки, если приложение работает в активном режиме.
-</p>
-
-<h3 id="sched-jobs">
- Планирование сетевых заданий для безлимитных подключений
-</h3>
-
-<p>
- При использовании класса {@link android.app.job.JobInfo.Builder JobInfo.Builder} для создания
-объекта {@link android.app.job.JobInfo} примените метод {@link
- android.app.job.JobInfo.Builder#setRequiredNetworkType
- setRequiredNetworkType()} и передайте {@link android.app.job.JobInfo
- JobInfo.NETWORK_TYPE_UNMETERED} в качестве параметра задания. В следующем примере кода
-служба запускается, если устройство подключается к безлимитной
-сети и заряжается:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-</pre>
-
-<p>
- Если условия задания выполнены, приложение получает обратный вызов для запуска
-метода {@link android.app.job.JobService#onStartJob onStartJob()} в указанном
-классе {@code JobService.class}. Другие примеры реализации {@link
- android.app.job.JobScheduler} см. в <a href="{@docRoot}samples/JobScheduler/index.html">примере приложения JobScheduler</a>.
-</p>
-
-<p>
- В приложениях, использующих службы GMSCore и предназначенных для Android 5.0 (уровень API 21)
-или предыдущих версий, можно воспользоваться <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> и указать {@code Task.NETWORK_STATE_UNMETERED}.
-</p>
-
-<h3 id="monitor-conn">
- Отслеживание сетевого подключения во время работы приложения
-</h3>
-
-<p>
- Приложения в активном режиме по-прежнему могут прослушивать {@code
- CONNECTIVITY_CHANGE} с помощью зарегистрированного объекта {@link
- android.content.BroadcastReceiver}. Однако в API-интерфейсе {@link
- android.net.ConnectivityManager} есть более надежный метод для запроса
-обратного вызова только при выполнении указанных сетевых условий.
-</p>
-
-<p>
- В объектах {@link android.net.NetworkRequest} параметры
-сетевого обратного вызова задаются с помощью {@link android.net.NetworkCapabilities}. Объекты {@link android.net.NetworkRequest} создаются
-с использованием класса {@link
- android.net.NetworkRequest.Builder NetworkRequest.Builder}. Затем метод {@link
- android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
- android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
- передает объект {@link android.net.NetworkRequest} системе. Если
-сетевые условия выполнены, приложение получает обратный вызов для выполнения метода
- {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
- onAvailable()}, определенного в своем классе {@link
- android.net.ConnectivityManager.NetworkCallback}.
-</p>
-
-<p>
- Приложение продолжает получать обратные вызовы, пока оно не будет закрыто или не будет вызван метод
- {@link android.net.ConnectivityManager#unregisterNetworkCallback
- unregisterNetworkCallback()}.
-</p>
-
-<h2 id="media-broadcasts">
- Ограничения для NEW_PICTURE и NEW_VIDEO
-</h2>
-
-<p>
- В N Developer Preview приложения не могут отправлять или получать широковещательные сообщения {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} и {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Это ограничение
- позволяет улучшить производительность, если для обработки нового изображения или видео должны
- активироваться несколько приложений. N Developer Preview
- расширяет классы {@link android.app.job.JobInfo} и {@link
- android.app.job.JobParameters}, что дает разработчикам альтернативное решение.
-</p>
-
-<h3 id="new-jobinfo">
- Новые методы JobInfo
-</h3>
-
-<p>
- Для активации заданий при изменении URI контента в N Developer Preview
- были добавлены следующие методы для API-интерфейса {@link android.app.job.JobInfo}.
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- Инкапсулирует параметры, необходимые для активации задания при изменении URI контента.
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- Передает объект {@code TriggerContentUri} в контейнер {@link
- android.app.job.JobInfo}. Объект {@link android.database.ContentObserver}
- отслеживает инкапсулированный URI контента. Если с заданием связано несколько объектов {@code
- TriggerContentUri}, система предоставляет
- обратный вызов, даже если изменился только один из URI контента.
- </dd>
-
- <dd>
- Добавьте флаг {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS}, чтобы
- активировать задание при изменении любых потомков указанного URI. Этот флаг
- соответствует параметру {@code notifyForDescendants}, переданному методу {@link
- android.content.ContentResolver#registerContentObserver
- registerContentObserver()}.
- </dd>
-</dl>
-
-<p class="note">
- <strong>Примечание.</strong> Метод {@code TriggerContentUri()} не может использоваться
- вместе с {@link android.app.job.JobInfo.Builder#setPeriodic
- setPeriodic()} или {@link android.app.job.JobInfo.Builder#setPersisted
- setPersisted()}. Чтобы непрерывно отслеживать изменения контента, запланируйте новый объект задания
- {@link android.app.job.JobInfo}, прежде чем {@link
- android.app.job.JobService} завершит обработку последнего обратного вызова.
-</p>
-
-<p>
- В следующем примере кода планируется задание, которое активируется, когда система сообщает
- об изменении URI контента {@code MEDIA_URI}:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MEDIA_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-</pre>
-<p>
- Если система сообщает об изменении указанных URI контента, приложение
- получает обратный вызов, а объект {@link android.app.job.JobParameters} передается
- методу {@link android.app.job.JobService#onStartJob onStartJob()}
- в {@code MediaContentJob.class}.
-</p>
-
-<h3 id="new-jobparam">
- Новые методы JobParameter
-</h3>
-
-<p>
- В N Developer Preview также расширен класс {@link android.app.job.JobParameters}, чтобы
- приложения могли получать полезные сведения о том, какие источники контента
- и URI инициировали задание.
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- Возвращает массив URI, которые активировали задание. Возвращается значение {@code
- null}, если ни один URI не инициировал задание (например, задание было
- активировано по времени или из-за другой причины), или число измененных
- URI больше 50.
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- Возвращает строковый массив источников контента, которые активировали задание.
- Если возвращенный массив не равен {@code null}, используйте метод {@code getTriggeredContentUris()},
- чтобы получить сведения об измененных URI.
- </dd>
-</dl>
-
-<p>
- В следующем примере кода перегружается метод {@link
- android.app.job.JobService#onStartJob JobService.onStartJob()} и
- записываются источники и URI контента, вызвавшие задание:
-</p>
-
-<pre>
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-</pre>
-
-<h2 id="further-optimization">
- Дальнейшая оптимизация приложения
-</h2>
-
-<p>
- Оптимизация приложений для устройств с малым объемом памяти
- или для условий с ограниченным объемом памяти помогает улучшить производительность и удобство работы пользователей. Удаление
- зависимостей от фоновых служб и статически зарегистрированных приемников неявных широковещательных сообщений
- способно помочь приложению более эффективно работать на таких устройствах. Хотя
- на платформе N Developer Preview приняты меры для устранения некоторых из этих проблем,
- рекомендуется оптимизировать приложения, полностью отказавшись
- от подобных фоновых процессов.
-</p>
-
-<p>
- В N Developer Preview представлен ряд дополнительных команд <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a>, с помощью
- которых можно тестировать поведение приложения с отключенными фоновыми процессами.
-</p>
-
-<ul>
- <li>Для эмуляции условий, в которых неявные широковещательные сообщения и фоновые службы
- недоступны, введите следующую команду:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>Чтобы снова включить неявные широковещательные сообщения и фоновые службы, введите
- следующую команду:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
\ No newline at end of file
diff --git a/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd b/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd
deleted file mode 100644
index 7d22408..0000000
--- a/docs/html-intl/intl/ru/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,160 +0,0 @@
-page.title=API-интерфейсы ICU4J в платформе Android
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Содержание документа:</h2>
-<ol>
- <li><a href="#relation">Связь с ICU4J</a></li>
- <li><a href="#migration">Переход на API-интерфейсы android.icu с ICU4J</a></li>
- <li><a href="#licence">Лицензирование</a></li>
-</ol>
-
-<h2>См. также:</h2>
-<ol>
- <li>
- <a class="external-link" href="http://userguide.icu-project.org">Документация по ICU4J</a>
- </li>
-
- <li>
- <a class="external-link" href="http://site.icu-project.org/#TOC-What-is-ICU-">Последние стандарты, поддерживаемые
-ICU4J</a>
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- ICU4J — широко используемый набор библиотек Java с открытым кодом, обеспечивающий для приложений поддержку формата Unicode
-и глобализации. Android N
-открывает в платформе Android частичный набор API-интерфейсов ICU4J, который разработчики приложений
-могут использовать в составе пакета {@code android.icu}. Эти API используют
-данные локализации, присутствующие на устройстве. Это позволяет уменьшить размеры APK
-, не компилируя библиотеки ICU4J в APK, а
-просто вызывая их в платформе. (В этом случае может оказаться удобно предоставлять
-<a href="{@docRoot}google/play/publishing/multiple-apks.html">несколько версий
-вашего APK</a>, чтобы пользователи с версиями Android ниже Android N
-могли загружать версию приложения, содержащую библиотеки ICU4J.)
-</p>
-
-<p>
- В начале этого документа предоставляется базовая информация по минимальным уровням
-Android API, которые требуются для поддержки этих библиотек. Далее приводятся необходимые пояснения
-о реализации ICU4J в Android. В заключение
-в нем рассказывается, как использовать API-интерфейсы ICU4J в платформе Android.
-</p>
-
-<h2 id="relation">Связь с ICU4J</h2>
-
-<p>
- В Android N частичный набор API-интерфейсов ICU4J открывается через пакет
- <code>android.icu</code>, а не через <code>com.ibm.icu</code>. Для платформы
-Android может быть принято решение не
-открывать API-интерфейсы ICU4J по различным причинам. Например, Android N не открывает
-некоторые устаревшие API-интерфейсы, а также те, которые рабочая группа ICU еще не объявила
-стабильными. По мере того, как рабочая группа ICU будет объявлять API-интерфейсы устаревшими, они будут так же помечаться и в Android,
-но при этом будут и дальше входить в состав платформы.
-</p>
-
-<p class="table-caption"><strong>Таблица 1.</strong> Версии ICU и CLDR, используемые
-в Android N.</p>
-<table>
-<tr>
-<th>Уровень Android API</th>
-<th>Версия ICU</th>
-<th>Версия CLDR</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>Следует отметить несколько важных моментов:</p>
-
-<ul>
-<li>В состав API-интерфейсов ICU4J платформы Android входят не все API-интерфейсы ICU4J.</li>
-<li>Разработчикам NDK следует помнить, что Android ICU4C не поддерживается.</li>
-<li>API-интерфейсы в платформе Android не заменяют поддержку
-<a href="{@docRoot}guide/topics/resources/localization.html">локализации с
-ресурсами</a> в Android.</li>
-</ul>
-
-<h2 id="migration">Переход на пакет android.icu с com.ibm.icu</h2>
-
-<p>
- Если вы уже используете в своем приложении API-интерфейсы ICU4J, и если API
- <code>android.icu</code> соответствуют вашим требованиям, то для перехода на
-API-интерфейсы платформы вам нужно будет изменить импорт Java
-с <code>com.ibm.icu</code> на <code>android.icu</code>. После этого вы сможете
-удалить свои копии файлов ICU4J из APK.
-</p>
-
-<p class="note">
- <b>Примечание</b>. API-интерфейсы ICU4J в платформе используют пространство имен {@code android.icu}
-вместо {@code com.ibm.icu}. Это позволяет избежать конфликтов пространств имен
-в пакетах APK, содержащих собственные библиотеки {@code com.ibm.icu}.
-</p>
-
-<h3 id="migrate-from-android">
- Переход на API-интерфейсы android.icu с других API Android SDK
-</h3>
-
-<p>
- Некоторые классы в пакетах <code>java</code> и <code>android</code> имеют
-эквиваленты в ICU4J. Однако ICU4J обычно обеспечивает более широкую
-поддержку стандартов и языков.
-</p>
-<p>Ниже приведены несколько примеров для начала работы:</p>
-<table>
-<tr>
-<th>Класс</th>
-<th>Альтернативы</th>
-</tr>
-<tr>
-<td><code>java.lang.Character</code> </td>
-<td><code>android.icu.lang.UCharacter</code> </td>
-</tr>
-<tr>
-<td><code>java.text.BreakIterator</code> </td>
-<td><code>android.icu.text.BreakIterator</code> </td>
-</tr>
-<tr>
-<td><code>java.text.DecimalFormat</code> </td>
-<td><code>android.icu.text.DecimalFormat</code> </td>
-</tr>
-<tr>
-<td><code>java.util.Calendar</code></td>
-<td>
-<code>android.icu.util.Calendar</code></td>
-</tr>
-<tr>
-<td><code>android.text.BidiFormatter</code>
- </td>
-<td><code>android.icu.text.Bidi</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateFormat</code>
- </td>
-<td><code>android.icu.text.DateFormat</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateUtils</code> </td>
-<td><code>android.icu.text.DateFormat</code>
-<code>android.icu.text.RelativeDateTimeFormatter</code>
-</td>
-</tr>
-</table>
-
-<h2 id="licence">Лицензирование</h2>
-
-<p>
- ICU4J выпускается по лицензии ICU. Более подробную информацию можно найти в <a class="external-link" href="http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">Руководстве пользователя
-ICU.</a>
-</p>
diff --git a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd b/docs/html-intl/intl/ru/preview/features/multilingual-support.jd
deleted file mode 100644
index 83e9968..0000000
--- a/docs/html-intl/intl/ru/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,217 +0,0 @@
-page.title=Язык и языковой стандарт
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Содержание документа:</h2>
-<ol>
- <li><a href="#preN">Сложности с разрешением языковых ресурсов</a></li>
- <li><a href="#postN">Улучшение стратегии разрешения ресурсов</a></li>
- <li><a href="#design">Проектирование приложения для поддержки дополнительных
- языковых стандартов</a></li>
-
-</ol>
-
-</div>
-</div>
-
-<p>Android N обеспечивает расширенную поддержку многоязычных пользователей,
-позволяя им выбирать в настройках из нескольких языковых стандартов. Эта возможность реализована в Android N
-за счет значительного увеличения числа поддерживаемых языковых стандартов
-и изменения способа разрешения ресурсов в системе. Новый метод разрешения
-ресурсов более надежен и разработан с учетом совместимости с существующими APK. Тем не менее,
-при его использовании следует очень внимательно следить за признаками непредвиденного поведения приложения. Например, при его использовании
-следует провести тесты и убедиться, что приложение по умолчанию использует ожидаемый язык. Если
-ваше приложение поддерживает несколько языков, нужно убедиться, что поддержка работает
-ожидаемым образом. Также следует попытаться обеспечить корректную работу приложения с
-языками, поддержка которых не предусматривалась явным образом в его коде.</p>
-
-<p>В начале этого документа рассказывается о стратегии разрешения ресурсов, которая использовалась до появления
-Android N. Далее в нем описывается улучшенная стратегия
-разрешения ресурсов в Android N. В последней части документа рассказывается о том, как использовать
-дополнительные языковые стандарты для поддержки большего числа многоязычных пользователей.</p>
-
-<h2 id="preN">Сложности с разрешением языковых ресурсов</h2>
-
-<p>До выпуска Android N в Android не всегда удавалось успешно сопоставлять
- языковые стандарты приложений и системы. Допустим, по умолчанию в вашем приложении используется английский язык
- (США), но оно также содержит строки на испанском, локализованные в файлах ресурсов {@code es_ES}.
-</p>
-<p>В коде Java разрешение языков строк происходило следующим
-образом:</p>
-<ul>
-<li>Если на устройстве был установлен язык {@code es_MX} (испанский, Мексика), Android загружал
-строки из файлов ресурсов {@code es_ES}.</li>
-<li>Если на устройстве был установлен язык {@code en_AU}, Android возвращался к языку {@code
-en_US}. Также система использовала по умолчанию язык {@code en_US}, если пользователь выбирал язык,
-который вообще не поддерживался приложением, например, французский.</li>
-</ul>
-
-
-<p>Проблемы с разрешением возникали из-за того, что система удаляла код страны
- из строки языкового стандарта при отсутствии точного совпадения. Например:</p>
-<p class="table-caption" id="t-resource-res">
-<strong>Таблица 1.</strong> Разрешение ресурсов без точного совпадения языковых стандартов.
-</p>
-<table>
-<tbody>
-<tr>
-<th>Пользовательские настройки</th>
-<th>Ресурсы приложения</th>
-<th>Разрешение ресурсов</th>
-</tr>
-<tr>
-<td>fr_CH</td>
-<td>
-по умолчанию (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
- <td>
-Попытка использования fr_CH => Отказ<br>
-Попытка использования fr => Отказ<br>
-Использование языка по умолчанию (en)
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>В этом примере система отображает строки на английском,
-не зная, понимает ли пользователь английский язык. Такое поведение приложений сейчас довольно
-распространено. С выпуском Android N подобные ситуации
-будут возникать намного реже.</p>
-
-<h2 id="postN">Улучшение стратегии разрешения ресурсов</h2>
-<p>В Android N используется более надежная система разрешения ресурсов,
-которая автоматически находит более подходящие альтернативные варианты. Однако для ускорения процесса разрешения и упрощения
- обслуживания ресурсы следует хранить на наиболее распространенном языке верхнего уровня.
- Например, если вы хранили ресурсы на испанском в каталоге{@code es-US}
-, их следует переместить в каталог {@code es-419}, где содержатся ресурсы на латиноамериканском диалекте испанского языка.
- Аналогичным образом, если вы хранили строки ресурсов в папке {@code en-GB}, вам следует изменить название папки
- на {@code en-001} (международная версия английского языка), поскольку {@code en-001} — наиболее распространенный
- язык верхнего уровня для строк <code>en-GB</code>.
- В следующих примерах объясняется, почему такая практика повышает производительность и
-надежность процесса разрешения ресурсов.</p>
-
-<h3>Примеры разрешения ресурсов</h3>
-
-<p>В Android N ситуация, описанная в <strong>Таблице 1</strong>, разрешается
-иначе:</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>Таблица 2.</strong> Улучшенная стратегия разрешения при отсутствии
-точного совпадения языкового стандарта.</p>
-<table>
-<tr>
-<th>Пользовательские настройки</th>
-<th>Ресурсы приложения</th>
-<th>Разрешение ресурсов</th>
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-</ol>
-</td>
-<td>
-по умолчанию (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
-<td>
-Попытка использования fr_CH => Отказ<br>
-Попытка использования fr => Отказ<br>
-Попытка использования диалекта fr => fr_FR<br>
-Использование fr_FR
-</td>
-</tr>
-
-</table>
-
-
-<p>В этом примере пользователь получает ресурсы на французском языке, а не на английском. В этом примере также показано, почему для Android N
- следует хранить строки на французском языке в каталоге {@code fr}, а не в каталоге {@code fr_FR}.
-Здесь целью разрешения является нахождение наиболее близкого диалекта верхнего уровня,
- что ускоряет процесс разрешения и делает его более предсказуемым.</p>
-
-<p>Помимо улучшенной логики разрешения в Android добавлены
- дополнительные языки. Рассмотрим предыдущий пример в ситуации, когда итальянский
- указан как дополнительный язык пользователя, а приложение не поддерживает французский язык. </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>Таблица 3.</strong> Разрешение ресурсов в ситуации, когда приложение находит соответствие только для
-второго предпочитаемого пользователем языкового стандарта.</p>
-<table>
-<tr>
-<th>Пользовательские настройки</th>
-<th>Ресурсы приложения</th>
-<th>Разрешение ресурсов</th>
-
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-<li> it_CH</li>
-</ol>
-</td>
-<td>
-по умолчанию (en)<br>
-de_DE<br>
-es_ES<br>
-it_IT<br>
-</td>
-<td>
-Попытка использования fr_CH => Отказ<br>
-Попытка использования fr => Отказ<br>
-Попытка использования диалекта fr => Отказ<br>
-Попытка использования it_CH => Отказ<br>
-Попытка использования it => Отказ<br>
-Попытка использования диалекта it => it_IT<br>
-Использование it_IT
-</td>
-
-</tr>
-
-</table>
-<p>Пользователь получает данные на понятном ему языке, хотя приложение и не
-поддерживает французский язык.</p>
-
-
-<h2 id="design">Проектирование приложения для поддержки дополнительных языковых стандартов</h2>
-<h3>API LocaleList</h3>
-
-<p>В Android N добавлен новый API {@code LocaleList.GetDefault()},
- позволяющий приложениям напрямую запрашивать список языков, выбранных пользователем. Этот API
-позволяет реализовать более сложное поведение
- приложений и лучше оптимизировать отображение содержимого на экране. Например, результаты поиска
- могут отображаться на разных языках в зависимости от пользовательских настроек. Приложения в браузере
- могут не предлагать пользователю перевести приложения на знакомый ему язык,
- а приложения, использующие клавиатуру, могут автоматически включать все подходящие раскладки. </p>
-
-<h3>Средства форматирования</h3>
-
-<p>Версии Android до 6.0 включительно (уровень API 23) поддерживали только один или два языковых стандарта
- для большинства распространенных языков
-(en, es, ar, fr, ru). Поскольку у каждого языка имелось лишь немного вариантов,
-приложения могли хранить числа и даты в виде жестко закодированных строк
-в файлах ресурсов. Однако с расширением числа поддерживаемых Android языковых стандартов
-могут возникнуть
-значительные различия форматов даты, времени, валюты и другой подобной
-информации даже в рамках одного языкового стандарта. Жесткое кодирование форматов может запутать
-конечных пользователей. Поэтому при разработке приложений для Android N
-следует использовать средства форматирования, а не жесткое кодирование строк с числами и датами.</p>
-
-<p>В качестве наглядного примера можно привести арабский язык, поддержка которого в Android N расширена
-с одного {@code ar_EG} до 27 языковых стандартов. Большинство ресурсов этих языковых стандартов общие, но
-в некоторых из них используются цифры формата ASCII, а в других — собственные цифры. Например,
-если вы хотите создать предложение с числовой переменной
-"Выберите ПИН-код из 4 цифр", вам нужно использовать средства форматирования следующим образом:</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html-intl/intl/ru/preview/features/notification-updates.jd b/docs/html-intl/intl/ru/preview/features/notification-updates.jd
deleted file mode 100644
index 54b3bc3..0000000
--- a/docs/html-intl/intl/ru/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,328 +0,0 @@
-page.title=Уведомления
-page.tags=notifications
-helpoutsWidget=true
-page.image=/preview/images/notifications-card.png
-
-trainingnavtop=true
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<!-- table of contents -->
-<h2>Содержание:</h2>
-<ol>
- <li><a href="#direct">Прямой ответ</a></li>
- <li><a href="#bundle">Группы уведомлений</a></li>
- <li><a href="#custom">Собственные представления</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>В Android N представлено несколько новых API-интерфейсов, позволяющих
-публиковать заметные и интерактивные уведомления.</p>
-
-<p>Существующий API-интерфейс уведомлений {@link android.support.v4.app.RemoteInput}
-в Android N расширен для поддержки внутренних ответов на смартфонах. С помощью этой возможности
- пользователи могут быстро отвечать на сообщения в панели уведомлений, не открывая приложение.</p>
-
-<p>
- Android N также позволяет группировать несколько похожих
- уведомлений, чтобы они отображались как одно. Для этого в Android N используется существующий метод {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()}. Пользователи могут развернуть все
- уведомления и выполнить различные действия, например ответить на сообщение
- или закрыть каждое из уведомлений по отдельности в панели уведомлений.
-</p>
-
-<p>Наконец, в Android N представлены новые API-интерфейсы, позволяющие
-использовать системные элементы в собственных представлениях уведомлений вашего приложения. Благодаря им
-уведомления отображаются единообразно на основе
-стандартных шаблонов.</p>
-
-<p>В этом документе рассматриваются некоторые наиболее важные изменения,
- которые следует учитывать при использовании новых уведомлений в приложениях.</p>
-
-<h2 id="direct">Прямой ответ</h2>
-
-<p>С помощью прямых ответов пользователи
- Android N могут быстро отвечать на текстовые сообщения и обновлять списки задач непосредственно в интерфейсе
-уведомлений. На мобильных устройствах действие внутреннего ответа обозначается
- как дополнительная кнопка в уведомлении. Если пользователь набирает ответ на клавиатуре, система
- прикрепляет текст ответа к намерению,
- указанному для действия уведомления, и передает намерение в ваше
- приложение.
-
-
-<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
- {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
-<p class="img-caption">
- <strong>Рисунок 1.</strong> В Android N добавлена кнопка <strong>Reply</strong>.
-
-</p>
-
-<h3>Добавление действий внутренних ответов</h3>
-
-<p>Создание действия уведомления, которое поддерживает прямой ответ:
-</p>
-
-<ol>
-<li>Создайте экземпляр класса {@link android.support.v4.app.RemoteInput.Builder},
- который можно добавить в действие
-уведомления. Конструктор класса принимает строку, которую система использует как
- ключ для введенного текста. Потом ваше приложение использует этот ключ для получения
- текста.
-
-<pre>
-// Key for the string that's delivered in the action's intent
-private static final String KEY_TEXT_REPLY = "key_text_reply";
-String replyLabel = getResources().getString(R.string.reply_label);
-RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
- .setLabel(replyLabel)
- .build();
-</pre>
-</li>
-<li>Прикрепите объект {@link android.support.v4.app.RemoteInput}
- к действию с помощью метода <code>addRemoteInput()</code>.
-
-<pre>
-// Create the reply action and add the remote input
-Notification.Action action =
- new Notification.Action.Builder(R.drawable.ic_reply_icon,
- getString(R.string.label), replyPendingIntent)
- .addRemoteInput(remoteInput)
- .build();
-</pre>
-</li>
-
-<li>Примените действие к уведомлению и отправьте его.
-
-<pre>
-// Build the notification and add the action
-Notification notification =
- new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_message)
- .setContentTitle(getString(R.string.title))
- .setContentText(getString(R.string.content))
- .addAction(action))
- .build();
-
-// Issue the notification
-NotificationManager notificationManager =
- NotificationManager.from(mContext);
-notificationManager.notify(notificationId, notification);
-
-</pre>
-</li>
-
-</ol>
-
-
-<p> Система запрашивает у пользователя ввод ответа, если он инициирует
-действие уведомления. </p>
-
-<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
- {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Рисунок 2.</strong> Пользователь вводит текст в панели уведомлений.
-</p>
-
-<h3>Получение введенного пользователем текста из внутреннего ответа</h3>
-
-<p>Получение введенного пользователем текста из интерфейса
-уведомлений в операции, объявленной в намерении действия:</p>
-<ol>
-<li> Вызовите метод {@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()}, передав намерение действия уведомления
- в качестве входного параметра. Этот метод возвращает объект {@link android.os.Bundle},
- содержащий текст ответа.
-</li>
-
-<pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
-
-<li>Запросите группу, используя ключ результата (предоставленный конструктору {@link
- android.support.v4.app.RemoteInput.Builder}).
-</li>
-</ol>
-
-<p>В следующем фрагменте кода показано, как метод извлекает введенный
-текст из группы:</p>
-
-<pre>
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-</pre>
-
-<p>Приложения могут применять логику, чтобы определить, какие действия следует выполнить с полученным
-текстом.
-Для интерактивных приложений (например, чатов) предоставьте больше контекста в самом уведомлении
- (например, несколько строк истории чата, в том числе собственные сообщения пользователя),
- чтобы у пользователя было достаточно информации для ответа.
-Когда пользователь отвечает через {@link android.support.v4.app.RemoteInput},
- добавьте текст в историю ответов, применив метод {@code setRemoteInputHistory()}.
-</p>
-
-<h2 id="bundle">Группы уведомлений</h2>
-
-<p>Android N предоставляет разработчикам новый способ отображения
- очереди уведомлений: <i>группы уведомлений</i>. Они похожи на
- <a href="{@docRoot}training/wearables/notifications/stacks.html">стеки
- уведомлений</a> в Android Wear. Например, если приложение создает уведомления
- для входящих сообщений и получено несколько сообщений, объедините
- уведомления в одну группу. Для группировки похожих уведомлений используйте
- существующий метод {@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()}.</p>
-
-<p>
- Уведомления в группе формируют иерархию,
- на вершине которой находится родительское уведомление, отображающее
- сводную информацию о группе. Пользователь может постепенно
- раскрывать группу уведомлений, при этом система показывает дополнительные
- сведения. Если пользователь раскрывает группу, система отображает больше
- информации о всех дочерних уведомлениях. Если же пользователь
- развернет одно из уведомлений, его содержимое показывается полностью.
-</p>
-
-<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
- {@docRoot}preview/images/bundles_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Рисунок 3.</strong> Пользователь может постепенно раскрывать группу уведомлений.
-
-</p>
-
-<p>Добавление уведомлений в группу описано в разделе
-<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Добавление
-каждого уведомления в группу</a>.</p>
-
-
-<h3 id="best-practices">Рекомендации по работе с группами уведомлений</h3>
-<p>В этом разделе описываются рекомендации по использованию групп
-уведомлений вместо уведомлений {@link android.app.Notification.InboxStyle InboxStyle},
- которые были доступны в предыдущих версиях платформы
- Android.</p>
-
-<h3>Ситуации, в которых следует использовать группы уведомлений</h3>
-
-<p>Вам следует использовать группы уведомлений, только если выполняются
-все следующие условия.</p>
-
-<ul>
- <li>Дочерние уведомления являются полноценными уведомлениями, которые можно
- показать отдельно без сводной информации о группе.</li>
- <li>Отображение дочерних уведомлений по отдельности имеет смысл. Например:
-
- </li>
- <ul>
- <li>в дочерних уведомлениях можно выполнять какие-либо соответствующие им действия;</li>
- <li>дочернему уведомлению предшествует больше информации, чем требуется пользователю.</li>
- </ul>
-</ul>
-
-<p>Примером использования групп уведомлений может служить приложение
-для обмена сообщениями, которое показывает список входящих сообщений,
-или почтовое приложение, отображающее список полученных писем.</p>
-
-<p>
-К примерам ситуаций, когда предпочтительнее использовать одно
- уведомление, относятся отдельные сообщения от одного пользователя или
- списочное представление однострочных текстовых элементов. Для них можно использовать
-{@link android.app.Notification.InboxStyle InboxStyle} или
-{@link android.app.Notification.BigTextStyle BigTextStyle}.
-
-</p>
-
-<h3 id ="post">Отображение группы уведомлений</h3>
-
-<p>
- Приложение всегда должно публиковать сводную информацию группы, даже если эта группа содержит
- всего одно дочернее уведомление. В этом случае система не показывает сводную информацию, а
- непосредственно отображает это уведомление. Это обеспечивает
- единообразие интерфейса при
- пролистывании дочернего элемента группы.
-</p>
-
-<p class="note">
- <strong>Примечание.</strong> Эта версия Android N пока еще не
- блокирует отображение сводной информации для групп уведомлений, содержащих только один дочерний элемент. Эта
- возможность будет добавлена в следующих версиях Android N.
-</p>
-
-<h3>Всплывающие уведомления</h3>
-
-<p>Хотя система обычно отображает дочерние уведомления в виде группы,
- их можно временно показывать в виде
- <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">всплывающих
-уведомлений</a>. Эта возможность очень удобна, так как позволяет
- быстро получить доступ к последнему дочернему уведомлению и связанным с ним действиям.
-</p>
-
-
-<h3>Обратная совместимость</h3>
-
-<p>
- И группы уведомлений, и удаленный ввод входили в состав API {@link
- android.app.Notification} для поддержки устройств
- Android Wear, начиная с Android 5.0 (уровень API 21). Если вы уже использовали эти API-интерфейсы для создания уведомлений,
- вам нужно только убедиться, что поведение приложения соответствует
- описанным выше рекомендациям, и рассмотреть возможность реализации {@code
- setRemoteInputHistory()}.
-</p>
-
-<p>
- Для поддержки обратной совместимости те же API-интерфейсы доступны в
- классе {@link android.support.v4.app.NotificationCompat}
- вспомогательной библиотеки, что позволяет реализовать уведомления, работающие в предыдущих версиях Android.
- На смартфонах и планшетах пользователи видят только сводное уведомление,
- поэтому в приложении все равно должно быть уведомление
- в стиле Inbox или аналогичное уведомление, содержащее всю информацию о группе. Так как устройства Android
-Wear позволяют пользователям видеть все дочерние уведомления даже
- на более ранних уровнях платформы, эти уведомления следует создавать независимо от уровня API.
-
-</p>
-
-<h2 id="custom"> Собственные представления</h2>
-<p>Начиная с Android N, вы можете настраивать представления уведомлений
-и по-прежнему получать системные элементы, такие как заголовки уведомлений, действия и
-расширяемые макеты.</p>
-
-<p>Для этого в Android N добавлены следующие API-интерфейсы, позволяющие
- настраивать собственные представления.</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> Определяет стиль для всех уведомлений, кроме
-уведомлений мультимедиа.</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> Определяет стиль для уведомлений мультимедиа.</dd>
-</dl>
-
-<p>Чтобы воспользоваться этим новым API-интерфейсом, вызовите метод {@code setStyle()}, передав в него
-нужный стиль собственного представления.</p>
-
-<p>В этом фрагменте показано, как создать собственный объект уведомления с помощью метода
-{@code DecoratedCustomViewStyle()}.</p>
-
-<pre>
-Notification noti = new Notification.Builder()
- .setSmallIcon(R.drawable.ic_stat_player)
- .setLargeIcon(albumArtBitmap))
- .setCustomContentView(contentView);
- .setStyle(new Notification.DecoratedCustomViewStyle())
- .build();
-
-</pre>
diff --git a/docs/html-intl/intl/vi/about/versions/nougat/index.jd b/docs/html-intl/intl/vi/about/versions/nougat/index.jd
index bd64b25..2d57fa6 100644
--- a/docs/html-intl/intl/vi/about/versions/nougat/index.jd
+++ b/docs/html-intl/intl/vi/about/versions/nougat/index.jd
@@ -1,78 +1,63 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<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 N Developer Preview</h1>
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- Hãy chuẩn bị sẵn sàng cho Android N!
+ Hãy chuẩn bị sẵn sàng cho Android Nougat!
<strong>Kiểm thử ứng dụng của bạn</strong> trên Nexus và các thiết bị khác. Hỗ trợ các hành vi
hệ thống mới nhằm <strong>tiết kiệm năng lượng và bộ nhớ</strong>.
Mở rộng ứng dụng của bạn bằng <strong>UI đa cửa sổ</strong>,
<strong>thông báo trả lời trực tiếp</strong> và nhiều tính năng khác.
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
Bắt đầu
- </a><!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ </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}images/home/n-preview-hero.png" srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
+ srcset="{@docRoot}images/home/n-preview-hero.png 1x,
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
+ data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
+ data-maxResults="3"></div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Báo cáo vấn đề
</a>
</li>
<li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- Xem ghi chú phát hành
- </a>
- </li>
- <li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Tham gia cộng đồng nhà phát triển
@@ -82,39 +67,44 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
+<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>
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Báo cáo vấn đề
- </a></div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Xem ghi chú phát hành
- </a></div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Tham gia cộng đồng nhà phát triển
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
-<section class="dac-section dac-light"><div class="wrap">
- <h1 class="dac-section-title">Tài nguyên</h1>
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
- Các thông tin cần thiết để trợ giúp bạn chuẩn bị cho ứng dụng sẵn sàng chạy trên Android N.
+ New Android capabilities and the right way to use them in your apps.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
+ 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-light" id="resources"><div class="wrap">
+ <h1 class="dac-section-title">Tài nguyên</h1>
+ <div class="dac-section-subtitle">
+ Các thông tin cần thiết để trợ giúp bạn chuẩn bị cho ứng dụng sẵn sàng chạy trên Android Nougat.
+ </div>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
-
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html-intl/intl/vi/preview/features/background-optimization.jd b/docs/html-intl/intl/vi/preview/features/background-optimization.jd
deleted file mode 100644
index 39e1c15..0000000
--- a/docs/html-intl/intl/vi/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,390 +0,0 @@
-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">
- <div id="qv">
- <h2>
- Trong tài liệu này
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">Các hạn chế về CONNECTIVITY_ACTION</a>
- </li>
-
- <li>
- <a href="#sched-jobs">Lên lịch Tác vụ Mạng trên Kết nối
- Không đo lưu lượng</a>
- </li>
-
- <li>
- <a href="#monitor-conn">Theo dõi Kết nối Mạng Trong khi Ứng dụng
- đang Chạy</a>
- </li>
-
- <li>
- <a href="#media-broadcasts">Các hạn chế về NEW_PICTURE và
- NEW_VIDEO</a>
- </li>
-
- <li>
- <a href="#new-jobinfo">Các phương thức JobInfo Mới</a>
- </li>
-
- <li>
- <a href="#new-jobparam">Các phương thức JobParameter Mới</a>
- </li>
-
- <li>
- <a href="#further-optimization">Tối ưu hóa thêm Ứng dụng của bạn</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- Các tiến trình chạy ngầm có thể tiêu tốn bộ nhớ và pin. Ví dụ, một
- truyền phát không biểu thị có thể bắt đầu nhiều tiến trình chạy ngầm đã đăng ký
- để theo dõi chúng, ngay cả khi các tiến trình đó có thể không làm việc nhiều. Điều này có thể có
- ảnh hưởng lớn đến cả hiệu suất của thiết bị lẫn trải nghiệm của người dùng.
-</p>
-
-<p>
- Để loại bỏ vấn đề này, N Developer Preview áp dụng các hạn chế
- sau:
-</p>
-
-<ul>
- <li>Các ứng dụng nhắm đến Preview không nhận được truyền phát {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} nếu chúng
- đăng ký nhận truyền phát trong bản kê khai của chúng. Các ứng dụng đang chạy ở tiền cảnh
- vẫn có thể theo dõi {@code CONNECTIVITY_CHANGE} trên luồng chính của chúng bằng cách
- đăng ký{@link android.content.BroadcastReceiver} với {@link
- android.content.Context#registerReceiver Context.registerReceiver()}.
- </li>
-
- <li>Ứng dụng không thể gửi hoặc nhận các truyền phát {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} hoặc {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Việc tối ưu này
- tác động đến mọi ứng dụng, không chỉ các ứng dụng nhắm đến Preview.
- </li>
-</ul>
-
-<p>
- Khuôn khổ Android cung cấp một số giải pháp để giảm thiểu sự cần thiết đối với
- các truyền phát không biểu thị. Ví dụ, {@link android.app.job.JobScheduler}
- và <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> cung cấp một cơ chế lên lịch hiệu quả
- cho các hoạt động mạng khi đáp ứng các điều kiện được chỉ định, ví dụ như kết nối tới mạng
- không đo lưu lượng. Bây giờ bạn cũng có thể sử dụng {@link android.app.job.JobScheduler}
- để phản ứng lại với các thay đổi đối với các trình cung cấp nội dung. Các đối tượng {@link android.app.job.JobInfo}
- gói gọn các tham số {@link android.app.job.JobScheduler}
- dùng để lên lịch tác vụ của bạn. Khi đáp ứng được các điều kiện của tác vụ, hệ thống
- sẽ thực thi tác vụ này trên {@link android.app.job.JobService} của ứng dụng của bạn.
-</p>
-
-<p>
- Trong tài liệu này, chúng ta sẽ tìm hiểu cách sử dụng các phương thức thay thế, chẳng hạn như
- {@link android.app.job.JobScheduler}, để thích ứng ứng dụng của bạn với các hạn chế
- mới này.
-</p>
-
-<h2 id="connectivity-action">
- Các hạn chế về CONNECTIVITY_ACTION
-</h2>
-
-<p>
- Các ứng dụng nhắm đến N Developer Preview không nhận được truyền phát {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} nếu chúng
- đăng ký nhận truyền phát trong bản kê khai của chúng, và các tiến trình phụ thuộc vào truyền phát này
- sẽ không khởi động. Điều này cũng đặt ra một vấn đề cho ứng dụng
- về việc theo dõi thay đổi mạng hoặc thực hiện các hoạt động mạng hàng loạt khi
- thiết bị kết nối với một mạng không đo lưu lượng. Một số giải pháp để tránh khỏi hạn chế này
- đã tồn tại trong khuôn khổ Android, nhưng chọn được một giải pháp phù hợp
- phụ thuộc vào những gì bạn muốn ứng dụng của bạn hoàn thành.
-</p>
-
-<p class="note">
- <strong>Lưu ý:</strong> Một{@link android.content.BroadcastReceiver} có đăng ký
- {@link android.content.Context#registerReceiver Context.registerReceiver()}
- tiếp tục nhận các truyền phát này trong khi ứng dụng đang ở tiền cảnh.
-</p>
-
-<h3 id="sched-jobs">
- Lên lịch Tác vụ Mạng trên Kết nối Không đo lưu lượng
-</h3>
-
-<p>
- Khi sử dụng lớp{@link android.app.job.JobInfo.Builder JobInfo.Builder}
- để xây dựng đối tượng {@link android.app.job.JobInfo} của bạn, hãy áp dụng phương thức {@link
- android.app.job.JobInfo.Builder#setRequiredNetworkType
- setRequiredNetworkType()} và chuyển {@link android.app.job.JobInfo
- JobInfo.NETWORK_TYPE_UNMETERED} dưới dạng một tham số tác vụ. Đoạn mã mẫu sau
- lên lịch một dịch vụ để chạy khi thiết bị kết nối với một mạng
- không đo lưu lượng và đang sạc:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-</pre>
-
-<p>
- Khi các điều kiện cho tác vụ của bạn đã được đáp ứng, ứng dụng của bạn sẽ nhận được lệnh gọi lại để chạy
- phương thức{@link android.app.job.JobService#onStartJob onStartJob()}trong
- {@code JobService.class} được chỉ định. Để xem thêm các ví dụ về triển khai {@link
- android.app.job.JobScheduler} , hãy xem <a href="{@docRoot}samples/JobScheduler/index.html">ứng dụng mẫu JobScheduler</a>.
-</p>
-
-<p>
- Các ứng dụng sử dụng dịch vụ GMSCore, và nhắm đến Android 5.0 (API mức 21)
- hoặc thấp hơn, có thể sử dụng <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> và quy định {@code Task.NETWORK_STATE_UNMETERED}.
-</p>
-
-<h3 id="monitor-conn">
- Theo dõi Kết nối Mạng Trong khi Ứng dụng đang Chạy
-</h3>
-
-<p>
- Các ứng dụng đang chạy ở tiền cảnh vẫn có thể theo dõi {@code
- CONNECTIVITY_CHANGE} bằng một{@link
- android.content.BroadcastReceiver} đã đăng ký. Tuy nhiên, API {@link
- android.net.ConnectivityManager} cung cấp phương thức yêu cầu lệnh gọi lại hiệu quả hơn
- chỉ khi đáp ứng được các điều kiện được chỉ định.
-</p>
-
-<p>
- Các đối tượng {@link android.net.NetworkRequest} định nghĩa các tham số của
- lệnh gọi lại mạng xét về {@link android.net.NetworkCapabilities}. Bạn
- tạo các đối tượng {@link android.net.NetworkRequest} bằng lớp {@link
- android.net.NetworkRequest.Builder NetworkRequest.Builder}. {@link
- android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
- android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
- rồi chuyển đối tượng{@link android.net.NetworkRequest} sang hệ thống. Khi
- đáp ứng được các điều kiện mạng, ứng dụng nhận lệnh gọi lại để thực thi phương thức
- {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
- onAvailable()} như được định nghĩa trong lớp {@link
- android.net.ConnectivityManager.NetworkCallback} của nó.
-</p>
-
-<p>
- Ứng dụng tiếp tục nhận lệnh gọi lại cho đến khi ứng dụng tồn tại hoặc nó gọi
- {@link android.net.ConnectivityManager#unregisterNetworkCallback
- unregisterNetworkCallback()}.
-</p>
-
-<h2 id="media-broadcasts">
- Các hạn chế về NEW_PICTURE và NEW_VIDEO
-</h2>
-
-<p>
- Trong N Developer Preview, ứng dụng không thể gửi hoặc nhận các truyền phát {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} hoặc {@link
- android.hardware.Camera#ACTION_NEW_VIDEO}. Hạn chế này giúp
- loại bỏ các tác động về hiệu suất và trải nghiệm của người dùng khi một số ứng dụng phải
- thức dậy để xử lý một ảnh hoặc video mới. N Developer Preview
- mở rộng {@link android.app.job.JobInfo} và {@link
- android.app.job.JobParameters} để cung cấp một giải pháp thay thế.
-</p>
-
-<h3 id="new-jobinfo">
- Các phương thức JobInfo Mới
-</h3>
-
-<p>
- Để kích hoạt tác vụ khi thay đổi URI nội dung, N Developer Preview sẽ mở rộng
- API{@link android.app.job.JobInfo} bằng các phương thức sau:
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- Gói gọn các tham số yêu cầu để kích hoạt tác vụ khi thay đổi URI nội dung.
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- Chuyển một đối tượng {@code TriggerContentUri} đến {@link
- android.app.job.JobInfo}. Một {@link android.database.ContentObserver}
- sẽ theo dõi URI nội dung được gói gọn. Nếu có nhiều đối tượng {@code
- TriggerContentUri} được liên kết với một tác vụ, hệ thống sẽ cung cấp
- lệnh gọi lại ngay cả khi hệ thống báo cáo có sự thay đổi chỉ ở trong một trong những URI nội dung.
- </dd>
-
- <dd>
- Thêm cờ {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} để
- kích hoạt tác vụ nếu bất kỳ kế nhiệm nào của URI đã cho thay đổi. Cờ này
- tương ứng với tham số {@code notifyForDescendants} đã chuyển đến {@link
- android.content.ContentResolver#registerContentObserver
- registerContentObserver()}.
- </dd>
-</dl>
-
-<p class="note">
- <strong>Lưu ý:</strong> {@code TriggerContentUri()} không thể được sử dụng
- kết hợp với {@link android.app.job.JobInfo.Builder#setPeriodic
- setPeriodic()} hoặc {@link android.app.job.JobInfo.Builder#setPersisted
- setPersisted()}. Để tiếp tục theo dõi các thay đổi nội dung, hãy lên lịch một
- {@link android.app.job.JobInfo} mới trước khi {@link
- android.app.job.JobService} của ứng dụng hoàn thành xử lý lệnh gọi lại gần đây nhất.
-</p>
-
-<p>
- Đoạn mã mẫu sau lên lịch kích hoạt một tác vụ khi hệ thống báo cáo
- có sự thay đổi về URI nội dung, {@code MEDIA_URI}:
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MEDIA_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-</pre>
-<p>
- Khi hệ thống báo cáo có sự thay đổi trong (các) URI nội dung được chỉ định, ứng dụng của bạn
- sẽ nhận được lệnh gọi lại và một đối tượng {@link android.app.job.JobParameters} được chuyển sang
- phương thức {@link android.app.job.JobService#onStartJob onStartJob()}
- trong {@code MediaContentJob.class}.
-</p>
-
-<h3 id="new-jobparam">
- Các phương thức JobParameter Mới
-</h3>
-
-<p>
- N Developer Preview cũng mở rộng {@link android.app.job.JobParameters} để
- cho phép ứng dụng của bạn nhận thông tin hữu ích về những gì thẩm quyền nội dung
- và các URI đã kích hoạt tác vụ:
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- Trả về mảng URI đã kích hoạt tác vụ đó. Kết quả trả về có thể bằng {@code
- null} nếu không có URI nào kích hoạt tác vụ (ví dụ như, tác vụ đã được
- kích hoạt do thời hạn hoặc lý do khác), hoặc số các URI
- bị thay đổi nhiều hơn 50.
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- Trả về mảng xâu thẩm quyền nội dung đã kích hoạt tác vụ đó.
- Nếu mảng được trả về không phải {@code null}, hãy dùng {@code getTriggeredContentUris()}
- để truy xuất chi tiết về URI nào đã thay đổi.
- </dd>
-</dl>
-
-<p>
- Mã mẫu sau sẽ ghi đè lên phương thức {@link
- android.app.job.JobService#onStartJob JobService.onStartJob()} và
- và ghi lại các thẩm quyền nội dung và URI đã kích hoạt tác vụ.
-</p>
-
-<pre>
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-</pre>
-
-<h2 id="further-optimization">
- Tối ưu hóa thêm Ứng dụng của bạn
-</h2>
-
-<p>
- Tối ưu hóa ứng dụng của bạn để chạy trên các thiết bị có bộ nhớ ít, hoặc đang trong điều kiện
- bộ nhớ ít có thể cải thiện hiệu suất và trải nghiệm của người dùng. Loại bỏ
- các thành phần phụ thuộc trên các dịch vụ chạy ngầm và bộ thu truyền phát không biểu thị đã đăng ký tĩnh
- có thể giúp ứng dụng của bạn chạy tốt hơn trên các thiết bị như vậy. Mặc dù
- N Developer Preview thực hiện các bước để giảm bớt một vài trong số các vấn đề này, nhưng chúng tôi
- khuyến nghị bạn nên tối ưu ứng dụng của bạn để chạy hoàn toàn không cần sử dụng
- các tiến trình chạy ngầm này.
-</p>
-
-<p>
- N Developer Preview giới thiệu một số lệnh <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a> bổ sung mà
- bạn có thể sử dụng để kiểm thử hành vi của ứng dụng bằng các tiến trình chạy ngầm đã bị vô hiệu hóa đó:
-</p>
-
-<ul>
- <li>Để mô phỏng các điều kiện trong đó các truyền phát không biểu thị và dịch vụ chạy ngầm
- không có sẵn, hãy nhập lệnh sau:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>Để kích hoạt lại các truyền phát không biểu thị và dịch vụ chạy ngầm, hãy nhập
- lệnh sau:
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
\ No newline at end of file
diff --git a/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd b/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd
deleted file mode 100644
index ffb5799..0000000
--- a/docs/html-intl/intl/vi/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,160 +0,0 @@
-page.title=API Khuôn khổ Android ICU4J
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>Trong tài liệu này:</h2>
-<ol>
- <li><a href="#relation">Liên quan đến ICU4J</a></li>
- <li><a href="#migration">Chuyển nhập từ ICU4J sang API android.icu</a></li>
- <li><a href="#licence">Cấp phép</a></li>
-</ol>
-
-<h2>Xem thêm</h2>
-<ol>
- <li>
- <a class="external-link" href="http://userguide.icu-project.org">Tài liệu cho ICU4J</a>
- </li>
-
- <li>
- <a class="external-link" href="http://site.icu-project.org/#TOC-What-is-ICU-">Các tiêu chuẩn mới nhất được ICU4J
- hỗ trợ</a>
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- ICU4J là bộ thư viện Java mã nguồn mở được sử dụng rộng rãi để cung cấp hỗ trợ Unicode
- và toàn cầu hóa cho các ứng dụng phần mềm. Android N
- cung cấp một tập nhỏ các API ICU4J trong khuôn khổ Android cho các nhà phát triển ứng dụng
- sử dụng trong gói {@code android.icu}. Các API này sử dụng
- dữ liệu bản địa hóa có trong thiết bị. Do đó, bạn có thể giảm kích thước tệp APK
- bằng cách không biên dịch các thư viện ICU4J vào tệp APK; thay vào đó bạn có thể
- gọi chúng trong khuôn khổ một cách đơn giản. (Trong trường hợp này, bạn có thể muốn cung cấp
- <a href="{@docRoot}google/play/publishing/multiple-apks.html">nhiều phiên bản
- tệp APK</a> để những người dùng chạy phiên bản Android thấp hơn Android N
- có thể tải phiên bản ứng dụng có chứa các thư viện ICU4J.)
-</p>
-
-<p>
- Tài liệu này sẽ bắt đầu bằng việc cung cấp thông tin cơ bản về các mức Android API
- tối thiểu cần để hỗ trợ các thư viện này. Sau đó tài liệu sẽ giải thích những gì
- bạn cần để hiểu được công việc triển khai ICU4J liên quan cụ thể đến Android. Cuối cùng,
- tài liệu sẽ cho bạn biết cách sử dụng các API ICU4J trong khuôn khổ Android.
-</p>
-
-<h2 id="relation">Liên quan đến ICU4J</h2>
-
-<p>
- Android N cung cấp một tập nhỏ các API ICU4J thông qua
- gói <code>android.icu</code> thay vì gói <code>com.ibm.icu</code>.
-Khuôn khổ Android có thể chọn không
- cung cấp các API ICU4J vì nhiều lý do; ví dụ, Android N không cung cấp
- một số API bị loại bỏ hoặc những API chưa được đội ngũ ICU công bố là
- bản ổn định. Vì nhóm ICU sẽ loại bỏ các API này trong tương lai do đó Android cũng sẽ đánh dấu
- chúng là bị loại bỏ nhưng vẫn tiếp tục thêm vào.
-</p>
-
-<p class="table-caption"><strong>Bảng 1.</strong> Các phiên bản ICU và CLDR được sử dụng
- trong Android N.</p>
-<table>
-<tr>
-<th>Mức Android API</th>
-<th>Phiên bản ICU</th>
-<th>Phiên bản CLDR</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>Sau đây là một vài lưu ý quan trọng:</p>
-
-<ul>
-<li>Các API khuôn khổ Android ICU4J không có tất cả các API của ICU4J.</li>
-<li>Các nhà phát triển NDK cần biết rằng ICU4C Android không được hỗ trợ.</li>
-<li>Các API trong khuôn khổ Android không thay thế hỗ trợ của Android cho
-<a href="{@docRoot}guide/topics/resources/localization.html">việc bản địa hóa bằng
-các tài nguyên</a>.</li>
-</ul>
-
-<h2 id="migration">Chuyển nhập sang gói android.icu từ com.ibm.icu</h2>
-
-<p>
- Nếu bạn đã sử dụng các API ICU4J trong ứng dụng và
- các API <code>android.icu</code> đáp ứng yêu cầu của bạn thì việc chuyển nhập sang
- các API của khuôn khổ đòi hỏi bạn phải thay đổi thành phần nhập vào của Java
- từ <code>com.ibm.icu</code> sang <code>android.icu</code>. Khi đó bạn có thể
- xóa các tệp ICU4J của bạn khỏi tệp APK.
-</p>
-
-<p class="note">
- <b>Lưu ý</b>: Các API khuôn khổ ICU4J sử dụng không gian tên {@code android.icu}
- thay vì {@code com.ibm.icu}. Điều này là để tránh xung đột
- không gian tên trong các tệp APK có chứa các thư viện {@code com.ibm.icu} của riêng chúng.
-</p>
-
-<h3 id="migrate-from-android">
- Chuyển nhập sang các API android.icu từ các API Android SDK khác
-</h3>
-
-<p>
- Một số lớp trong gói <code>java</code> và<code>android</code> có
- các lớp tương ứng với các lớp trong ICU4J. Tuy nhiên, ICU4J thường cung cấp hỗ trợ
- rộng hơn cho các tiêu chuẩn và ngôn ngữ.
-</p>
-<p>Sau đây là một số ví dụ để giúp bạn bắt đầu:</p>
-<table>
-<tr>
-<th>Lớp</th>
-<th>Thay thế</th>
-</tr>
-<tr>
-<td><code>java.lang.Character</code> </td>
-<td><code>android.icu.lang.UCharacter</code> </td>
-</tr>
-<tr>
-<td><code>java.text.BreakIterator</code> </td>
-<td><code>android.icu.text.BreakIterator</code> </td>
-</tr>
-<tr>
-<td><code>java.text.DecimalFormat</code> </td>
-<td><code>android.icu.text.DecimalFormat</code> </td>
-</tr>
-<tr>
-<td><code>java.util.Calendar</code></td>
-<td>
-<code>android.icu.util.Calendar</code></td>
-</tr>
-<tr>
-<td><code>android.text.BidiFormatter</code>
- </td>
-<td><code>android.icu.text.Bidi</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateFormat</code>
- </td>
-<td><code>android.icu.text.DateFormat</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateUtils</code> </td>
-<td><code>android.icu.text.DateFormat</code>
-<code>android.icu.text.RelativeDateTimeFormatter</code>
-</td>
-</tr>
-</table>
-
-<h2 id="licence">Cấp phép</h2>
-
-<p>
- ICU4J được phát hành theo giấy phép ICU. Hãy xem <a class="external-link" href="http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">Hướng dẫn sử dụng
- ICU</a> để biết thêm chi tiết.
-</p>
diff --git a/docs/html-intl/intl/vi/preview/features/multilingual-support.jd b/docs/html-intl/intl/vi/preview/features/multilingual-support.jd
deleted file mode 100644
index 94a7127..0000000
--- a/docs/html-intl/intl/vi/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,217 +0,0 @@
-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">
-<div id="qv">
-<h2>Trong tài liệu này:</h2>
-<ol>
- <li><a href="#preN">Thử thách phân giải tài nguyên ngôn ngữ</a></li>
- <li><a href="#postN">Các cải tiến đối với Chiến lược phân giải tài nguyên</a></li>
- <li><a href="#design">Thiết kế ứng dụng để hỗ trợ các bản địa
- bổ sung</a></li>
-
-</ol>
-
-</div>
-</div>
-
-<p>Android N cung cấp hỗ trợ cải tiến cho người dùng sử dụng nhiều ngôn ngữ,
-cho phép họ chọn nhiều bản địa trong phần cài đặt. Android N
-cung cấp khả năng này bằng cách mở rộng số lượng lớn các bản địa được hỗ trợ
-và thay đổi cách hệ thống phân giải tài nguyên. Phương thức phân giải tài nguyên
-mới hoạt động mạnh mẽ hơn và được thiết kế để tương thích với các tệp APK có sẵn. Tuy nhiên
-bạn cần kiểm tra thêm để phát hiện mọi hành vi không mong muốn. Ví dụ, bạn
-cần kiểm thử để đảm bảo rằng ứng dụng của mình sẽ thiết lập mặc định cho ngôn ngữ mong muốn. Ngoài ra,
-nếu ứng dụng của bạn hỗ trợ đa ngôn ngữ thì bạn cần đảm bảo rằng việc hỗ trợ này hoạt động như
-dự kiến. Cuối cùng, bạn cần cố gắng đảm bảo rằng ứng dụng sẽ xử lý tinh tế
-những ngôn ngữ mà bạn không có ý định thiết kế ứng dụng để hỗ trợ.</p>
-
-<p>Tài liệu này sẽ bắt đầu bằng việc giải thích về chiến lược phân giải tài nguyên trong phiên bản trước
-Android N. Tiếp theo, tài liệu sẽ mô tả chiến lược phân giải tài nguyên
-được cải tiến của Android N. Cuối cùng, tài liệu sẽ giải thích cách sử dụng
-số lượng các bản địa được mở rộng để hỗ trợ thêm nhiều người dùng đa ngữ.</p>
-
-<h2 id="preN">Thử thách phân giải tài nguyên ngôn ngữ</h2>
-
-<p>Trước Android N, không phải lúc nào Android cũng có thể so khớp
-thành công ứng dụng với các bản địa của hệ thống. Ví dụ, giả sử ngôn ngữ mặc định của ứng dụng của bạn
- là Tiếng Anh (Mỹ) nhưng ứng dụng cũng có các xâu văn bản Tiếng Tây Ban Nha được bản địa hóa trong các tệp tài nguyên {@code es_ES}
-.</p>
-<p>Khi mã nguồn Java tham chiếu đến các xâu đó thì nó sẽ phân giải các ngôn ngữ của xâu như
-sau:</p>
-<ul>
-<li>Nếu một thiết bị được đặt thành {@code es_MX} (Tiếng Tây Ban Nha-Mêxicô) thì Android sẽ tải
-xâu từ các tệp tài nguyên {@code es_ES}.</li>
-<li>Nếu thiết bị được đặt thành {@code en_AU} thì Android sẽ trả về {@code
-en_US}. Hệ thống cũng sẽ đặt mặc định thành {@code en_US} nếu người dùng chọn một
-ngôn ngữ mà ứng dụng không hỗ trợ chút nào, ví dụ như Tiếng Pháp.</li>
-</ul>
-
-
-<p>Các vấn đề phân giải này phát sinh bởi vì hệ thống sẽ gỡ mã quốc gia
- khỏi bản địa nếu nó không tìm thấy sự trùng khớp tuyệt đối. Ví dụ:</p>
-<p class="table-caption" id="t-resource-res">
-<strong>Bảng 1.</strong> Phân giải tài nguyên không có trùng khớp bản địa tuyệt đối.
-</p>
-<table>
-<tbody>
-<tr>
-<th>Cài đặt Người dùng</th>
-<th>Tài nguyên Ứng dụng</th>
-<th>Phân giải tài nguyên</th>
-</tr>
-<tr>
-<td>fr_CH</td>
-<td>
-mặc định (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
- <td>
-Thử fr_CH => Không được<br>
-Thử fr => Không được<br>
-Sử dụng mặc định (en)
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>Trong ví dụ này, hệ thống hiển thị các xâu Tiếng Anh mà không
-xác định được liệu người dùng có biết Tiếng Anh hay không. Đây là hành vi khá phổ biến
-ngày nay. Android N cần phải giảm bớt đáng kể tần suất
-của những kết quả như vậy.</p>
-
-<h2 id="postN">Các cải tiến đối với Chiến lược phân giải tài nguyên</h2>
-<p>Android N mang đến cách thức phân giải tài nguyên mạnh mẽ hơn, và
-tìm các giải pháp thay thế hiệu quả hơn một cách tự động. Tuy nhiên, để tăng tốc việc phân giải và nâng cao
-khả năng bảo trì, bạn cần lưu trữ các tài nguyên trong những nhánh ngôn ngữ mẹ phổ biến nhất.
- Ví dụ, nếu trước đây lưu tài nguyên Tiếng Tây Ban Nha trong thư mục {@code es-US}
- thì hãy chuyển chúng vào trong thư mục {@code es-419}, nơi chứa Tiếng Tây Ban Nha Mỹ La-tinh.
- Tương tự, nếu bạn có các xâu tài nguyên trong một thư mục có tên {@code en-GB} thì hãy đổi tên
- thư mục đó thành {@code en-001} (Tiếng Anh quốc tế) bởi vì nhánh mẹ
-phổ biến nhất cho chuỗi <code>en-GB</code> là {@code en-001}.
- Các ví dụ sau sẽ giải thích tại sao các thực hành này sẽ nâng cao hiệu năng và
-độ ổn định của việc phân giải tài nguyên.</p>
-
-<h3>Các ví dụ về phân giải tài nguyên</h3>
-
-<p>Với Android N, trường hợp được mô tả trong <strong>Bảng 1</strong> được phân giải
-theo cách khác:</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>Bảng 2.</strong> Một chiến lược phân giải cải tiến khi không có
-trùng khớp bản địa tuyệt đối.</p>
-<table>
-<tr>
-<th>Cài đặt Người dùng</th>
-<th>Tài nguyên Ứng dụng</th>
-<th>Phân giải tài nguyên</th>
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-</ol>
-</td>
-<td>
-mặc định (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
-<td>
-Thử fr_CH => Không được<br>
-Thử fr => Không được<br>
-Thử nhánh con của fr => fr_FR<br>
-Sử dụng fr_FR
-</td>
-</tr>
-
-</table>
-
-
-<p>Bây giờ thì người dùng sẽ nhận được tài nguyên Tiếng Pháp thay vì Tiếng Anh. Ví dụ này cũng cho thấy
- lý do bạn nên lưu trữ các xâu Tiếng Pháp trong {@code fr} thay vì {@code fr_FR}
- cho Android N. Phương pháp ở đây là ghép nhánh ngôn ngữ mẹ gần nhất,
- giúp cho việc phân giải nhanh hơn và dễ dự đoán hơn.</p>
-
-<p>Ngoài lôgic phân giải được cải tiến này, Android giờ đây cung cấp thêm nhiều
-ngôn ngữ cho người dùng lựa chọn. Chúng ta hãy thử lại ví dụ trên với Tiếng Ý
- được xác định là một ngôn ngữ người dùng bổ sung nhưng không được ứng dụng hỗ trợ cho Tiếng Pháp. </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>Bảng 3.</strong> Phân giải tài nguyên khi ứng dụng chỉ khớp
-với cài đặt bản địa được ưu tiên thứ hai của người dùng.</p>
-<table>
-<tr>
-<th>Cài đặt Người dùng</th>
-<th>Tài nguyên Ứng dụng</th>
-<th>Phân giải tài nguyên</th>
-
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-<li> it_CH</li>
-</ol>
-</td>
-<td>
-mặc định (en)<br>
-de_DE<br>
-es_ES<br>
-it_IT<br>
-</td>
-<td>
-Thử fr_CH => Không được<br>
-Thử fr => Không được<br>
-Thử nhánh con của fr => Không được<br>
-Thử it_CH => Không được<br>
-Thử it => Không được<br>
-Thử nhánh con của it => it_IT<br>
-Sử dụng it_IT
-</td>
-
-</tr>
-
-</table>
-<p>Người dùng vẫn nhận được ngôn ngữ họ biết mặc dù ứng dụng không
-hỗ trợ Tiếng Pháp.</p>
-
-
-<h2 id="design">Thiết kế ứng dụng để hỗ trợ các bản địa bổ sung</h2>
-<h3>API LocaleList</h3>
-
-<p>Android N bổ sung thêm một API {@code LocaleList.GetDefault()}
- mới cho phép các ứng dụng truy vấn trực tiếp danh sách các ngôn ngữ mà người dùng đã chỉ định. API này
-cho phép bạn tạo hành vi ứng dụng
-phức tạp hơn và hiển thị nội dung được tối ưu hóa tốt hơn. Ví dụ, Tìm kiếm
- có thể hiển thị các kết quả bằng nhiều ngôn ngữ dựa trên cài đặt của người dùng. Các ứng dụng trình duyệt
- có thể tránh đề nghị dịch trang web sang một ngôn ngữ mà người dùng đó đã biết,
- và các ứng dụng bàn phím có thể tự động bật tất cả các bố trí phù hợp. </p>
-
-<h3>Bộ định dạng</h3>
-
-<p>Tính tới Android 6.0 (API mức 23), Android 6.0 chỉ hỗ trợ một hoặc hai bản địa
-cho nhiều ngôn ngữ phổ biến
-(en, es, ar, fr, ru). Bởi vì chỉ có một vài biến thể của từng ngôn ngữ,
-các ứng dụng không gặp vấn đề gì với việc lưu trữ một số chữ số và ngày tháng dưới dạng xâu được chèn trực tiếp khi viết mã
-trong các tệp tài nguyên. Tuy nhiên, với tập hợp mở rộng các bản địa được hỗ trợ bởi Android,
-có thể có
-nhiều khác biệt lớn về các định dạng ngày tháng, thời gian, tiền tệ và thông tin
-tương tự ngay cả trong một bản địa. Chèn trực tiếp các định dạng có thể khiến
-người dùng cuối bối rối. Do đó, khi phát triển cho Android N
-hãy đảm bảo sử dụng các bộ định dạng thay vì các xâu chữ số và ngày tháng được chèn trực tiếp khi viết mã.</p>
-
-<p>Một ví dụ điển hình là Tiếng Ả-rập với được Android N hỗ trợ mở rộng từ
-một {@code ar_EG} tới 27 bản địa Tiếng Ả-rập. Các bản địa này có thể chia sẻ hầu hết các tài nguyên,
-nhưng một số bản địa ưu tiên chữ số ASCII trong khi những bản địa khác lại ưu tiên con số truyền thống. Ví dụ,
-khi bạn muốn soạn một câu có biến bằng số, như
-"Choose a 4 digit pin" thì bạn hãy sử dụng bộ định dạng như sau:</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html-intl/intl/vi/preview/features/notification-updates.jd b/docs/html-intl/intl/vi/preview/features/notification-updates.jd
deleted file mode 100644
index f60646a..0000000
--- a/docs/html-intl/intl/vi/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,328 +0,0 @@
-page.title=Thông báo
-page.tags=notifications
-helpoutsWidget=true
-page.image=/preview/images/notifications-card.png
-
-trainingnavtop=true
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<!-- table of contents -->
-<h2>Tài liệu này gồm có</h2>
-<ol>
- <li><a href="#direct">Trả lời Trực tiếp</a></li>
- <li><a href="#bundle">Thông báo Gộp</a></li>
- <li><a href="#custom">Dạng xem Tùy chỉnh</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N giới thiệu một số API mới cho phép ứng dụng đăng
-các thông báo có khả năng hiển thị và tương tác cao.</p>
-
-<p>Android N mở rộng API thông báo {@link android.support.v4.app.RemoteInput}
-hiện có để hỗ trợ trả lời giữa dòng trên thiết bị cầm tay. Tính năng này cho phép người dùng
- phản hồi nhanh chóng từ khu vực hiển thị thông báo mà không cần truy cập ứng dụng của bạn.</p>
-
-<p>
- Android N cũng cho phép bạn gộp các thông báo tương tự nhau để
- xuất hiện dưới dạng một thông báo đơn lẻ. Để điều này có thể xảy ra, Android N sử dụng phương thức {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()} hiện có. Người dùng có thể mở rộng mỗi
- thông báo, và thực hiện các hành động như trả lời và bỏ qua trên mỗi
- thông báo, từng thông báo một từ khu vực hiển thị thông báo.
-</p>
-
-<p>Cuối cùng, Android N cũng thêm các API mới cho phép bạn tận dụng các trang trí
-của hệ thống trong các dạng xem thông báo tùy chỉnh của ứng dụng của bạn. Các API này giúp
-đảm bảo rằng dạng xem thông báo có chung một cách trình bày nhất quán
-với các mẫu tiêu chuẩn.</p>
-
-<p>Tài liệu này nêu bật một số các thay đổi chính mà bạn cần cân nhắc
- khi sử dụng các tính năng thông báo mới trong ứng dụng của mình.</p>
-
-<h2 id="direct">Trả lời Trực tiếp</h2>
-
-<p>Với tính năng Trả lời Trực tiếp trong Android N, người dùng có thể
-phản hồi lại tin nhắn văn bản hoặc cập nhật danh sách tác vụ trực tiếp trong giao diện
-của thông báo. Trên thiết bị cầm tay, hành động trả lời giữa dòng xuất hiện dưới dạng một nút bổ sung
- được gắn kèm với thông báo đó. Khi người dùng trả lời qua bàn phím, hệ thống sẽ đính kèm
- phản hồi bằng văn bản với ý định
- bạn đã quy định cho hành động thông báo và gửi ý định đến ứng dụng cầm tay
- của bạn.
-
-
-<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
- {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
-<p class="img-caption">
- <strong>Hình 1.</strong> Android N thêm nút hành động <strong>Reply</strong>
-.
-</p>
-
-<h3>Thêm các hành động trả lời giữa dòng</h3>
-
-<p>Để tạo một hành động thông báo hỗ trợ trả lời trực tiếp:
-</p>
-
-<ol>
-<li>Tạo thực thể{@link android.support.v4.app.RemoteInput.Builder}
- mà bạn có thể thêm vào hành động
-thông báo của bạn. Hàm dựng của lớp này sẽ chấp nhận xâu mà hệ thống sử dụng làm khóa
- cho nhập liệu văn bản. Sau đó, ứng dụng cầm tay của bạn sử dụng khóa đó để truy xuất văn bản
- nhập liệu.
-
-<pre>
-// Key for the string that's delivered in the action's intent
-private static final String KEY_TEXT_REPLY = "key_text_reply";
-String replyLabel = getResources().getString(R.string.reply_label);
-RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
- .setLabel(replyLabel)
- .build();
-</pre>
-</li>
-<li>Đính kèm đối tượng {@link android.support.v4.app.RemoteInput}
- với một hành động bằng cách sử dụng <code>addRemoteInput()</code>.
-
-<pre>
-// Create the reply action and add the remote input
-Notification.Action action =
- new Notification.Action.Builder(R.drawable.ic_reply_icon,
- getString(R.string.label), replyPendingIntent)
- .addRemoteInput(remoteInput)
- .build();
-</pre>
-</li>
-
-<li>Áp dụng hành động cho thông báo và phát hành thông báo.
-
-<pre>
-// Build the notification and add the action
-Notification notification =
- new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_message)
- .setContentTitle(getString(R.string.title))
- .setContentText(getString(R.string.content))
- .addAction(action))
- .build();
-
-// Issue the notification
-NotificationManager notificationManager =
- NotificationManager.from(mContext);
-notificationManager.notify(notificationId, notification);
-
-</pre>
-</li>
-
-</ol>
-
-
-<p> Hệ thống sẽ nhắc người dùng nhập liệu một phản hồi khi chúng kích hoạt
-hành động thông báo. </p>
-
-<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
- {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Hình 2.</strong> Người dùng nhập liệu văn bản từ khu vực hiển thị thông báo.
-</p>
-
-<h3>Truy xuất mục nhập của người dùng từ trả lời giữa dòng</h3>
-
-<p>Để nhận mục nhập của người dùng từ giao diện thông báo đến hoạt động bạn
-đã khai báo trong ý định của hành động trả lời:</p>
-<ol>
-<li> Gọi {@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()} bằng cách chuyển ý định của hành động thông báo dưới dạng
- tham số đầu vào. Phương thức này trả về {@link android.os.Bundle}
- có chứa phản hồi văn bản.
-</li>
-
-<pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
-
-<li>Truy vấn gói bằng cách sử dụng khóa kết quả (đã cung cấp cho hàm dựng {@link
- android.support.v4.app.RemoteInput.Builder}).
-</li>
-</ol>
-
-<p>Đoạn mã sau minh họa cách thức một phương thức truy xuất văn bản đầu vào
-từ một gói:</p>
-
-<pre>
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-</pre>
-
-<p>Ứng dụng có thể áp dụng lô-gic để quyết định hành động nào nên lấy trên văn bản
-được truy xuất.
-Đối với các ứng dụng tương tác (chẳng hạn như trò chuyện), hãy cung cấp thêm ngữ cảnh trong chính thông báo
- (ví dụ như nhiều dòng lịch sử trò chuyện, gồm có các tin nhắn của riêng người dùng)
- để người dùng có thể phản hồi phù hợp.
-Khi người dùng phản hồi qua {@link android.support.v4.app.RemoteInput},
- hãy bao gồm văn bản trong lịch sử trả lời bằng phương thức {@code setRemoteInputHistory()}
-.</p>
-
-<h2 id="bundle">Thông báo Gộp</h2>
-
-<p>Android N cung cấp cho các nhà phát triển một cách mới để hiển thị
- hàng đợi thông báo: <i>thông báo gộp</i>. Cách hiển thị này tương tự với tính năng
- <a href="{@docRoot}training/wearables/notifications/stacks.html">Ngăn xếp
- Thông báo</a> có trong Android Wear. Ví dụ, nếu ứng dụng của bạn tạo thông báo
- cho tin nhắn nhận được, khi có nhiều hơn một tin nhắn nhận được, hãy gói
- các thông báo lại với nhau thành một nhóm đơn lẻ. Bạn có thể
- sử dụng phương thức {@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()} hiện có để gói các thông báo tương tự.</p>
-
-<p>
- Nhóm thông báo sẽ quy định phân cấp trên các thông báo bao gồm nó.
- Ở trên cùng của phân cấp là thông báo mẹ hiển thị tóm tắt
- thông tin cho nhóm đó. Người dùng có thể mở rộng
- nhóm thông báo tăng dần lên, và hệ thống sẽ hiển thị thêm thông tin khi
- người dùng truy sâu hơn. Khi người dùng mở rộng gói này, hệ thống sẽ lộ ra thêm
- thông tin cho tất cả các thông báo con của gói, khi người dùng
- mở rộng một trong những thông báo đó, hệ thống sẽ lộ ra toàn bộ nội dung của nó.
-</p>
-
-<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
- {@docRoot}preview/images/bundles_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>Hình 3.</strong> Người dùng có thể mở rộng nhóm
- thông báo tăng dần lên.
-</p>
-
-<p>Để tìm hiểu cách thêm thông báo vào một nhóm, xem
-<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">Thêm
-Mỗi Thông báo vào một Nhóm</a>.</p>
-
-
-<h3 id="best-practices">Thực hành tốt nhất cho thông báo gộp</h3>
-<p>Mục này sẽ cung cấp hướng dẫn về việc khi nào sử dụng nhóm thông báo thay vì
- các thông báo{@link android.app.Notification.InboxStyle InboxStyle}
-có sẵn trong các phiên bản cũ hơn của
-nền tảng Android.</p>
-
-<h3>Khi nào nên sử dụng thông báo gộp</h3>
-
-<p>Bạn nên sử dụng các nhóm thông báo chỉ khi tất cả các điều kiện sau là
-đúng đối với trường hợp sử dụng của bạn:</p>
-
-<ul>
- <li>Thông báo con là loại thông báo đầy đủ và có thể được hiển thị
- riêng rẽ mà không cần tóm tắt nhóm.</li>
- <li>Sẽ có lợi khi làm nổi lên các thông báo con một cách riêng rẽ. Ví
-dụ:
- </li>
- <ul>
- <li>Các thông báo này có thể hành động được, bằng các hành động cụ thể cho mỗi thông báo con.</li>
- <li>Có nhiều thông tin hơn đối với thông báo con mà người dùng sẽ muốn đọc.</li>
- </ul>
-</ul>
-
-<p>Các ví dụ về các trường hợp sử dụng tốt nhóm thông báo bao gồm: ứng dụng nhắn tin
-hiển thị danh sách các tin nhắn đến, hoặc ứng dụng email hiển thị danh sách
-các email đã nhận được.</p>
-
-<p>
-Ví dụ về các trường hợp trong đó một thông báo đơn lẻ được ưu tiên
- bao gồm tin nhắn riêng từ một người đơn lẻ, hoặc biểu diễn danh sách
- các mục văn bản một hàng. Bạn có thể sử dụng
-({@link android.app.Notification.InboxStyle InboxStyle} hoặc
-{@link android.app.Notification.BigTextStyle BigTextStyle}) để hoàn thành
-việc này.
-</p>
-
-<h3 id ="post">Hiển thị Thông báo gộp</h3>
-
-<p>
- Ứng dụng sẽ luôn đăng tóm tắt nhóm, ngay cả khi nhóm chỉ chứa
- một thông báo con duy nhất. Hệ thống này sẽ ngăn chặn tóm tắt và hiển thị trực tiếp
- thông báo con nếu nó chỉ chứa một thông báo duy nhất. Điều này đảm bảo
- rằng hệ thống có thể cung cấp một trải nghiệm nhất quán khi người dùng trượt nhanh khỏi
- thông báo con của nhóm.
-</p>
-
-<p class="note">
- <strong>Lưu ý:</strong> Phiên bản Android N này không
- ngăn chặn tóm tắt cho nhóm thông báo có chứa một thông báo con duy nhất. Chức năng
- này sẽ được thêm vào trong phiên bản sau của Android N.
-</p>
-
-<h3>Thông báo lướt nhanh</h3>
-
-<p>Trong khi hệ thống thường hiển thị các thông báo con dưới dạng một nhóm, bạn có thể đặt
- chúng tạm thời hiển thị dưới dạng
- <a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">
- thông báo cảnh báo</a>. Tính năng này đặc biệt hữu ích bởi vì nó cho phép
- truy cập ngay lập tức thông báo con gần đây nhất và các hành động liên kết với thông báo con đó.
-</p>
-
-
-<h3>Tính tương thích ngược</h3>
-
-<p>
- Cả nhóm thông báo và đầu vào từ xa đều là một phần của API {@link
- android.app.Notification} vì Android 5.0 (API mức 21) hỗ trợ
- các thiết bị Android Wear. Nếu bạn đã dựng các thông báo bằng các API này,
- hành động duy nhất bạn cần phải thực hiện là xác minh rằng ứng dụng có hành vi tương ứng
- với các hướng dẫn đã mô tả ở trên, và cân nhắc việc triển khai {@code
- setRemoteInputHistory()}.
-</p>
-
-<p>
- Để hỗ trợ tính tương thích ngược, các API giống vậy sẽ được cung cấp cho
- lớp {@link android.support.v4.app.NotificationCompat}
- của thư viện hỗ trợ, cho phép bạn dựng các thông báo hoạt động trên các phiên bản
- Android cũ hơn. Trên máy tính bảng và thiết bị cầm tay, người dùng chỉ nhìn thấy thông báo tóm tắt,
- vì vậy ứng dụng vẫn có kiểu hòm thư hoặc thông báo tương tự
- biểu diễn cho toàn bộ nội dung thông tin của nhóm. Vì các thiết bị Android
- Wear cho phép người dùng xem các thông báo con thậm chí trên
- các mức nền tảng thấp hơn, bạn nên dựng các thông báo con dù cho mức API
- là mức nào.
-</p>
-
-<h2 id="custom"> Dạng xem Tùy chỉnh</h2>
-<p>Bắt đầu từ Android N, bạn có thể tùy chỉnh dạng xem và
-vẫn có các trang trí hệ thống như tiêu đề thông báo, hành động, và
-các bố trí mở rộng được.</p>
-
-<p>Để kích hoạt khả năng này, Android N thêm các API sau để tạo kiểu cho dạng xem tùy chỉnh
- của bạn:</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> Thông báo kiểu khác với thông báo
-media.</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> Thông báo media tạo kiểu.</dd>
-</dl>
-
-<p>Để sử dụng API mới này, hãy gọi phương thức {@code setStyle()}, chuyển nó sang
-kiểu dạng xem tùy chỉnh mong muốn.</p>
-
-<p>Đoạn mã này cho biết cách dựng đối tượng thông báo tùy chỉnh bằng phương thức
-{@code DecoratedCustomViewStyle()}.</p>
-
-<pre>
-Notification noti = new Notification.Builder()
- .setSmallIcon(R.drawable.ic_stat_player)
- .setLargeIcon(albumArtBitmap))
- .setCustomContentView(contentView);
- .setStyle(new Notification.DecoratedCustomViewStyle())
- .build();
-
-</pre>
diff --git a/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0-testing.jd b/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0-testing.jd
deleted file mode 100644
index d1e1187..0000000
--- a/docs/html-intl/intl/zh-cn/about/versions/nougat/android-7.0-testing.jd
+++ /dev/null
@@ -1,190 +0,0 @@
-page.title=测试指南
-page.image=images/cards/card-n-guide_2x.png
-meta.tags="preview", "testing"
-page.tags="preview", "developer preview"
-
-@jd:body
-
-<div id="tb-wrapper">
- <div id="tb">
- <h2>本文内容</h2>
- <ol>
- <li><a href="#runtime-permissions">测试权限</a></li>
- <li><a href="#doze-standby">测试低电耗模式和应用待机模式</a></li>
- <li><a href="#ids">自动备份和设备标识符</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- 利用 Android N,您有机会确保应用可使用下一平台版本。
-如 <a href="{@docRoot}preview/api-overview.html">API 概览</a>和<a href="{@docRoot}preview/behavior-changes.html">行为变更</a>中所述,该 Preview 包括大量 API 和可能影响应用的行为变更。
-
-使用 Preview 测试应用时,您应重点关注一些特定的系统变更,确保用户拥有愉悦的体验。
-
-
-</p>
-
-<p>
- 本指南介绍可使用您的应用测试 Preview 的哪些功能以及如何测试。您应确定优先测试以下特定 Preview 功能,因为它们可能会对应用行为产生较大影响。
-
-
-</p>
-
-<ul>
- <li><a href="#runtime-permissions">权限</a>
- </li>
- <li><a href="#doze-standby">低电耗模式和应用待机模式</a>
- </li>
- <li><a href="#ids">自动备份和设备标识符</a></li>
-</ul>
-
-<p>
- 如需了解有关如何使用 Preview 系统映像设置设备或虚拟设备以进行测试的详细信息,请参阅<a href="{@docRoot}preview/setup-sdk.html">设置 Android N SDK</a>。
-
-
-</p>
-
-
-<h2 id="runtime-permissions">测试权限</h2>
-
-<p>
- 新<a href="{@docRoot}preview/features/runtime-permissions.html">权限</a>模型改变了用户向您的应用分配权限的方式。
-您的应用必须在运行时要求用户提供各项权限,而不是在安装过程中要求授予所有权限。
-
-对于用户而言,此行为有助于他们更精细地控制每个应用的 Activity,并更深入地了解应用为何请求提供特定权限的上下文信息。
-用户可以随时向应用授予某项权限或撤销其某项权限。
-预览版的这种功能最有可能会对应用行为产生影响,而且可能会阻止某些应用功能运行或只能在降级状态中运行。
-
-
-</p>
-
-<p class="caution">
- 这一变更会影响在新平台上运行的所有应用,即便这些应用并非面向新平台版本开发亦是如此。
-该平台为旧版应用提供有限的兼容性行为,但您现在应当开始计划将应用迁移到新权限模型,以便在官方平台启动时发布更新的应用版本。
-
-
-</p>
-
-
-<h3 id="permission-test-tips">测试提示</h3>
-
-<p>
- 使用以下测试提示有助于您计划并通过新权限行为执行应用测试。
-
-</p>
-
-<ul>
- <li>识别应用的当前权限和相关的代码路径</li>
- <li>跨受权限保护的服务和数据测试用户流程</li>
- <li>使用授予/撤销权限的各种组合进行测试</li>
- <li>使用 {@code adb} 工具从命令行管理权限:
- <ul>
- <li>按组列出权限和状态:
- <pre>adb shell pm list permissions -d -g</pre>
- </li>
- <li>使用以下语法授予或撤销一项或多项权限:<br>
- <pre>adb shell pm [grant|revoke] <permission.name> ...</pre>
- </li>
- </ul>
- </li>
- <li>针对使用权限的服务对应用进行分析</li>
-</ul>
-
-<h3 id="permission-test-strategy">测试策略</h3>
-
-<p>
- 权限更改会影响应用的结构和设计,以及您为用户提供的用户体验和流程。
-您应评估应用的当前权限使用情况并开始计划要提供的新流程。
-平台的正式版本提供兼容性行为,但您应计划更新应用,而不是依赖于这些行为。
-
-
-</p>
-
-<p>
- 确定应用实际需要和使用的权限,然后找出各种使用受权限保护的服务的代码路径。
-您可通过结合使用新平台测试和代码分析完成此操作。
-在测试中,您应通过将应用的 {@code targetSdkVersion} 更改为预览版,重点关注选择运行时权限。
-如需了解详细信息,请参阅<a href="{@docRoot}preview/setup-sdk.html#">设置 Android N SDK</a>。
-
-
-</p>
-
-<p>
- 使用已撤销和已添加权限的各种组合进行测试,突出显示依赖于权限的用户流程。
-如果依赖关系不明显或不符合逻辑,则您应考虑重构或划分该流程,以消除依赖关系或阐明需要权限的原因。
-
-
-</p>
-
-<p>
- 如需了解有关运行时权限行为、测试和最佳做法的详细信息,请参阅<a href="{@docRoot}preview/features/runtime-permissions.html">权限</a>开发者预览版页面。
-
-
-</p>
-
-
-<h2 id="doze-standby">测试低电耗模式和应用待机模式</h2>
-
-<p>
- 当设备处于空闲状态或应用未聚焦时,低电耗模式和应用待机模式的节能功能将限制应用可执行的后台处理工作量。
-系统可对应用实施的限制包括:限制或禁止访问网络、暂停后台任务、暂停通知、忽略唤醒请求和闹铃。
-
-要确保应用在完成这些节能优化后正常运行,您应通过模拟这些低功耗状态对应用进行测试。
-
-
-</p>
-
-<h4 id="doze">在低电耗模式下测试您的应用</h4>
-
-<p>要在低电耗模式下测试您的应用,请执行以下操作:</p>
-
-<ol>
-<li>使用 Android N 系统映像配置硬件设备或虚拟设备</li>
-<li>将设备连接到开发计算机并安装应用</li>
-<li>运行应用并使其保持活动状态</li>
-<li>通过运行以下命令,模拟进入低电耗模式的设备:
-
-<pre>
-$ adb shell dumpsys battery unplug
-$ adb shell dumpsys deviceidle step
-$ adb shell dumpsys deviceidle -h
-</pre>
-
- </li>
- <li>观察重新激活设备时的应用行为。确保应用在设备退出低电耗模式时正常恢复
-</li>
-</ol>
-
-
-<h4 id="standby">在应用待机模式下测试您的应用</h4>
-
-<p>要在应用待机模式下测试您的应用,请执行以下操作:</p>
-
-<ol>
- <li>使用 Android N 系统映像配置硬件设备或虚拟设备</li>
- <li>将设备连接到开发计算机并安装应用</li>
- <li>运行应用并使其保持活动状态</li>
- <li>通过运行以下命令,模拟进入待机模式的应用:
-
-<pre>
-$ adb shell am broadcast -a android.os.action.DISCHARGING
-$ adb shell am set-idle <packageName> true
-</pre>
-
- </li>
- <li>使用以下命令模拟如何唤醒应用:
- <pre>$ adb shell am set-idle <packageName> false</pre>
- </li>
- <li>观察唤醒后的应用行为。确保应用从待机模式中正常恢复。
-特别地,您应检查应用的通知和后台作业是否按预期继续运行
-</li>
-</ol>
-
-<h2 id="ids">自动备份应用和设备特定的标识符</h2>
-
-<p>如果应用坚持在内部存储中使用任何设备特定的标识符,如 Google 云消息传递注册 ID,请确保遵循最佳做法将存储位置从自动备份中排除,如<a href="{@docRoot}preview/backup/index.html">自动备份应用</a>中所述。
-
-
-
- </p>
diff --git a/docs/html-intl/intl/zh-cn/about/versions/nougat/index.jd b/docs/html-intl/intl/zh-cn/about/versions/nougat/index.jd
index 74cd039..5619de8 100644
--- a/docs/html-intl/intl/zh-cn/about/versions/nougat/index.jd
+++ b/docs/html-intl/intl/zh-cn/about/versions/nougat/index.jd
@@ -1,78 +1,63 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<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 N Developer Preview</h1>
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- 为 Android N 进行准备!
+ 为 Android Nougat 进行准备!
在 Nexus 和其他设备上<strong>测试您的应用</strong>。支持新系统行为以<strong>节省电量和内存</strong>。
使用<strong>多窗口 UI</strong> 扩展您的应用,以便能够<strong>直接答复通知</strong>及执行其他操作。
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
入门指南
- </a><!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ </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}images/home/n-preview-hero.png" srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
+ srcset="{@docRoot}images/home/n-preview-hero.png 1x,
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
+ data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
+ data-maxResults="3"></div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
报告问题
</a>
</li>
<li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- 查阅版本说明
- </a>
- </li>
- <li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
加入开发者社区
@@ -82,26 +67,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
-
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 报告问题
- </a></div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 查阅版本说明
- </a></div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 加入开发者社区</a>
-</div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light dac-small" id="latest"><div class="wrap">
<h2 class="norule">最新</h2>
<div class="resource-widget resource-flow-layout col-16"
@@ -113,19 +78,33 @@
data-initial-results="3"></div>
</div></section>
-<section class="dac-section dac-gray"><div class="wrap">
- <h1 class="dac-section-title">资源</h1>
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
- 这些必备信息可帮助您的应用为Android N做好准备。
+ New Android capabilities and the right way to use them in your apps.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
+ 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-light" id="resources"><div class="wrap">
+ <h1 class="dac-section-title">资源</h1>
+ <div class="dac-section-subtitle">
+ 这些必备信息可帮助您的应用为Android Nougat做好准备。
+ </div>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
-
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-cn/distribute/tools/promote/badges.jd b/docs/html-intl/intl/zh-cn/distribute/tools/promote/badges.jd
index 1c82161..cc1234d 100644
--- a/docs/html-intl/intl/zh-cn/distribute/tools/promote/badges.jd
+++ b/docs/html-intl/intl/zh-cn/distribute/tools/promote/badges.jd
@@ -35,7 +35,7 @@
vertical-align: middle;
margin: 0 5px 0 0;
}
-#jd-content div.button-row img {
+#body-content div.button-row img {
margin: 0;
vertical-align: middle;
}
diff --git a/docs/html-intl/intl/zh-cn/index.jd b/docs/html-intl/intl/zh-cn/index.jd
index ca3a84b..c1a5d6f 100644
--- a/docs/html-intl/intl/zh-cn/index.jd
+++ b/docs/html-intl/intl/zh-cn/index.jd
@@ -5,49 +5,36 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-invert" style="background-color:#455A64">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="col-7of16 col-push-9of16" style="padding-left:2em;">
- <a href="{@docRoot}preview/index.html">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Get ready for the next version of Android!
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
- behaviors to <strong>save power and memory</strong>.
+<section class="dac-expand dac-hero" style="background-color:#b2dfdb;">
+ <div class="wrap" style="max-width:1000px;margin-top:0">
+ <div class="col-7of16 col-push-8of16">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <h1 class="dac-hero-title" style="color:#004d40">Android 7.0 Nougat!</h1>
+ <p class="dac-hero-description" style="color:#004d40">
+ <strong>Android 7.0 Nougat is here!</strong>
+ Get your apps ready for the latest version of Android, with new system
+ behaviors to <strong>save battery and memory</strong>.
Extend your apps with <strong>multi-window UI</strong>,
<strong>direct reply notifications</strong> and more.
</p>
- <a class="dac-hero-cta" href="/preview/index.html">
- <span class="dac-sprite dac-auto-chevron"></span>
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron" style="background-color:#b2dfdb"></span>
Learn more
- </a><!--<br>
- <a class="dac-hero-cta" href="/preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Developer Preview (final SDK)
- </a><br>-->
+ </a>
+ </a>
</a>
</div>
- <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:0em;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,
- /images/home/n-preview-hero_2x.png 2x">
+ <div class="col-6of16 col-pull-6of16 dac-hero-figure" style="padding-left:1em;padding-top:1em;">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/nougat_bg.jpg"
+ srcset="{@docRoot}images/home/nougat_bg.jpg 1x,
+ {@docRoot}images/home/nougat_bg_2x.jpg 2x">
</a>
</div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
<i class="dac-sprite dac-arrow-down-gray"></i>
@@ -75,28 +62,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
- <i class="dac-sprite dac-arrow-down-gray"></i>
- </a>
- <div class="actions">
- <div><a href="{@docRoot}sdk/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Get the SDK
- </a></div>
- <div><a href="{@docRoot}samples/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Browse Samples
- </a></div>
- <div><a href="{@docRoot}distribute/stories/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Watch Stories
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light" id="build-apps"><div class="wrap">
<h1 class="dac-section-title">Build Beautiful Apps</h1>
<div class="dac-section-subtitle">
diff --git a/docs/html-intl/intl/zh-cn/preview/download_mp2.jd b/docs/html-intl/intl/zh-cn/preview/download_mp2.jd
deleted file mode 100644
index ba5249a..0000000
--- a/docs/html-intl/intl/zh-cn/preview/download_mp2.jd
+++ /dev/null
@@ -1,359 +0,0 @@
-page.title=下载
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">在下载和安装预览版 Android SDK 的组件之前,您必须同意下列条款和条件。
-</p>
-
- <h2 class="norule">条款和条件</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-本协议是 Android SDK 预览版许可协议(以下称为“许可协议”)。
-
-1. 简介
-
-1.1 Android SDK 预览版(在本许可协议中简称为“预览版”,具体包括 Android 系统文件、封装 API 以及预览版库文件(若可用))依据本许可协议的条款授权您使用。本许可协议在您与 Google 之间就您对“预览版”的使用构成具有法律约束力的合约。
-
-1.2 “Android”是指以 Android 开源项目(项目网址为 http://source.android.com/,其内容会不时更新)名义提供、面向设备的 Android 软件栈。
-
-1.3 “Google”是指 Google Inc.,是一家特拉华州公司,主要营业地位于:1600 Amphitheatre Parkway, Mountain View, CA 94043, United States。
-
-2. 接受许可协议
-
-2.1 要使用“预览版”,您必须先同意本许可协议。如果您不接受本许可协议,则不得使用“预览版”。
-
-2.2 点击接受并/或使用“预览版”,即表示您特此同意本许可协议的条款。
-
-2.3 如果依照美国或其他国家/地区(包括您居住或您使用“预览版”所在的国家/地区)的法律,您被禁止获取“预览版”,则您不得使用“预览版”,也不得接受本许可协议。
-
-2.4 如果您将在贵公司或组织内部使用“预览版”,则您同意代表您的雇主或其他实体接受本许可协议的约束,并且您表示并保证您拥有完全的合法授权令您的雇主或上述实体受本许可协议的约束。如果您不具备必要的授权,则不得代表您的雇主或其他实体接受本许可协议或使用“预览版”。
-
-3. Google 预览版许可
-
-3.1 Google 依据本许可协议的条款授予您个人或在贵公司或组织内部有限使用“预览版”的免版税、不可转让、非独占性、不可再授权且可撤销的许可,其用途仅限开发在 Android 平台上运行的应用。
-
-3.2 您同意 Google 或第三方拥有“预览版”中存在或相关的全部合法权利、所有权和利益,包括“预览版”中存在的任何知识产权。“知识产权”是指根据专利法、版权法、商业机密法、商标法享有的任何及全部权利,以及其他任何及全部专有权利。Google 保留所有未明确授予您的权利。
-
-3.3 您不得将“预览版”用于本许可协议未明确允许的任何用途。您不得:(a) 对“预览版”或“预览版”的任何部分进行复制(备份用途除外)、修改、改编、再分发、反编译、逆向工程、反汇编或创建其衍生品;或 (b) 将“预览版”的任何部分加载到移动手持终端或除个人计算机之外的任何其他硬件设备上,将“预览版”的任何部分与其他软件合并,或者发行任何融入“预览版”某一部分的软件或设备。
-
-3.4 您同意您将不会进行任何可能引起或导致 Android 碎片化的行动,包括但不限于分发、参与创建或以任何方式推广从“预览版”衍生的软件开发工具包。
-
-3.5 对于依据开源软件许可授权的“预览版”组件,其使用、复制和分发仅受该开源软件许可条款的制约,不受本许可协议的约束。您同意在依照被授予的所有权利作为被许可方期间,在遵守此类开源软件许可协议方面始终保持良好的信誉,并避免进行任何可能导致终止、暂停或违反此类权利的行动。
-
-3.6 您同意 Google 所提供“预览版”的形式和性质可随时发生变更,而无需事先通知您,并且未来的“预览版”版本可能会与在之前的“预览版”版本上开发的应用不兼容。您同意 Google 可单方面决定在未事先通知您的情况下全面停止(永久性或暂时性)向您或用户提供“预览版”(或“预览版”内的任何功能)。
-
-3.7 本许可协议内没有任何条款授予您使用 Google 的任何商品名、商标、服务标志、徽标、域名或其他独特品牌特征的权利。
-
-3.8 您同意您不会移除、遮盖或篡改“预览版”上可能贴有或“预览版”内可能包含的任何专有权利声明(包括版权声明和商标声明)。
-
-4. 您对“预览版”的使用
-
-4.1 Google 同意本许可协议中的任何条款均未授予 Google 从您(或您的许可方)处获取您依照本许可协议使用“预览版”开发的任何软件应用中存在或与其相关的权利、所有权或利益,包括这些应用中存在的任何知识产权。
-
-4.2 您同意只出于 (a) 本许可协议和 (b) 相关管辖区域内任何适用法律、法规或公认惯例或准则(包括有关向美国或其他相关国家/地区出口数据或软件或从美国或其他相关国家/地区进口数据或软件的任何法律)所允许的目的而使用“预览版”和编写应用。
-
-4.3 您同意,如果您使用“预览版”开发应用,您将会保护用户的隐私权和合法权利。如果用户向您提供用户名、密码或其他登录信息或个人信息,您必须确保用户知晓这些信息将供您的应用使用,并且您必须为这些用户提供足以满足法律要求的隐私声明和保护。如果您的应用存储由用户提供的个人信息或敏感信息,其存储方式必须安全。如果用户向您提供 Google 帐户信息,您的应用只能在用户允许时出于用户所许可的有限目的使用该信息访问用户的 Google 帐户。
-
-4.4 您同意您不会利用“预览版”从事任何干扰、中断、损坏或以未经授权方式访问 Google 或任何第三方的服务器、网络或其他财产或服务的Activity(包括应用的开发或分发)。
-
-4.5 您同意您对通过 Android 和/或 Android 应用创建、传输或显示的任何数据、内容或资源以及您的行为所导致的后果(包括 Google 可能遭受的任何损失或损害)负全责(Google 在上述方面对您或任何第三方不承担任何责任)。
-
-4.6 您同意您为违反本许可协议、任何适用的第三方合约或服务条款或任何适用法律或法规下的义务以及任何上述违规行为所导致的后果(包括 Google 或任何第三方可能遭受的任何损失或损害)负全责(Google 在上述方面对您或任何第三方不承担任何责任)。
-
-4.7 “预览版”正在开发中,您的测试和反馈是开发过程的重要环节。使用“预览版”,即表示您承认某些功能仍在开发实现之中,您不应期望“预览版”具备稳定版本的全部功能。您同意不使用此“预览版”公开发布或发运任何应用,因为此“预览版”在 Android SDK 正式发行之后将不再受支持。
-
-5. 您的开发者凭据
-
-5.1 您同意,对于 Google 可能向您发放或可能由您自行选择的任何开发者凭据,您有责任保持其机密性,并且您对以您的开发者凭据名义开发的所有应用负全责。
-
-6. 隐私权和信息
-
-6.1 为持续创新和改进“预览版”,Google 可能会从软件收集某些使用统计数据,包括但不限于唯一标识符、关联的 IP 地址、软件的版本号以及有关软件使用了“预览版”中哪些工具和/或服务及其使用方式的信息。在收集任何上述信息之前,“预览版”都会通知您并征求您的同意。如果您拒绝同意,我们将不会收集这些信息。
-
-6.2 我们会对收集的数据进行汇总调查,以便改进“预览版”,并会按照 Google 的隐私政策(网址为 http://www.google.com/policies/privacy/)维护数据。
-
-7. 第三方应用
-
-7.1 如果您使用“预览版”运行由第三方开发或访问由第三方提供的数据、内容或资源的应用,您同意 Google 对这些应用、数据、内容或资源不承担任何责任。您理解,您通过上述第三方应用可能访问到的所有数据、内容或资源由其提供者负全责,Google 对您因使用或访问其中任何第三方应用、数据、内容或资源而遭受的任何损失或损害不承担任何责任。
-
-7.2 您应知晓,通过此类第三方应用提供给您的数据、内容和资源可能受提供商(或代表他们的其他人员或公司)所拥有的知识产权的保护。除非相关所有者明确给予许可,否则您不得修改、出租、租赁、借出、出售、分发这些数据、内容或资源(的全部或部分),或以其为基础创建衍生品。
-
-7.3 您承认您对上述第三方应用、数据、内容或资源的使用可能受到您与相关第三方之间单独订立的条款的制约。
-
-8. 使用 Google API
-
-8.1 Google API
-
-8.1.1 如果您使用任何 API 从 Google 检索数据,即表示您承认这些数据可能受到 Google 或这些数据提供方(或代表他们的其他人员或公司)拥有的知识产权的保护。您对任何上述 API 的使用可能受到附加服务条款的制约。除非相关服务条款允许,否则您不得修改、出租、租赁、借出、出售、分发这些数据(的全部或部分),或以其为基础创建衍生品。
-
-8.1.2 如果您使用任何 API 从 Google 检索用户数据,即表示您承认并同意您只有在征得用户明确同意时才会检索数据,并且只能在用户允许时出于用户许可的有限目的检索数据。
-
-9. 终止许可协议
-
-9.1 本许可协议将持续有效,直至您或 Google 按以下规定终止本协议。
-
-9.2 如果您想终止本许可协议,可通过停止使用“预览版”以及任何相关开发者凭据予以终止。
-
-9.3 Google 有权在向您在作出通知后,有理由或无理由地随时终止与您订立的这份许可协议。
-
-9.4 本许可协议将在下列情况下自动终止,而无需另行通知或采取其他行动,以先符合条件者为准:
-(A) Google 在您居住或使用服务所在国家/地区停止向用户提供“预览版”或“预览版”的某些部分;
-(B) Google 发行 Android SDK 的最终版本。
-
-9.5 在本许可协议终止时,本许可协议中向您授予的许可将终止,您应立即完全停止使用“预览版”,并且第 10、11、12 和 14 节的条款将无限期继续存在。
-
-10. 免责声明
-
-10.1 您明确理解并同意,您使用“预览版”的风险将由您自行承担,并且“预览版”是按“原样”和“现状”提供,Google 不提供任何类型的担保。
-
-10.2 您对“预览版”的使用以及通过使用“预览版”下载或以其他方式获得的任何材料由您自行决定,风险自负,并且对于因此类使用而对您的计算机系统或其他设备造成的任何损害或数据损失由您单方面负责。在不对上文所述予以限制的条件下,您了解“预览版”并非稳定版本,可能存在将导致重大损害的错误、缺陷和安全漏洞,包括无法挽回地完全无法使用您的计算机系统或其他设备。
-
-10.3 Google 进一步明确拒绝任何类型的所有担保和条件,无论明示或暗示,包括但不限于有关适销性、特定用途适用性以及非侵权的暗示担保和条件。
-
-11. 有限责任
-
-11.1 您明确理解并同意,对于您可能遭遇的任何直接、间接、附带、特殊、继发或惩罚性损害(包括任何数据损失),Google 及其子公司和附属公司以及其许可方在任何责任理论下对您概不承担任何责任,无论 Google 或其代表是否已被告知或是否本应知晓发生任何上述损失的可能性。
-
-12. 赔偿
-
-12.1 您同意,在法律所允许的最大限度内,为 Google、其附属公司及其各自的董事、高管、员工和代理商提供辩护,使其免于因下列情况引起或产生的任何及所有索赔、诉讼、起诉或诉讼程序以及任何及所有损失、债务、损害、成本和费用(包括合理的律师费用)而承担责任或遭受损害:(a) 您对“预览版”的使用;(b) 您在“预览版”上开发的任何应用侵犯任何人的任何知识产权或诽谤任何人或侵犯其公开权或隐私权;以及 (c) 您的任何行为有悖于本许可协议
-
-13. 许可协议的更改
-
-13.1 Google 可能会在分发新版本“预览版”时对许可协议做出更改。做出这些更改后,Google 将在提供“预览版”的网站上公布新版本的许可协议。
-
-14. 一般法律条款
-
-14.1 本许可协议构成您与 Google 之间的完整法律协议,管辖您对“预览版”(不包括 Google 可能依据另外的书面协议向您提供的任何服务)的使用,并完全取代您之前与 Google 之间签订的、与“预览版”有关的任何协议。
-
-14.2 您同意,如果 Google 未行使或未强制执行本许可协议包含的任何法定权利或救济(或 Google 在任何适用法律下享有的相关利益),不得视为 Google 正式放弃这些权利,Google 仍可获得这些权利或救济。
-
-14.3 如果任何拥有管辖权的法院将本许可协议的任何条款裁定为无效,则该条款将从本许可协议中删除,而不会影响本许可协议的其余部分。本许可协议的其余条款将继续有效且可强制执行。
-
-14.4 您承认并同意,Google 集团旗下的每一家公司都将成为本许可协议的第三方受益人,并且此类其他公司将有权直接强制执行和依赖本许可协议中任何授予其利益(或支持其权利)的条款。除此之外,任何其他人员或公司均不得成为本许可协议的第三方受益人。
-
-14.5 出口限制。“预览版”受美国出口法律和法规的制约。您必须遵守适用于“预览版”的所有国内和国际出口法律和法规。这些法律包括目的地、最终用户和最终用途方面的限制。
-
-14.6 未经 Google 事先书面批准,您不得擅自转让或转移本许可协议,未经此类批准而试图进行的任何转让均为无效。未经 Google 事先书面批准,您不得委托您依据本许可协议所应承担的责任或义务。
-
-14.7 本许可协议以及您与 Google 依据本许可协议而建立的关系受加利福尼亚州法律管辖,而无论其是否与其他法律条款冲突。您与 Google 同意服从位于加利福尼亚州圣克拉拉县内法院的专属司法管辖权,以解决本许可协议引起的任何法律事务。尽管有上述规定,您同意仍允许 Google 在任何管辖区域申请禁令救济(或同等类型的紧急法律救济)。
- </div><!-- sdk terms -->
-
-
-
- <div id="sdk-terms-form">
- <p>
- <input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
- <label id="agreeLabel" for="agree">我已阅读并同意上述条款和条件</label>
- </p>
- <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
- </div>
-
-
- </div><!-- end TOS -->
-
-
- <div id="landing">
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>本文内容</h2>
- <ol>
- <li><a href="#sdk">预览版 SDK</a></li>
- <li><a href="#docs">开发者文档</a></li>
- <li><a href="#images">硬件系统映像</a></li>
- </ol>
- <h2>Legacy downloads</h2>
- <ol>
- <li><a href="{@docRoot}preview/download_mp1.html">Developer Preview Archive</a></li>
- </ol>
- </div>
-</div>
-
-
-<p>
- Android M 预览版 SDK 包括开发工具、Android 系统文件和库文件,旨在帮助您在下一版本的平台中测试您的应用以及该平台提供的新 API。
-本文旨在介绍如何获得“预览版”的可下载组件,以便测试您的应用。
-
-</p>
-
-
-<h2 id="sdk">预览版 SDK</h2>
-
-<p>
- 预览版 SDK 可通过 <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK 管理器</a>下载。如需了解有关下载和配置预览版 SDK 的详细信息,请参阅<a href="{@docRoot}preview/setup-sdk.html#downloadSdk">设置预览版 SDK</a>。
-
-</p>
-
-
-<h2 id="docs">开发者文档</h2>
-
-<p>
- 开发者文档下载软件包提供详细的 API 参考信息和“预览版”的 API 差异报告。
-</p>
-
-<table>
- <tr>
- <th scope="col">Description</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="docs-dl">
- <td>Android M Preview 2<br>Developer Docs</td>
- <td><a href="#top" onclick="onDownload(this)"
- >m-preview-2-developer-docs.zip</a><br>
- MD5: 1db6fff9c722b0339757e1cdf43663a8<br>
- SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157
- </td>
- </tr>
-</table>
-
-
-<h2 id="images">硬件系统映像</h2>
-
-<p>
- 这些系统映像允许您在实际设备上安装预览版平台,以便进行测试。
-通过使用这些映像之一配置设备,您可以安装并测试您的应用,以了解其在下一版本平台上的性能表现。
-在设备上安装系统映像的过程会<em>删除设备中的所有数据</em>,因此您应该在安装系统映像之前备份数据。
-
-
-</p>
-
-<p class="warning">
- <b>警告:</b>以下 Android 系统映像是预览版,可能会随时发生变化。您对这些系统映像的使用受 Android SDK 预览版许可协议的制约。
-Android 预览版系统映像并非稳定版本,可能包含会对您的计算机系统、设备和数据造成损害的错误和缺陷。
-
-Android 预览版系统映像未经过与出厂操作系统相同的测试,可能会导致您的手机和安装的服务与应用停止工作。
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">Device</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="hammerhead">
- <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >hammerhead-MPZ79M-preview-b1f4bde4.tgz</a><br>
- MD5: 2ca9f18bf47a061b339bab52647ceb0d<br>
- SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939
- </td>
- </tr>
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-MPZ79M-preview-e1024040.tgz</a><br>
- MD5: 24a2118da340b9afedfbdfc026f6ff81<br>
- SHA-1: e10240408859d5188c4aae140e1c539130ba614b
- </td>
- </tr>
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-MPZ79M-preview-9f305342.tgz</a><br>
- MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e<br>
- SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-MPZ79N-preview-fb63af98.tgz</a><br>
- MD5: e8d081137a20b66df595ee69523314b5<br>
- SHA-1: fb63af98302dd97be8de9313734d389ccdcce250
- </td>
- </tr>
-
-</table>
-
-<h3 id="install-image">将映像安装到设备</h3>
-
-<p>
- 要使用设备映像进行测试,您必须将其安装到兼容设备上。请按照下面的说明安装系统映像:
-
-</p>
-
-<ol>
- <li>下载并解压此处列出的系统映像包之一。</li>
- <li>备份设备中您希望予以保留的任何数据。</li>
- <li>按照
-<a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
- 中的说明将映像刷入设备中。</li>
-</ol>
-
-<p class="note">
- <strong>注:</strong>为开发设备刷入预览版系统映像之后,它将通过无线 (OTA) 更新自动升级到下一个预览版本。
-
-</p>
-
-<h3 id="revertDevice">将设备还原至出厂规格</h3>
-
-<p>
- 如果您想要卸载预览版并将设备还原至出厂规格,请转到
-<a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a> 并下载要为设备刷入的映像。
-按照该页面上的说明将映像刷入设备中。
-
-</p>
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/";
- function onDownload(link) {
-
- $("#downloadForRealz").html("Download " + $(link).text());
- $("#downloadForRealz").attr('href', urlRoot + $(link).text());
-
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
-
- return true;
- }
-
-
- function onAgreeChecked() {
- /* verify that the TOS is agreed */
- if ($("input#agree").is(":checked")) {
- /* reveal the download button */
- $("a#downloadForRealz").removeClass('disabled');
- } else {
- $("a#downloadForRealz").addClass('disabled');
- }
- }
-
- function onDownloadForRealz(link) {
- if ($("input#agree").is(':checked')) {
- /*
- $("#tos").fadeOut('fast');
- $("#landing").fadeIn('fast');
- */
-
- ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html());
-
- /*
- location.hash = "";
- */
- return true;
- } else {
- return false;
- }
- }
-
- $(window).hashchange( function(){
- if (location.hash == "") {
- location.reload();
- }
- });
-
-</script>
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
deleted file mode 100644
index 4ce58aa..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,391 +0,0 @@
-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">
- <div id="qv">
- <h2>
- 本文内容
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">对 CONNECTIVITY_ACTION 的限制</a>
- </li>
-
- <li>
- <a href="#sched-jobs">安排连入无限流量连接时的网络作业</a>
-
- </li>
-
- <li>
- <a href="#monitor-conn">在应用运行时监控网络连接</a>
-
- </li>
-
- <li>
- <a href="#media-broadcasts">对 NEW_PICTURE 和 NEW_VIDEO 的限制</a>
-
- </li>
-
- <li>
- <a href="#new-jobinfo">新的 JobInfo 方法</a>
- </li>
-
- <li>
- <a href="#new-jobparam">新的 JobParameter 方法</a>
- </li>
-
- <li>
- <a href="#further-optimization">进一步优化您的应用</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- 后台进程非常耗费内存和电池。例如,隐式广播可以启动许多已注册侦听它的后台进程,即使这些进程可能没有执行许多工作。
-
-这会严重影响设备性能和用户体验。
-
-</p>
-
-<p>
- 为缓解这个问题,Android N 应用了以下限制:
-
-</p>
-
-<ul>
- <li>面向 Preview 的应用不会收到 {@link
-android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,即使它们在清单中注册接收这些广播。
-运行的应用如果使用 {@link android.content.Context#registerReceiver Context.registerReceiver()} 注册
-{@link android.content.BroadcastReceiver},则仍可在主线程上侦听 {@code CONNECTIVITY_CHANGE}。
-
-
- </li>
-
- <li>应用无法发送或接收 {@link
-android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link
-android.hardware.Camera#ACTION_NEW_VIDEO} 广播。此项优化会影响所有应用,而不仅仅是面向 Preview 的应用。
-
- </li>
-</ul>
-
-<p>
- 如果您的应用使用任何 Intent,您仍需要尽快移除它们的依赖关系,以正确适配 Android N 设备。
-
- Android 框架提供多个解决方案来缓解对这些隐式广播的需求。
-例如,{@link android.app.job.JobScheduler}
-和<a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
-{@code GcmNetworkManager}</a> 提供了一个稳健可靠的机制来安排满足指定条件(例如连入无限流量网络)时所执行的网络操作。
-
-现在,您还可以使用 {@link android.app.job.JobScheduler}
-来响应内容提供程序所发生的变更。{@link android.app.job.JobInfo}
-对象封装了 {@link android.app.job.JobScheduler}
-用来安排您的作业的参数。如果符合作业条件,系统将在应用的 {@link android.app.job.JobService} 上执行此作业。
-
-</p>
-
-<p>
- 在本文档中,我们将学习如何使用备用方法(如 {@link android.app.job.JobScheduler})调整您的应用以符合这些新限制。
-
-
-</p>
-
-<h2 id="connectivity-action">
- 对 CONNECTIVITY_ACTION 的限制
-</h2>
-
-<p>
- 面向 Android N 的应用不会收到 {@link
-android.net.ConnectivityManager#CONNECTIVITY_ACTION} 广播,即使它们在清单中注册接收这些广播亦是如此,依赖此广播的流程也不会启动。
-
-这可能会给需要侦听网络变化或者需要在设备接入无限流量网络时执行批量网络活动的应用造成问题。
-
-Android 框架中已存在多个可绕过此限制的解决方案,但需要根据您想要应用实现的目标来选择正确的解决方案。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>当应用运行时,通过
-{@link android.content.Context#registerReceiver Context.registerReceiver()}
-中注册的 {@link android.content.BroadcastReceiver} 将继续接收这些广播。
-</p>
-
-<h3 id="sched-jobs">
- 安排连入无限流量连接时的网络作业
-</h3>
-
-<p>
- 使用 {@link android.app.job.JobInfo.Builder JobInfo.Builder} 类构建
-{@link android.app.job.JobInfo} 对象时,应用 {@link
-android.app.job.JobInfo.Builder#setRequiredNetworkType
-setRequiredNetworkType()} 方法,并将 {@link android.app.job.JobInfo
-JobInfo.NETWORK_TYPE_UNMETERED} 作为作业参数传递。以下代码示例展示如何安排当设备接入无限流量网络且正在充电时要运行的服务:
-
-
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-</pre>
-
-<p>
- 当符合作业条件时,应用会收到回调以运行指定的{@code JobService.class} 中的 {@link android.app.job.JobService#onStartJob onStartJob()} 方法。
-
-如需查看 {@link
- android.app.job.JobScheduler} 实现的更多示例,请参阅 <a href="{@docRoot}samples/JobScheduler/index.html">JobScheduler 示例应用</a>。
-</p>
-
-<p>
- 使用 GMSCore 服务且面向 Android 5.0(API 级别 21)或更低版本系统的应用可以使用<a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
-{@code GcmNetworkManager}</a> 并指定 {@code Task.NETWORK_STATE_UNMETERED}。
-
-</p>
-
-<h3 id="monitor-conn">
- 在应用运行时监控网络连接
-</h3>
-
-<p>
- 注册了 {@link android.content.BroadcastReceiver} 的运行的应用仍可侦听 {@code CONNECTIVITY_CHANGE}。
-不过,{@link
-android.net.ConnectivityManager} API 提供了一个更稳健可靠的方法,可以仅在符合指定的网络条件时才请求回调。
-
-</p>
-
-<p>
- {@link android.net.NetworkRequest} 对象根据 {@link android.net.NetworkCapabilities} 定义网络回调的参数。
-使用 {@link
-android.net.NetworkRequest.Builder NetworkRequest.Builder} 类创建 {@link android.net.NetworkRequest} 对象。然后,{@link
-android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
-android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
-将 {@link android.net.NetworkRequest} 对象传递给系统。
-当符合网络条件时,应用会收到回调以执行在其 {@link
-android.net.ConnectivityManager.NetworkCallback} 类中定义的
-{@link android.net.ConnectivityManager.NetworkCallback#onAvailable
-onAvailable()} 方法。
-
-</p>
-
-<p>
- 应用继续接收回调,直至应用退出或调用
-{@link android.net.ConnectivityManager#unregisterNetworkCallback
-unregisterNetworkCallback()}。
-</p>
-
-<h2 id="media-broadcasts">
- 对 NEW_PICTURE 和 NEW_VIDEO 的限制
-</h2>
-
-<p>
- 在 Android N 中,应用无法发送或接收 {@link
-android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link
-android.hardware.Camera#ACTION_NEW_VIDEO} 广播。此限制有助于缓解必须唤醒多个应用以处理新图像或视频时对性能和用户体验造成的影响。
-
-Android N 扩展了 {@link android.app.job.JobInfo} 和 {@link
-android.app.job.JobParameters} 以提供备用解决方案。
-
-</p>
-
-<h3 id="new-jobinfo">
- 新的 JobInfo 方法
-</h3>
-
-<p>
- 为了针对内容 URI 变化触发作业,Android N 使用以下方法扩展了 {@link android.app.job.JobInfo} API:
-
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- 封装针对内容 URI 变化触发作业所需的参数。
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- 将 {@code TriggerContentUri} 对象传递给 {@link
-android.app.job.JobInfo}。{@link android.database.ContentObserver}
-监控已封装的内容 URI。如果存在多个与某个作业关联的 {@code
-TriggerContentUri} 对象,则系统会提供一个回调,即使其报告仅一个内容 URI 发生变化。
-
- </dd>
-
- <dd>
- 如果给定 URI 的任何子级发生变化,则添加 {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} 标志以触发作业。
-此标志对应于传递给 {@link
-android.content.ContentResolver#registerContentObserver registerContentObserver()} 的
-{@code notifyForDescendants} 参数。
-
- </dd>
-</dl>
-
-<p class="note">
- <strong>注:</strong> {@code TriggerContentUri()} 无法与 {@link android.app.job.JobInfo.Builder#setPeriodic
-setPeriodic()} 或 {@link android.app.job.JobInfo.Builder#setPersisted
-setPersisted()} 结合使用。
-若要持续监控内容变化,则可在应用的 {@link
-android.app.job.JobService} 完成处理最新的回调前安排新的
-{@link android.app.job.JobInfo}。
-</p>
-
-<p>
- 以下示例代码展示如何安排当系统报告内容 URI {@code MEDIA_URI} 所发生变化时要触发的作业:
-
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MediaStore.Images.Media.EXTERNAL_CONTENT_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-</pre>
-<p>
- 当系统报告指定内容 URI 所发生变化时,应用将收到一个回调,并向 {@code MediaContentJob.class} 中的 {@link android.app.job.JobService#onStartJob onStartJob()}
-方法传递一个 {@link android.app.job.JobParameters} 对象。
-
-
-</p>
-
-<h3 id="new-jobparam">
- 新的 JobParameter 方法
-</h3>
-
-<p>
- Android N 也扩展了{@link android.app.job.JobParameters},以允许应用接收有关哪些内容权限和 URI 已触发作业的有用信息:
-
-
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- 返回已触发作业的 URI 数组。如果没有任何 URI 触发作业(例如,作业是因截止期限或其他一些原因触发的),或者已更改的 URI 数量超过 50,该数组将为 {@code
-null}。
-
-
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- 返回已触发作业的内容权限的字符串数组。
- 如果返回的数组不是 {@code null},请使用 {@code getTriggeredContentUris()}
-检索有关哪些 URI 已更改的详细信息。
- </dd>
-</dl>
-
-<p>
- 以下示例代码重写 {@link
-android.app.job.JobService#onStartJob JobService.onStartJob()} 方法并记录已触发作业的内容权限和 URI:
-
-</p>
-
-<pre>
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-</pre>
-
-<h2 id="further-optimization">
- 进一步优化您的应用
-</h2>
-
-<p>
- 优化您的应用以在低内存设备上或在低内存条件下运行,这样可以提升性能和用户体验。
-删除后台服务依赖关系和静态注册的隐式广播接收器可帮助您的应用在此类设备上运行得更好。
-
-尽管 Android N 采取了措施以减少部分问题,但建议您优化自己的应用,使其能够在完全不使用这些后台进程的情况下运行。
-
-
-
-</p>
-
-<p>
- Android N 推出了一些附加 <a href="{@docRoot}tools/help/adb.html">Android 调试桥 (ADB)</a> 命令,您可以使用这些命令测试在禁用那些后台进程情况下的应用行为:
-
-</p>
-
-<ul>
- <li>要模拟隐式广播和后台服务不可用的条件,请输入以下命令:
-
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>要重新启用隐式广播和后台服务,请输入以下命令:
-
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set <package> RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
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
deleted file mode 100644
index 9a1dfa8..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,159 +0,0 @@
-page.title=ICU4J Android 框架 API
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>本文内容:</h2>
-<ol>
- <li><a href="#relation">与 ICU4J 的关系</a></li>
- <li><a href="#migration">从 ICU4J 迁移至 android.icu API </a></li>
- <li><a href="#licence">授权</a></li>
-</ol>
-
-<h2>另请参阅</h2>
-<ol>
- <li>
- <a class="external-link" href="http://userguide.icu-project.org">ICU4J 的文档</a>
- </li>
-
- <li>
- <a class="external-link" href="http://site.icu-project.org/#TOC-What-is-ICU-">ICU4J 支持的最新标准</a>
-
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- ICU4J 是一个广泛使用的开源 Java 库集合,为软件应用提供 Unicode 和全球化支持。
-Android N 在 {@code android.icu} 软件包下显示 Android 框架中的 ICU4J API 子集,供应用开发者使用。
-
-这些 API 使用设备上具有的本地化数据。
-因此,您可以通过不将 ICU4J 库编译到 APK 来减少 APK 占用空间;相反,您可以只在框架中调用它们。
-
-(在此情况下,您可能想要提供<a href="{@docRoot}google/play/publishing/multiple-apks.html">多个版本的 APK</a>,这样,运行比 Android N 低的 Android 版本的用户可以下载包含 ICU4J 库的应用版本。)
-
-
-
-</p>
-
-<p>
- 本文档开头提供了有关支持这些库所需的最低 Android API 级别的一些基本信息。
-然后,介绍关于 Android 特定的 ICU4J 实现您需要了解的内容。
-最后,介绍如何在 Android 框架中使用 ICU4J API。
-
-</p>
-
-<h2 id="relation">与 ICU4J 的关系</h2>
-
-<p>
- Android N 通过
-<code>android.icu</code> 软件包(而非 <code>com.ibm.icu</code>)显示 ICU4J API 的子集。由于种种原因,Android 框架可能选择不显示 ICU4J API;例如,Android N 不显示一些已弃用的 API 或 ICU 团队尚未将其声明为“稳定”的 API。
-
-
-
-由于 ICU 团队将来会弃用这些 API,因此,Android 也会将其标记为已弃用,但将继续包含它们。
-
-</p>
-
-<p class="table-caption"><strong>表 1.</strong> Android N 中使用的 ICU 和 CLDR 版本。
-</p>
-<table>
-<tr>
-<th>Android API 级别</th>
-<th>ICU 版本</th>
-<th>CLDR 版本</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>以下是几点注意事项:</p>
-
-<ul>
-<li>ICU4J Android 框架 API 不包含所有的 ICU4J API。</li>
-<li>NDK 开发者应了解 Android ICU4C 不受支持。</li>
-<li>Android 框架中的 API 不会取代 Android 对<a href="{@docRoot}guide/topics/resources/localization.html">使用资源进行本地化</a>的支持。
-
-</li>
-</ul>
-
-<h2 id="migration">从 com.ibm.icu 迁移至 android.icu 软件包</h2>
-
-<p>
- 如果您已在应用中使用 ICU4J API,且
-<code>android.icu</code> API 符合您的要求,那么要迁移至框架 API,需要将 Java 导入从 <code>com.ibm.icu</code> 更改为 <code>android.icu</code>。
-
-然后,您可以从 APK 移除您自己的 ICU4J 文件的副本。
-
-</p>
-
-<p class="note">
- <b>注</b>:ICU4J 框架 API 使用 {@code android.icu}
-命名空间,而不是 {@code com.ibm.icu}。这是为了避免在包含自己的 {@code com.ibm.icu} 库的 APK 中出现命名空间冲突。
-
-</p>
-
-<h3 id="migrate-from-android">
- 从其他 Android SDK API 迁移至 android.icu API
-</h3>
-
-<p>
- <code>java</code> 和 <code>android</code> 软件包中的某些类与在 ICU4J 中找到的一些类等效。
-不过,ICU4J 通常为标准和语言提供更广泛的支持。
-
-</p>
-<p>下面是一些入门示例:</p>
-<table>
-<tr>
-<th>类</th>
-<th>替代项</th>
-</tr>
-<tr>
-<td><code>java.lang.Character</code> </td>
-<td><code>android.icu.lang.UCharacter</code> </td>
-</tr>
-<tr>
-<td><code>java.text.BreakIterator</code> </td>
-<td><code>android.icu.text.BreakIterator</code> </td>
-</tr>
-<tr>
-<td><code>java.text.DecimalFormat</code> </td>
-<td><code>android.icu.text.DecimalFormat</code> </td>
-</tr>
-<tr>
-<td><code>java.util.Calendar</code></td>
-<td>
-<code>android.icu.util.Calendar</code></td>
-</tr>
-<tr>
-<td><code>android.text.BidiFormatter</code>
- </td>
-<td><code>android.icu.text.Bidi</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateFormat</code>
- </td>
-<td><code>android.icu.text.DateFormat</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateUtils</code> </td>
-<td><code>android.icu.text.DateFormat</code>
-<code>android.icu.text.RelativeDateTimeFormatter</code>
-</td>
-</tr>
-</table>
-
-<h2 id="licence">授权</h2>
-
-<p>
- ICU4J 按照 ICU 许可发布。如需了解详情,请参阅 <a class="external-link" href="http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">ICU 用户指南</a>。
-
-</p>
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
deleted file mode 100644
index 248d6a0..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,221 +0,0 @@
-page.title=语言和区域设置
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>本文内容:</h2>
-<ol>
- <li><a href="#preN">解析语言资源所面临的挑战</a></li>
- <li><a href="#postN">对资源解析策略的改进</a></li>
- <li><a href="#design">设计您的应用以支持附加区域设置</a>
-</li>
-
-</ol>
-
-</div>
-</div>
-
-<p>Android N 为多语言用户提供增强的支持,让他们可以在设置中选择多个区域设置。
-Android N 通过大幅扩展受支持的区域设置数量并更改系统解析资源的方式来提供此功能。
-
-全新的解析资源方法更加稳健,并且设计为与现有 APK 兼容,但要格外细心,以发现任何异常行为。
-
-例如,您应进行测试,以确保应用默认显示预期的语言。
-另外,如果应用支持多语言,您应确保此支持合乎预期。
-
-最后,对于您没有将其显式设计为支持的语言,应设法确保应用能够妥善地处理它们。
-</p>
-
-<p>本文档开头介绍 Android N 之前的资源解析策略。接下来介绍 Android N 改进的资源解析策略。
-
-最后,介绍如何充分利用扩展的区域设置数量来支持更多的多语言用户。
-</p>
-
-<h2 id="preN">解析语言资源所面临的挑战</h2>
-
-<p>在 Android N 之前,Android 并非始终能够成功匹配应用和系统区域设置。
-</p>
-
- <p>例如,假设您遇到了以下情况:</p>
- <ul>
- <li>您的应用的默认语言为{@code en_US}“US English”,但它也在 {@code es_ES}资源文件中对西班牙字符串进行了本地化。
-
-</li>
- <li> 将设备设置为 {@code es_MX} </li>
-
-<p>当您的 Java 代码引用字符串时,系统会从默认 ({@code en_US}) 资源文件加载字符串,即使应用在 {@code es_ES} 下有本地化的西班牙语资源。
-
-这是因为当系统无法找到精确匹配时,它会继续通过将国家/地区代码从区域设置中剥离来查找资源。
-
-最后,如果未找到匹配,系统会恢复为默认模式,即 {@code en_US}。
- </p>
-
-
-<p>如果用户选择应用根本不支持的语言(如法语),则系统也会默认显示 {@code en_US}。
-例如:</p>
-
-<p class="table-caption" id="t-resource-res">
-<strong>表 1.</strong> 没有精确区域设置匹配项的资源解析。
-</p>
-<table>
-<tbody>
-<tr>
-<th>用户设置</th>
-<th>应用资源</th>
-<th>资源解析</th>
-</tr>
-<tr>
-<td>fr_CH</td>
-<td>
-默认值 (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
- <td>
-尝试 fr_CH => 失败<br>
-尝试 fr => 失败<br>
-使用默认值 (en)
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>在此示例中,系统在不知道用户是否理解英语的情况下显示英语字符串。
-目前,此行为很常见。
-Android N 应该会大幅减少出现此类结果的频率。
-</p>
-
-<h2 id="postN">对资源解析策略的改进</h2>
-<p>Android N 可提供更稳健的资源解析,并自动查找更好的备用方法。
-不过,为了加速解析和提升可维护性,您应以最常用的母语存储资源。
-
- 例如,如果您之前将西班牙语资源存储在 {@code es-US} 目录中,请将它们移动到 {@code es-419} 目录,该目录包含拉丁美洲西班牙语。
-
- 同理,如果您在名为 {@code en-GB} 的文件夹中存储有资源字符串,则将此文件夹重命名为 {@code en-001}(国际英语),因为 <code>en-GB</code> 字符串的最常用母语为 {@code en-001}。
-
-
- 以下示例介绍为什么这些做法可提升性能和资源解析的可靠性。
-</p>
-
-<h3>资源解析示例</h3>
-
-<p>使用 Android N,以不同的方式解析<strong>表 1</strong> 中所描述的案例:
-</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>表 2.</strong> 针对没有精确区域设置匹配项时改进的资源解析策略。
-</p>
-<table>
-<tr>
-<th>用户设置</th>
-<th>应用资源</th>
-<th>资源解析</th>
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-</ol>
-</td>
-<td>
-默认值 (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
-<td>
-尝试 fr_CH => 失败<br>
-尝试 fr => 失败<br>
-尝试 fr 的子项 => fr_FR<br>
-使用 fr_FR
-</td>
-</tr>
-
-</table>
-
-
-<p>现在,用户获得的是法语资源而不是英语。此示例还表明对于 Android N,您为什么应将法语字符串存储在 {@code fr}(而非 {@code fr_FR})中。此处的做法是匹配最接近的母语,从而使解析更快速且更具预见性。
-
-
-</p>
-
-<p>除了这个改进的解析逻辑外,Android 现在还提供更多的用户语言以供选择。
-下面,我们将意大利语指定为附加用户语言,但假设应用不支持法语,再次尝试上面的示例。
- </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>表 3.</strong> 应用仅与用户的次优区域设置匹配时的资源解析。
-</p>
-<table>
-<tr>
-<th>用户设置</th>
-<th>应用资源</th>
-<th>资源解析</th>
-
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-<li> it_CH</li>
-</ol>
-</td>
-<td>
-默认值 (en)<br>
-de_DE<br>
-es_ES<br>
-it_IT<br>
-</td>
-<td>
-尝试 fr_CH => 失败<br>
-尝试 fr => 失败<br>
-尝试 fr 的子项 => 失败<br>
-尝试 it_CH => 失败<br>
-尝试 it => 失败<br>
-尝试 it 的子项 => it_IT<br>
-使用 it_IT
-</td>
-
-</tr>
-
-</table>
-<p>用户仍会获取他们理解的语言,即使应用不支持法语。
-</p>
-
-
-<h2 id="design">设计您的应用以支持附加区域设置</h2>
-<h3>LocaleList API</h3>
-
-<p>Android N 添加了新的 API {@code LocaleList.getDefault()},从而让应用可以直接查询用户已指定的语言列表。
-您可以使用此 API 创建更成熟的应用行为和更优化的内容显示。
-
-例如,搜索可以基于用户的设置以多种语言显示结果。
-浏览器应用可避免翻译以用户理解的语言显示的页面,键盘应用可自动启用所有适用的布局。
-
- </p>
-
-<h3>格式化程序</h3>
-
-<p>直到 Android 6.0(API 级别 23),Android 仅支持许多常用语言(en、es、ar、fr、ru)的一个或两个区域设置。
-
-由于每种语言只有几种变体,因此,应用可以通过在资源文件中将一些数字和日期存储为硬编码字符串解决此问题。
-
-不过,随着 Android 扩展了支持的区域设置集,即使在一个区域设置中,日期、时间、货币及类似信息也会存在显著差异。
-
-
-对您的格式进行硬编码会让最终用户困惑不已。
-因此,在针对 Android N 开发应用时请务必使用格式化程序代替硬编码数字和日期字符串。
-</p>
-
-<p>阿拉伯语就是最好的例子,Android N 将对其的支持从一个 {@code ar_EG} 扩展到 27 个阿拉伯语区域设置。
-这些区域设置可以共享大多数资源,但其中一些资源首选 ASCII 数字,另一些则首选本地数字。
-例如,如果您想要创建一个具有数字变量的句子,如“Choose a 4 digit pin”,则按如下所示使用格式化程序:
-
-</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd b/docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd
deleted file mode 100644
index 900eea6..0000000
--- a/docs/html-intl/intl/zh-cn/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,393 +0,0 @@
-page.title=通知
-page.tags=通知
-helpoutsWidget=true
-page.image=/preview/images/notifications-card.png
-
-trainingnavtop=true
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<!-- table of contents -->
-<h2>本文内容包括</h2>
-<ol>
- <li><a href="#direct">直接回复</a></li>
- <li><a href="#bundle">捆绑通知</a></li>
- <li><a href="#custom">自定义视图</a></li>
- <li><a href="#style">消息样式</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N 引入了一些新 API,允许应用发布具有高度可见性和交互性的通知。
-</p>
-
-<p>Android N 扩展了现有 {@link android.support.v4.app.RemoteInput} 通知 API,以支持手持式设备上的内联回复。
-此功能允许用户从通知栏快速进行回复,无需访问应用。
-</p>
-
-<p>
- 此外,Android N 还允许捆绑类似的通知并将它们显示为一则通知。
-为了实现此功能,Android N 使用现有的 {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()} 方法。用户可以从通知栏展开各通知,并分别对每则通知进行回复和清除等操作。
-
-
-</p>
-
-<p>最后,Android N 还添加了一些新 API,允许您在应用的自定义通知视图中使用系统装饰元素。
-这些 API 可帮助确保通知视图与标准模板的展示效果相一致。
-
-</p>
-
-<p>本文重点介绍您在应用中使用新通知功能时应加以考虑的一些重要变更。
-</p>
-
-<h2 id="direct">直接回复</h2>
-
-<p>利用 Android N 中的直接回复功能,用户可以直接在通知界面内快速回复短信或更新任务列表。
-
-在手持式设备上,可通过通知中另外附加的按钮进行内联回复操作。
-当用户通过键盘回复时,系统会将文本回复附加到您为通知操作指定的 Intent,并将 Intent 发送到手持式设备应用。
-
-
-
-
-
-<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
- {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
-<p class="img-caption">
- <strong>图 1.</strong>Android N 添加了 <strong>Reply</strong> 操作按钮。
-
-</p>
-
-<h3>添加内联回复操作</h3>
-
-<p>要创建支持直接回复的通知操作:
-</p>
-
-<ol>
-<li>创建一个可添加到通知操作的 {@link android.support.v4.app.RemoteInput.Builder} 实例。
-
-该类的构造函数接受系统用作文本输入密钥的字符串。
-之后,手持式设备应用使用该密钥检索输入的文本。
-
-
-<pre>
-// Key for the string that's delivered in the action's intent.
-private static final String KEY_TEXT_REPLY = "key_text_reply";
-String replyLabel = getResources().getString(R.string.reply_label);
-RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
- .setLabel(replyLabel)
- .build();
-</pre>
-</li>
-<li>使用 <code>addRemoteInput()</code> 向操作附加 {@link android.support.v4.app.RemoteInput} 对象。
-
-
-<pre>
-// Create the reply action and add the remote input.
-Notification.Action action =
- new Notification.Action.Builder(R.drawable.ic_reply_icon,
- getString(R.string.label), replyPendingIntent)
- .addRemoteInput(remoteInput)
- .build();
-</pre>
-</li>
-
-<li>对通知应用操作并发出通知。
-
-<pre>
-// Build the notification and add the action.
-Notification newMessageNotification =
- new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_message)
- .setContentTitle(getString(R.string.title))
- .setContentText(getString(R.string.content))
- .addAction(action))
- .build();
-
-// Issue the notification.
-NotificationManager notificationManager =
- NotificationManager.from(mContext);
-notificationManager.notify(notificationId, newMessageNotification);
-
-</pre>
-</li>
-
-</ol>
-
-
-<p> 在触发通知操作时系统提示用户输入回复。
- </p>
-
-<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
- {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>图 2.</strong>用户从通知栏输入文本。
-</p>
-
-<h3>
- 从内联回复检索用户输入
-</h3>
-
-<p>
- 要从通知界面接收用户输入并发送到在回复操作的 Intent 中声明的 Activity:
-
-</p>
-
-<ol>
- <li>通过传递通知操作的 Intent 作为输入参数来调用 {@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()}。
-该方法返回含有文本回复的 {@link android.os.Bundle}。
-
-
- <pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
- </li>
-
- <li>使用产生的密钥查询捆绑包(提供给 {@link
- android.support.v4.app.RemoteInput.Builder} 构造函数)。以下代码段说明了方法如何从捆绑包检索输入文本:
-
-
-
- <pre>
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-</pre>
- </li>
-
- <li>使用您为上一项通知提供的相同的通知 ID 来建立和发布另一项通知。
-进度指示器从通知界面消失,以告知用户已回复成功。
-
-在处理这项新通知时,使用被传递到接收器 {@code onReceive()} 方法的上下文。
-
-
- <pre>
-// Build a new notification, which informs the user that the system
-// handled their interaction with the previous notification.
-Notification repliedNotification =
- new Notification.Builder(context)
- .setSmallIcon(R.drawable.ic_message)
- .setContentText(getString(R.string.replied))
- .build();
-
-// Issue the new notification.
-NotificationManager notificationManager =
- NotificationManager.from(context);
-notificationManager.notify(notificationId, repliedNotification);
-</pre>
- </li>
-</ol>
-
-<p>
- 对于交互式应用(例如聊天),这可以用来在处理检索到的文本时添加其他上下文。
-例如,这些应用可以显示多行聊天记录。
-当用户通过 {@link
- android.support.v4.app.RemoteInput} 回复时,您可以使用 {@code setRemoteInputHistory()} 方法更新回复历史。
-
-</p>
-
-<p>
- 在应用收到远程输入后,必须更新或取消通知。
-如果用户使用直接回复来对远程更新进行回复,则不可取消通知。
-
-否则,更新通知以显示用户的回复。对于使用 {@code MessagingStyle} 的通知,您应该添加回复来作为最新消息。
-
-当使用其它模板时,您可以将用户的回复追加到远程输入历史。
-
-</p>
-
-<h2 id="bundle">捆绑通知</h2>
-
-<p>Android N 为开发者提供了表示通知队列的新方法:
- <i>捆绑通知</i>。这类似于 Android Wear 中的<a href="{@docRoot}training/wearables/notifications/stacks.html">通知堆栈</a>功能。
-
-例如,如果应用为接收的消息创建通知,那么在接收到多个消息时,应用会将通知捆绑在一起成为一个群组。
-
-您可以使用现有的 {@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()} 方法捆绑类似的通知。
-</p>
-
-<p>
- 通知组对组内的通知施加层次结构。
- 层次结构的顶层是父级通知,其显示该群组的摘要信息。
-用户可以逐步展开通知组,随着用户深入展开,系统将显示更多信息。
-
-当用户展开捆绑包时,系统将显示其所有子通知的更多信息;当用户展开其中一则通知时,系统显示该通知的所有内容。
-
-
-</p>
-
-<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
- {@docRoot}preview/images/bundles_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>图 3.</strong>用户可以逐步展开通知组。
-
-</p>
-
-<p class="note">
- <strong>注:</strong>如果同一应用发送了四条或以上通知,并且未指定分组,系统会自动将它们分到一组。
-
-
-</p>
-
-<p>如需了解如何将通知添加到组,请参阅<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">将各通知添加到组</a>。
-
-</p>
-
-
-<h3 id="best-practices">捆绑通知最佳做法</h3>
-<p>本节提供了有关何时使用通知组而非早期版本 Android 平台中的 {@link android.app.Notification.InboxStyle InboxStyle} 通知的指南。
-
-
-</p>
-
-<h3>何时使用捆绑通知</h3>
-
-<p>只有在您的用例满足以下所有条件时才应使用通知组:
-</p>
-
-<ul>
- <li>子通知为完整通知,且可以单独显示,无需群组摘要。
-</li>
- <li>单独显示子通知更合理。例如:
-
- </li>
- <ul>
- <li>子通知可操作,且每个子通知均有特定的操作。</li>
- <li>子通知中包含用户想要查看的更多信息。</li>
- </ul>
-</ul>
-
-<p>好的通知组用例示例包括:显示传入消息列表的短信应用,或显示收到的电子邮件列表的电子邮件应用。
-
-</p>
-
-<p>
-适合显示单一通知的用例示例包括:从某一个人收到的单独消息,或以列表表示的单行文本项目。
-
-您可以使用 {@link android.app.Notification.InboxStyle InboxStyle} 或
-{@link android.app.Notification.BigTextStyle BigTextStyle} 实现此功能。
-
-
-</p>
-
-<h3 id ="post">显示捆绑通知</h3>
-
-<p>
- 即使组内仅含有一则子通知,应用也应发布组摘要。
-如果只含有一则通知,系统将取消摘要并直接显示子通知。
-这样可确保用户在滑动切换组内的子通知时,系统仍可以提供一致的用户体验。
-
-
-</p>
-
-<p class="note">
- <strong>注:</strong>本版本 Android N 目前还无法在仅含一则子通知时取消通知组的摘要。
-我们将在之后版本的 Android N 中添加此功能。
-
-</p>
-
-<h3>扫视通知</h3>
-
-<p>虽然系统通常以群组的方式显示子通知,但您可以进行设置,使其暂时作为<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">浮动通知</a>显示。
-
-
-该功能非常实用,因为其允许用户立即访问最近的子通知以及与其相关的操作。
-
-</p>
-
-
-<h3>后向兼容性</h3>
-
-<p>
- 自 Android 5.0(API 级别 21)起,{@link
- android.app.Notification} API 中就添加了通知组和远程输入,以支持 Android Wear 设备。
-如果您已经使用这些 API 构建通知,则只需验证应用行为是否符合上述指南,并考虑实现 {@code
- setRemoteInputHistory()}。
-
-
-</p>
-
-<p>
- 为了支持后向兼容性,支持库的 {@link android.support.v4.app.NotificationCompat} 类中提供了相同的 API,以便您构建可在早期 Android 版本中运行的通知。
-
-
-在手持式设备和平板电脑上,用户只能看到摘要通知,因此应用应仍提供收件箱式或类似形式的通知显示模式,以显示群组的全部信息内容。
-
-鉴于 Android Wear 设备允许用户查看所有子通知,包括更早级别平台上的通知,您应在不依赖 API 级别的基础上构建子通知。
-
-
-
-</p>
-
-<h2 id="custom"> 自定义视图</h2>
-<p>从 Android N 开始,您将可以自定义通知视图,同时仍可以使用系统装饰元素,例如通知标头、操作和可展开的布局。
-
-</p>
-
-<p>为启用该功能,Android N 添加了以下 API,以便您样式化自己的自定义视图:
-</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> 样式化除媒体通知外的其他通知。
-</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> 样式化媒体通知。</dd>
-</dl>
-
-<p>如需使用这些新 API,可调用 {@code setStyle()} 方法,并向其传递所需的自定义视图样式。
-</p>
-
-<p>此代码段显示了如何使用 {@code DecoratedCustomViewStyle()} 方法构建自定义通知对象。
-</p>
-
-<pre>
-Notification notification = new Notification.Builder()
- .setSmallIcon(R.drawable.ic_stat_player)
- .setLargeIcon(albumArtBitmap))
- .setCustomContentView(contentView);
- .setStyle(new Notification.DecoratedCustomViewStyle())
- .build();
-
-</pre>
-
-<h2 id="style">消息传递样式</h2>
-<p>
- Android N 引入了一项新的 API 来自定义通知样式。
- 使用 <code>MessageStyle</code> 类,您可以更改在通知中显示的多个标签,包括会话标题、其他消息和通知的内容视图。
-
-
-</p>
-
-<p>
- 以下代码段演示了如何使用 <code>MessageStyle</code> 类来自定义通知样式。
-
-</p>
-
-<pre>
- Notification notification = new Notification.Builder()
- .setStyle(new Notification.MessagingStyle("Me")
- .setConversationTitle("Team lunch")
- .addMessage("Hi", timestamp1, null) // Pass in null for user.
- .addMessage("What's up?", timestamp2, "Coworker")
- .addMessage("Not much", timestamp3, null)
- .addMessage("How about lunch?", timestamp4, "Coworker"));
-</pre>
diff --git a/docs/html-intl/intl/zh-tw/about/versions/nougat/index.jd b/docs/html-intl/intl/zh-tw/about/versions/nougat/index.jd
index e899bc0..ae9e164 100644
--- a/docs/html-intl/intl/zh-tw/about/versions/nougat/index.jd
+++ b/docs/html-intl/intl/zh-tw/about/versions/nougat/index.jd
@@ -1,120 +1,110 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<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 N Developer Preview</h1>
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
+ <h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- 為 Android N 做好準備!
+ 為 Android Nougat 做好準備!
在 Nexus 與其他裝置上<strong>測試您的應用程式</strong>。支援新系統行為以<strong>節省電力與記憶體</strong>。使用<strong>多視窗 UI</strong>、<strong>直接回覆通知</strong>等延伸您的應用程式。
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
- 開始使用</a>
-<!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ 開始使用
+ </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}images/home/n-preview-hero.png" srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
+ srcset="{@docRoot}images/home/n-preview-hero.png 1x,
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/resources"
+ data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
- data-maxResults="6"></div>
- </div>
+ data-maxResults="3"></div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
+ <a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
回報問題
-</a>
- </li>
- <li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- 查看版本資訊</a>
-
+ </a>
</li>
<li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- 加入開發人員社群</a>
-
+ 加入開發人員社群
+ </a>
</li>
</ul>
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
+<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>
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 回報問題</a>
-</div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 查看版本資訊</a>
-</div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- 加入開發人員社群</a>
-</div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
-<section class="dac-section dac-light"><div class="wrap">
- <h1 class="dac-section-title">資源</h1>
+<section class="dac-section dac-gray" id="videos"><div class="wrap">
+ <h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
- 以下重要資訊可幫助您的應用程式準備好使用 Android N。
+ New Android capabilities and the right way to use them in your apps.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
+ 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-light" id="resources"><div class="wrap">
+ <h1 class="dac-section-title">資源</h1>
+ <div class="dac-section-subtitle">
+ 以下重要資訊可幫助您的應用程式準備好使用 Android Nougat。
+ </div>
+
+ <div class="resource-widget resource-flow-layout col-16"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
-
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html-intl/intl/zh-tw/index.jd b/docs/html-intl/intl/zh-tw/index.jd
index a5772ef..022df77 100644
--- a/docs/html-intl/intl/zh-tw/index.jd
+++ b/docs/html-intl/intl/zh-tw/index.jd
@@ -5,49 +5,36 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-invert" style="background-color:#455A64">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="col-7of16 col-push-9of16" style="padding-left:2em;">
- <a href="{@docRoot}preview/index.html">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- Get ready for the next version of Android!
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
- behaviors to <strong>save power and memory</strong>.
+<section class="dac-expand dac-hero" style="background-color:#b2dfdb;">
+ <div class="wrap" style="max-width:1000px;margin-top:0">
+ <div class="col-7of16 col-push-8of16">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <h1 class="dac-hero-title" style="color:#004d40">Android 7.0 Nougat!</h1>
+ <p class="dac-hero-description" style="color:#004d40">
+ <strong>Android 7.0 Nougat is here!</strong>
+ Get your apps ready for the latest version of Android, with new system
+ behaviors to <strong>save battery and memory</strong>.
Extend your apps with <strong>multi-window UI</strong>,
<strong>direct reply notifications</strong> and more.
</p>
- <a class="dac-hero-cta" href="/preview/index.html">
- <span class="dac-sprite dac-auto-chevron"></span>
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron" style="background-color:#b2dfdb"></span>
Learn more
- </a><!--<br>
- <a class="dac-hero-cta" href="/preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Developer Preview (final SDK)
- </a><br>-->
+ </a>
+ </a>
</a>
</div>
- <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:0em;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,
- /images/home/n-preview-hero_2x.png 2x">
+ <div class="col-6of16 col-pull-6of16 dac-hero-figure" style="padding-left:1em;padding-top:1em;">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/nougat_bg.jpg"
+ srcset="{@docRoot}images/home/nougat_bg.jpg 1x,
+ {@docRoot}images/home/nougat_bg_2x.jpg 2x">
</a>
</div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
<i class="dac-sprite dac-arrow-down-gray"></i>
@@ -75,28 +62,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
- <i class="dac-sprite dac-arrow-down-gray"></i>
- </a>
- <div class="actions">
- <div><a href="{@docRoot}sdk/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Get the SDK
- </a></div>
- <div><a href="{@docRoot}samples/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Browse Samples
- </a></div>
- <div><a href="{@docRoot}distribute/stories/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Watch Stories
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light" id="build-apps"><div class="wrap">
<h1 class="dac-section-title">Build Beautiful Apps</h1>
<div class="dac-section-subtitle">
diff --git a/docs/html-intl/intl/zh-tw/preview/download_mp2.jd b/docs/html-intl/intl/zh-tw/preview/download_mp2.jd
deleted file mode 100644
index 3b54080..0000000
--- a/docs/html-intl/intl/zh-tw/preview/download_mp2.jd
+++ /dev/null
@@ -1,359 +0,0 @@
-page.title=下載
-page.image=images/cards/card-download_16-9_2x.png
-
-@jd:body
-
-<div style="position:relative; min-height:600px">
-
- <div class="wrap" id="tos" style="position:absolute;display:none;width:inherit;">
-
- <p class="sdk-terms-intro">在下載和安裝 Android 預覽版
-SDK 的元件之前 ,您必須同意遵守下列條款和條件。</p>
-
- <h2 class="norule">條款和條件</h2>
-
- <div class="sdk-terms" onfocus="this.blur()" style="width:678px">
-這是「Android SDK 預覽版授權協議」(以下稱「授權協議」)。
-
-1.簡介
-
-1.1「Android SDK 預覽版」(在「授權協議」中稱為「預覽版」,包括 (如果有可用的) Android 系統檔案、經過封裝的 API 和預覽版程式庫檔案) 是在「授權協議」之條款的約束下授權給您使用。「授權協議」就您對「預覽版」的使用,構成您與 Google 間具法律約束力之合約。
-
-1.2「Android」係指「Android 軟體開放原始碼專案」(http://source.android.com/) 所提供的 Android 裝置軟體堆疊 (不定期更新)。
-
-1.3「Google」係指 Google Inc.,是一家在美國德拉瓦州註冊的公司,地址為 1600 Amphitheatre Parkway, Mountain View, CA 94043, United States。
-
-2.接受「授權協議」
-
-2.1 必須先同意遵守「授權協議」,才能使用此「預覽版」。如果不接受「授權協議」,您就無法使用此「預覽版」。
-
-2.2 按一下 [接受] 且/或使用「預覽版」,即表示您同意「授權協議」的條款。
-
-2.3 如果您是美國或其他國家/地區 (包括您所居住或使用此「預覽版」的國家/地區) 的法律所禁止接收此「預覽版」的人員,就不得使用此「預覽版」及接受「授權協議」。
-
-2.4 如果您將在公司或組織內部使用「預覽版」,您就要代表雇主或其他實體同意受「授權協議」約束,且您代表並保證具備完整法定權限來約束您的雇主或這類實體遵守「授權協議」。如果您不具備必要的權限,就不得代表您的雇主或其他實體接受「授權協議」或使用此「預覽版」。
-
-3.Google 的預覽版授權
-
-3.1 在「授權協議」之條款的約束下,Google 授權您使用此「預覽版」,此授權為買斷式、不可轉讓、非獨占性、不可轉授權、有限且可撤銷,僅在您公司或組織內部私下或內部使用。此「預覽版」僅供您用於開發在 Android 平台上執行的應用程式。
-
-3.2 您同意 Google 或第三方對此「預覽版」擁有一切法定權利及權益,包括存在於此「預覽版」中的任何「智慧財產權」。「智慧財產權」係指專利法、著作權法、商業秘密法、商標法及任何和所有其他專利權下的任何及一切權利。Google 保留一切未明確授予您的權利。
-
-3.3 您不得將此「預覽版」用於「授權協議」未明文許可的任何用途。除非適用的第三方授權所需,否則您不得:(a) 對此「預覽版」或其任何部分進行複製 (備份用途除外)、修改、改編、轉散佈、反向組譯、還原工程、解編或製作衍生成品;或是 (b) 將此「預覽版」的任何部分載入至行動電話或個人電腦以外的任何其他硬體裝置、將此「預覽版」的任何部分與其他軟體結合,或散佈包含此「預覽版」之任一部分的任何軟體或裝置。
-
-3.4 您同意不會從事任何可能導致或造成 Android 分裂的活動,包括但不限於以任何形式散佈從此「預覽版」衍生的軟體開發套件、參其製作或宣傳。
-
-3.5 對開放原始碼軟體授權下所授權之「預覽版」的使用、複製及散佈,完全受該開放原始碼軟體授權的條款管制,而不受「授權協議」管制。您同意遵守從這類開放原始碼軟體授權獲得的所有權利,並且避免採取任何可能終止、中止或侵害這類權利的行為。
-
-3.6 您同意 Google 可在不事先通知您的情況下變更其所提供之「預覽版」的形式和本質,且此「預覽版」的未來版本可與在此「預覽版」的先前版本上開發的應用程式不相容。您同意 Google 通常可全權斟酌永久或暫時停止提供此「預覽版」(或此「預覽版」的任何功能) 給您或使用者,毋須事先通知。
-
-3.7「授權協議」中的所有條款皆未授予您任何使用 Google 之商業名稱、商標、服務標章、標誌、網域名稱或其他明確品牌特徵的權利。
-
-3.8 您同意不會移除、遮蔽或更改可能附加至或內含在此「預覽版」中的任何專利權通知 (包括著作權和商標通知)。
-
-4.您對「預覽版」的使用
-
-4.1 Google 同意在「授權協議」下,任何條款皆未從您 (或您的授權人) 賦予 Google 對您使用此「預覽版」開發之任何軟體應用程式的任何權利及權益,包括存在於這些應用程式中的任何智慧財產權。
-
-4.2 您同意只就 (a)「授權協議」和 (b) 相關管轄權中任何適用法律、規定或是普遍獲得接受之慣例或指導方針 (包括任何有關將資料或軟體輸出或輸入美國或其他相關國家/地區的法律) 所允許的用途使用此「預覽版」及撰寫應用程式。
-
-4.3 您同意如果使用此「預覽版」開發應用程式,您將保護使用者的隱私權和法定權利。如果使用者提供您使用者名稱、密碼或是其他登入資訊或個人資訊,您必須告知使用者這類資訊將提供給您的應用程式使用,並且必須為這些使用者提供法定充分的隱私權通知和保護。如果您的應用程式會儲存使用者所提供的個人或敏感資訊,它必須確保這些資訊安全無虞。如果使用者提供 Google 帳戶資訊給您,則只有在每個使用者已授權您存取其 Google 帳戶並僅限用於使用者所授權之用途的情況下,您的應用程式才能使用該資訊來存取使用者的 Google 帳戶。
-
-4.4 您同意不會使用此「預覽版」從事任何不當Activity,例如開發或散佈會以未經授權的方式干擾、妨礙、損害或存取 Google 或任何第三方之伺服器、網路或是其他財產或服務的應用程式。
-
-4.5 您同意對您透過 Android 裝置和 (或) Android 應用程式建立、傳輸或顯示的任何資料、內容或資源,以及上述行為造成的後果 (包括 Google 可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。
-
-4.6 您同意對違反在此「授權協議」、任何適用之第三方合約或《服務條款》或是任何適用之法律或規定下所必須遵守的義務,以及違反相關義務造成的後果 (包括 Google 或任何第三方可能蒙受的任何損失或損害) 負起全責 (而 Google 對您或任何第三方就上述一切不需負任何責任)。
-
-4.7「預覽版」目前正在開發中,因此您的測試與意見反應對開發程序非常重要。使用「預覽版」,您即認同某些功能仍處於開發階段,因此您不應期待「預覽版」擁有穩定版本的完整功能。在官方 Android SDK 發行之後,此「預覽版」不再受到支援時,您同意不使用此「預覽版」公開散佈或隨附任何應用程式。
-
-5.您的開發人員認證
-
-5.1 您同意負責保密 Google 可能核發給您或您自己選擇的任何開發人員認證,並且對在您開發人員認證名義下開發的所有應用程式負起全責。
-
-6.隱私權和資訊
-
-6.1 為了持續更新及改進此「預覽版」,Google 可能會從軟體收集某些使用狀況統計數據,包括但不限於軟體的唯一識別碼、相關 IP 位址、版本號碼,以及有關使用此「預覽版」中的哪些工具和 (或) 服務及其使用方式的相關資訊。在收集這類資訊之前,此「預覽版」會先通知您並徵求您的同意。如果您不同意,Google 將不會收集這類資訊。
-
-6.2 Google 會彙總並檢查收集到的資料,據以改善此「預覽版」,並且會依據《Google 隱私權政策》(http://www.google.com/policies/privacy/) 加以妥善保存。
-
-7.第三方應用程式
-
-7.1 如果您使用此「預覽版」來執行第三方開發的應用程式,或是執行會存取第三方所提供之資料、內容或資源的應用程式,您同意 Google 不需對這類應用程式、資料、內容或資源負任何責任。您瞭解您透過第三方應用程式存取的所有資料、內容或資源是由其提供者負起全責,而 Google 對您因使用或存取任何這些第三方應用程式、資料、內容或資源所造成的損失或損害不需負任何責任。
-
-7.2 您瞭解第三方應用程式提供給您的資料、內容或資源可能受到提供者 (或代表他們的其他人員或公司) 所擁有的智慧財產權保護。您不得根據這類資料、內容或資源 (不論是整個或部分) 修改、出租、出借、販售、散佈或製作衍生成品,除非相關擁有者明確授權您從事上述活動。
-
-7.3 您瞭解使用第三方應用程式、資料、內容或資源可能受到您與相關第三方之間的個別條款約束。
-
-8.使用 Google API
-
-8.1 Google API
-
-8.1.1 如果您使用任何 API 從 Google 擷取資料,您瞭解這些資料可能受到 Google 或資料提供者 (或代表他們的其他人員或公司) 所擁有的智慧財產權保護。您對任何這類 API 的使用可能受到其他《服務條款》約束。除非相關《服務條款》明文允許,否則您不得根據這類資料 (不論是整個或部分) 修改、出租、出借、販售、散佈或製作衍生成品。
-
-8.1.2 使用任何 API 從 Google 擷取使用者的資料時,您瞭解並同意只有在該使用者明確同意且授權您擷取其資料,而且僅限用於使用者所授權之用途的情況下,您才能擷取資料。
-
-9.終止「授權協議」
-
-9.1 除非您或 Google 終止「授權協議」(請見下方說明),否則「授權協議」將持續具有效力。
-
-9.2 如果想終止「授權協議」,只要停止使用此「預覽版」及任何相關的開發人員憑證即可。
-
-9.3 Google 可隨時通知您終止「授權協議」,無論有無原因。
-
-9.4「授權協議」在先發生下列任一情況時,將自動終止而不另行通知或採取其他行動:
-(A) Google 決定不再提供此「預覽版」或此「預覽版」的特定部分給您所居住或使用此服務之國家/地區的使用者;或
-(B) Google 發行最終版本的 Android SDK。
-
-9.5 當「授權條款」終止時,您在「授權協議」所獲得的授權也將會一併終止,您將立即停止「預覽版」的所有使用,而第 10、11、12 和 14 項的條款將無限期持續適用。
-
-10.免責聲明
-
-10.1 您明確瞭解並同意完全自負使用此「預覽版」的風險,並且此「預覽版」是依「現況」和「可提供性」提供,Google 不負任何擔保責任。
-
-10.2 您對使用此「預覽版」及透過此「預覽版」以下載或其他方式取得的任何內容,需自行斟酌和自負風險,而且您對因這類使用而對您的電腦系統或其他裝置所造成的任何損害或資料遺失,需負起全責。不限於前述,您瞭解此「預覽版」不是穩定的版本,可能會包含許多錯誤、瑕疵和安全性弱點而對您的電腦系統或其他裝置造成嚴重的損害,包括完全、不可回復的損失。
-
-10.3 Google 進一步明確表示不提供任何形式的瑕疵擔保和條件 (不論明示或默示),包括但不限於適售性、適合特定用途及未侵權的默示擔保和條件。
-
-11.責任限制
-
-11.1 您明確瞭解並同意在任何歸責理論下,就可能由您引起的任何直接、間接、附隨性、特殊性、衍生性或懲罰性損害賠償 (包括任何資料遺失),不論 Google 或其代表是否已獲告知或應已瞭解發生任何這類損失的可能性,Google、其子公司和關係企業及其授權人不必對您負起任何責任。
-
-12.賠償
-
-12.1 在法律允許的最大範圍內,您同意為 Google、其子公司及其個別董監事、主管、員工和代理人,就任何和一切索賠、法律行動、訴訟或訴訟程序,以及因下列原因而引起的任何和一切損失、責任、損害賠償、費用及開支 (包括合理的律師費),提供辯護、賠償損失並確保其免於承擔賠償責任:(a) 您使用此「預覽版」;(b) 您使用此「預覽版」開發的應用程式侵害任何人的任何智慧財產權,或是詆毀任何人或違反其公開權或隱私權;以及 (c) 您未遵守「授權協議」。
-
-13.對「授權協議」做出的變更
-
-13.1 Google 可在散佈此「預覽版」的新版本時修改「授權協議」。做出這類變更後,Google 會在提供此「預覽版」的網站上提供「授權協議」的新版本。
-
-14.一般法律條款
-
-14.1「授權協議」構成您與 Google 之間的法律協議,用於管制您對此「預覽版」(不包括 Google 依據個別書面協議提供給您的任何服務) 的使用,並完全取代先前您與 Google 之間就此「預覽版」簽署的相關協議。
-
-14.2 您同意如果 Google 未行使或執行「授權協議」所含的任何法律權利或救濟 (或在任何適用法律下對 Google 有利的權益),並不代表 Google 正式放棄權利,Google 日後仍可行使這些權利或救濟。
-
-14.3 如果經任何法院 (就此事宜依管轄權決定) 裁決「授權協議」中有任何條款無效,則該條款將自「授權協議」中移除,「授權協議」的其餘部分則不受影響。「授權協議」的其餘條款將持續具有效力且可執行。
-
-14.4 您瞭解並同意 Google 旗下子公司體系的每位成員都是「授權協議」的第三方受益人,而且這類其他公司有權直接執行和依據「授權協議」中對其授予權益 (或對其有利之權利) 的任何條款。除此之外的任何其他人員或公司皆非「授權協議」的第三方受益人。
-
-14.5 出口限制。此「預覽版」受美國出口法規約束。您必須遵守適用於此「預覽版」的所有國內和國際出口法規。這些法律包括對目的地、使用者及最終用途的限制。
-
-14.6 未事先取得 Google 事先書面核准的情況下,您不得轉讓或轉移「授權協議」,未經這類核准的任何轉讓將會失效。您不得在未事先取得 Google 書面核准的情況下,委派其「授權協議」涵蓋的責任或義務。
-
-14.7「授權協議」以及您與 Google 就「授權協議」構成的關係皆受加州法律管轄,毋須理會其法律牴觸條款。您和 Google 同意服從位於加州聖塔克拉拉 (Santa Clara, California) 郡內法院的專屬管轄權,以解決由「授權協議」產生的任何法律事務。儘管如此,您同意 Google 仍可在任何管轄權中申請禁制令救濟 (或同等類型的緊急法定救濟)。
- </div><!-- sdk terms -->
-
-
-
- <div id="sdk-terms-form">
- <p>
- <input id="agree" type="checkbox" name="agree" value="1" onclick="onAgreeChecked()" />
- <label id="agreeLabel" for="agree">我已閱讀並同意上述條款及細則</label>
- </p>
- <p><a href="" class="button disabled" id="downloadForRealz" onclick="return onDownloadForRealz(this);"></a></p>
- </div>
-
-
- </div><!-- end TOS -->
-
-
- <div id="landing">
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>本文件內容</h2>
- <ol>
- <li><a href="#sdk">預覽版 SDK</a></li>
- <li><a href="#docs">開發人員文件</a></li>
- <li><a href="#images">硬體系統映像</a></li>
- </ol>
- <h2>Legacy downloads</h2>
- <ol>
- <li><a href="{@docRoot}preview/download_mp1.html">Developer Preview Archive</a></li>
- </ol>
- </div>
-</div>
-
-
-<p>
- Android M 預覽版 SDK 有開發工具、Android 系統檔案以及程式庫檔案,可以幫助測試您的應用程式和下一個平台版本隨附的新 API。
-本文件會說明如何取得可下載的預覽版元件來測試您的應用程式。
-
-</p>
-
-
-<h2 id="sdk">預覽版 SDK</h2>
-
-<p>
- 預覽版 SDK 可透過 <a href="{@docRoot}tools/help/sdk-manager.html">Android SDK 管理器</a>下載取得。如需有關下載和設定預覽版 SDK 的詳細資訊,請參閱<a href="{@docRoot}preview/setup-sdk.html#downloadSdk">設定預覽版 SDK</a>。
-
-</p>
-
-
-<h2 id="docs">開發人員文件</h2>
-
-<p>
- 開發人員文件下載套件提供詳細的 API 參考資料和預覽版的 API 差異報告。
-</p>
-
-<table>
- <tr>
- <th scope="col">Description</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="docs-dl">
- <td>Android M Preview 2<br>Developer Docs</td>
- <td><a href="#top" onclick="onDownload(this)"
- >m-preview-2-developer-docs.zip</a><br>
- MD5: 1db6fff9c722b0339757e1cdf43663a8<br>
- SHA-1: 5a4ae88d644e63824d21b0e18f8e3977a7665157
- </td>
- </tr>
-</table>
-
-
-<h2 id="images">硬體系統映像</h2>
-
-<p>
- 這些系統映像可以讓您在實體裝置上安裝預覽版的平台來進行測試。
-使用其中一個映像設定裝置,您就可以安裝並測試您的應用程式,瞭解應用程式在下一個版本的平台上表現如何。
-在裝置上安裝系統映像的過程中,會「移除裝置當中所有的資料」,因此您應該在安裝系統映像之前備份您的資料。<em></em>
-
-
-</p>
-
-<p class="warning">
- <b>警告:</b>下列 Android 系統映像是預覽版,可能隨時會有變更。使用這些系統映像受到「Android SDK 預覽版授權協議」的約束。
-Android 預覽版系統映像還不是穩定的版本,可能會包含許多錯誤和瑕疵而對您的電腦系統、裝置和資料造成損害。
-
-預覽版的 Android 系統映像與出廠作業系統的測試不同,可能會導致您的手機和安裝的服務與應用程式停止運作。
-
-
-</p>
-
-<table>
- <tr>
- <th scope="col">Device</th>
- <th scope="col">Download / Checksums</th>
- </tr>
- <tr id="hammerhead">
- <td>Nexus 5 (GSM/LTE) <br>"hammerhead"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >hammerhead-MPZ79M-preview-b1f4bde4.tgz</a><br>
- MD5: 2ca9f18bf47a061b339bab52647ceb0d<br>
- SHA-1: b1f4bde447eccbf8ce5d9b8b8ba954e3eac8e939
- </td>
- </tr>
- <tr id="shamu">
- <td>Nexus 6 <br>"shamu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >shamu-MPZ79M-preview-e1024040.tgz</a><br>
- MD5: 24a2118da340b9afedfbdfc026f6ff81<br>
- SHA-1: e10240408859d5188c4aae140e1c539130ba614b
- </td>
- </tr>
- <tr id="volantis">
- <td>Nexus 9 <br>"volantis"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >volantis-MPZ79M-preview-9f305342.tgz</a><br>
- MD5: 9edabf0a4c61b247f1cbb9dfdc0a899e<br>
- SHA-1: 9f30534216f10899a6a75495fc7e92408ea333a7
- </td>
- </tr>
-
- <tr id="fugu">
- <td>Nexus Player <br>"fugu"</td>
- <td><a href="#top" onclick="onDownload(this)"
- >fugu-MPZ79N-preview-fb63af98.tgz</a><br>
- MD5: e8d081137a20b66df595ee69523314b5<br>
- SHA-1: fb63af98302dd97be8de9313734d389ccdcce250
- </td>
- </tr>
-
-</table>
-
-<h3 id="install-image">在裝置上安裝映像</h3>
-
-<p>
- 如果要使用裝置映像進行測試,您必須先在相容的裝置上安裝映像。請依照下面的指示安裝系統映像:
-
-</p>
-
-<ol>
- <li>下載此處列出的其中一個系統映像,然後解壓縮。</li>
- <li>備份您要保留的所有裝置資料。</li>
- <li>依照
-<a href="https://developers.google.com/android/nexus/images#instructions">developers.google.com/android</a>
-的指示,將映像更新到您的裝置。</li>
-</ol>
-
-<p class="note">
- <strong>注意:</strong>在您使用預覽版系統映像更新開發裝置之後,裝置就會透過無線 (OTA) 更新方式自動升級為下一個預覽版版本。
-
-</p>
-
-<h3 id="revertDevice">將裝置還原成出廠規格</h3>
-
-<p>
- 如果您要解除安裝預覽版並將裝置還原成出廠規格,請至
-<a href="http://developers.google.com/android/nexus/images">developers.google.com/android</a> 並下載您要為裝置更新的映像。
-依照該頁面的指示,將映像更新到您的裝置。
-
-</p>
-
- </div><!-- landing -->
-
-</div><!-- relative wrapper -->
-
-
-
-<script>
- var urlRoot = "http://storage.googleapis.com/androiddevelopers/shareables/preview/";
- function onDownload(link) {
-
- $("#downloadForRealz").html("Download " + $(link).text());
- $("#downloadForRealz").attr('href', urlRoot + $(link).text());
-
- $("#tos").fadeIn('fast');
- $("#landing").fadeOut('fast');
-
- return true;
- }
-
-
- function onAgreeChecked() {
- /* verify that the TOS is agreed */
- if ($("input#agree").is(":checked")) {
- /* reveal the download button */
- $("a#downloadForRealz").removeClass('disabled');
- } else {
- $("a#downloadForRealz").addClass('disabled');
- }
- }
-
- function onDownloadForRealz(link) {
- if ($("input#agree").is(':checked')) {
- /*
- $("#tos").fadeOut('fast');
- $("#landing").fadeIn('fast');
- */
-
- ga('send', 'event', 'M Preview', 'System Image', $("#downloadForRealz").html());
-
- /*
- location.hash = "";
- */
- return true;
- } else {
- return false;
- }
- }
-
- $(window).hashchange( function(){
- if (location.hash == "") {
- location.reload();
- }
- });
-
-</script>
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
deleted file mode 100644
index 123498b..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/background-optimization.jd
+++ /dev/null
@@ -1,390 +0,0 @@
-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">
- <div id="qv">
- <h2>
- 此文件內容
- </h2>
-
- <ol>
- <li>
- <a href="#connectivity-action">CONNECTIVITY_ACTION 上的限制</a>
- </li>
-
- <li>
- <a href="#sched-jobs">在非計量付費連線上排程網路工作</a>
-
- </li>
-
- <li>
- <a href="#monitor-conn">監視應用程式執行時的網路連線能力</a>
-
- </li>
-
- <li>
- <a href="#media-broadcasts">NEW_PICTURE 與 NEW_VIDEO 上的限制</a>
-
- </li>
-
- <li>
- <a href="#new-jobinfo">新的 JobInfo 方法</a>
- </li>
-
- <li>
- <a href="#new-jobparam">新的 JobParameter 方法</a>
- </li>
-
- <li>
- <a href="#further-optimization">進一步最佳化您的應用程式</a>
- </li>
- </ol>
- </div>
-</div>
-
-<p>
- 背景處理程序可能耗用大量的記憶體或電池電力。例如,隱含式廣播可能會啟動許多已註冊要接聽它的背景處理程序,即使那些處理程序可能不會執行太多工作。
-
-這可能會對裝置效能與使用者體驗兩者造成實質影響。
-
-</p>
-
-<p>
- 為減輕此問題,N Developer Preview 套用下列限制:
-
-</p>
-
-<ul>
- <li>目標為 Preview 的應用程式,如果在宣示說明中註冊以接收廣播,則不會收到 {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} 廣播。
-在前景執行的應用程式,只要使用 {@link
- android.content.Context#registerReceiver Context.registerReceiver()} 註冊 {@link android.content.BroadcastReceiver},即可在主要執行緒中接聽 {@code CONNECTIVITY_CHANGE}。
-
-
- </li>
-
- <li>應用程式無法傳送或接收 {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。這種最佳化方式會影響所有應用程式,而不只是目標為 Preview 的應用程式。
-
- </li>
-</ul>
-
-<p>
- Android 架構提供數種解決方案來減少這些隱含式廣播的需求。
-例如,{@link android.app.job.JobScheduler} 與 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> 提供的健全機制,可在符合指定條件 (例如,連線到非計量付費網路) 的情況下排程網路操作。
-
-
-您甚至可以使用 {@link android.app.job.JobScheduler} 對內容提供者的變更採取因應動作。{@link android.app.job.JobInfo} 物件會封裝 {@link android.app.job.JobScheduler} 用來排程您的工作的參數。
-
-
-符合工作的條件時,系統會在應用程式的 {@link android.app.job.JobService} 上執行此工作。
-
-</p>
-
-<p>
- 在此文件中,我們將學習如何使用替代方法 (例如
- {@link android.app.job.JobScheduler}) 改寫您的應用程式以配合這些新的限制。
-
-</p>
-
-<h2 id="connectivity-action">
- CONNECTIVITY_ACTION 上的限制
-</h2>
-
-<p>
- 目標為 N Developer Preview 的應用程式,如果在宣示說明中註冊以接收廣播,則不會收到 {@link
- android.net.ConnectivityManager#CONNECTIVITY_ACTION} 廣播,而相依於此廣播的處理程序將不會啟動。
-
-這可能會在裝置連線到非計量付費網路時,對想要接聽網路變更或執行大量網路活動的應用程式造成問題。
-
-Android 架構中已經有數個可以避過此限制的解決方案,但是選擇適當的方法取決於您想要應用程式完成什麼工作。
-
-
-</p>
-
-<p class="note">
- <strong>注意:</strong>使用
- {@link android.content.Context#registerReceiver Context.registerReceiver()}
- 註冊的 {@link android.content.BroadcastReceiver} 會在應用程式位於前景時繼續接收這些廣播。
-</p>
-
-<h3 id="sched-jobs">
- 在非計量付費連線上排程網路工作
-</h3>
-
-<p>
- 使用 {@link android.app.job.JobInfo.Builder JobInfo.Builder} 類別建置 {@link android.app.job.JobInfo} 物件時,請套用 {@link
- android.app.job.JobInfo.Builder#setRequiredNetworkType
- setRequiredNetworkType()} 方法並傳遞 {@link android.app.job.JobInfo
- JobInfo.NETWORK_TYPE_UNMETERED} 當做工作參數。
-下列程式碼範例會排程服務,讓它在裝置連線到非計量付費網路和收費時執行:
-
-
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo job = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MyJobService.class))
- .setRequiredNetworkType(JobInfo.NETWORK_TYPE_UNMETERED)
- .setRequiresCharging(true)
- .build();
- js.schedule(job);
-}
-</pre>
-
-<p>
- 符合您工作的條件時,您的應用程式會收到一個回呼,在指定的 {@code JobService.class} 中執行{@link android.app.job.JobService#onStartJob onStartJob()} 方法。
-
-如果要檢視更多 {@link
- android.app.job.JobScheduler} 實作的範例,請參閱 <a href="{@docRoot}samples/JobScheduler/index.html">JobScheduler 範例應用程式</a>。
-</p>
-
-<p>
- 使用 GMSCore 服務且目標為 Android 5.0 (API 層級 21) 或更低的應用程式,可以使用 <a href="https://developers.google.com/android/reference/com/google/android/gms/gcm/GcmNetworkManager">
- {@code GcmNetworkManager}</a> 並指定 {@code Task.NETWORK_STATE_UNMETERED}。
-
-</p>
-
-<h3 id="monitor-conn">
- 監視應用程式執行時的網路連線能力
-</h3>
-
-<p>
- 在前景執行的應用程式,只要使用註冊的 {@link
- android.content.BroadcastReceiver} ,仍然可以接聽 {@code
- CONNECTIVITY_CHANGE}。然而,{@link
- android.net.ConnectivityManager} API 提供更建全的方法,只在符合指定的網路條件時才要求回呼。
-
-</p>
-
-<p>
- {@link android.net.NetworkRequest} 物件以 {@link android.net.NetworkCapabilities} 的方式定義網路回呼的參數。
-您使用 {@link
- android.net.NetworkRequest.Builder NetworkRequest.Builder} 類別建立{@link android.net.NetworkRequest} 物件。接著 {@link
- android.net.ConnectivityManager#registerNetworkCallback(android.net.NetworkRequest,
- android.net.ConnectivityManager.NetworkCallback) registerNetworkCallback()}
- 會將 {@link android.net.NetworkRequest} 物件傳遞到系統。
-符合網路條件時,應用程式會收到回呼,執行它的 {@link
- android.net.ConnectivityManager.NetworkCallback} 類別中定義的
- {@link android.net.ConnectivityManager.NetworkCallback#onAvailable
- onAvailable()} 方法。
-
-</p>
-
-<p>
- 應用程式會持續收到回呼,直到應用程式結束或呼叫
- {@link android.net.ConnectivityManager#unregisterNetworkCallback
- unregisterNetworkCallback()} 才停止。
-</p>
-
-<h2 id="media-broadcasts">
- NEW_PICTURE 與 NEW_VIDEO 上的限制
-</h2>
-
-<p>
- 在 N Developer Preview 中,應用程式無法傳送或接收 {@link
- android.hardware.Camera#ACTION_NEW_PICTURE} 或 {@link
- android.hardware.Camera#ACTION_NEW_VIDEO} 廣播。在必須喚醒數個應用程式來處理新的影像或視訊時,此限制有助於降低對效能與使用者體驗的影響。
-
-N Developer Preview 擴充 {@link android.app.job.JobInfo} 與 {@link
- android.app.job.JobParameters} 來提供替代解決方案。
-
-</p>
-
-<h3 id="new-jobinfo">
- 新的 JobInfo 方法
-</h3>
-
-<p>
- 為了在內容 URI 變更時觸發工作,N Developer Preview 使用下列方法擴充 {@link android.app.job.JobInfo} API:
-
-</p>
-
-<dl>
- <dt>
- {@code JobInfo.TriggerContentUri()}
- </dt>
-
- <dd>
- 封裝在內容 URI 變更時觸發工作所需的參數。
- </dd>
-
- <dt>
- {@code JobInfo.Builder.addTriggerContentUri()}
- </dt>
-
- <dd>
- 將 {@code TriggerContentUri} 物件傳遞到 {@link
- android.app.job.JobInfo}。{@link android.database.ContentObserver} 會監視封裝的內容 URI。
-如果有多個 {@code
- TriggerContentUri} 物件與工作關聯,即使系統只回報其中一個內容 URI 中的變更,也會提供一個回呼。
-
- </dd>
-
- <dd>
- 新增 {@code TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS} 旗標,以在特定 URI 的任何子系變更時觸發工作。
-此旗標對應傳遞到 {@link
- android.content.ContentResolver#registerContentObserver
- registerContentObserver()} 的 {@code notifyForDescendants} 參數。
-
- </dd>
-</dl>
-
-<p class="note">
- <strong>注意:</strong>{@code TriggerContentUri()} 無法與 {@link android.app.job.JobInfo.Builder#setPeriodic
- setPeriodic()} 或 {@link android.app.job.JobInfo.Builder#setPersisted
- setPersisted()} 結合使用。
-為了持續監視內容變更,請在應用程式的 {@link
- android.app.job.JobService} 完成處理最近的回呼之前,排程新的
- {@link android.app.job.JobInfo}。
-</p>
-
-<p>
- 下列範例程式碼會排程一個工作,在系統回報內容 URI {@code MEDIA_URI} 變更時觸發該工作:
-
-</p>
-
-<pre>
-public static final int MY_BACKGROUND_JOB = 0;
-...
-public static void scheduleJob(Context context) {
- JobScheduler js =
- (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
- JobInfo.Builder builder = new JobInfo.Builder(
- MY_BACKGROUND_JOB,
- new ComponentName(context, MediaContentJob.class));
- builder.addTriggerContentUri(
- new JobInfo.TriggerContentUri(MEDIA_URI,
- JobInfo.TriggerContentUri.FLAG_NOTIFY_FOR_DESCENDANTS));
- js.schedule(builder.build());
-}
-</pre>
-<p>
- 當系統回報指定內容 URI 中有變更時,您的應用程式會收到一個回呼,而且會傳遞一個 {@link android.app.job.JobParameters} 物件到 {@code MediaContentJob.class} 中的 {@link android.app.job.JobService#onStartJob onStartJob()} 方法。
-
-
-
-</p>
-
-<h3 id="new-jobparam">
- 新的 JobParameter 方法
-</h3>
-
-<p>
- N Developer Preview 也擴充 {@link android.app.job.JobParameters} 以允許您的應用程式接收有關內容授權單位與觸發工作之 URI 的實用資訊:
-
-
-</p>
-
-<dl>
- <dt>
- {@code Uri[] getTriggeredContentUris()}
- </dt>
-
- <dd>
- 傳回觸發工作之 URI 的陣列。如果沒有 URI 觸發工作 (例如,工作是因為期限到了或一些其他原因而觸發),或是變更的 URI 數目大於 50 時,這將會是 {@code
- null}。
-
-
- </dd>
-
- <dt>
- {@code String[] getTriggeredContentAuthorities()}
- </dt>
-
- <dd>
- 傳回觸發工作之內容授權單位的字串陣列。
- 如果傳回的陣列不是 {@code null},請使用 {@code getTriggeredContentUris()} 來擷取變更的 URI 的詳細資訊。
-
- </dd>
-</dl>
-
-<p>
- 下列範例程式碼會覆寫 {@link
- android.app.job.JobService#onStartJob JobService.onStartJob()} 方法,並記錄觸發工作的內容授權單位與 URI:
-
-</p>
-
-<pre>
-@Override
-public boolean onStartJob(JobParameters params) {
- StringBuilder sb = new StringBuilder();
- sb.append("Media content has changed:\n");
- if (params.getTriggeredContentAuthorities() != null) {
- sb.append("Authorities: ");
- boolean first = true;
- for (String auth :
- params.getTriggeredContentAuthorities()) {
- if (first) {
- first = false;
- } else {
- sb.append(", ");
- }
- sb.append(auth);
- }
- if (params.getTriggeredContentUris() != null) {
- for (Uri uri : params.getTriggeredContentUris()) {
- sb.append("\n");
- sb.append(uri);
- }
- }
- } else {
- sb.append("(No content)");
- }
- Log.i(TAG, sb.toString());
- return true;
-}
-</pre>
-
-<h2 id="further-optimization">
- 進一步最佳化您的應用程式
-</h2>
-
-<p>
- 最佳化您的應用程式,讓它可以在低記憶體裝置上或低記憶體狀況下執行,這樣可以改進效能與使用者體驗。
-移除背景服務上的相依性與靜態註冊的隱含式廣播接收器,有助於讓您的應用程式在此類裝置上執行得更順暢。
-
-雖然 N Developer Preview 採取一些步驟來減少一些此類問題,但是還是建議您最佳化您的應用程式,讓它完全不必使用這些背景處理程序。
-
-
-
-</p>
-
-<p>
- N Developer Preview 引進一些額外的 <a href="{@docRoot}tools/help/adb.html">Android Debug Bridge (ADB)</a> 命令,您可以使用這些命令測試在那些背景處理程序停用時的應用程式行為:
-
-</p>
-
-<ul>
- <li>如果要模擬隱含式廣播與背景服務無法使用的情況,請輸入下列命令:
-
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND ignore}
-</pre>
- </li>
-
- <li>如果要重新啟用隱含式廣播與背景服務,請輸入下列命令:
-
- </li>
-
- <li style="list-style: none; display: inline">
-<pre class="no-pretty-print">
-{@code $ adb shell cmd appops set RUN_IN_BACKGROUND allow}
-</pre>
- </li>
-</ul>
\ No newline at end of file
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
deleted file mode 100644
index b6816b8..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/icu4j-framework.jd
+++ /dev/null
@@ -1,160 +0,0 @@
-page.title=ICU4J Android 架構 API
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>此文件內容:</h2>
-<ol>
- <li><a href="#relation">與 ICU4J 的關係</a></li>
- <li><a href="#migration">從 ICU4J 遷移到 android.icu API</a></li>
- <li><a href="#licence">授權</a></li>
-</ol>
-
-<h2>另請參閱</h2>
-<ol>
- <li>
- <a class="external-link" href="http://userguide.icu-project.org">ICU4J 文件</a>
- </li>
-
- <li>
- <a class="external-link" href="http://site.icu-project.org/#TOC-What-is-ICU-">ICU4J 支援的最新標準</a>
-
- </li>
-</ol>
-</div>
-</div>
-
-<p>
- ICU4J 是廣為使用的一組開放原始碼 Java 程式庫,為軟體應用程式提供 Unicode 與全球化支援。
-Android N 在 Android 架構中公開一個 ICU4J API 的子集,供應用程式開發人員在 {@code android.icu} 套件下使用。
-
-這些 API 使用裝置上呈現的當地語系化資料。
-因此,您可以不用將 ICU4J 程式庫編譯到 APK 而降低 APK 的使用;相反地,您只需在架構中呼叫這些程式庫
-
-(在此情況中,您可能要提供<a href="{@docRoot}google/play/publishing/multiple-apks.html">多個版本的 APK</a>,這樣執行低於 Android N 之 Android 版本的使用者即可下載包含 ICU4J 程式庫的應用程式版本)。
-
-
-
-</p>
-
-<p>
- 此文件一開始先提供支援這些程式庫所需之最低 Android API 層級的一些基本資訊。
-接著它說明 Android 特定實作 ICU4J 的相關須知事項。
-最後,它告訴您如何在 Android 架構中使用 ICU4J API。
-
-</p>
-
-<h2 id="relation">與 ICU4J 的關係</h2>
-
-<p>
- Android N 透過
- <code>android.icu</code> 套件 (而非 <code>com.ibm.icu</code>) 公開一個 ICU4J API 的子集。Android 架構可能因為各種原因選擇不公開 ICU4J API;例如,Android N 沒有公開一些已過時的 API 或 ICU 團隊尚未宣布為穩定的 API。
-
-
-
-因為 ICU 團隊將來會將 API 視為過時,所以 Android 也會將這些 API 標示為已過時但繼續包含它們。
-
-</p>
-
-<p class="table-caption"><strong>表 1.</strong> Android N 中使用的 ICU 與 CLDR 版本。
-</p>
-<table>
-<tr>
-<th>Android API 層級</th>
-<th>ICU 版本</th>
-<th>CLDR 版本</th>
-</tr>
-<tr>
-<td>Android N</td>
-<td>56</td>
-<td>28</td>
-</tr>
-</table>
-
-<p>以下是一些必須注意的重要事項:</p>
-
-<ul>
-<li>ICU4J Android 架構 API 不包含所有 ICU4J API。</li>
-<li>NDK 開發人員應該知道 Android ICU4C 不被支援。</li>
-<li>Android 架構中的 API 沒有取代 Android 對<a href="{@docRoot}guide/topics/resources/localization.html">使用資源進行當地語系化</a>的支援。
-
-</li>
-</ul>
-
-<h2 id="migration">從 com.ibm.icu 遷移到 android.icu 套件</h2>
-
-<p>
- 如果您已經在應用程式中使用 ICU4J API,而且
- <code>android.icu</code> API 符合您的需求,那麼遷移到架構 API 需要您將 Java 匯入從 <code>com.ibm.icu</code> 變更為 <code>android.icu</code>。
-
-接著您可以從 APK 移除您自己的 ICU4J 檔案。
-
-</p>
-
-<p class="note">
- <b>注意</b>:ICU4J 架構 API 使用 {@code android.icu} 命名空間而非 {@code com.ibm.icu}。
-這是為了避免包含自己的 {@code com.ibm.icu} 程式庫的 APK 中發生命名空間衝突。
-
-</p>
-
-<h3 id="migrate-from-android">
- 從其他 Android SDK API 遷移到 android.icu API
-</h3>
-
-<p>
- <code>java</code> 與 <code>android</code> 套件中的一些類別包含可在 ICU4J 中找到的同等項目。
-然而,ICU4J 通常為標準與語言提供更廣泛的支援。
-
-</p>
-<p>以下提供一些快速入門範例:</p>
-<table>
-<tr>
-<th>類別</th>
-<th>替代項目</th>
-</tr>
-<tr>
-<td><code>java.lang.Character</code> </td>
-<td><code>android.icu.lang.UCharacter</code> </td>
-</tr>
-<tr>
-<td><code>java.text.BreakIterator</code> </td>
-<td><code>android.icu.text.BreakIterator</code> </td>
-</tr>
-<tr>
-<td><code>java.text.DecimalFormat</code> </td>
-<td><code>android.icu.text.DecimalFormat</code> </td>
-</tr>
-<tr>
-<td><code>java.util.Calendar</code></td>
-<td>
-<code>android.icu.util.Calendar</code></td>
-</tr>
-<tr>
-<td><code>android.text.BidiFormatter</code>
- </td>
-<td><code>android.icu.text.Bidi</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateFormat</code>
- </td>
-<td><code>android.icu.text.DateFormat</code>
- </td>
-</tr>
-<tr>
-<td><code>android.text.format.DateUtils</code> </td>
-<td><code>android.icu.text.DateFormat</code>
-<code>android.icu.text.RelativeDateTimeFormatter</code>
-</td>
-</tr>
-</table>
-
-<h2 id="licence">授權</h2>
-
-<p>
- ICU4J 是根據 ICU 授權而發行。如需詳細資料,請參閱 <a class="external-link" href="http://userguide.icu-project.org/icufaq#TOC-How-is-the-ICU-licensed-">ICU 使用者指南</a>。
-
-</p>
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
deleted file mode 100644
index 5570b4d..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/multilingual-support.jd
+++ /dev/null
@@ -1,217 +0,0 @@
-page.title=語言和地區設定
-page.tags=androidn
-page.image=images/cards/card-nyc_2x.jpg
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-<h2>此文件內容:</h2>
-<ol>
- <li><a href="#preN">解析語言資源中的挑戰</a></li>
- <li><a href="#postN">對資源解析策略所做的改進</a></li>
- <li><a href="#design">設計您的應用程式支援其他地區設定</a>
-</li>
-
-</ol>
-
-</div>
-</div>
-
-<p>Android N 增強對多語言使用者的支援,讓他們可在設定中選取多個地區設定。
-Android N 藉由擴充支援的地區設定數量和改變系統解析資源的方式來提供多語言支援。
-
-解析資源的新方法更加健全,而且它的設計是與現有 APK 相容,但是您應該特別注意任何未預期的行為。
-
-例如,您應該進行測試,確認應用程式預設在預期的語言。
-此外,如果您的應用程式支援多個語言,則應該確保這項支援也能如預定方式運作。
-
-最後,您應該試著確認應用程式可以順暢地處理沒有明確設計要支援的語言。
-</p>
-
-<p>本文件一開始會先說明在 Android N 之前的資源解析策略。接下來,它會描述 Android N 的已改進的資源解析策略。
-
-最後,它會說明如何利用擴充的地區設定數量來支援更多的多語言使用者。
-</p>
-
-<h2 id="preN">解析語言資源中的挑戰</h2>
-
-<p>在 Android N 之前,Android 並不總能成功地對應應用程式與系統地區設定。
-舉例來說,假設您應用程式的預設語言的是 US English,但是它的 {@code es_ES} 資源檔案中也包含當地語言化的西班牙文字串。
-
-</p>
-<p>當您的 Java 程式碼參考這些字串時,它會以下列方式來解析字串語言:
-</p>
-<ul>
-<li>如果裝置設定為 {@code es_MX} (Spanish-Mexico),Android 會從 {@code es_ES} 資源檔案載入字串。
-</li>
-<li>如果裝置設定為 {@code en_AU},Android 會返回使用 {@code
-en_US}。如果使用者選擇應用程式完全不支援的語言 (如法文),系統也會預設成 {@code en_US}。
-</li>
-</ul>
-
-
-<p>出現這些解析問題的原因,是如果系統找不到符合的項目,它會剝除地區設定中的國家/地區代碼。
-例如:</p>
-<p class="table-caption" id="t-resource-res">
-<strong>表 1.</strong> 沒有完全符合的地區設定的資源解析。
-</p>
-<table>
-<tbody>
-<tr>
-<th>使用者設定</th>
-<th>應用程式資源</th>
-<th>資源解析</th>
-</tr>
-<tr>
-<td>fr_CH</td>
-<td>
-預設 (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
- <td>
-嘗試 fr_CH => 失敗<br>
-嘗試 fr => 失敗<br>
-使用預設 (en)
-</td>
- </tr>
- </tbody>
-</table>
-
-
-<p>在此例中,系統會顯示英文字串,而不知道使用者是否了解英文。
-現在這種行為相當常見。
-Android N 可以大幅降低出現這類結果的頻率。
-</p>
-
-<h2 id="postN">對資源解析策略所做的改進</h2>
-<p>Android N 帶來更健全的資源解析,而且會自動發現更佳的遞補。
-然而,為了加速解析和改進維護能力,您應該將資源存放在最常用的父系語言中。
-
- 例如,如果之前將西班牙文資源存放在 {@code es-US} 目錄,請將它們移到包含拉丁美洲西班牙文的 {@code es-419} 目錄。
-
- 同樣地,如果在名為 {@code en-GB} 的資料夾中包含資源字串,請將資料夾重新命名為 {@code en-001} (國際英文),因為 <code>en-GB</code> 字串的最常見父系為 {@code en-001}。
-
-
- 下列範例說明為什麼這些做法可改善資源解析的效能和可靠性。
-</p>
-
-<h3>資源解析範例</h3>
-
-<p>在 Android N 中,<strong>表 1</strong> 中所述的案例會用不同的方式解析:
-</p>
-
-<p class="table-caption" id="t-improved-res">
-<strong>表 2.</strong> 沒有完全符合的地區設定的已改進解析策略。
-</p>
-<table>
-<tr>
-<th>使用者設定</th>
-<th>應用程式資源</th>
-<th>資源解析</th>
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-</ol>
-</td>
-<td>
-預設 (en)<br>
-de_DE<br>
-es_ES<br>
-fr_FR<br>
-it_IT<br>
-</td>
-<td>
-嘗試 fr_CH => 失敗<br>
-嘗試 fr => 失敗<br>
-嘗試 fr 的子項 => fr_FR<br>
-使用 fr_FR
-</td>
-</tr>
-
-</table>
-
-
-<p>現在使用者會取得法文資源而非英文資源。這個範例也顯示為什麼在 Android N 中,您應該將法文字串存放在 {@code fr} 而非 {@code fr_FR} 中。以下是比對最接近父系語言的動作步驟,這些步驟可讓解析更快、更容易預測。
-
-
-</p>
-
-<p>除了這個已改進的解析邏輯之外,現在 Android 還提供更多使用者語言供您選擇。
-讓我們指定義大利文做為額外的使用者語言但應用程式不支援法文的情況,再試一次上述的範例。
- </p>
-
-<p class="table-caption" id="t-2d-choice">
-<strong>表 3.</strong> 應用程式只比對到符合使用者第二個慣用地區設定時的資源解析。
-</p>
-<table>
-<tr>
-<th>使用者設定</th>
-<th>應用程式資源</th>
-<th>資源解析</th>
-
-</tr>
-<tr>
-<td><ol>
-<li> fr_CH</li>
-<li> it_CH</li>
-</ol>
-</td>
-<td>
-預設 (en)<br>
-de_DE<br>
-es_ES<br>
-it_IT<br>
-</td>
-<td>
-嘗試 fr_CH => 失敗<br>
-嘗試 fr => 失敗<br>
-嘗試 fr 的子項 => 失敗<br>
-嘗試 it_CH => 失敗<br>
-嘗試 it => 失敗<br>
-嘗試 it 的子項 => it_IT<br>
-使用 it_IT
-</td>
-
-</tr>
-
-</table>
-<p>即使應用程式不支援法文,但是使用者仍然取得他們了解的語言。
-</p>
-
-
-<h2 id="design">設計您的應用程式支援其他地區設定</h2>
-<h3>LocaleList API</h3>
-
-<p>Android N 增加了新的 API {@code LocaleList.GetDefault()}
-,讓應用程式直接查詢使用者指定的語言清單。這個 API 可讓您建立更精細的應用程式行為,也能更好的最佳化內容的顯示方式。
-
-例如,搜尋可以根據使用者的設定以多語言顯示結果。
-瀏覽器應用程式可以避免提供以使用者已知語言來翻譯網頁的選項,鍵盤應用程式可以自動啟用所有適當的版面配置。
-
- </p>
-
-<h3>格式設定</h3>
-
-<p>直到 Android 6.0 (API 層級 23),Android 還只支援許多常用語言 (en、es、ar、fr、ru) 的一或兩個地區設定。
-
-因為每種語言只有幾種變體,所以應用程式不用在資源檔案中將一些數字和日期儲存為硬式編碼字串。
-
-然而,隨著 Android 擴充了支援的地區設定之後,即使在單一地區設定中,日期、時間、貨幣和類似資訊的格式可能會有顯著的差異。
-
-
-硬式編碼您的格式會對使用者產生令人混淆的體驗。
-因此,針對 Android N 進行開發時,請務必使用格式子,而不要硬式編碼數字和日期字串。
-</p>
-
-<p>最主要的範例是阿拉伯文,它對 Android N 的支援從一個 {@code ar_EG} 擴充到 27 個阿拉伯地區設定。
-這些地區設定可以共用大多數的資源,但是有些地區設定慣用 ASCII 數字,而其他地區設定慣用當地數字。
-例如,在您想要建立一個包含數字變數的句子時,例如 "Choose a 4 digit pin",請使用如下所示的格式設定:
-
-</p>
-
-<pre> format(locale, "Choose a %d-digit PIN", 4)</pre>
diff --git a/docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd b/docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd
deleted file mode 100644
index 5ebcebb..0000000
--- a/docs/html-intl/intl/zh-tw/preview/features/notification-updates.jd
+++ /dev/null
@@ -1,328 +0,0 @@
-page.title=通知
-page.tags=notifications
-helpoutsWidget=true
-page.image=/preview/images/notifications-card.png
-
-trainingnavtop=true
-
-@jd:body
-
-<div id="qv-wrapper">
-<div id="qv">
-
-<!-- table of contents -->
-<h2>本文件包括</h2>
-<ol>
- <li><a href="#direct">直接回覆</a></li>
- <li><a href="#bundle">整合式通知</a></li>
- <li><a href="#custom">自訂檢視</a></li>
-</ol>
-
-</div>
-</div>
-
-<p>Android N 引進數個新 API,允許應用程式張貼相當顯眼且互動式的通知。
-</p>
-
-<p>Android N 擴充現有的 {@link android.support.v4.app.RemoteInput}
-通知 API,支援在手機上內嵌回覆。此功能允許使用者從通知欄快速回應,而不必造訪您的應用程式。
-</p>
-
-<p>
- Android N 也允許您將類似的通知結合成單一通知。
-Android N 使用現有的 {@link
- android.support.v4.app.NotificationCompat.Builder#setGroup
- NotificationCompat.Builder.setGroup()} 方法來實現此目標。使用者能擴充每個通知,並可個別從通知欄執行動作,例如回覆和關閉每一個通知。
-
-
-</p>
-
-<p>最後,Android N 還新增 API 讓您在應用程式的自訂通知檢視中利用系統的裝飾。
-這些 API 可協助確保通知檢視和標準範本的呈現方式一致。
-
-</p>
-
-<p>本文件將強調說明一些重要變更,您應該在應用程式中使用新的通知功能時納入考量。
-</p>
-
-<h2 id="direct">直接回覆</h2>
-
-<p>使用 Android N 中的直接回覆功能,使用者可直接在通知介面內快速回應文字訊息或更新工作清單。
-
-在手持式裝置上,內嵌回覆動作看起來就像是通知附加的額外按鈕。
-當使用者透過鍵盤回覆時,系統會在您為通知動作指定的意圖附加文字回應,然後將意圖傳送給您的手持裝置應用程式。
-
-
-
-
-
-<img id="fig-reply-button" src="{@docRoot}preview/images/inline-reply.png" srcset="{@docRoot}preview/images/inline-reply.png 1x,
- {@docRoot}preview/images/inline-reply_2x.png 2x" width="400">
-<p class="img-caption">
- <strong>圖 1.</strong> Android N 新增「回覆」<strong></strong>
- 操作按鈕.
-</p>
-
-<h3>新增內嵌回覆動作</h3>
-
-<p>建立支援直接回覆的通知動作:
-</p>
-
-<ol>
-<li>建立您可以新增至通知動作的 {@link android.support.v4.app.RemoteInput.Builder}
- 實例。
-此類別的建構函式接受字串,系統可當成文字輸入的金鑰使用。
-稍後,您的手持裝置應用程式會使用該金鑰,擷取輸入的文字。
-
-
-<pre>
-// Key for the string that's delivered in the action's intent
-private static final String KEY_TEXT_REPLY = "key_text_reply";
-String replyLabel = getResources().getString(R.string.reply_label);
-RemoteInput remoteInput = new RemoteInput.Builder(KEY_TEXT_REPLY)
- .setLabel(replyLabel)
- .build();
-</pre>
-</li>
-<li>使用 <code>addRemoteInput()</code> 將 {@link android.support.v4.app.RemoteInput}
- 物件附加到動作。
-
-<pre>
-// Create the reply action and add the remote input
-Notification.Action action =
- new Notification.Action.Builder(R.drawable.ic_reply_icon,
- getString(R.string.label), replyPendingIntent)
- .addRemoteInput(remoteInput)
- .build();
-</pre>
-</li>
-
-<li>將動作套用到通知並發出通知。
-
-<pre>
-// Build the notification and add the action
-Notification notification =
- new Notification.Builder(mContext)
- .setSmallIcon(R.drawable.ic_message)
- .setContentTitle(getString(R.string.title))
- .setContentText(getString(R.string.content))
- .addAction(action))
- .build();
-
-// Issue the notification
-NotificationManager notificationManager =
- NotificationManager.from(mContext);
-notificationManager.notify(notificationId, notification);
-
-</pre>
-</li>
-
-</ol>
-
-
-<p> 當使用者觸發通知動作時,系統會提示使用者輸入回應。
- </p>
-
-<img id="fig-user-input" src="{@docRoot}preview/images/inline-type-reply.png" srcset="{@docRoot}preview/images/inline-type-reply.png 1x,
- {@docRoot}preview/images/inline-type-reply_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>圖 2.</strong> 使用者從通知欄輸入文字。
-</p>
-
-<h3>從內嵌回覆擷取使用者輸入</h3>
-
-<p>從您在回覆動作的意圖中所宣告動作的通知介面接收使用者輸入:
-</p>
-<ol>
-<li> 透過將通知動作的意圖傳遞為輸入參數,來呼叫 {@link android.support.v4.app.RemoteInput#getResultsFromIntent
- getResultsFromIntent()}。
-這個方法會傳回包含文字回應的 {@link android.os.Bundle}。
-
-</li>
-
-<pre>
-Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
-</pre>
-
-<li>使用 (提供給 {@link
- android.support.v4.app.RemoteInput.Builder} 建構函式的) 結果金鑰查詢組合。
-</li>
-</ol>
-
-<p>下列程式碼片段說明方法如何從組合中擷取輸入文字:
-</p>
-
-<pre>
-// Obtain the intent that started this activity by calling
-// Activity.getIntent() and pass it into this method to
-// get the associated string.
-
-private CharSequence getMessageText(Intent intent) {
- Bundle remoteInput = RemoteInput.getResultsFromIntent(intent);
- if (remoteInput != null) {
- return remoteInput.getCharSequence(KEY_TEXT_REPLY);
- }
- return null;
- }
-</pre>
-
-<p>應用程式可以套用邏輯,決定擷取文字時要採取的動作。對於互動式應用程式 (像是聊天),要在通知本身提供更多內容 (例如,多行聊天歷程記錄,包括使用者自己的訊息),使用者才能適當回應。當使用者透過 {@link android.support.v4.app.RemoteInput} 回應時,請使用 {@code setRemoteInputHistory()}
- 方法在回覆歷程記錄中包括文字。
-
-
-
-
-
-</p>
-
-<h2 id="bundle">整合式通知</h2>
-
-<p>Android N 提供開發人員呈現通知佇列的全新方式:
- <i>整合式通知</i>。這類似於 Android Wear
- 中的<a href="{@docRoot}training/wearables/notifications/stacks.html">通知堆疊</a>。
-例如,若您的應用程式會為接收的訊息建立通知,收到多個訊息時,會將通知結合成單一群組。
-
-您可以使用現有的 {@link android.support.v4.app.NotificationCompat.Builder#setGroup
-Builder.setGroup()} 方法,結合類似的通知。
-</p>
-
-<p>
- 通知群組會對其中所含的通知強制施行階層。
- 階層的最上方是上層通知,顯示該群組的摘要資訊。
-使用者可以逐漸擴充通知群組,而系統會在使用者更深入探查時顯示更多資訊。
-
-當使用者擴充組合時,系統會為所有子通知揭露更多資訊。當使用者擴充當中的其中一個通知時,系統會顯示該通知的所有內容。
-
-
-</p>
-
-<img id="fig-bundles" src="{@docRoot}preview/images/bundles.png" srcset="{@docRoot}preview/images/bundles.png 1x,
- {@docRoot}preview/images/bundles_2x.png 2x" width="300">
-<p class="img-caption">
- <strong>圖 3.</strong> 使用者可以逐漸擴充通知群組。
-
-</p>
-
-<p>若要了解如何將通知新增至群組,請參閱<a href="{@docRoot}training/wearables/notifications/stacks.html#AddGroup">將每個通知新增至群組</a>。
-
-</p>
-
-
-<h3 id="best-practices">整合式通知最佳做法</h3>
-<p>本節提供使用通知群組時的指導方針,而不是舊版 Android 平台可用的 {@link android.app.Notification.InboxStyle InboxStyle}
-通知。
-
-</p>
-
-<h3>使用整合式通知的時機</h3>
-
-<p>只有當您的使用案例與下列條件全部相符時,才應該使用通知群組:
-</p>
-
-<ul>
- <li>子通知是完整通知,也能個別顯示,而不需要群組摘要。
-</li>
- <li>讓子通知個別出現有其優點。例如:
-
- </li>
- <ul>
- <li>能以特定動作來對每個子通知執行動作。</li>
- <li>可讓使用者想讀取的子通知能有更多資訊。</li>
- </ul>
-</ul>
-
-<p>良好的通知群組使用案例範例包括:顯示一連串傳入訊息的訊息傳送應用程式,或顯示一系列所接收電子郵件清單的電子郵件應用程式。
-
-</p>
-
-<p>
-建議使用的單一通知案例範例包括:來自單人的個別訊息,或以清單呈現單行的文字項目。
-
-您可以使用
-({@link android.app.Notification.InboxStyle InboxStyle} 或
-{@link android.app.Notification.BigTextStyle BigTextStyle}) 來完成。
-
-</p>
-
-<h3 id ="post">顯示整合式通知</h3>
-
-<p>
- 應用程式應一律張貼群組摘要,即使群組當中只包含單一子項。
-如果只包含單一通知,系統會抑制摘要,並直接顯示子通知。
-這可確保當使用者滑動離開群組子項時,系統能提供一致的體驗。
-
-
-</p>
-
-<p class="note">
- <strong>注意:</strong>本版 Android N 還不會抑制包含單一子通知的通知群組摘要。
-更新的 Android N 版本才會新增此功能。
-
-</p>
-
-<h3>預覽通知</h3>
-
-<p>雖然系統通常會將子通知顯示為群組,但您可以設定子通知,暫時顯示為<a href="{@docRoot}guide/topics/ui/notifiers/notifications.html#Heads-up">抬頭通知</a>
-。
-
-此功能允許立即存取最新的子通知和與它相關的動作,因此特別實用。
-
-</p>
-
-
-<h3>回溯相容性</h3>
-
-<p>
- 自從 Android 5.0 (API 層級 21) 支援 Android Wear 裝置以來,通知群組與遠端輸入都是 {@link
- android.app.Notification} API 的一部分。
-如果您已使用這些 API 建置通知,您必須採取的動作只有確認應用程式行為符合上述的指導方針,以及考慮實作 {@code
- setRemoteInputHistory()}。
-
-
-</p>
-
-<p>
- 為了支援回溯相容性,相同的 API 可與支援程式庫的 {@link android.support.v4.app.NotificationCompat}
- 類別搭配使用,讓您建置能在舊版 Android 上運作的通知。
-
-在手持裝置與平板電腦上,使用者只會看到摘要通知,應用程式應仍要為群組的完整資訊內容提供收件匣樣式或同等的通知呈現方式。
-
-雖然 Android
- Wear 裝置即使在較舊的平台層級上,也允許使用者查看所有子通知,但不論 API 層級為何,您都應該建置子通知。
-
-
-</p>
-
-<h2 id="custom"> 自訂檢視</h2>
-<p>從 Android N 開始,您可以自訂通知檢視,也仍然可以取得系統裝飾,例如通知標題、動作及可擴充的版面配置。
-
-</p>
-
-<p>若要啟用此功能,Android N 新增下列 API 供您設定自訂檢視的樣式:
-</p>
-
-<dl>
-<dt>
-{@code DecoratedCustomViewStyle()}</dt>
-<dd> 設定媒體通知以外的通知樣式。
-</dd>
-<dt>
-{@code DecoratedMediaCustomViewStyle()}</dt>
-<dd> 設定媒體通知樣式</dd>
-</dl>
-
-<p>若要使用這個新 API,請呼叫 {@code setStyle()} 方法,再傳遞給想要的自訂檢視樣式。
-</p>
-
-<p>此程式碼片段顯示如何使用
-{@code DecoratedCustomViewStyle()} 方法,建構自訂通知物件。</p>
-
-<pre>
-Notification noti = new Notification.Builder()
- .setSmallIcon(R.drawable.ic_stat_player)
- .setLargeIcon(albumArtBitmap))
- .setCustomContentView(contentView);
- .setStyle(new Notification.DecoratedCustomViewStyle())
- .build();
-
-</pre>
diff --git a/docs/html/_redirects.yaml b/docs/html/_redirects.yaml
index fd54b7d..7e7c2de 100644
--- a/docs/html/_redirects.yaml
+++ b/docs/html/_redirects.yaml
@@ -1,6 +1,8 @@
# For information about this file's format, see
# https://developers.google.com/internal/publishing/redirects
redirects:
+- from: /guide/topics/fundamentals/fragments.html
+ to: /guide/components/fragments.html
- from: /about/versions/index.html
to: /about/index.html
- from: /about/versions/api-levels.html
@@ -25,6 +27,8 @@
to: /topic/libraries/support-library/index.html
- from: /billions
to: /topic/billions/index.html
+- from: /performance
+ to: /topic/performance/index.html
- from: /tools/extras/support-library.html
to: /topic/libraries/support-library/index.html
- from: /training/basics/fragments/support-lib.html
@@ -39,8 +43,8 @@
to: /studio/intro/update.html
- from: /sdk/ndk/overview.html
to: /ndk/index.html
-- from: /sdk/ndk/
- to: /ndk/
+- from: /sdk/ndk/...
+ to: /ndk/...
- from: /go/vulkan
to: /ndk/guides/graphics/index.html
- from: /tools/sdk/win-usb.html
@@ -99,18 +103,18 @@
to: /training/testing/unit-testing/index.html
- from: /training/activity-testing/activity-functional-testing.html
to: /training/testing/ui-testing/index.html
-- from: /guide/market/
- to: /google/play/
+- from: /guide/market/...
+ to: /google/play/...
- from: /guide/google/play/services.html
to: https://developers.google.com/android/guides/overview
-- from: /guide/google/
- to: /google/
-- from: /training/id-auth/...
+- from: /guide/google/...
+ to: /google/...
+- from: /training/id-auth/
to: /google/auth/http-auth.html
- from: /google/play-services/auth.html
to: https://developers.google.com/android/guides/http-auth
- from: /google/play-services/games.html
- to: https://developers.google.com/games/services/
+ to: https://developers.google.com/games/services
- from: /google/play-services/location.html
to: /training/location/index.html
- from: /google/play-services/plus.html
@@ -118,21 +122,21 @@
- from: /google/play-services/maps.html
to: /training/maps/index.html
- from: /google/play-services/drive.html
- to: https://developers.google.com/drive/android/
+ to: https://developers.google.com/drive/android
- from: /google/play-services/cast.html
- to: https://developers.google.com/cast/
+ to: https://developers.google.com/cast
- from: /google/play-services/ads.html
- to: https://developers.google.com/mobile-ads-sdk/
+ to: https://developers.google.com/mobile-ads-sdk
- from: /google/play-services/wallet.html
- to: https://developers.google.com/wallet/instant-buy/
+ to: https://developers.google.com/wallet/instant-buy
- from: /google/play-services/id.html
to: https://developers.google.com/android/reference/com/google/android/gms/ads/identifier/AdvertisingIdClient
- from: /google/play/safetynet/...
to: /training/safetynet/index.html
- from: /google/gcm/...
- to: https://developers.google.com/cloud-messaging/
+ to: https://developers.google.com/cloud-messaging/...
- from: /google/gcs/...
- to: https://developers.google.com/datastore/
+ to: https://developers.google.com/datastore/...
- from: /google/play-services/safetynet.html
to: /training/safetynet/index.html
- from: /google/play/billing/v2/api.html
@@ -153,30 +157,32 @@
to: /google/play/billing/index.html
- from: /guide/developing/tools/proguard.html
to: /studio/build/shrink-code.html
+- from: /guide/developing/tools/aidl.html
+ to: /guide/components/aidl.html
- from: /guide/developing/tools/...
- to: /studio/command-line/
+ to: /studio/command-line/...
- from: /guide/developing/...
- to: /studio/
+ to: /studio/...
- from: /tools/aidl.html
to: /guide/components/aidl.html
- from: /guide/market/publishing/multiple-apks.html
to: /google/play/publishing/multiple-apks.html
- from: /guide/publishing/publishing.html
to: /distribute/tools/launch-checklist.html
-- from: /guide/publishing/
+- from: /guide/publishing/...
to: /studio/publish/index.html
- from: /guide/topics/fundamentals.html
to: /guide/components/fundamentals.html
- from: /guide/topics/intents/intents-filters.html
to: /guide/components/intents-filters.html
-- from: /guide/topics/fundamentals/
- to: /guide/components/
+- from: /guide/topics/fundamentals/...
+ to: /guide/components/...
- from: /guide/topics/clipboard/copy-paste.html
to: /guide/topics/text/copy-paste.html
- from: /guide/topics/ui/notifiers/index.html
to: /guide/topics/ui/notifiers/notifications.html
-- from: /guide/topics/wireless/
- to: /guide/topics/connectivity/
+- from: /guide/topics/wireless/...
+ to: /guide/topics/connectivity/...
- from: /guide/topics/drawing/...
to: /guide/topics/graphics/opengl.html
- from: /guide/topics/connectivity/usb/adk.html
@@ -213,8 +219,8 @@
to: /training/articles/security-tips.html
- from: /guide/appendix/market-filters.html
to: /google/play/filters.html
-- from: /guide/topics/testing/
- to: /studio/test/
+- from: /guide/topics/testing/...
+ to: /studio/test/...
- from: /guide/topics/graphics/animation.html
to: /guide/topics/graphics/overview.html
- from: /guide/topics/graphics/renderscript/compute.html
@@ -231,24 +237,24 @@
to: /guide/topics/renderscript/reference/overview.html
- from: /guide/topics/location/obtaining-user-location.html
to: /guide/topics/location/strategies.html
-- from: /guide/topics/nfc/
- to: /guide/topics/connectivity/nfc/
-- from: /guide/topics/wireless/
- to: /guide/topics/connectivity/
-- from: /guide/topics/network/
- to: /guide/topics/connectivity/
+- from: /guide/topics/nfc/...
+ to: /guide/topics/connectivity/nfc/...
+- from: /guide/topics/wireless/...
+ to: /guide/topics/connectivity/...
+- from: /guide/topics/network/...
+ to: /guide/topics/connectivity/...
- from: /resources/articles/creating-input-method.html
to: /guide/topics/text/creating-input-method.html
- from: /resources/articles/spell-checker-framework.html
to: /guide/topics/text/spell-checker-framework.html
-- from: /resources/tutorials/notepad/
+- from: /resources/tutorials/notepad/...
to: https://developer.android.com/training/basics/firstapp/index.html
-- from: /resources/faq/
- to: /guide/faq/
+- from: /resources/faq/...
+ to: /guide/faq/...
- from: /resources/tutorials/hello-world.html
to: /training/basics/firstapp/index.html
-- from: /guide/practices/design/
- to: /guide/practices/
+- from: /guide/practices/design/...
+ to: /guide/practices/...
- from: /guide/practices/accessibility.html
to: /guide/topics/ui/accessibility/index.html
- from: /guide/practices/app-design/performance.html
@@ -357,8 +363,8 @@
to: /training/wearables/notifications/pages.html
- from: /wear/notifications/stacks.html
to: /training/wearables/notifications/stacks.html
-- from: /reference/android/preview/support/
- to: /reference/android/support/
+- from: /reference/android/preview/support/...
+ to: /reference/android/support/...
- from: /wear/license.html
to: /wear/index.html
- from: /resources/dashboard/...
@@ -367,8 +373,8 @@
to: /support.html
- from: /community/index.html
to: /support.html
-- from: /guide/tutorials/
- to: /resources/tutorials/
+- from: /guide/tutorials/...
+ to: /resources/tutorials/...
- from: /resources/tutorials/views/hello-linearlayout.html
to: /guide/topics/ui/layout/linear.html
- from: /resources/tutorials/views/hello-relativelayout.html
@@ -408,11 +414,9 @@
- from: /resources/samples/...
to: /samples/index.html
- from: /resources/...
- to: /training/
+ to: /training/...
- from: /tools/samples/index.html
to: /samples/index.html
-- from: /guide/publishing/publishing.html\#BuildaButton
- to: https://play.google.com/intl/en_us/badges/
- from: /distribute/essentials/best-practices/games.html
to: /distribute/googleplay/guide.html
- from: /distribute/essentials/best-practices/apps.html
@@ -427,12 +431,12 @@
to: /google/gcm/index.html
- from: /training/cloudsync/index.html
to: /training/backup/index.html
-- from: /training/basics/location/
- to: /training/location/
+- from: /training/basics/location/...
+ to: /training/location/...
- from: /training/monetization/index.html
to: /distribute/monetize/index.html
- from: /training/monetization/ads-and-ux.html
- to: https://developers.google.com/mobile-ads-sdk/
+ to: https://developers.google.com/mobile-ads-sdk/index.html
- from: /training/notepad/...
to: https://developer.android.com/training/basics/firstapp/index.html
- from: /training/basics/actionbar/setting-up.html
@@ -443,8 +447,8 @@
to: /training/appbar/index.html
- from: /distribute/open.html
to: /distribute/tools/open-distribution.html
-- from: /distribute/googleplay/promote/
- to: /distribute/tools/promote/
+- from: /distribute/googleplay/promote/...
+ to: /distribute/tools/promote/...
- from: /distribute/googleplay/publish/preparing.html
to: /distribute/tools/launch-checklist.html
- from: /distribute/googleplay/publish/index.html
@@ -473,8 +477,8 @@
to: /distribute/monetize/index.html
- from: /distribute/googleplay/about/distribution.html
to: /distribute/googleplay/developer-console.html
-- from: /distribute/googleplay/spotlight/
- to: /distribute/stories/
+- from: /distribute/googleplay/spotlight/...
+ to: /distribute/stories/...
- from: /distribute/stories/localization.html
to: /distribute/stories/index.html
- from: /distribute/stories/tablets.html
@@ -536,11 +540,11 @@
- from: /videos/index.html
to: /develop/index.html
- from: /live/index.html
- to: https://developers.google.com/live/
-- from: /intl/zh-CN/
- to: /intl/zh-cn/
-- from: /intl/zh-TW/
- to: /intl/zh-tw/
+ to: https://developers.google.com/live/index.html
+- from: /intl/zh-CN/...
+ to: /intl/zh-cn/...
+- from: /intl/zh-TW/...
+ to: /intl/zh-tw/...
- from: /4.2
to: /about/versions/android-4.2.html
- from: /4.1
@@ -549,111 +553,111 @@
to: /about/versions/android-4.0.html
- from: /5
to: /about/versions/android-5.0.html
-- from: /5/
+- from: /5/...
to: /about/versions/android-5.0.html
- from: /m
to: /about/versions/marshmallow/index.html
-- from: /m/
+- from: /m/...
to: /about/versions/marshmallow/index.html
- from: /mm
to: /about/versions/marshmallow/index.html
-- from: /mm/
+- from: /mm/...
to: /about/versions/marshmallow/index.html
- from: /marshmallow
to: /about/versions/marshmallow/index.html
-- from: /marshmallow/
+- from: /marshmallow/...
to: /about/versions/marshmallow/index.html
- from: /l
to: /about/versions/lollipop.html
-- from: /l/
+- from: /l/...
to: /about/versions/lollipop.html
- from: /ll
to: /about/versions/lollipop.html
-- from: /ll/
+- from: /ll/...
to: /about/versions/lollipop.html
- from: /lp
to: /about/versions/lollipop.html
-- from: /lp/
+- from: /lp/...
to: /about/versions/lollipop.html
- from: /lollipop
to: /about/versions/lollipop.html
-- from: /lollipop/
+- from: /lollipop/...
to: /about/versions/lollipop.html
- from: /k
to: /about/versions/kitkat.html
-- from: /k/
+- from: /k/...
to: /about/versions/kitkat.html
- from: /kk
to: /about/versions/kitkat.html
-- from: /kk/
+- from: /kk/...
to: /about/versions/kitkat.html
- from: /kitkat
to: /about/versions/kitkat.html
-- from: /kitkat/
+- from: /kitkat/...
to: /about/versions/kitkat.html
- from: /j
to: /about/versions/jelly-bean.html
-- from: /j/
+- from: /j/...
to: /about/versions/jelly-bean.html
- from: /jj
to: /about/versions/jelly-bean.html
-- from: /jj/
+- from: /jj/...
to: /about/versions/jelly-bean.html
- from: /jellybean
to: /about/versions/jelly-bean.html
-- from: /jellybean/
+- from: /jellybean/...
to: /about/versions/jelly-bean.html
- from: /i
to: /about/versions/android-4.0-highlights.html
-- from: /i/
+- from: /i/...
to: /about/versions/android-4.0-highlights.html
- from: /ics
to: /about/versions/android-4.0-highlights.html
-- from: /ics/
+- from: /ics/...
to: /about/versions/android-4.0-highlights.html
- from: /icecreamsandwich
to: /about/versions/android-4.0-highlights.html
-- from: /icecreamsandwich/
+- from: /icecreamsandwich/...
to: /about/versions/android-4.0-highlights.html
- from: /%2B
to: https://plus.google.com/108967384991768947849/posts
-- from: /%2B/
+- from: /%2B/...
to: https://plus.google.com/108967384991768947849/posts
- from: /blog
- to: https://android-developers.blogspot.com/
+ to: https://android-developers.blogspot.com
- from: /stats
to: /about/dashboards/index.html
- from: /youtube
to: https://www.youtube.com/user/androiddevelopers
- from: /playbadge
- to: https://play.google.com/intl/en_us/badges/
-- from: /playbadge/
- to: https://play.google.com/intl/en_us/badges/
+ to: https://play.google.com/intl/en_us/badges
+- from: /playbadge/...
+ to: https://play.google.com/intl/en_us/badges/...
- from: /distribute/tools/promote/badges.html
- to: https://play.google.com/intl/en_us/badges/
+ to: https://play.google.com/intl/en_us/badges
- from: /deviceart
to: /distribute/tools/promote/device-art.html
-- from: /deviceart/
+- from: /deviceart/...
to: /distribute/tools/promote/device-art.html
- from: /distribute/promote/device-art.html
to: /distribute/tools/promote/device-art.html
- from: /edu/signup
to: https://services.google.com/fb/forms/playedu
-- from: /edu/signup/
+- from: /edu/signup/...
to: https://services.google.com/fb/forms/playedu
- from: /edu
to: /distribute/googleplay/edu/about.html
-- from: /edu/
+- from: /edu/...
to: /distribute/googleplay/edu/about.html
- from: /families
to: /distribute/googleplay/families/about.html
-- from: /families/
+- from: /families/...
to: /distribute/googleplay/families/about.html
- from: /preview/google-play-services-wear.html
to: /training/building-wearables.html
@@ -709,9 +713,9 @@
to: /training/material/animations.html
- from: /preview/material/compatibility.html
to: /training/material/compatibility.html
-- from: /preview/material/
+- from: /preview/material/...
to: /design/material/index.html
-- from: /auto/overview/
+- from: /auto/overview/...
to: /training/auto/start/index.html
- from: /training/location/activity-recognition.html
to: /training/location/index.html
@@ -734,9 +738,9 @@
- 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/
+ to: https://play.google.com/intl/en_us/badges
- from: /google/gcm/...
- to: https://developers.google.com/cloud-messaging/
+ to: https://developers.google.com/cloud-messaging
- from: /training/cloudsync/gcm.html
to: /training/cloudsync/index.html
@@ -798,20 +802,20 @@
- from: /preview/dev-community
to: https://plus.google.com/communities/103655397235276743411
- from: /preview/bug
- to: https://code.google.com/p/android/issues/entry?template=Developer%20preview%20report
-- from: /preview/bug/
- to: https://code.google.com/p/android/issues/entry?template=Developer%20preview%20report
+ to: https://source.android.com/source/report-bugs.html
+- from: /preview/bug/...
+ to: https://source.android.com/source/report-bugs.html
- from: /preview/bugreport
- to: https://code.google.com/p/android/issues/entry?template=Developer%20preview%20report
-- from: /preview/bugreport/
- to: https://code.google.com/p/android/issues/entry?template=Developer%20preview%20report
+ to: https://source.android.com/source/report-bugs.html
+- from: /preview/bugreport/...
+ to: https://source.android.com/source/report-bugs.html
- from: /preview/bugs
to: https://code.google.com/p/android/issues/list?can=2&q=label%3ADevPreview-N
-- from: /preview/bugs/
+- from: /preview/bugs/...
to: https://code.google.com/p/android/issues/list?can=2&q=label%3ADevPreview-N
- from: /preview/bugreports
to: https://code.google.com/p/android/issues/list?can=2&q=label%3ADevPreview-N
-- from: /preview/bugreports/
+- from: /preview/bugreports/...
to: https://code.google.com/p/android/issues/list?can=2&q=label%3ADevPreview-N
- from: /2016/03/first-preview-of-android-n-developer.html
to: http://android-developers.blogspot.com/2016/03/first-preview-of-android-n-developer.html
@@ -1149,11 +1153,11 @@
# Vanity urls
- from: /background_optimizations
to: /preview/features/background-optimization.html
-- from: /background_optimizations/
+- from: /background_optimizations/...
to: /preview/features/background-optimization.html
- from: /bgopt
to: /preview/features/background-optimization.html
-- from: /bgopt/
+- from: /bgopt/...
to: /preview/features/background-optimization.html
@@ -1210,11 +1214,31 @@
- from: /r/studio-ui/sdk-manager.html
to: /studio/intro/update.html?utm_medium=android-studio#sdk-manager
- from: /r/studio-ui/newjclass.html
- to: /studio/write/index.html?utm_medium=android-studio
+ to: /studio/write/create-java-class.html?utm_medium=android-studio
- from: /r/studio-ui/menu-help.html
to: /studio/intro/index.html?utm_medium=android-studio
- from: /r/studio-ui/menu-start.html
to: /training/index.html?utm_medium=android-studio
+- from: /r/studio-ui/run-with-work-profile.html
+ to: /studio/run/index.html#ir-work-profile?utm_medium=android-studio
+- from: /r/studio-ui/am-gpu-debugger.html
+ to: /studio/profile/am-gpu.html?utm_medium=android-studio
+- from: /r/studio-ui/theme-editor.html
+ to: /studio/write/theme-editor.html?utm_medium=android-studio
+- from: /r/studio-ui/translations-editor.html
+ to: /studio/write/translations-editor.html?utm_medium=android-studio
+- from: /r/studio-ui/debug.html
+ to: /studio/debug/index.html?utm_medium=android-studio
+- from: /r/studio-ui/run.html
+ to: /studio/run/index.html?utm_medium=android-studio
+- from: /r/studio-ui/layout-editor.html
+ to: /studio/write/layout-editor.html?utm_medium=android-studio
+- from: /r/studio-ui/project-window.html
+ to: /studio/projects/index.html?utm_medium=android-studio
+- from: /r/studio-ui/lint-inspection-results.html
+ to: /studio/write/lint.html?utm_medium=android-studio
+- from: /r/studio-ui/gradle-console.html
+ to: /studio/run/index.html#gradle-console?utm_medium=android-studio
# Redirects from (removed) N Preview documentation
- from: /preview/features/afw.html
@@ -1248,7 +1272,7 @@
- from: /preview/samples.html
to: /about/versions/nougat/android-7.0-samples.html
- from: /preview/guide.html
- to: /about/versions/nougat/android-7.0-testing.html
+ to: /about/versions/nougat/index.html
- from: /preview/api-overview.html
to: /about/versions/nougat/android-7.0.html
- from: /preview/index.html
diff --git a/docs/html/about/_book.yaml b/docs/html/about/_book.yaml
index 958435d..642113b 100644
--- a/docs/html/about/_book.yaml
+++ b/docs/html/about/_book.yaml
@@ -2,14 +2,67 @@
- title: Nougat
path: /about/versions/nougat/index.html
section:
- - title: Android 7.0 APIs
+ - title: Android 7.0 for Developers
path: /about/versions/nougat/android-7.0.html
- - title: Android 7.0 Changes
+ path_attributes:
+ - name: es-lang
+ value: Información general de la API
+ - name: in-lang
+ value: Android N untuk Pengembang
+ - name: ja-lang
+ value: API の概要
+ - name: ko-lang
+ value: API 개요
+ - name: pt-br-lang
+ value: Visão geral da API
+ - name: ru-lang
+ value: Обзор API-интерфейсов
+ - name: vi-lang
+ value: Android N cho Nhà phát triển
+ - name: zh-cn-lang
+ value: API 概览
+ - name: zh-tw-lang
+ value: API 總覽
+ - title: Android 7.0 Behavior Changes
path: /about/versions/nougat/android-7.0-changes.html
+ path_attributes:
+ - name: es-lang
+ value: Cambios en los comportamientos
+ - name: in-lang
+ value: Perubahan Perilaku
+ - name: ja-lang
+ value: 動作の変更点
+ - name: ko-lang
+ value: 동작 변경
+ - name: pt-br-lang
+ value: Mudanças de comportamento
+ - name: ru-lang
+ value: Изменения в работе
+ - name: vi-lang
+ value: Các thay đổi Hành vi
+ - name: zh-cn-lang
+ value: 行为变更
+ - name: zh-tw-lang
+ value: 行為變更
- title: Android 7.0 Samples
path: /about/versions/nougat/android-7.0-samples.html
- - title: Android 7.0 Testing
- path: /about/versions/nougat/android-7.0-testing.html
+ path_attributes:
+ - name: es-lang
+ value: Ejemplos
+ - name: in-lang
+ value: Contoh
+ - name: ja-lang
+ value: サンプル
+ - name: ko-lang
+ value: 샘플
+ - name: pt-br-lang
+ value: Exemplos
+ - name: ru-lang
+ value: Примеры
+ - name: zh-cn-lang
+ value: 示例
+ - name: zh-tw-lang
+ value: 範例
- title: Marshmallow
path: /about/versions/marshmallow/index.html
diff --git a/docs/html/about/about_toc.cs b/docs/html/about/about_toc.cs
index a456012..de39620 100644
--- a/docs/html/about/about_toc.cs
+++ b/docs/html/about/about_toc.cs
@@ -1,5 +1,17 @@
<ul id="nav">
<li class="nav-section">
+ <div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/nougat/index.html">
+ <span class="en">Nougat</span></a></div>
+ <ul>
+ <li><a href="<?cs var:toroot ?>about/versions/nougat/android-7.0.html">
+ Android 7.0 for Developers</a></li>
+ <li><a href="<?cs var:toroot ?>about/versions/nougat/android-7.0-changes.html">
+ Android 7.0 Changes</a></li>
+ <li><a href="<?cs var:toroot ?>about/versions/nougat/android-7.0-samples.html">
+ Android 7.0 Samples</a></li>
+ </ul>
+ </li>
+ <li class="nav-section">
<div class="nav-section-header"><a href="<?cs var:toroot ?>about/versions/marshmallow/index.html">
<span class="en">Marshmallow</span></a></div>
<ul>
diff --git a/docs/html/about/versions/android-1.5.jd b/docs/html/about/versions/android-1.5.jd
index 45a27ee..6db5472 100644
--- a/docs/html/about/versions/android-1.5.jd
+++ b/docs/html/about/versions/android-1.5.jd
@@ -101,7 +101,7 @@
.toggleable.closed .toggleme {
display:none;
}
-#jd-content .toggle-img {
+#body-content .toggle-img {
margin:0;
}
</style>
diff --git a/docs/html/about/versions/android-1.6-highlights.jd b/docs/html/about/versions/android-1.6-highlights.jd
index 9179579..f594449 100644
--- a/docs/html/about/versions/android-1.6-highlights.jd
+++ b/docs/html/about/versions/android-1.6-highlights.jd
@@ -6,8 +6,8 @@
<style type="text/css">
-#jd-content div.screenshot,
-#jd-content div.video {
+#body-content div.screenshot,
+#body-content div.video {
float:right;
clear:right;
padding:15px 70px;
@@ -15,11 +15,11 @@
font-weight:bold;
line-height:1.7em;
}
-#jd-content div.video {
+#body-content div.video {
padding-top:0;
margin-top:-15px;
}
-#jd-content div.screenshot img {
+#body-content div.screenshot img {
margin:0;
}
</style>
diff --git a/docs/html/about/versions/android-1.6.jd b/docs/html/about/versions/android-1.6.jd
index 970c343..a84c225 100755
--- a/docs/html/about/versions/android-1.6.jd
+++ b/docs/html/about/versions/android-1.6.jd
@@ -103,7 +103,7 @@
.toggleable.closed .toggleme {
display:none;
}
-#jd-content .toggle-img {
+#body-content .toggle-img {
margin:0;
}
</style>
diff --git a/docs/html/about/versions/android-2.0-highlights.jd b/docs/html/about/versions/android-2.0-highlights.jd
index 3f7e1c8..017b16f 100644
--- a/docs/html/about/versions/android-2.0-highlights.jd
+++ b/docs/html/about/versions/android-2.0-highlights.jd
@@ -6,8 +6,8 @@
<style type="text/css">
-#jd-content div.screenshot,
-#jd-content div.video {
+#body-content div.screenshot,
+#body-content div.video {
float:right;
clear:right;
padding:15px 60px;
@@ -15,15 +15,15 @@
font-weight:bold;
line-height:1.7em;
}
-#jd-content div.video {
+#body-content div.video {
padding-top:0;
margin-top:-15px;
}
-#jd-content div.screenshot.second {
+#body-content div.screenshot.second {
clear:none;
padding:15px 0 15px 60px;
}
-#jd-content div.screenshot img {
+#body-content div.screenshot img {
margin:0;
border:1px solid #ccc;
}
diff --git a/docs/html/about/versions/android-2.0.1.jd b/docs/html/about/versions/android-2.0.1.jd
index b0f4db6..21bfa65 100644
--- a/docs/html/about/versions/android-2.0.1.jd
+++ b/docs/html/about/versions/android-2.0.1.jd
@@ -99,7 +99,7 @@
.toggleable.closed .toggleme {
display:none;
}
-#jd-content .toggle-img {
+#body-content .toggle-img {
margin:0;
}
</style>
diff --git a/docs/html/about/versions/android-2.0.jd b/docs/html/about/versions/android-2.0.jd
index 0323686..8029633 100644
--- a/docs/html/about/versions/android-2.0.jd
+++ b/docs/html/about/versions/android-2.0.jd
@@ -92,7 +92,7 @@
.toggleable.closed .toggleme {
display:none;
}
-#jd-content .toggle-img {
+#body-content .toggle-img {
margin:0;
}
</style>
diff --git a/docs/html/about/versions/android-2.2-highlights.jd b/docs/html/about/versions/android-2.2-highlights.jd
index afbf26b..37a7a82 100644
--- a/docs/html/about/versions/android-2.2-highlights.jd
+++ b/docs/html/about/versions/android-2.2-highlights.jd
@@ -5,32 +5,32 @@
<style type="text/css">
-#jd-content {
+#body-content {
max-width:800px;
}
-#jd-content div.screenshot {
+#body-content div.screenshot {
float:left;
clear:left;
padding:15px 30px 15px 0;
}
-#jd-content div.video {
+#body-content div.video {
float:right;
padding:0 60px 40px;
margin-top:-15px;
}
-#jd-content table.columns {
+#body-content table.columns {
margin:0 0 1em 0;
}
-#jd-content table.columns td {
+#body-content table.columns td {
padding:0;
}
-#jd-content table.columns td+td {
+#body-content table.columns td+td {
padding:0 2em;
}
-#jd-content table.columns td img {
+#body-content table.columns td img {
margin:0;
}
-#jd-content table.columns td+td>*:first-child {
+#body-content table.columns td+td>*:first-child {
margin-top:-2em;
}
.green {
diff --git a/docs/html/about/versions/android-2.3-highlights.jd b/docs/html/about/versions/android-2.3-highlights.jd
index 582bce9..013ec7f 100644
--- a/docs/html/about/versions/android-2.3-highlights.jd
+++ b/docs/html/about/versions/android-2.3-highlights.jd
@@ -4,31 +4,31 @@
<style type="text/css">
-#jd-content {
+#body-content {
max-width:1200px;
}
-#jd-content div.screenshot {
+#body-content div.screenshot {
float:left;
clear:left;
padding:15px 30px 15px 0;
}
-#jd-content div.video {
+#body-content div.video {
float:right;
padding:0 0 0 40px;
}
-#jd-content table.columns {
+#body-content table.columns {
margin:0 0 1em 0;
}
-#jd-content table.columns td {
+#body-content table.columns td {
padding:0;
}
-#jd-content table.columns td+td {
+#body-content table.columns td+td {
padding:0 2em;
}
-#jd-content table.columns td img {
+#body-content table.columns td img {
margin:0;
}
-#jd-content table.columns td+td>*:first-child {
+#body-content table.columns td+td>*:first-child {
margin-top:-2em;
}
.green {
diff --git a/docs/html/about/versions/android-3.0-highlights.jd b/docs/html/about/versions/android-3.0-highlights.jd
index e9d2b39..50d4667 100644
--- a/docs/html/about/versions/android-3.0-highlights.jd
+++ b/docs/html/about/versions/android-3.0-highlights.jd
@@ -4,31 +4,31 @@
<style type="text/css">
-#jd-content {
+#body-content {
max-width:1200px;
}
-#jd-content div.screenshot {
+#body-content div.screenshot {
float:left;
clear:left;
padding:15px 30px 15px 0;
}
-#jd-content div.video {
+#body-content div.video {
float:right;
padding:0 60px 40px;
}
-#jd-content table.columns {
+#body-content table.columns {
margin:0 0 1em 0;
}
-#jd-content table.columns td {
+#body-content table.columns td {
padding:0;
}
-#jd-content table.columns td+td {
+#body-content table.columns td+td {
padding:0 2em;
}
-#jd-content table.columns td img {
+#body-content table.columns td img {
margin:0;
}
-#jd-content table.columns td+td>*:first-child {
+#body-content table.columns td+td>*:first-child {
margin-top:-2em;
}
.green {
diff --git a/docs/html/about/versions/android-3.1-highlights.jd b/docs/html/about/versions/android-3.1-highlights.jd
index 2a70698..22df372 100644
--- a/docs/html/about/versions/android-3.1-highlights.jd
+++ b/docs/html/about/versions/android-3.1-highlights.jd
@@ -4,31 +4,31 @@
<style type="text/css">
-#jd-content {
+#body-content {
max-width:1200px;
}
-#jd-content div.screenshot {
+#body-content div.screenshot {
float:left;
clear:left;
padding:15px 30px 15px 0;
}
-#jd-content div.video {
+#body-content div.video {
float:right;
padding:0 60px 40px;
}
-#jd-content table.columns {
+#body-content table.columns {
margin:0 0 1em 0;
}
-#jd-content table.columns td {
+#body-content table.columns td {
padding:0;
}
-#jd-content table.columns td+td {
+#body-content table.columns td+td {
padding:0 2em;
}
-#jd-content table.columns td img {
+#body-content table.columns td img {
margin:0;
}
-#jd-content table.columns td+td>*:first-child {
+#body-content table.columns td+td>*:first-child {
margin-top:-2em;
}
.green {
diff --git a/docs/html/about/versions/android-4.0-highlights.jd b/docs/html/about/versions/android-4.0-highlights.jd
index c980af6..57eb2a3 100755
--- a/docs/html/about/versions/android-4.0-highlights.jd
+++ b/docs/html/about/versions/android-4.0-highlights.jd
@@ -4,31 +4,31 @@
<style type="text/css">
-#jd-content {
+#body-content {
max-width:1024px;
}
-#jd-content div.screenshot {
+#body-content div.screenshot {
float:left;
clear:left;
padding:15px 30px 15px 0;
}
-#jd-content div.video {
+#body-content div.video {
float:right;
padding:0 0 40px 60px;
}
-#jd-content table.columns {
+#body-content table.columns {
margin:0 0 1em 0;
}
-#jd-content table.columns td {
+#body-content table.columns td {
padding:0;
}
-#jd-content table.columns td+td {
+#body-content table.columns td+td {
padding:0 2em;
}
-#jd-content table.columns td img {
+#body-content table.columns td img {
margin:0;
}
-#jd-content table.columns td+td>*:first-child {
+#body-content table.columns td+td>*:first-child {
margin-top:-2em;
}
.green {
diff --git a/docs/html/about/versions/marshmallow/index.jd b/docs/html/about/versions/marshmallow/index.jd
index 35edd72..93d0fec 100644
--- a/docs/html/about/versions/marshmallow/index.jd
+++ b/docs/html/about/versions/marshmallow/index.jd
@@ -2,7 +2,6 @@
page.tags="marshmallow"
meta.tags="marshamallow","android60"
fullpage=true
-nonavpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
diff --git a/docs/html/about/versions/nougat/android-7.0-changes.jd b/docs/html/about/versions/nougat/android-7.0-changes.jd
index 4f9054c..84a56d0 100644
--- a/docs/html/about/versions/nougat/android-7.0-changes.jd
+++ b/docs/html/about/versions/nougat/android-7.0-changes.jd
@@ -1,7 +1,7 @@
-page.title=Android 7.0 Changes
+page.title=Android 7.0 Behavior Changes
page.keywords=preview,sdk,compatibility
-meta.tags="Android 7.0", "Nougat", "android n", "compatibility"
-page.tags="Android 7.0", "Nougat", "android n", "developer preview"
+meta.tags="Nougat", "android n", "compatibility"
+page.tags="Android 7.0", "Nougat", "android n"
page.image=images/cards/card-n-changes_2x.png
@jd:body
@@ -35,16 +35,14 @@
<h2>API Differences</h2>
<ol>
- <li><a href="{@docRoot}sdk/api_diff/n-preview-4-incr/changes.html">
- Preview 3 to API 24</a></li>
<li><a href="{@docRoot}sdk/api_diff/24/changes.html">
API 23 to API 24</a></li>
</ol>
<h2>See Also</h2>
<ol>
- <li><a href="{@docRoot}preview/api-overview.html">
- Android 7.0 APIs</a></li>
+ <li><a href="{@docRoot}about/versions/nougat/android-7.0.html">
+ Android 7.0 for Developers</a></li>
</ol>
</div>
diff --git a/docs/html/about/versions/nougat/android-7.0-samples.jd b/docs/html/about/versions/nougat/android-7.0-samples.jd
index 98f7090..e283a7a 100644
--- a/docs/html/about/versions/nougat/android-7.0-samples.jd
+++ b/docs/html/about/versions/nougat/android-7.0-samples.jd
@@ -1,10 +1,11 @@
page.title=Android 7.0 Samples
page.tags="Android 7.0", "nougat", "samples", "android"
+meta.tags="android n", "Nougat", "android 7.0"
page.image=images/cards/card-n-samples_2x.png
@jd:body
<p>
- The following code samples are provided for Android 7.0. To
+ Use the code samples below to learn about Android 7.0 capabilities and APIs. To
download the samples in Android Studio, select the <b>File > Import
Samples</b> menu option.
</p>
diff --git a/docs/html/about/versions/nougat/android-7.0-testing.jd b/docs/html/about/versions/nougat/android-7.0-testing.jd
deleted file mode 100644
index f30382e..0000000
--- a/docs/html/about/versions/nougat/android-7.0-testing.jd
+++ /dev/null
@@ -1,190 +0,0 @@
-page.title=Android 7.0 Testing Guide
-page.image=images/cards/card-n-guide_2x.png
-meta.tags="preview", "testing"
-page.tags="preview", "developer preview"
-
-@jd:body
-
-<div id="qv-wrapper">
- <div id="qv">
- <h2>In this document</h2>
- <ol>
- <li><a href="#runtime-permissions">Testing Permissions</a></li>
- <li><a href="#doze-standby">Testing Doze and App Standby</a></li>
- <li><a href="#ids">Auto Backup and Device Identifiers</a></li>
- </ol>
- </div>
-</div>
-
-<p>
- Android 7.0 gives you an opportunity to ensure your apps work with the next
- version of the platform. This preview includes a number of APIs and behavior changes that can
- impact your app, as described in the <a href="{@docRoot}preview/api-overview.html">API
- Overview</a> and <a href="{@docRoot}preview/behavior-changes.html">Behavior Changes</a>. In testing
- your app with the preview, there are some specific system changes that you should focus on to
- ensure that users have a good experience.
-</p>
-
-<p>
- This guide describes the what and how to test preview features with your app. You should
- prioritize testing of these specific preview features, due to their high potential impact on your
- app's behavior:
-</p>
-
-<ul>
- <li><a href="#runtime-permissions">Permissions</a>
- </li>
- <li><a href="#doze-standby">Doze and App Standby</a>
- </li>
- <li><a href="#ids">Auto Backup and Device Identifiers</a></li>
-</ul>
-
-<p>
- For more information about how to set up devices or virtual devices with a preview system image
- for testing, see <a href="{@docRoot}preview/setup-sdk.html">Set up
-the Android N SDK</a>.
-</p>
-
-
-<h2 id="runtime-permissions">Testing Permissions</h2>
-
-<p>
- The new <a href="{@docRoot}preview/features/runtime-permissions.html">Permissions</a> model
- changes the way that permissions are allocated to your app by the user. Instead of granting all
- permissions during the install procedure, your app must ask the user for individual permissions
- at runtime. For users this behavior provides more granular control over each app’s activities, as
- well as better context for understanding why the app is requesting a specific permission. Users
- can grant or revoke the permissions granted to an app individually at any time. This feature of
- the preview is most likely to have an impact on your app's behavior and may prevent some of your
- app features from working, or they may work in a degraded state.
-</p>
-
-<p class="caution">
- This change affects all apps running on the new platform, even those not targeting the new
- platform version. The platform provides a limited compatibility behavior for legacy apps, but you
- should begin planning your app’s migration to the new permissions model now, with a goal of
- publishing an updated version of your app at the official platform launch.
-</p>
-
-
-<h3 id="permission-test-tips">Test tips</h3>
-
-<p>
- Use the following test tips to help you plan and execute testing of your app with the new
- permissions behavior.
-</p>
-
-<ul>
- <li>Identify your app’s current permissions and the related code paths.</li>
- <li>Test user flows across permission-protected services and data.</li>
- <li>Test with various combinations of granted/revoked permission.</li>
- <li>Use the {@code adb} tool to manage permssions from the command line:
- <ul>
- <li>List permissions and status by group:
- <pre>adb shell pm list permissions -d -g</pre>
- </li>
- <li>Grant or revoke one or more permissions using the following syntax:<br>
- <pre>adb shell pm [grant|revoke] <permission.name> ...</pre>
- </li>
- </ul>
- </li>
- <li>Analyze your app for services that use permissions.</li>
-</ul>
-
-<h3 id="permission-test-strategy">Test strategy</h3>
-
-<p>
- The permissions change affects the structure and design of your app, as well as
- the user experience and flows you provide to users. You should assess your app’s current
- permissions use and start planning for the new flows you want to offer. The official release of
- the platform provides compatibility behavior, but you should plan on updating your app and not
- rely on these behaviors.
-</p>
-
-<p>
- Identify the permissions that your app actually needs and uses, and then find the various code
- paths that use the permission-protected services. You can do this through a combination of
- testing on the new platform and code analysis. In testing, you should focus on opting in to
- runtime permissions by changing the app’s {@code targetSdkVersion} to the preview version. For
- more information, see <a href="{@docRoot}preview/setup-sdk.html#">Set up
-the Android N SDK</a>.
-</p>
-
-<p>
- Test with various combinations of permissions revoked and added, to highlight the user flows that
- depend on permissions. Where a dependency is not obvious or logical you should consider
- refactoring or compartmentalizing that flow to eliminate the dependency or make it clear why the
- permission is needed.
-</p>
-
-<p>
- For more information on the behavior of runtime permissions, testing, and best practices, see the
- <a href="{@docRoot}preview/features/runtime-permissions.html">Permissions</a> developer
- preview page.
-</p>
-
-
-<h2 id="doze-standby">Testing Doze and App Standby</h2>
-
-<p>
- The power saving features of Doze and App Standby limit the amount of background processing that
- your app can perform when a device is in an idle state or while your app is not in focus. The
- restrictions the system may impose on apps include limited or no network access,
- suspended background tasks, suspended Notifications, ignored wake requests, and alarms. To ensure
- that your app behaves properly with these power saving optimizations, you should test your app by
- simulating these low power states.
-</p>
-
-<h4 id="doze">Testing your app with Doze</h4>
-
-<p>To test Doze with your app:</p>
-
-<ol>
-<li>Configure a hardware device or virtual device with an Android N system image.</li>
-<li>Connect the device to your development machine and install your app.</li>
-<li>Run your app and leave it active.</li>
-<li>Simulate the device going into Doze mode by running the following commands:
-
-<pre>
-$ adb shell dumpsys battery unplug
-$ adb shell dumpsys deviceidle step
-$ adb shell dumpsys deviceidle -h
-</pre>
-
- </li>
- <li>Observe the behavior of your app when the device is re-activated. Make sure it
- recovers gracefully when the device exits Doze.</li>
-</ol>
-
-
-<h4 id="standby">Testing apps with App Standby</h4>
-
-<p>To test the App Standby mode with your app:</p>
-
-<ol>
- <li>Configure a hardware device or virtual device with an Android N system image.</li>
- <li>Connect the device to your development machine and install your app.</li>
- <li>Run your app and leave it active.</li>
- <li>Simulate the app going into standby mode by running the following commands:
-
-<pre>
-$ adb shell am broadcast -a android.os.action.DISCHARGING
-$ adb shell am set-idle <packageName> true
-</pre>
-
- </li>
- <li>Simulate waking your app using the following command:
- <pre>$ adb shell am set-idle <packageName> false</pre>
- </li>
- <li>Observe the behavior of your app when it is woken. Make sure it recovers gracefully
- from standby mode. In particular, you should check if your app's Notifications and background
- jobs continue to function as expected.</li>
-</ol>
-
-<h2 id="ids">Auto Backup for Apps and Device-Specific Identifiers</h2>
-
-<p>If your app is persisting any device-specific identifiers, such as Google
-Cloud Messaging registration ID, in internal storage,
-make sure to follow best practices to exclude the storage
-location from auto-backup, as described in <a href="{@docRoot}preview/backup/index.html">Auto
-Backup for Apps</a>. </p>
diff --git a/docs/html/about/versions/nougat/android-7.0.jd b/docs/html/about/versions/nougat/android-7.0.jd
index 87c8d93..1ca540c 100644
--- a/docs/html/about/versions/nougat/android-7.0.jd
+++ b/docs/html/about/versions/nougat/android-7.0.jd
@@ -1,6 +1,6 @@
-page.title=Android 7.0 APIs
-meta.tags="Android 7.0", "android n", "Nougat"
-page.tags="Android 7.0", "Nougat", "android n", "developer preview"
+page.title=Android 7.0 for Developers
+meta.tags="Nougat", "android n"
+page.tags="Android 7.0", "Nougat", "android n"
page.image=images/cards/card-n-apis_2x.png
@jd:body
@@ -52,16 +52,20 @@
<p>
-Android 7.0
-(<a href="{@docRoot}reference/android/os/Build.VERSION_CODES.html#N">N</a>)
-offers new features for users and app developers. This document provides
-an introduction to the most notable APIs. Make sure, also,
-to check out the <href="{@docRoot}about/versions/nougat/behavior.changes.html">
-Behavior Changes</a> to learn about areas where platform changes
-may affect your apps. In addition, the various developer guides
-can provide more information about key features.
+Android 7.0 Nougat introduces a variety of
+new features and capabilities for users and developers.
+This document highlights what's new for developers. </p>
+
+<p>Make sure check out the
+<href="{@docRoot}about/versions/nougat/android-7.0-changes.html">
+Android 7.0 behavior changes</a> to learn about areas where platform changes
+may affect your apps.
</p>
+<p>To learn more about
+the consumer features of Android 7.0, visit <a
+href="http://www.android.com">www.android.com</a>.</p>
+
<h2 id="multi-window_support">Multi-window Support</h2>
diff --git a/docs/html/about/versions/nougat/index.jd b/docs/html/about/versions/nougat/index.jd
index aaf7e92..8661d77 100644
--- a/docs/html/about/versions/nougat/index.jd
+++ b/docs/html/about/versions/nougat/index.jd
@@ -1,79 +1,62 @@
-page.title=Android N Developer Preview
-page.tags="preview","developer"
-meta.tags="preview", "android"
+page.title=Android 7.0 Nougat
+page.tags="androidn","versions"
+meta.tags="android n", "nougat", "android 7.0"
fullpage=true
forcelocalnav=true
header.hide=1
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-light" style="background-color:#B2DFDB">
+<section class="dac-expand dac-hero dac-light">
<div class="wrap" style="max-width:1100px;margin-top:0">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<div class="cols dac-hero-content" style="padding-bottom:1em;">
- <div class="col-7of16 col-push-9of16" style="padding-left:2em">
+ <div class="col-7of16 col-push-8of16" style="padding-left:2em">
<h1 class="dac-hero-title">Android 7.0 Nougat</h1>
<p class="dac-hero-description">
- <strong>Android 7.0 Nougat brings a new crop of sweet features to your Android device.</strong>
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
+ Android 7.0 brings new features for performance, productivity,
+ and security. <strong>Test your apps</strong> with new system
behaviors to <strong>save power and memory</strong>.
- Extend your apps with <strong>multi-window UI</strong>,
+ Take advantage of <strong>multi-window UI</strong>,
<strong>direct reply notifications</strong> and more.
</p>
- <a class="dac-hero-cta" href="{@docRoot}preview/overview.html">
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/android-7.0.html">
<span class="dac-sprite dac-auto-chevron"></span>
Get started
- </a><!--<br>
- <a class="dac-hero-cta" href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Android N (final SDK)
- </a><br>-->
+ </a>
</div>
- <div class="col-9of16 col-pull-7of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <div class="col-7of16 col-pull-6of16 dac-hero-figure" style="margin-top:1.5em;padding-right:1.5em;">
+ <a href="{@docRoot}about/versions/nougat/android-7.0.html">
<img class="dac-hero-image" src="{@docRoot}images/home/n-preview-hero.png"
srcset="{@docRoot}images/home/n-preview-hero.png 1x,
- {@docRoot}images/home/n-preview-hero_2x.png 2x">
+ {@docRoot}images/home/n-preview-hero_2x.png 2x" />
+ </a>
</div>
- </div>
+ </div></a>
<div class="dac-section dac-small">
<div class="resource-widget resource-flow-layout col-16"
data-query="collection:nougat/landing/resources"
data-cardSizes="6x2"
data-maxResults="3"></div>
- </div>
+ </div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#latest">
<i class="dac-sprite dac-arrow-down-gray"></i>
</a>
<ul class="dac-actions">
<li class="dac-action">
- <a class="dac-action-link" href="https://developer.android.com/preview/bug">
+ <a class="dac-action-link" href="https://source.android.com/source/report-bugs.html">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Report an issue
</a>
</li>
<li class="dac-action">
- <a class="dac-action-link" href="{@docRoot}preview/support.html">
- <i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
- See release notes
- </a>
- </li>
- <li class="dac-action">
<a class="dac-action-link" href="{@docRoot}preview/dev-community">
<i class="dac-action-sprite dac-sprite dac-auto-chevron-large"></i>
Join dev community
@@ -83,26 +66,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
-
- <div class="actions">
- <div><a href="https://developer.android.com/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Report an issue
- </a></div>
- <div><a href="{@docRoot}preview/support.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- See release notes
- </a></div>
- <div><a href="{@docRoot}preview/dev-community">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Join dev community
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<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"
@@ -114,7 +77,6 @@
data-initial-results="3"></div>
</div></section>
-
<section class="dac-section dac-gray" id="videos"><div class="wrap">
<h1 class="dac-section-title">Videos</h1>
<div class="dac-section-subtitle">
@@ -122,7 +84,7 @@
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/videos/first,type:youtube+tag:androidn"
+ data-query="collection:nougat/landing/videos/first,type:youtube+tag:androidn"
data-sortOrder="-timestamp"
data-cardSizes="6x6"
data-items-per-page="6"
@@ -131,20 +93,17 @@
</div>
</div></section>
-
<section class="dac-section dac-light" id="resources"><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.
+ Essential information to help you get your apps ready for Android Nougat.
</div>
<div class="resource-widget resource-flow-layout col-16"
- data-query="collection:preview/landing/more"
+ data-query="collection:nougat/landing/more"
data-cardSizes="6x6"
data-items-per-page="6"
data-maxResults="15"
data-initial-results="6"></div>
-
</div>
-</section>
-
+</section>
\ No newline at end of file
diff --git a/docs/html/auto/index.jd b/docs/html/auto/index.jd
index e6fde38..3ebd87d 100644
--- a/docs/html/auto/index.jd
+++ b/docs/html/auto/index.jd
@@ -10,7 +10,7 @@
<style>
.fullpage>#footer,
-#jd-content>.content-footer.wrap {
+#body-content>.content-footer.wrap {
display:none;
}
.img-logo {
diff --git a/docs/html/distribute/essentials/quality/billions.jd b/docs/html/distribute/essentials/quality/billions.jd
index 2e14b37..355b272 100644
--- a/docs/html/distribute/essentials/quality/billions.jd
+++ b/docs/html/distribute/essentials/quality/billions.jd
@@ -220,6 +220,13 @@
Android training on <a
href="{@docRoot}training/basics/network-ops/managing.html">Managing Network
Usage</a>.</li>
+ <li>On devices powered by Android 7.0 (API level 24) and higher,
+ users can turn on the
+ <strong>Data Saver</strong> setting, which helps minimize data usage. Android 7.0
+ extends {@link android.net.ConnectivityManager} to detect <strong>Data Saver</strong>
+ settings. For more information about this feature, see
+ <a href="/training/basics/network-ops/data-saver.html">Data Saver.</a>
+ </li>
</ul>
<h4 id="network-behavior">Detect network changes, then change app behavior</h4>
<ul>
@@ -257,9 +264,11 @@
<code>registerReceiver</code></a> to receive this broadcast. After receiving
the broadcast, you should reevaluate the current network state and adjust
your UI and network usage appropriately. You should not declare this receiver
- in your manifest, as it will no longer function beginning with Android N.
- For more details see <a href="{@docRoot}preview/behavior-changes.html">
- Android N behavior changes</a>.</li>
+ in your manifest, as that feature is unavailable in Android 7.0 (API level 24)
+ and higher.
+ For more information about this and other changes in Android 7.0,
+ see <a href="/about/versions/nougat/android-7.0-changes.html">
+ Android 7.0 Changes</a>.</li>
</ul>
<h3 class="rel-resources clearfloat">Related resources</h3>
@@ -490,14 +499,18 @@
smaller file sizes than its PNG and JPG counterparts, with at least the
same image quality. Even at lossy settings, WebP can produce a nearly
identical image. Android has had lossy WebP support since Android 4.0 (API
- level 14: Ice Cream Sandwich) and support for lossless / transparent WebP since Android 4.2 (API level 17: Jelly Bean).</li>
+ level 14: Ice Cream Sandwich) and support for lossless / transparent WebP
+ since Android 4.2 (API level 17: Jelly Bean).</li>
<li>If you have many large images across multiple densities, consider
using <a href="{@docRoot}google/play/publishing/multiple-apks.html">Multiple
APK support</a> to split your APK by density. This results in builds
targeted for specific densities, meaning users with low-density devices
won’t have to incur the penalty of unused high-density assets.</li>
- <li>A detailed guide on reducing your APK size can be found in <a
- class="external-link" href="https://medium.com/@wkalicinski/smallerapk-part-4-multi-apk-through-abi-and-density-splits-477083989006">
+ <li>For more information about reducing APK size, see
+ <a href="/topic/performance/reduce-apk-size.html">Reduce APK Size</a> and
+ <a href="/studio/build/shrink-code.html">Shrink Your Code and Resources</a>. In addition, you can
+ find a detailed guide on reducing APK size in this <a class="external-link"
+ href="https://medium.com/@wkalicinski/smallerapk-part-4-multi-apk-through-abi-and-density-splits-477083989006">
series of Medium posts</a>.</li>
</ul>
<h4 id="appsize-code">Reduce code size</h4>
@@ -607,6 +620,19 @@
<ul>
<li>Your app should do minimal activity when in the background and when the
device is running on battery power.</li>
+ <li>Sensors, like GPS, can also significantly drain your battery. For this
+ reason, we recommend that you use the <a
+ href="https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi">
+ <code>FusedLocationProvider</code></a> API. The
+ <code>FusedLocationProvider</code> API manages the
+ underlying location technology and provides a simple API so that you can
+ specify requirements—like high accuracy or low power—at a high
+ level. It also optimizes the device's use of battery power by caching
+ locations and batching requests across apps. For more information about the
+ ideal ways to request location, see the <a
+ href="{@docRoot}training/location/retrieve-current.html">Getting the Last
+ Known Location</a> training guide.
+ </li>
<li><a href="{@docRoot}reference/android/os/PowerManager.WakeLock.html">Wake
locks</a> are mechanisms to keep devices on so that they can perform
background activities. Avoid using wake locks because they prevent the
@@ -623,18 +649,9 @@
network connectivity, device charging state, retries, and backoff. Use
<code>GcmNetworkManager</code> to perform non-essential background activity
when the device is charging and is connected to an unmetered network.</li>
- <li>Sensors, like GPS, can also have a significant drain on the battery. The
- recommended way to request location is to use the FusedLocationProvider API.
- The <a
- href="https://developers.google.com/android/reference/com/google/android/gms/location/FusedLocationProviderApi">FusedLocationProvider</a> API manages the
- underlying location technology and provides a simple API so that you can
- specify requirements—like high accuracy or low power—at a high
- level. It also optimizes the device's use of battery power by caching
- locations and batching requests across apps. For more information on the
- ideal ways to request location, see the <a
- href="{@docRoot}training/location/retrieve-current.html">Getting the Last
- Known Location</a> training guide.
- </li>
+ <li>For more information on how network activity can drain the battery, and
+ how to tackle this issue, see <a
+ href="/topic/performance/power/network/index.html">Reducing Network Battery Drain</a>.
</ul>
<h3 id="consumption-benchmark">Benchmark battery usage</h3>
<ul>
@@ -735,9 +752,12 @@
the device’s CPU and GPU. For more information, see the Android training on
<a href="{@docRoot}training/improving-layouts/index.html">Improving Layout
Performance</a>. </li>
+ <li>An efficient view hierarchy can speed up your app without increasing the
+ app's memory footprint. For more information, see
+ <a href="/topic/performance/optimizing-view-hierarchies.html">Performance
+ and View Hierarchies.</a>
</ul>
-<h4 id="content-firstload">If anticipated start speed is low, use launch screen
-on first load</h4>
+<h4 id="content-firstload">If anticipated start speed is low, use launch screen on first load</h4>
<ul>
<li>The launch screen is a user’s first experience of your application.
Launching your app while displaying a blank canvas increases its perceived
@@ -753,6 +773,9 @@
<li>For more information on implementing splash screens, see the <a
href="https://www.google.com/design/spec/patterns/launch-screens.html">
Launch screens</a> section of the Material Design spec.</li>
+ <li>The best way to deal with slow start speeds is not to have them. <a
+ href="/topic/performance/launch-time.html">Launch-Time Performance</a> provides
+ information that may help you speed up your app's launch time.</li>
</ul>
<h3 id="ui">UI best practices</h3>
<ul>
@@ -778,6 +801,12 @@
<li>To learn more, visit the Android training on <a
href="{@docRoot}training/basics/supporting-devices/languages.html">
Supporting Different Languages</a>.</li>
+ <li>Starting from Android 7.0 (API level 24), the Android framework
+ makes available a subset of the <a class="external-link"
+ href="http://userguide.icu-project.org/">ICU4J APIs</a>, which can
+ help you localize your app into multiple languages. For more
+ information, see <a href="/guide/topics/resources/icu4j-framework.html">
+ ICU4J Android Framework APIs.</a>
</ul>
<h3 class="rel-resources clearfloat">Related resources</h3>
diff --git a/docs/html/distribute/essentials/quality/wear.jd b/docs/html/distribute/essentials/quality/wear.jd
index 34c6cc5..be48491 100644
--- a/docs/html/distribute/essentials/quality/wear.jd
+++ b/docs/html/distribute/essentials/quality/wear.jd
@@ -42,6 +42,13 @@
understand the basic implementation requirements for a Wear app.
</p>
+<p>
+ This document helps you assess basic aspects of quality in your Wear app through a
+ compact set of functional and user interface quality criteria.
+ Make sure to check out the <a href="https://developer.android.com/wear/preview/index.html">Wear 2.0 preview</a>
+ documentation to get ready for the next version of Android Wear.
+</p>
+
<p class="caution">
<strong>Important:</strong> To ensure a great user experience, apps for wearables must meet
specific requirements for usability. Only apps that meet the following quality criteria will
@@ -50,8 +57,8 @@
</p>
<p class="note">
- <strong>Note:</strong> For information about how to publish your Wear apps in Google Play, see <a
- href="{@docRoot}distribute/googleplay/wear.html">Distributing to Android Wear</a>.
+ <strong>Note:</strong> For information about how to publish your Wear apps in Google Play, see <a
+ href="{@docRoot}distribute/googleplay/wear.html">Distributing to Android Wear</a>.
</p>
<div class="headerLine">
@@ -67,6 +74,19 @@
functional behavior.
</p>
+<p class="caution">
+ <strong>Important:</strong> To learn about how Wear 2.0 platform changes may affect
+ your apps, see the <a href="https://developer.android.com/wear/preview/index.html">Wear 2.0 preview</a>
+ documentation.
+</p>
+
+<p class="note">
+ <strong>Note:</strong> The symbol ✘ is used in the table below to indicate
+ quality criteria that are not required for the corresponding Wear version.
+</p>
+
+<p class="table-caption"><strong>Table 1</strong>. Functional criteria.
+</p>
<table>
<tr>
@@ -79,6 +99,12 @@
<th>
Description
</th>
+ <th>
+ Wear 1.0
+ </th>
+ <th>
+ Wear 2.0
+ </th>
</tr>
<tr>
@@ -96,6 +122,12 @@
(<a href="{@docRoot}training/building-wearables.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✔
+ </td>
</tr>
<tr>
@@ -107,6 +139,12 @@
App has Wear functionality that is visible to the user.
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✔
+ </td>
</tr>
<tr>
@@ -118,6 +156,12 @@
Wear functionality works as expected or as described in the app's Google Play Store listing.
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✔
+ </td>
</tr>
<tr>
@@ -135,6 +179,12 @@
(<a href="{@docRoot}training/wearables/apps/packaging.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -152,6 +202,12 @@
(<a href="{@docRoot}training/wearables/notifications/index.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -164,6 +220,12 @@
(<a href="{@docRoot}training/wearables/notifications/voice-input.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -176,6 +238,12 @@
(<a href="{@docRoot}training/wearables/notifications/stacks.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -193,6 +261,12 @@
(<a href="{@docRoot}training/wearables/ui/exit.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -206,6 +280,12 @@
(<a href="{@docRoot}training/wearables/ui/exit.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -222,6 +302,12 @@
(<a href="{@docRoot}training/wearables/watch-faces/index.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
</table>
@@ -245,8 +331,15 @@
<p>
These criteria ensure that your app follows critical design and interaction patterns to provide a
consistent, intuitive, and enjoyable user experience on wearables.
+
+</p>
+<p clase="note">
+ <strong>Note:</strong> The symbol ✘ is used in the table below to indicate
+ quality criteria that are not required for the corresponding Wear version.
</p>
+<p class="table-caption"><strong>Table 2</strong>. Visual criteria.
+</p>
<table>
<tr>
@@ -259,6 +352,12 @@
<th>
Description
</th>
+ <th>
+ Wear 1.0
+ </th>
+ <th>
+ Wear 2.0
+ </th>
</tr>
<tr>
@@ -277,6 +376,12 @@
(<a href="{@docRoot}training/wearables/ui/layouts.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✔
+ </td>
</tr>
<tr>
@@ -292,6 +397,13 @@
(<a href="{@docRoot}training/wearables/ui/layouts.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✔
+ </td>
+
</tr>
<tr>
@@ -304,6 +416,12 @@
(<a href="{@docRoot}design/wear/style.html#Typography">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✔
+ </td>
</tr>
<tr>
@@ -320,6 +438,12 @@
(<a href="{@docRoot}guide/topics/manifest/intent-filter-element.html">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -336,6 +460,12 @@
(<a href="{@docRoot}design/wear/patterns.html#Countdown">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✔
+ </td>
</tr>
<tr>
@@ -350,6 +480,12 @@
(<a href="{@docRoot}design/wear/style.html#Assets">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -363,6 +499,12 @@
(<a href="{@docRoot}training/wearables/notifications/creating.html#ActionButtons">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✔
+ </td>
</tr>
<tr>
@@ -375,6 +517,12 @@
(<a href="{@docRoot}design/wear/style.html#Branding">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -387,6 +535,12 @@
(<a href="{@docRoot}training/wearables/notifications/creating.html#AddWearableFeatures">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✘
+ </td>
</tr>
<tr>
@@ -403,6 +557,12 @@
(<a href="https://support.google.com/googleplay/android-developer/answer/1078870?hl=en">Learn how</a>)
</p>
</td>
+ <td>
+ ✔
+ </td>
+ <td>
+ ✔
+ </td>
</tr>
diff --git a/docs/html/distribute/index.jd b/docs/html/distribute/index.jd
index 424983d..3d75758 100644
--- a/docs/html/distribute/index.jd
+++ b/docs/html/distribute/index.jd
@@ -9,16 +9,6 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
<div class="dac-hero-carousel" data-carousel-query="collection:distribute/landing/carousel">
</div>
@@ -28,18 +18,7 @@
</a>
</div>
-<section id="useOldTemplates" style="display:none" class="dac-section dac-gray dac-small" id="latest"><div class="wrap">
- <h2 class="norule">Latest</h2>
- <div class="resource-widget resource-flow-layout col-16"
- data-query="type:youtube+tag:googleplay+tag:developerstory+tag:featured, type:blog+tag:googleplay+tag:distribute+tag:featured"
- data-sortOrder="-timestamp"
- data-cardSizes="6x6"
- data-maxResults="3"
- data-items-per-page="6"
- data-initial-results="3"></div>
-</div></section>
-
-<section id="useUpdatedTemplates" style="display:none" class="dac-section dac-gray dac-small" id="latest"><div class="wrap">
+<section class="dac-section dac-gray dac-small" id="latest"><div class="wrap">
<h2 class="norule">Latest</h2>
<div class="dac-filter dac-filter-section" data-filter="#latest-resources">
diff --git a/docs/html/distribute/stories/index.jd b/docs/html/distribute/stories/index.jd
index 1adc5ae..1745535 100644
--- a/docs/html/distribute/stories/index.jd
+++ b/docs/html/distribute/stories/index.jd
@@ -4,16 +4,6 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
<p>Android developers, their apps, and their successes with Android and Google Play.</p>
<section class="dac-section dac-small" id="latest-apps"><div class="wrap">
diff --git a/docs/html/guide/components/intents-common.jd b/docs/html/guide/components/intents-common.jd
index 9488f6e..e6c9fc6 100644
--- a/docs/html/guide/components/intents-common.jd
+++ b/docs/html/guide/components/intents-common.jd
@@ -99,7 +99,6 @@
</ol>
</li>
<li><a href="#AdbIntents">Verify Intents with the Android Debug Bridge</a></li>
- <li><a href="#Now">Intents Fired by Google Now</a></li>
</ol>
<h2>See also</h2>
@@ -110,9 +109,9 @@
</div>
</div>
-<!-- Google Now box styles -->
+<!-- Google Voice Actions box styles -->
<style type="text/css">
-.now-box {
+.voice-box {
border-color: rgb(204,204,204);
border-style: solid;
border-width: 1px;
@@ -121,99 +120,120 @@
padding: 17px;
width: 200px;
}
-.now-box li {
+.voice-box li {
font-size: 13px;
font-style: italic;
margin-top: 0px;
}
-.now-box ul {
+.voice-box ul {
margin-bottom: 0px;
}
-.now-img {
+.voice-img {
width: 30px;
margin-bottom: 0px !important;
}
-.now-img-cont {
+.voice-img-cont {
float: left;
margin-right: 10px;
}
-.now-title {
+.voice-title {
font-weight: bold;
margin-top: 7px;
}
-.now-list {
+.voice-list {
font-size: 13px;
margin-bottom: 10px !important;
list-style-type: none;
}
-.now-list li {
+.voice-list li {
font-style: italic;
}
</style>
-<p>An intent allows you to start an activity in another app by describing a simple
-action you'd like to perform (such as "view a map" or "take a picture")
-in an {@link android.content.Intent} object. This type of intent is
-called an <em>implicit</em> intent because it does not specify the app component
-to start, but instead specifies an <em>action</em> and provides some
-<em>data</em> with which to perform the action.</p>
+<p>
+ An intent allows you to start an activity in another app by describing a
+ simple action you'd like to perform (such as "view a map" or "take a
+ picture") in an {@link android.content.Intent} object. This type of intent
+ is called an <em>implicit</em> intent because it does not specify the app
+ component to start, but instead specifies an <em>action</em> and provides
+ some <em>data</em> with which to perform the action.
+</p>
-<p>When you call
-{@link android.content.Context#startActivity startActivity()} or
-{@link android.app.Activity#startActivityForResult startActivityForResult()} and pass it an
-implicit intent, the system <a href="{@docRoot}guide/components/intents-filters.html#Resolution"
->resolves the intent</a> to an app that can handle the intent
-and starts its corresponding {@link android.app.Activity}. If there's more than one app
-that can handle the intent, the system presents the user with a dialog to pick which app
-to use.</p>
+<p>
+ When you call {@link android.content.Context#startActivity startActivity()}
+ or {@link android.app.Activity#startActivityForResult
+ startActivityForResult()} and pass it an implicit intent, the system
+ <a href="{@docRoot}guide/components/intents-filters.html#Resolution">resolves
+ the intent</a> to an app that can handle the intent and starts its
+ corresponding {@link android.app.Activity}. If there's more than one app
+ that can handle the intent, the system presents the user with a dialog to
+ pick which app to use.
+</p>
-<p>This page describes several implicit intents that you can use to perform common actions,
-organized by the type of app that handles the intent. Each section also shows how you can
-create an <a href="{@docRoot}guide/components/intents-filters.html#Receiving">intent filter</a> to
-advertise your app's ability to perform the same action.</p>
+<p>
+ This page describes several implicit intents that you can use to perform
+ common actions, organized by the type of app that handles the intent. Each
+ section also shows how you can create an <a href=
+ "{@docRoot}guide/components/intents-filters.html#Receiving">intent
+ filter</a> to advertise your app's ability to perform the same action.
+</p>
-<p class="caution"><strong>Caution:</strong> If there are no apps on the device that can receive
-the implicit intent, your app will crash when it calls {@link android.content.Context#startActivity
-startActivity()}. To first verify that an app exists to receive the intent, call {@link
-android.content.Intent#resolveActivity resolveActivity()} on your {@link android.content.Intent}
-object. If the result is non-null, there is at least one app that can handle the intent and
-it's safe to call {@link android.content.Context#startActivity startActivity()}. If the result is
-null, you should not use the intent and, if possible, you should disable the feature that invokes
-the intent.</p>
+<p class="caution">
+ <strong>Caution:</strong> If there are no apps on the device that can
+ receive the implicit intent, your app will crash when it calls {@link
+ android.content.Context#startActivity startActivity()}. To first verify that
+ an app exists to receive the intent, call {@link
+ android.content.Intent#resolveActivity resolveActivity()} on your {@link
+ android.content.Intent} object. If the result is non-null, there is at least
+ one app that can handle the intent and it's safe to call {@link
+ android.content.Context#startActivity startActivity()}. If the result is
+ null, you should not use the intent and, if possible, you should disable the
+ feature that invokes the intent.
+</p>
-<p>If you're not familiar with how to create intents or intent filters, you should first read
-<a href="{@docRoot}guide/components/intents-filters.html">Intents and Intent Filters</a>.</p>
+<p>
+ If you're not familiar with how to create intents or intent filters, you
+ should first read <a href=
+ "{@docRoot}guide/components/intents-filters.html">Intents and Intent
+ Filters</a>.
+</p>
-<p>To learn how to fire the intents listed on this page from your development host, see
-<a href="#AdbIntents">Verify Intents with the Android Debug Bridge</a>.</p>
+<p>
+ To learn how to fire the intents listed on this page from your development
+ host, see <a href="#AdbIntents">Verify Intents with the Android Debug
+ Bridge</a>.
+</p>
-<h4>Google Now</h4>
+<h4>Google Voice Actions</h4>
-<p><a href="http://www.google.com/landing/now/">Google Now</a> fires some of the intents listed
-on this page in response to voice commands. For more information, see
-<a href="#Now">Intents Fired by Google Now</a>.</p>
-
-
-
-
-
+<p>
+ <a href="https://developers.google.com/voice-actions/">Google Voice
+ Actions</a> fires some of the intents listed on this page in response to
+ voice commands. For more information, see <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ Intents fired by Google Voice Actions</a>.
+</p>
<h2 id="Clock">Alarm Clock</h2>
-
<h3 id="CreateAlarm">Create an alarm</h3>
-<!-- Google Now box -->
-<div class="now-box">
- <div class="now-img-cont">
- <a href="#Now">
- <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img" width="30"
- height="30" alt=""/>
- </a>
+<!-- Google Voice Actions box -->
+<div class="voice-box">
+ <div class="voice-img-cont">
+ <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ <img src="{@docRoot}guide/components/images/voice-icon.png" class=
+ "voice-img" width="30" height="30" alt=""></a>
</div>
- <p class="now-title">Google Now</p>
+
+ <p class="voice-title">
+ Google Voice Actions
+ </p>
+
<ul>
- <li>"set an alarm for 7 am"</li>
+ <li>"set an alarm for 7 am"
+ </li>
</ul>
</div>
@@ -301,22 +321,30 @@
<h3 id="CreateTimer">Create a timer</h3>
-<!-- Google Now box -->
-<div class="now-box">
- <div class="now-img-cont">
- <a href="#Now">
- <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
- width="30" height="30" alt=""/>
- </a>
+<!-- Google Voice Actions box -->
+<div class="voice-box">
+ <div class="voice-img-cont">
+ <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ <img src="{@docRoot}guide/components/images/voice-icon.png" class=
+ "voice-img" width="30" height="30" alt=""></a>
</div>
- <p class="now-title">Google Now</p>
+
+ <p class="voice-title">
+ Google Voice Actions
+ </p>
+
<ul>
- <li>"set timer for 5 minutes"</li>
+ <li>"set timer for 5 minutes"
+ </li>
</ul>
</div>
-<p>To create a countdown timer, use the {@link android.provider.AlarmClock#ACTION_SET_TIMER}
-action and specify timer details such as the duration using extras defined below.</p>
+<p>
+ To create a countdown timer, use the {@link
+ android.provider.AlarmClock#ACTION_SET_TIMER} action and specify timer
+ details such as the duration using extras defined below.
+</p>
<p class="note"><strong>Note:</strong> This intent was added
in Android 4.4 (API level 19).</p>
@@ -594,28 +622,36 @@
</activity>
</pre>
-<p>When handling this intent, your activity should check for the {@link
-android.provider.MediaStore#EXTRA_OUTPUT} extra in the incoming {@link android.content.Intent},
-then save the captured image or video at the location specified by that extra and call {@link
-android.app.Activity#setResult(int,Intent) setResult()} with an
-{@link android.content.Intent} that includes a compressed thumbnail
-in an extra named <code>"data"</code>.</p>
+<p>
+ When handling this intent, your activity should check for the {@link
+ android.provider.MediaStore#EXTRA_OUTPUT} extra in the incoming {@link
+ android.content.Intent}, then save the captured image or video at the
+ location specified by that extra and call {@link
+ android.app.Activity#setResult(int,Intent) setResult()} with an {@link
+ android.content.Intent} that includes a compressed thumbnail in an extra
+ named <code>"data"</code>.
+</p>
<h3 id="CameraStill">Start a camera app in still image mode</h3>
-<!-- Google Now box -->
-<div class="now-box">
- <div class="now-img-cont">
- <a href="#Now">
- <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
- width="30" height="30" alt=""/>
- </a>
+<!-- Google Voice Actions box -->
+<div class="voice-box">
+ <div class="voice-img-cont">
+ <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ <img src="{@docRoot}guide/components/images/voice-icon.png" class=
+ "voice-img" width="30" height="30" alt=""></a>
</div>
- <p class="now-title">Google Now</p>
+
+ <p class="voice-title">
+ Google Voice Actions
+ </p>
+
<ul>
- <li>"take a picture"</li>
+ <li>"take a picture"
+ </li>
</ul>
</div>
@@ -661,17 +697,22 @@
<h3 id="CameraVideo">Start a camera app in video mode</h3>
-<!-- Google Now box -->
-<div class="now-box">
- <div class="now-img-cont">
- <a href="#Now">
- <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
- width="30" height="30" alt=""/>
- </a>
+<!-- Google Voice Actions box -->
+<div class="voice-box">
+ <div class="voice-img-cont">
+ <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ <img src="{@docRoot}guide/components/images/voice-icon.png" class=
+ "voice-img" width="30" height="30" alt=""></a>
</div>
- <p class="now-title">Google Now</p>
+
+ <p class="voice-title">
+ Google Voice Actions
+ </p>
+
<ul>
- <li>"record a video"</li>
+ <li>"record a video"
+ </li>
</ul>
</div>
@@ -1348,20 +1389,30 @@
<h3 id="CallCar">Call a car</h3>
-<!-- Google Now box -->
-<div class="now-box">
- <div class="now-img-cont">
- <a href="#Now">
- <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
- width="30" height="30" alt=""/>
- </a>
+<!-- Google Voice Actions box -->
+<div class="voice-box">
+ <div class="voice-img-cont">
+ <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ <img src="{@docRoot}guide/components/images/voice-icon.png" class=
+ "voice-img" width="30" height="30" alt=""></a>
</div>
- <p class="now-title">Google Now</p>
+
+ <p class="voice-title">
+ Google Voice Actions
+ </p>
+
<ul>
- <li>"get me a taxi"</li>
- <li>"call me a car"</li>
+ <li>"get me a taxi"
+ </li>
+
+ <li>"call me a car"
+ </li>
</ul>
- <p style="font-size:13px;margin-bottom:0px;margin-top:10px">(Android Wear only)</p>
+
+ <p style="font-size:13px;margin-bottom:0px;margin-top:10px">
+ (Android Wear only)
+ </p>
</div>
<p>To call a taxi, use the
@@ -1548,17 +1599,22 @@
<h3 id="PlaySearch">Play music based on a search query</h3>
-<!-- Google Now box -->
-<div class="now-box">
- <div class="now-img-cont">
- <a href="#Now">
- <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
- width="30" height="30" alt=""/>
- </a>
+<!-- Google Voice Actions box -->
+<div class="voice-box">
+ <div class="voice-img-cont">
+ <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ <img src="{@docRoot}guide/components/images/voice-icon.png" class=
+ "voice-img" width="30" height="30" alt=""></a>
</div>
- <p class="now-title">Google Now</p>
+
+ <p class="voice-title">
+ Google Voice Actions
+ </p>
+
<ul>
- <li>"play michael jackson billie jean"</li>
+ <li>"play michael jackson billie jean"
+ </li>
</ul>
</div>
@@ -1861,19 +1917,28 @@
the URI scheme defined below. When the phone app opens, it displays the phone number
but the user must press the <em>Call</em> button to begin the phone call.</p>
-<!-- Google Now box -->
-<div class="now-box">
- <div class="now-img-cont">
- <a href="#Now">
- <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
- width="30" height="30" alt=""/>
- </a>
+<!-- Google Voice Actions box -->
+<div class="voice-box">
+ <div class="voice-img-cont">
+ <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ <img src="{@docRoot}guide/components/images/voice-icon.png" class=
+ "voice-img" width="30" height="30" alt=""></a>
</div>
- <p class="now-title">Google Now</p>
+
+ <p class="voice-title">
+ Google Voice Actions
+ </p>
+
<ul>
- <li>"call 555-5555"</li>
- <li>"call bob"</li>
- <li>"call voicemail"</li>
+ <li>"call 555-5555"
+ </li>
+
+ <li>"call bob"
+ </li>
+
+ <li>"call voicemail"
+ </li>
</ul>
</div>
@@ -1947,16 +2012,22 @@
<h3 id="SearchOnApp">Search using a specific app</h3>
-<!-- Google Now box -->
-<div class="now-box">
- <div class="now-img-cont">
- <a href="#Now">
- <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
- width="30" height="30"/></a>
+<!-- Google Voice Actions box -->
+<div class="voice-box">
+ <div class="voice-img-cont">
+ <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ <img src="{@docRoot}guide/components/images/voice-icon.png" class=
+ "voice-img" width="30" height="30" alt=""></a>
</div>
- <p class="now-title">Google Now</p>
+
+ <p class="voice-title">
+ Google Voice Actions
+ </p>
+
<ul>
- <li>"search for cat videos on myvideoapp"</li>
+ <li>"search for cat videos on myvideoapp"
+ </li>
</ul>
</div>
<!-- Video box -->
@@ -1976,7 +2047,7 @@
<dd>
<dl>
<dt><code>"com.google.android.gms.actions.SEARCH_ACTION"</code></dt>
- <dd>Support search queries from Google Now.</dd>
+ <dd>Support search queries from Google Voice Actions.</dd>
</dl>
</dd>
@@ -2207,17 +2278,22 @@
<h3 id="ViewUrl">Load a web URL</h3>
-<!-- Google Now box -->
-<div class="now-box">
- <div class="now-img-cont">
- <a href="#Now">
- <img src="{@docRoot}guide/components/images/voice-icon.png" class="now-img"
- width="30" height="30" alt=""/>
- </a>
+<!-- Google Voice Actions box -->
+<div class="voice-box">
+ <div class="voice-img-cont">
+ <a href=
+ "https://developers.google.com/voice-actions/system/#system_actions_reference">
+ <img src="{@docRoot}guide/components/images/voice-icon.png" class=
+ "voice-img" width="30" height="30" alt=""></a>
</div>
- <p class="now-title">Google Now</p>
+
+ <p class="voice-title">
+ Google Voice Actions
+ </p>
+
<ul>
- <li>"open example.com"</li>
+ <li>"open example.com"
+ </li>
</ul>
</div>
@@ -2307,128 +2383,4 @@
<p>For more information, see
-<a href="{@docRoot}tools/help/shell.html#am">ADB Shell Commands</a>.</p>
-
-
-
-
-
-
-<h2 id="Now">Intents Fired by Google Now</h2>
-
-<p><a href="http://www.google.com/landing/now/">Google Now</a> recognizes many voice commands
-and fires intents for them. As such, users may launch your app with a Google Now voice command
-if your app declares the corresponding intent filter. For example, if your app can
-<a href="#CreateAlarm">set an alarm</a> and you add the corresponding intent filter to your
-manifest file, Google Now lets users choose your app when they request to set an alarm, as
-shown in figure 1.</p>
-
-<img src="{@docRoot}guide/components/images/google-action.png"
- srcset="{@docRoot}guide/components/images/google-action_2x.png 2x"
- width="700" height="241" alt=""/>
-<p class="img-caption"><strong>Figure 1.</strong> Google Now lets users choose from installed
-apps that support a given action.</p>
-
-<p>Google Now recognizes voice commands for the actions listed in table 1. For more information
-about declaring each intent filter, click on the action description.</p>
-
-<p class="table-caption"><strong>Table 1.</strong> Voice commands recognized by Google Now
-(Google Search app v3.6).</p>
-<table>
-<tr>
- <th>Category</th>
- <th>Details and Examples</th>
- <th>Action Name</th>
-</tr>
-<tr>
- <td rowspan="2" style="vertical-align:middle">Alarm</td>
- <td>
- <p><a href="#CreateAlarm">Set alarm</a></p>
- <ul class="now-list">
- <li>"set an alarm for 7 am"</li>
- </ul>
- </td>
- <td>{@link android.provider.AlarmClock#ACTION_SET_ALARM AlarmClock.ACTION_SET_ALARM}</td>
-</tr>
-<tr>
- <td>
- <p><a href="#CreateTimer">Set timer</a></p>
- <ul class="now-list">
- <li>"set a timer for 5 minutes"</li>
- </ul>
- </td>
- <td>{@link android.provider.AlarmClock#ACTION_SET_TIMER AlarmClock.ACTION_SET_TIMER}</td>
-</tr>
-<tr>
- <td style="vertical-align:middle">Communication</td>
- <td>
- <p><a href="#DialPhone">Call a number</a></p>
- <ul class="now-list">
- <li>"call 555-5555"</li>
- <li>"call bob"</li>
- <li>"call voicemail"</li>
- </ul>
- </td>
- <td>{@link android.content.Intent#ACTION_CALL Intent.ACTION_CALL}</td>
-</tr>
-<tr>
- <td style="vertical-align:middle">Local</td>
- <td>
- <p><a href="#CallCar">Book a car</a></p>
- <ul class="now-list">
- <li>"call me a car"</li>
- <li>"book me a taxi"</li>
- </ul>
- </td>
- <td><a href="{@docRoot}reference/com/google/android/gms/actions/ReserveIntents.html#ACTION_RESERVE_TAXI_RESERVATION">
- <code>ReserveIntents<br/>.ACTION_RESERVE_TAXI_RESERVATION</code></a></td>
-</tr>
-<tr>
- <td rowspan="3" style="vertical-align:middle">Media</td>
- <td>
- <p><a href="#PlaySearch">Play music from search</a></p>
- <ul class="now-list">
- <li>"play michael jackson billie jean"</li>
- </ul>
- </td>
- <td>{@link android.provider.MediaStore#INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH MediaStore<br/>.INTENT_ACTION_MEDIA_PLAY_FROM_SEARCH}</td>
-</tr>
-<tr>
- <td>
- <p><a href="#CameraStill">Take a picture</a></p>
- <ul class="now-list">
- <li>"take a picture"</li>
- </ul>
- </td>
- <td>{@link android.provider.MediaStore#INTENT_ACTION_STILL_IMAGE_CAMERA MediaStore<br/>.INTENT_ACTION_STILL_IMAGE_CAMERA}</td>
-</tr>
-<tr>
- <td>
- <p><a href="#CameraVideo">Record a video</a></p>
- <ul class="now-list">
- <li>"record a video"</li>
- </ul>
- </td>
- <td>{@link android.provider.MediaStore#INTENT_ACTION_VIDEO_CAMERA MediaStore<br/>.INTENT_ACTION_VIDEO_CAMERA}</td>
-</tr>
-<tr>
- <td style="vertical-align:middle">Search</td>
- <td>
- <p><a href="#SearchOnApp">Search using a specific app</a></p>
- <ul class="now-list">
- <li>"search for cat videos <br/>on myvideoapp"</li>
- </ul>
- </td>
- <td><code>"com.google.android.gms.actions<br/>.SEARCH_ACTION"</code></td>
-</tr>
-<tr>
- <td style="vertical-align:middle">Web browser</td>
- <td>
- <p><a href="#ViewUrl">Open URL</a></p>
- <ul class="now-list">
- <li>"open example.com"</li>
- </ul>
- </td>
- <td>{@link android.content.Intent#ACTION_VIEW Intent.ACTION_VIEW}</td>
-</tr>
-</table>
+<a href="{@docRoot}tools/help/shell.html#am">ADB Shell Commands</a>.</p>
\ No newline at end of file
diff --git a/docs/html/guide/topics/media/camera.jd b/docs/html/guide/topics/media/camera.jd
index c806c88..4995a13d 100644
--- a/docs/html/guide/topics/media/camera.jd
+++ b/docs/html/guide/topics/media/camera.jd
@@ -9,12 +9,7 @@
<li><a href="#considerations">Considerations</a></li>
<li><a href="#basics">The Basics</a>
<li><a href="#manifest">Manifest Declarations</a></li>
- <li><a href="#intents">Using Existing Camera Apps</a>
- <ol>
- <li><a href="#intent-image">Image capture intent</a></li>
- <li><a href="#intent-video">Video capture intent</a></li>
- <li><a href="#intent-receive">Receiving camera intent result</a></li>
- </ol>
+ <li><a href="#camera-apps">Using Existing Camera Apps</a>
<li><a href="#custom-camera">Building a Camera App</a>
<ol>
<li><a href="#detect-camera">Detecting camera hardware</a></li>
@@ -72,7 +67,7 @@
<li><strong>Quick Picture or Customized Camera</strong> - How will your application use the
camera? Are you just interested in snapping a quick picture or video clip, or will your application
provide a new way to use cameras? For a getting a quick snap or clip, consider
-<a href="#intents">Using Existing Camera Apps</a>. For developing a customized camera feature, check
+<a href="#camera-apps">Using Existing Camera Apps</a>. For developing a customized camera feature, check
out the <a href="#custom-camera">Building a Camera App</a> section.</li>
<li><strong>Storage</strong> - Are the images or videos your application generates intended to be
@@ -122,8 +117,9 @@
<pre>
<uses-permission android:name="android.permission.CAMERA" />
</pre>
- <p class="note"><strong>Note:</strong> If you are using the camera <a href="#intents">via an
-intent</a>, your application does not need to request this permission.</p>
+ <p class="note"><strong>Note:</strong> If you are using the camera <a href="#camera-apps">by
+invoking an existing camera app</a>,
+your application does not need to request this permission.</p>
</li>
<li><strong>Camera Features</strong> - Your application must also declare use of camera features,
for example:
@@ -169,193 +165,17 @@
</ul>
-<h2 id="intents">Using Existing Camera Apps</h2>
+<h2 id="camera-apps">Using Existing Camera Apps</h2>
<p>A quick way to enable taking pictures or videos in your application without a lot of extra code
-is to use an {@link android.content.Intent} to invoke an existing Android camera application. A
-camera intent makes a request to capture a picture or video clip through an existing camera app and
-then returns control back to your application. This section shows you how to capture an image or
-video using this technique.</p>
-
-<p>The procedure for invoking a camera intent follows these general steps:</p>
-
-<ol>
- <li><strong>Compose a Camera Intent</strong> - Create an {@link android.content.Intent} that
-requests an image or video, using one of these intent types:
- <ul>
- <li>{@link android.provider.MediaStore#ACTION_IMAGE_CAPTURE MediaStore.ACTION_IMAGE_CAPTURE} -
-Intent action type for requesting an image from an existing camera application.</li>
- <li>{@link android.provider.MediaStore#ACTION_VIDEO_CAPTURE MediaStore.ACTION_VIDEO_CAPTURE} -
-Intent action type for requesting a video from an existing camera application. </li>
- </ul>
- </li>
- <li><strong>Start the Camera Intent</strong> - Use the {@link
-android.app.Activity#startActivityForResult(android.content.Intent, int) startActivityForResult()}
-method to execute the camera intent. After you start the intent, the Camera application user
-interface appears on the device screen and the user can take a picture or video.</li>
- <li><strong>Receive the Intent Result</strong> - Set up an {@link
-android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()} method
-in your application to receive the callback and data from the camera intent. When the user
-finishes taking a picture or video (or cancels the operation), the system calls this method.</li>
-</ol>
-
-
-<h3 id="intent-image">Image capture intent</h3>
-<p>Capturing images using a camera intent is quick way to enable your application to take pictures
-with minimal coding. An image capture intent can include the following extra information:</p>
-
-<ul>
- <li>{@link android.provider.MediaStore#EXTRA_OUTPUT MediaStore.EXTRA_OUTPUT} - This setting
-requires a {@link android.net.Uri} object specifying a path and file name where you'd like to
-save the picture. This setting is optional but strongly recommended. If you do not specify this
-value, the camera application saves the requested picture in the default location with a default
-name, specified in the returned intent's {@link android.content.Intent#getData() Intent.getData()}
-field.</li>
-</ul>
-
-<p>The following example demonstrates how to construct a image capture intent and execute it.
-The {@code getOutputMediaFileUri()} method in this example refers to the sample code shown in <a
-href= "#saving-media">Saving Media Files</a>.</p>
-
-<pre>
-private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
-private Uri fileUri;
-
-@Override
-public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- // create Intent to take a picture and return control to the calling application
- Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
-
- fileUri = getOutputMediaFileUri(MEDIA_TYPE_IMAGE); // create a file to save the image
- intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
-
- // start the image capture Intent
- startActivityForResult(intent, CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE);
-}
-</pre>
-
-<p>When the {@link android.app.Activity#startActivityForResult(android.content.Intent, int)
-startActivityForResult()} method is executed, users see a camera application interface.
-After the user finishes taking a picture (or cancels the operation), the user interface returns to
-your application, and you must intercept the {@link
-android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()}
-method to receive the result of the intent and continue your application execution. For information
-on how to receive the completed intent, see <a href="#intent-receive">Receiving camera intent
-result</a>.</p>
-
-
-<h3 id="intent-video">Video capture intent</h3>
-<p>Capturing video using a camera intent is a quick way to enable your application to take videos
-with minimal coding. A video capture intent can include the following extra information:</p>
-
-<ul>
- <li>{@link android.provider.MediaStore#EXTRA_OUTPUT MediaStore.EXTRA_OUTPUT} - This setting
-requires a {@link android.net.Uri} specifying a path and file name where you'd like to save the
-video. This setting is optional but strongly recommended. If you do not specify this value, the
-Camera application saves the requested video in the default location with a default name, specified
-in the returned intent's {@link android.content.Intent#getData() Intent.getData()} field.</li>
- <li>{@link android.provider.MediaStore#EXTRA_VIDEO_QUALITY MediaStore.EXTRA_VIDEO_QUALITY} -
-This value can be 0 for lowest quality and smallest file size or 1 for highest quality and
-larger file size.</li>
- <li>{@link android.provider.MediaStore#EXTRA_DURATION_LIMIT MediaStore.EXTRA_DURATION_LIMIT} -
-Set this value to limit the length, in seconds, of the video being captured.</li>
- <li>{@link android.provider.MediaStore#EXTRA_SIZE_LIMIT MediaStore.EXTRA_SIZE_LIMIT} -
-Set this value to limit the file size, in bytes, of the video being captured.
-</li>
-</ul>
-
-<p>The following example demonstrates how to construct a video capture intent and execute it.
-The {@code getOutputMediaFileUri()} method in this example refers to the sample code shown in <a
-href= "#saving-media">Saving Media Files</a>.</p>
-
-<pre>
-private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
-private Uri fileUri;
-
-@Override
-public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- setContentView(R.layout.main);
-
- //create new Intent
- Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
-
- fileUri = getOutputMediaFileUri(MEDIA_TYPE_VIDEO); // create a file to save the video
- intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); // set the image file name
-
- intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); // set the video image quality to high
-
- // start the Video Capture Intent
- startActivityForResult(intent, CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE);
-}
-</pre>
-
-<p>When the {@link
-android.app.Activity#startActivityForResult(android.content.Intent, int)
-startActivityForResult()} method is executed, users see a modified camera application interface.
-After the user finishes taking a video (or cancels the operation), the user interface
-returns to your application, and you must intercept the {@link
-android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()}
-method to receive the result of the intent and continue your application execution. For information
-on how to receive the completed intent, see the next section.</p>
-
-<h3 id="intent-receive">Receiving camera intent result</h3>
-<p>Once you have constructed and executed an image or video camera intent, your application must be
-configured to receive the result of the intent. This section shows you how to intercept the callback
-from a camera intent so your application can do further processing of the captured image or
-video.</p>
-
-<p>In order to receive the result of an intent, you must override the {@link
-android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()} in the
-activity that started the intent. The following example demonstrates how to override {@link
-android.app.Activity#onActivityResult(int, int, android.content.Intent) onActivityResult()} to
-capture the result of the <a href="#intent-image">image camera intent</a> or <a
-href="#intent-video">video camera intent</a> examples shown in the previous sections.</p>
-
-<pre>
-private static final int CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE = 100;
-private static final int CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE = 200;
-
-@Override
-protected void onActivityResult(int requestCode, int resultCode, Intent data) {
- if (requestCode == CAPTURE_IMAGE_ACTIVITY_REQUEST_CODE) {
- if (resultCode == RESULT_OK) {
- // Image captured and saved to fileUri specified in the Intent
- Toast.makeText(this, "Image saved to:\n" +
- data.getData(), Toast.LENGTH_LONG).show();
- } else if (resultCode == RESULT_CANCELED) {
- // User cancelled the image capture
- } else {
- // Image capture failed, advise user
- }
- }
-
- if (requestCode == CAPTURE_VIDEO_ACTIVITY_REQUEST_CODE) {
- if (resultCode == RESULT_OK) {
- // Video captured and saved to fileUri specified in the Intent
- Toast.makeText(this, "Video saved to:\n" +
- data.getData(), Toast.LENGTH_LONG).show();
- } else if (resultCode == RESULT_CANCELED) {
- // User cancelled the video capture
- } else {
- // Video capture failed, advise user
- }
- }
-}
-</pre>
-
-<p>Once your activity receives a successful result, the captured image or video is available in the
-specified location for your application to access.</p>
-
-
+is to use an {@link android.content.Intent} to invoke an existing Android camera application.
+The details are described in the training lessons
+<a href="{@docRoot}training/camera/photobasics.html">Taking Photos Simply</a> and
+<a href="{@docRoot}training/camera/videobasics.html">Recording Videos Simply</a>.</p>
<h2 id="custom-camera">Building a Camera App</h2>
<p>Some developers may require a camera user interface that is customized to the look of their
-application or provides special features. Creating a customized camera activity requires more
-code than <a href="#intents">using an intent</a>, but it can provide a more compelling experience
-for your users.</p>
+application or provides special features. Writing your own picture-taking code
+can provide a more compelling experience for your users.</p>
<p><strong> Note: The following guide is for the older, deprecated {@link android.hardware.Camera}
API. For new or advanced camera applications, the newer {@link android.hardware.camera2} API is
@@ -419,7 +239,7 @@
<h3 id="access-camera">Accessing cameras</h3>
<p>If you have determined that the device on which your application is running has a camera, you
must request to access it by getting an instance of {@link android.hardware.Camera} (unless you
-are using an <a href="#intents">intent to access the camera</a>). </p>
+are using an <a href="camera-apps">intent to access the camera</a>). </p>
<p>To access the primary camera, use the {@link android.hardware.Camera#open() Camera.open()} method
and be sure to catch any exceptions, as shown in the code below:</p>
diff --git a/docs/html/guide/topics/renderscript/advanced.jd b/docs/html/guide/topics/renderscript/advanced.jd
index 6a72b97..5cc0556 100644
--- a/docs/html/guide/topics/renderscript/advanced.jd
+++ b/docs/html/guide/topics/renderscript/advanced.jd
@@ -63,7 +63,7 @@
<code>llvm</code> compiler that runs as part of an Android build. When your application
runs on a device, the bytecode is then compiled (just-in-time) to machine code by another
<code>llvm</code> compiler that resides on the device. The machine code is optimized for the
- device and also cached, so subsequent uses of the RenderScript enabled application does not
+ device and also cached, so subsequent uses of the RenderScript enabled application do not
recompile the bytecode.</p>
<p>Some key features of the RenderScript runtime libraries include:</p>
@@ -128,7 +128,7 @@
<h3 id="func">Functions</h3>
<p>Functions are reflected into the script class itself, located in
<code>project_root/gen/package/name/ScriptC_renderscript_filename</code>. For
-example, if you declare the following function in your RenderScript code:</p>
+example, if you define the following function in your RenderScript code:</p>
<pre>
void touch(float x, float y, float pressure, int id) {
@@ -142,7 +142,7 @@
}
</pre>
-<p>then the following code is generated:</p>
+<p>then the following Java code is generated:</p>
<pre>
public void invoke_touch(float x, float y, float pressure, int id) {
@@ -155,7 +155,7 @@
}
</pre>
<p>
-Functions cannot have a return value, because the RenderScript system is designed to be
+Functions cannot have return values, because the RenderScript system is designed to be
asynchronous. When your Android framework code calls into RenderScript, the call is queued and is
executed when possible. This restriction allows the RenderScript system to function without constant
interruption and increases efficiency. If functions were allowed to have return values, the call
@@ -171,11 +171,11 @@
<p>Variables of supported types are reflected into the script class itself, located in
<code>project_root/gen/package/name/ScriptC_renderscript_filename</code>. A set of accessor
-methods are generated for each variable. For example, if you declare the following variable in
+methods is generated for each variable. For example, if you define the following variable in
your RenderScript code:</p>
<pre>uint32_t unsignedInteger = 1;</pre>
- <p>then the following code is generated:</p>
+ <p>then the following Java code is generated:</p>
<pre>
private long mExportVar_unsignedInteger;
@@ -194,7 +194,7 @@
<p>Structs are reflected into their own classes, located in
<code><project_root>/gen/com/example/renderscript/ScriptField_struct_name</code>. This
class represents an array of the <code>struct</code> and allows you to allocate memory for a
- specified number of <code>struct</code>s. For example, if you declare the following struct:</p>
+ specified number of <code>struct</code>s. For example, if you define the following struct:</p>
<pre>
typedef struct Point {
float2 position;
@@ -373,7 +373,7 @@
the array. The RenderScript runtime automatically has access to the newly written memory.
<li>Accessor methods to get and set the values of each field in a struct. Each of these
- accessor methods have an <code>index</code> parameter to specify the <code>struct</code> in
+ accessor methods has an <code>index</code> parameter to specify the <code>struct</code> in
the array that you want to read or write to. Each setter method also has a
<code>copyNow</code> parameter that specifies whether or not to immediately sync this memory
to the RenderScript runtime. To sync any memory that has not been synced, call
@@ -395,10 +395,10 @@
</ul>
<h3 id="pointer">Pointers</h3>
- <p>Pointers are reflected into the script class itself, located in
+ <p>Global pointers are reflected into the script class itself, located in
<code>project_root/gen/package/name/ScriptC_renderscript_filename</code>. You
can declare pointers to a <code>struct</code> or any of the supported RenderScript types, but a
-<code>struct</code> cannot contain pointers or nested arrays. For example, if you declare the
+<code>struct</code> cannot contain pointers or nested arrays. For example, if you define the
following pointers to a <code>struct</code> and <code>int32_t</code></p>
<pre>
@@ -410,7 +410,7 @@
Point_t *touchPoints;
int32_t *intPointer;
</pre>
- <p>then the following code is generated in:</p>
+ <p>then the following Java code is generated:</p>
<pre>
private ScriptField_Point mExportVar_touchPoints;
@@ -437,7 +437,7 @@
</pre>
<p>A <code>get</code> method and a special method named <code>bind_<em>pointer_name</em></code>
-(instead of a <code>set()</code> method) is generated. This method allows you to bind the memory
+(instead of a <code>set()</code> method) are generated. The <code>bind_<em>pointer_name</em></code> method allows you to bind the memory
that is allocated in the Android VM to the RenderScript runtime (you cannot allocate
memory in your <code>.rs</code> file). For more information, see <a href="#memory">Working
with Allocated Memory</a>.
@@ -521,7 +521,7 @@
describes.</p>
<p>A type consists of five dimensions: X, Y, Z, LOD (level of detail), and Faces (of a cube
- map). You can assign the X,Y,Z dimensions to any positive integer value within the
+ map). You can set the X,Y,Z dimensions to any positive integer value within the
constraints of available memory. A single dimension allocation has an X dimension of
greater than zero while the Y and Z dimensions are zero to indicate not present. For
example, an allocation of x=10, y=1 is considered two dimensional and x=10, y=0 is
diff --git a/docs/html/guide/topics/renderscript/compute.jd b/docs/html/guide/topics/renderscript/compute.jd
index fe68654..89cfff9 100755
--- a/docs/html/guide/topics/renderscript/compute.jd
+++ b/docs/html/guide/topics/renderscript/compute.jd
@@ -10,12 +10,20 @@
<ol>
<li><a href="#writing-an-rs-kernel">Writing a RenderScript Kernel</a></li>
- <li><a href="#access-rs-apis">Accessing RenderScript APIs</a>
+ <li><a href="#access-rs-apis">Accessing RenderScript APIs from Java</a>
<ol>
<li><a href="#ide-setup">Setting Up Your Development Environment</a></li>
</ol>
</li>
<li><a href="#using-rs-from-java">Using RenderScript from Java Code</a></li>
+ <li><a href="#single-source-rs">Single-Source RenderScript</a></li>
+ <li><a href="#reduction-in-depth">Reduction Kernels in Depth</a>
+ <ol>
+ <li><a href="#writing-reduction-kernel">Writing a reduction kernel</a></li>
+ <li><a href="#calling-reduction-kernel">Calling a reduction kernel from Java code</a></li>
+ <li><a href="#more-example">More example reduction kernels</a></li>
+ </ol>
+ </li>
</ol>
<h2>Related Samples</h2>
@@ -29,26 +37,32 @@
<p>RenderScript is a framework for running computationally intensive tasks at high performance on
Android. RenderScript is primarily oriented for use with data-parallel computation, although serial
-computationally intensive workloads can benefit as well. The RenderScript runtime will parallelize
-work across all processors available on a device, such as multi-core CPUs, GPUs, or DSPs, allowing
-you to focus on expressing algorithms rather than scheduling work or load balancing. RenderScript is
+workloads can benefit as well. The RenderScript runtime parallelizes
+work across processors available on a device, such as multi-core CPUs and GPUs. This allows
+you to focus on expressing algorithms rather than scheduling work. RenderScript is
especially useful for applications performing image processing, computational photography, or
computer vision.</p>
<p>To begin with RenderScript, there are two main concepts you should understand:</p>
<ul>
-<li>High-performance compute kernels are written in a C99-derived language.</li>
+<li>The <em>language</em> itself is a C99-derived language for writing high-performance compute
+code. <a href="#writing-an-rs-kernel">Writing a RenderScript Kernel</a> describes
+how to use it to write compute kernels.</li>
-<li>A Java API is used for managing the lifetime of RenderScript resources and controlling kernel
-execution.</li>
+<li>The <em>control API</em> is used for managing the lifetime of RenderScript resources and
+controlling kernel execution. It is available in three different languages: Java, C++ in Android
+NDK, and the C99-derived kernel language itself.
+<a href="#using-rs-from-java">Using RenderScript from Java Code</a> and
+<a href=#single-source-rs>Single-Source RenderScript</a> describe the first and the third
+options, respectively.</li>
</ul>
<h2 id="writing-an-rs-kernel">Writing a RenderScript Kernel</h2>
<p>A RenderScript kernel typically resides in a <code>.rs</code> file in the
<code><project_root>/src/</code> directory; each <code>.rs</code> file is called a
-script. Every script contains its own set of kernels, functions, and variables. A script can
+<i>script</i>. Every script contains its own set of kernels, functions, and variables. A script can
contain:</p>
<ul>
@@ -57,23 +71,34 @@
<li>A pragma declaration (<code>#pragma rs java_package_name(com.example.app)</code>) that
declares the package name of the Java classes reflected from this script.
-Note that your .rs file must be part of your application package, and not in a
+Note that your <code>.rs</code> file must be part of your application package, and not in a
library project.</li>
-<li>Some number of invokable functions. An invokable function is a single-threaded RenderScript
+<li>Zero or more <strong><i>invokable functions</i></strong>. An invokable function is a single-threaded RenderScript
function that you can call from your Java code with arbitrary arguments. These are often useful for
initial setup or serial computations within a larger processing pipeline.</li>
-<li>Some number of script globals. A script global is equivalent to a global variable in C. You can
+<li><p>Zero or more <strong><i>script globals</i></strong>. A script global is equivalent to a global variable in C. You can
access script globals from Java code, and these are often used for parameter passing to RenderScript
-kernels.</li>
+kernels.</p></li>
-<li>Some number of compute kernels. A kernel is a parallel function that executes across every
-{@link android.renderscript.Element} within an {@link android.renderscript.Allocation}.
+<li><p>Zero or more <strong><i>compute kernels</i></strong>. A compute kernel is a function
+or collection of functions that you can direct the RenderScript runtime to execute in parallel
+across a collection of data. There are two kinds of compute
+kernels: <i>mapping</i> kernels (also called <i>foreach</i> kernels)
+and <i>reduction</i> kernels.</p>
-<p>A simple kernel may look like the following:</p>
+<p>A <em>mapping kernel</em> is a parallel function that operates on a collection of {@link
+ android.renderscript.Allocation Allocations} of the same dimensions. By default, it executes
+ once for every coordinate in those dimensions. It is typically (but not exclusively) used to
+ transform a collection of input {@link android.renderscript.Allocation Allocations} to an
+ output {@link android.renderscript.Allocation} one {@link android.renderscript.Element} at a
+ time.</p>
-<pre>uchar4 __attribute__((kernel)) invert(uchar4 in, uint32_t x, uint32_t y) {
+<ul>
+<li><p>Here is an example of a simple <strong>mapping kernel</strong>:</p>
+
+<pre>uchar4 RS_KERNEL invert(uchar4 in, uint32_t x, uint32_t y) {
uchar4 out = in;
out.r = 255 - in.r;
out.g = 255 - in.g;
@@ -81,40 +106,113 @@
return out;
}</pre>
-<p>In most respects, this is identical to a standard C function. The first notable feature is the
-<code>__attribute__((kernel))</code> applied to the function prototype. This denotes that the
-function is a RenderScript kernel instead of an invokable function. The next feature is the
-<code>in</code> argument and its type. In a RenderScript kernel, this is a special argument that is
-automatically filled in based on the input {@link android.renderscript.Allocation} passed to the
-kernel launch. By default, the kernel is run across an entire {@link
-android.renderscript.Allocation}, with one execution of the kernel body per {@link
-android.renderscript.Element} in the {@link android.renderscript.Allocation}. The third notable
-feature is the return type of the kernel. The value returned from the kernel is automatically
-written to the appropriate location in the output {@link android.renderscript.Allocation}. The
-RenderScript runtime checks to ensure that the {@link android.renderscript.Element} types of the
-input and output Allocations match the kernel's prototype; if they do not match, an exception is
-thrown.</p>
+<p>In most respects, this is identical to a standard C
+ function. The <a href="#RS_KERNEL"><code>RS_KERNEL</code></a> property applied to the
+ function prototype specifies that the function is a RenderScript mapping kernel instead of an
+ invokable function. The <code>in</code> argument is automatically filled in based on the
+ input {@link android.renderscript.Allocation} passed to the kernel launch. The
+ arguments <code>x</code> and <code>y</code> are
+ discussed <a href="#special-arguments">below</a>. The value returned from the kernel is
+ automatically written to the appropriate location in the output {@link
+ android.renderscript.Allocation}. By default, this kernel is run across its entire input
+ {@link android.renderscript.Allocation}, with one execution of the kernel function per {@link
+ android.renderscript.Element} in the {@link android.renderscript.Allocation}.</p>
-<p>A kernel may have an input {@link android.renderscript.Allocation}, an output {@link
-android.renderscript.Allocation}, or both. A kernel may not have more than one input or one output
-{@link android.renderscript.Allocation}. If more than one input or output is required, those objects
-should be bound to <code>rs_allocation</code> script globals and accessed from a kernel or invokable
-function via <code>rsGetElementAt_<em>type</em>()</code> or
-<code>rsSetElementAt_<em>type</em>()</code>.</p>
+<p>A mapping kernel may have one or more input {@link android.renderscript.Allocation
+ Allocations}, a single output {@link android.renderscript.Allocation}, or both. The
+ RenderScript runtime checks to ensure that all input and output Allocations have the same
+ dimensions, and that the {@link android.renderscript.Element} types of the input and output
+ Allocations match the kernel's prototype; if either of these checks fails, RenderScript
+ throws an exception.</p>
-<p>A kernel may access the coordinates of the current execution using the <code>x</code>,
-<code>y</code>, and <code>z</code> arguments. These arguments are optional, but the type of the
-coordinate arguments must be <code>uint32_t</code>.</p></li>
+<p class="note"><strong>NOTE:</strong> Before Android 6.0 (API level 23), a mapping kernel may
+ not have more than one input {@link android.renderscript.Allocation}.</p>
+
+<p>If you need more input or output {@link android.renderscript.Allocation Allocations} than
+ the kernel has, those objects should be bound to <code>rs_allocation</code> script globals
+ and accessed from a kernel or invokable function
+ via <code>rsGetElementAt_<i>type</i>()</code> or <code>rsSetElementAt_<i>type</i>()</code>.</p>
+
+<p><strong>NOTE:</strong> <a id="RS_KERNEL"><code>RS_KERNEL</code></a> is a macro
+ defined automatically by RenderScript for your convenience:</p>
+<pre>
+#define RS_KERNEL __attribute__((kernel))
+</pre>
+</li>
+</ul>
+
+<p>A <em>reduction kernel</em> is a family of functions that operates on a collection of input
+ {@link android.renderscript.Allocation Allocations} of the same dimensions. By default,
+ its <a href="#accumulator-function">accumulator function</a> executes once for every
+ coordinate in those dimensions. It is typically (but not exclusively) used to "reduce" a
+ collection of input {@link android.renderscript.Allocation Allocations} to a single
+ value.</p>
+
+<ul>
+<li><p>Here is an <a id="example-addint">example</a> of a simple <strong>reduction
+kernel</strong> that adds up the {@link android.renderscript.Element Elements} of its
+input:</p>
+
+<pre>#pragma rs reduce(addint) accumulator(addintAccum)
+
+static void addintAccum(int *accum, int val) {
+ *accum += val;
+}</pre>
+
+<p>A reduction kernel consists of one or more user-written functions.
+<code>#pragma rs reduce</code> is used to define the kernel by specifying its name
+(<code>addint</code>, in this example) and the names and roles of the functions that make
+up the kernel (an <code>accumulator</code> function <code>addintAccum</code>, in this
+example). All such functions must be <code>static</code>. A reduction kernel always
+requires an <code>accumulator</code> function; it may also have other functions, depending
+on what you want the kernel to do.</p>
+
+<p>A reduction kernel accumulator function must return <code>void</code> and must have at least
+two arguments. The first argument (<code>accum</code>, in this example) is a pointer to
+an <i>accumulator data item</i> and the second (<code>val</code>, in this example) is
+automatically filled in based on the input {@link android.renderscript.Allocation} passed to
+the kernel launch. The accumulator data item is created by the RenderScript runtime; by
+default, it is initialized to zero. By default, this kernel is run across its entire input
+{@link android.renderscript.Allocation}, with one execution of the accumulator function per
+{@link android.renderscript.Element} in the {@link android.renderscript.Allocation}. By
+default, the final value of the accumulator data item is treated as the result of the
+reduction, and is returned to Java. The RenderScript runtime checks to ensure that the {@link
+android.renderscript.Element} type of the input Allocation matches the accumulator function's
+prototype; if it does not match, RenderScript throws an exception.</p>
+
+<p>A reduction kernel has one or more input {@link android.renderscript.Allocation
+Allocations} but no output {@link android.renderscript.Allocation Allocations}.</p></li>
+
+<p>Reduction kernels are explained in more detail <a href="#reduction-in-depth">here</a>.</p>
+
+<p>Reduction kernels are supported in Android 7.0 (API level 24) and later.</p>
+</li>
+</ul>
+
+<p>A mapping kernel function or a reduction kernel accumulator function may access the coordinates
+of the current execution using the <a id="special-arguments">special arguments</a> <code>x</code>,
+<code>y</code>, and <code>z</code>, which must be of type <code>int</code> or <code>uint32_t</code>.
+These arguments are optional.</p>
+
+<p>A mapping kernel function or a reduction kernel accumulator
+function may also take the optional special argument
+<code>context</code> of type <a
+href='reference/rs_for_each.html#android_rs:rs_kernel_context'>rs_kernel_context</a>.
+It is needed by a family of runtime APIs that are used to query
+certain properties of the current execution -- for example, <a
+href='reference/rs_for_each.html#android_rs:rsGetDimX'>rsGetDimX</a>.
+(The <code>context</code> argument is available in Android 6.0 (API level 23) and later.)</p>
+</li>
<li>An optional <code>init()</code> function. An <code>init()</code> function is a special type of
-invokable function that is run when the script is first instantiated. This allows for some
+invokable function that RenderScript runs when the script is first instantiated. This allows for some
computation to occur automatically at script creation.</li>
-<li>Some number of static script globals and functions. A static script global is equivalent to a
-script global except that it cannot be set from Java code. A static function is a standard C
+<li>Zero or more <strong><i>static script globals and functions</i></strong>. A static script global is equivalent to a
+script global except that it cannot be accessed from Java code. A static function is a standard C
function that can be called from any kernel or invokable function in the script but is not exposed
to the Java API. If a script global or function does not need to be called from Java code, it is
-highly recommended that those be declared <code>static</code>.</li> </ul>
+highly recommended that it be declared <code>static</code>.</li> </ul>
<h4>Setting floating point precision</h4>
@@ -129,13 +227,13 @@
</li>
- <li><code>#pragma rs_fp_relaxed</code> - For apps that don’t require strict IEEE 754-2008
+ <li><code>#pragma rs_fp_relaxed</code>: For apps that don’t require strict IEEE 754-2008
compliance and can tolerate less precision. This mode enables flush-to-zero for denorms and
round-towards-zero.
</li>
- <li><code>#pragma rs_fp_imprecise</code> - For apps that don’t have stringent precision
+ <li><code>#pragma rs_fp_imprecise</code>: For apps that don’t have stringent precision
requirements. This mode enables everything in <code>rs_fp_relaxed</code> along with the
following:
@@ -152,9 +250,9 @@
precision (such as SIMD CPU instructions).</p>
-<h2 id="access-rs-apis">Accessing RenderScript APIs</h2>
+<h2 id="access-rs-apis">Accessing RenderScript APIs from Java</h2>
-<p>When developing an Android application that uses RenderScript, you can access its API in
+<p>When developing an Android application that uses RenderScript, you can access its API from Java in
one of two ways:</p>
<ul>
@@ -162,14 +260,21 @@
available on devices running Android 3.0 (API level 11) and higher. </li>
<li><strong>{@link android.support.v8.renderscript}</strong> - The APIs in this package are
available through a <a href="{@docRoot}tools/support-library/features.html#v8">Support
- Library</a>, which allows you to use them on devices running Android 2.2 (API level 8) and
+ Library</a>, which allows you to use them on devices running Android 2.3 (API level 9) and
higher.</li>
</ul>
-<p>We strongly recommend using the Support Library APIs for accessing RenderScript because they
- provide a wider range of device compatibility. Developers targeting specific versions of
- Android can use {@link android.renderscript} if necessary.</p>
+<p>Here are the tradeoffs:</p>
+<ul>
+<li>If you use the Support Library APIs, the RenderScript portion of your application will be
+ compatible with devices running Android 2.3 (API level 9) and higher, regardless of which RenderScript
+ features you use. This allows your application to work on more devices than if you use the
+ native (<strong>{@link android.renderscript}</strong>) APIs.</li>
+<li>Certain RenderScript features are not available through the Support Library APIs.</li>
+<li>If you use the Support Library APIs, you will get (possibly significantly) larger APKs than
+if you use the native (<strong>{@link android.renderscript}</strong>) APIs.</li>
+</ul>
<h3 id="ide-setup">Using the RenderScript Support Library APIs</h3>
@@ -202,7 +307,7 @@
buildToolsVersion "23.0.3"
defaultConfig {
- minSdkVersion 8
+ minSdkVersion 9
targetSdkVersion 19
<strong>
renderscriptTargetApi 18
@@ -250,7 +355,7 @@
<p>Using RenderScript from Java code relies on the API classes located in the
{@link android.renderscript} or the {@link android.support.v8.renderscript} package. Most
-applications follow the same basic usage patterns:</p>
+applications follow the same basic usage pattern:</p>
<ol>
@@ -266,12 +371,12 @@
script.</strong> An {@link android.renderscript.Allocation} is a RenderScript object that provides
storage for a fixed amount of data. Kernels in scripts take {@link android.renderscript.Allocation}
objects as their input and output, and {@link android.renderscript.Allocation} objects can be
-accessed in kernels using <code>rsGetElementAt_<em>type</em>()</code> and
-<code>rsSetElementAt_<em>type</em>()</code> when bound as script globals. {@link
+accessed in kernels using <code>rsGetElementAt_<i>type</i>()</code> and
+<code>rsSetElementAt_<i>type</i>()</code> when bound as script globals. {@link
android.renderscript.Allocation} objects allow arrays to be passed from Java code to RenderScript
code and vice-versa. {@link android.renderscript.Allocation} objects are typically created using
-{@link android.renderscript.Allocation#createTyped} or {@link
-android.renderscript.Allocation#createFromBitmap}.</li>
+{@link android.renderscript.Allocation#createTyped createTyped()} or {@link
+android.renderscript.Allocation#createFromBitmap createFromBitmap()}.</li>
<li><strong>Create whatever scripts are necessary.</strong> There are two types of scripts available
to you when using RenderScript:
@@ -279,11 +384,11 @@
<ul>
<li><strong>ScriptC</strong>: These are the user-defined scripts as described in <a
-href="#writing-an-rs-kernel">Writing a RenderScript Kernel</a> above. Every script has a Java class
+href="#writing-an-rs-kernel"><i>Writing a RenderScript Kernel</i></a> above. Every script has a Java class
reflected by the RenderScript compiler in order to make it easy to access the script from Java code;
-this class will have the name <code>ScriptC_<em>filename</em></code>. For example, if the kernel
-above was located in <code>invert.rs</code> and a RenderScript context was already located in
-<code>mRS</code>, the Java code to instantiate the script would be:
+this class has the name <code>ScriptC_<i>filename</i></code>. For example, if the mapping kernel
+above were located in <code>invert.rs</code> and a RenderScript context were already located in
+<code>mRenderScript</code>, the Java code to instantiate the script would be:
<pre>ScriptC_invert invert = new ScriptC_invert(mRenderScript);</pre></li>
@@ -294,35 +399,1036 @@
</ul></li>
<li><strong>Populate Allocations with data.</strong> Except for Allocations created with {@link
-android.renderscript.Allocation#createFromBitmap}, an Allocation will be populated with empty data when it is
-first created. To populate an Allocation, use one of the <code>copy</code> methods in {@link
-android.renderscript.Allocation}.</li>
+android.renderscript.Allocation#createFromBitmap createFromBitmap()}, an Allocation is populated with empty data when it is
+first created. To populate an Allocation, use one of the "copy" methods in {@link
+android.renderscript.Allocation}. The "copy" methods are <a href="#asynchronous-model">synchronous</a>.</li>
-<li><strong>Set any necessary script globals.</strong> Globals may be set using methods in the same
-<code>ScriptC_<em>filename</em></code> class with methods named
-<code>set_<em>globalname</em></code>. For example, in order to set an <code>int</code> named
-<code>elements</code>, use the Java method <code>set_elements(int)</code>. RenderScript objects can
-also be set in kernels; for example, the <code>rs_allocation</code> variable named
-<code>lookup</code> can be set with the method <code>set_lookup(Allocation)</code>.</li>
+<li><strong>Set any necessary script globals.</strong> You may set globals using methods in the
+ same <code>ScriptC_<i>filename</i></code> class named <code>set_<i>globalname</i></code>. For
+ example, in order to set an <code>int</code> variable named <code>threshold</code>, use the
+ Java method <code>set_threshold(int)</code>; and in order to set
+ an <code>rs_allocation</code> variable named <code>lookup</code>, use the Java
+ method <code>set_lookup(Allocation)</code>. The <code>set</code> methods
+ are <a href="#asynchronous-model">asynchronous</a>.</li>
-<li><strong>Launch the appropriate kernels.</strong> Methods to launch a given kernel will be
-reflected in the same <code>ScriptC_<em>filename</em></code> class with methods named
-<code>forEach_<em>kernelname</em>()</code>. These launches are asynchronous, and launches will be
-serialized in the order in which they are launched. Depending on the arguments to the kernel, the
-method will take either one or two Allocations. By default, a kernel will execute over the entire
-input or output Allocation; to execute over a subset of that Allocation, pass an appropriate {@link
-android.renderscript.Script.LaunchOptions} as the last argument to the <code>forEach</code> method.
+<li><strong>Launch the appropriate kernels and invokable functions.</strong>
+<p>Methods to launch a given kernel are
+reflected in the same <code>ScriptC_<i>filename</i></code> class with methods named
+<code>forEach_<i>mappingKernelName</i>()</code>
+or <code>reduce_<i>reductionKernelName</i>()</code>.
+These launches are <a href="#asynchronous-model">asynchronous</a>.
+Depending on the arguments to the kernel, the
+method takes one or more Allocations, all of which must have the same dimensions. By default, a
+kernel executes over every coordinate in those dimensions; to execute a kernel over a subset of those coordinates,
+pass an appropriate {@link
+android.renderscript.Script.LaunchOptions} as the last argument to the <code>forEach</code> or <code>reduce</code> method.</p>
-<p>Invoked functions can be launched using the <code>invoke_<em>functionname</em></code> methods
-reflected in the same <code>ScriptC_<em>filename</em></code> class.</p></li>
+<p>Launch invokable functions using the <code>invoke_<i>functionName</i></code> methods
+reflected in the same <code>ScriptC_<i>filename</i></code> class.
+These launches are <a href="#asynchronous-model">asynchronous</a>.</p></li>
-<li><strong>Copy data out of {@link android.renderscript.Allocation} objects.</strong> In order to
-access data from an {@link android.renderscript.Allocation} from Java code, that data must be copied
-back to Java buffers using one of the <code>copy</code> methods in {@link
-android.renderscript.Allocation}. These functions will synchronize with asynchronous kernel and
-function launches as necessary.</li>
+<li><strong>Retrieve data from {@link android.renderscript.Allocation} objects
+and <i><a href="#javaFutureType">javaFutureType</a></i> objects.</strong>
+In order to
+access data from an {@link android.renderscript.Allocation} from Java code, you must copy that data
+back to Java using one of the "copy" methods in {@link
+android.renderscript.Allocation}.
+In order to obtain the result of a reduction kernel, you must use the <code><i>javaFutureType</i>.get()</code> method.
+The "copy" and <code>get()</code> methods are <a href="#asynchronous-model">synchronous</a>.</li>
-<li><strong>Tear down the RenderScript context.</strong> The RenderScript context can be destroyed
+<li><strong>Tear down the RenderScript context.</strong> You can destroy the RenderScript context
with {@link android.renderscript.RenderScript#destroy} or by allowing the RenderScript context
-object to be garbage collected. This will cause any further use of any object belonging to that
+object to be garbage collected. This causes any further use of any object belonging to that
context to throw an exception.</li> </ol>
+
+<h3 id="asynchronous-model">Asynchronous execution model</h3>
+
+<p>The reflected <code>forEach</code>, <code>invoke</code>, <code>reduce</code>,
+ and <code>set</code> methods are asynchronous -- each may return to Java before completing the
+ requested action. However, the individual actions are serialized in the order in which they are launched.</p>
+
+<p>The {@link android.renderscript.Allocation} class provides "copy" methods to copy data to
+ and from Allocations. A "copy" method is synchronous, and is serialized with respect to any
+ of the asynchronous actions above that touch the same Allocation.</p>
+
+<p>The reflected <i><a href="#javaFutureType">javaFutureType</a></i> classes provide
+ a <code>get()</code> method to obtain the result of a reduction. <code>get()</code> is
+ synchronous, and is serialized with respect to the reduction (which is asynchronous).</p>
+
+<h2 id="single-source-rs">Single-Source RenderScript</h2>
+
+<p>Android 7.0 (API level 24) introduces a new programming feature called <em>Single-Source
+RenderScript</em>, in which kernels are launched from the script where they are defined, rather than
+from Java. This approach is currently limited to mapping kernels, which are simply referred to as "kernels"
+in this section for conciseness. This new feature also supports creating allocations of type
+<a href={@docRoot}guide/topics/renderscript/reference/rs_object_types.html#android_rs:rs_allocation>
+<code>rs_allocation</code></a> from inside the script. It is now possible to
+implement a whole algorithm solely within a script, even if multiple kernel launches are required.
+The benefit is twofold: more readable code, because it keeps the implementation of an algorithm in
+one language; and potentially faster code, because of fewer transitions between Java and
+RenderScript across multiple kernel launches.</p>
+
+<p>In Single-Source RenderScript, you write kernels as described in <a href="#writing-an-rs-kernel">
+Writing a RenderScript Kernel</a>. You then write an invokable function that calls
+<a href="{@docRoot}guide/topics/renderscript/reference/rs_for_each.html#android_rs:rsForEach">
+<code>rsForEach()</code></a> to launch them. That API takes a kernel function as the first
+parameter, followed by input and output allocations. A similar API
+<a href="{@docRoot}guide/topics/renderscript/reference/rs_for_each.html#android_rs:rsForEachWithOptions">
+<code>rsForEachWithOptions()</code></a> takes an extra argument of type
+<a href="{@docRoot}guide/topics/renderscript/reference/rs_for_each.html#android_rs:rs_script_call_t">
+<code>rs_script_call_t</code></a>, which specifies a subset of the elements from the input and
+output allocations for the kernel function to process.</p>
+
+<p>To start RenderScript computation, you call the invokable function from Java.
+Follow the steps in <a href="#using-rs-from-java">Using RenderScript from Java Code</a>.
+In the step <a href="#launching_kernels">launch the appropriate kernels</a>, call
+the invokable function using <code>invoke_<i>function_name</i>()</code>, which will start the
+whole computation, including launching kernels.</p>
+
+<p>Allocations are often needed to save and pass
+intermediate results from one kernel launch to another. You can create them using
+<a href="{@docRoot}guide/topics/renderscript/reference/rs_allocation_create.html#android_rs:rsCreateAllocation">
+rsCreateAllocation()</a>. One easy-to-use form of that API is <code>
+rsCreateAllocation_<T><W>(…)</code>, where <i>T</i> is the data type for an
+element, and <i>W</i> is the vector width for the element. The API takes the sizes in
+dimensions X, Y, and Z as arguments. For 1D or 2D allocations, the size for dimension Y or Z can
+be omitted. For example, <code>rsCreateAllocation_uchar4(16384)</code> creates a 1D allocation of
+16384 elements, each of which is of type <code>uchar4</code>.</p>
+
+<p>Allocations are managed by the system automatically. You
+do not have to explicitly release or free them. However, you can call
+<a href="{@docRoot}guide/topics/renderscript/reference/rs_object_info.html#android_rs:rsClearObject">
+<code>rsClearObject(rs_allocation* alloc)</code></a> to indicate you no longer need the handle
+<code>alloc</code> to the underlying allocation,
+so that the system can free up resources as early as possible.</p>
+
+<p>The <a href="#writing-an-rs-kernel">Writing a RenderScript Kernel</a> section contains an example
+kernel that inverts an image. The example below expands that to apply more than one effect to an image,
+using Single-Source RenderScript. It includes another kernel, <code>greyscale</code>, which turns a
+color image into black-and-white. An invokable function <code>process()</code> then applies those two kernels
+consecutively to an input image, and produces an output image. Allocations for both the input and
+the output are passed in as arguments of type
+<a href={@docRoot}guide/topics/renderscript/reference/rs_object_types.html#android_rs:rs_allocation>
+<code>rs_allocation</code></a>.</p>
+
+<pre>
+// File: singlesource.rs
+
+#pragma version(1)
+#pragma rs java_package_name(com.android.rssample)
+
+static const float4 weight = {0.299f, 0.587f, 0.114f, 0.0f};
+
+uchar4 RS_KERNEL invert(uchar4 in, uint32_t x, uint32_t y) {
+ uchar4 out = in;
+ out.r = 255 - in.r;
+ out.g = 255 - in.g;
+ out.b = 255 - in.b;
+ return out;
+}
+
+uchar4 RS_KERNEL greyscale(uchar4 in) {
+ const float4 inF = rsUnpackColor8888(in);
+ const float4 outF = (float4){ dot(inF, weight) };
+ return rsPackColorTo8888(outF);
+}
+
+void process(rs_allocation inputImage, rs_allocation outputImage) {
+ const uint32_t imageWidth = rsAllocationGetDimX(inputImage);
+ const uint32_t imageHeight = rsAllocationGetDimY(inputImage);
+ rs_allocation tmp = rsCreateAllocation_uchar4(imageWidth, imageHeight);
+ rsForEach(invert, inputImage, tmp);
+ rsForEach(greyscale, tmp, outputImage);
+}
+</pre>
+
+<p>You can call the <code>process()</code> function from Java as follows:</p>
+
+<pre>
+// File SingleSource.java
+
+RenderScript RS = RenderScript.create(context);
+ScriptC_singlesource script = new ScriptC_singlesource(RS);
+Allocation inputAllocation = Allocation.createFromBitmapResource(
+ RS, getResources(), R.drawable.image);
+Allocation outputAllocation = Allocation.createTyped(
+ RS, inputAllocation.getType(),
+ Allocation.USAGE_SCRIPT | Allocation.USAGE_IO_OUTPUT);
+script.invoke_process(inputAllocation, outputAllocation);
+</pre>
+
+<p>This example shows how an algorithm that involves two kernel launches can be implemented completely
+in the RenderScript language itself. Without Single-Source
+RenderScript, you would have to launch both kernels from the Java code, separating kernel launches
+from kernel definitions and making it harder to understand the whole algorithm. Not only is the
+Single-Source RenderScript code easier to read, it also eliminates the transitioning
+between Java and the script across kernel launches. Some iterative algorithms may launch kernels
+hundreds of times, making the overhead of such transitioning considerable.</p>
+
+<h2 id="reduction-in-depth">Reduction Kernels in Depth</h2>
+
+<p><i>Reduction</i> is the process of combining a collection of data into a single
+value. This is a useful primitive in parallel programming, with applications such as the
+following:</p>
+<ul>
+ <li>computing the sum or product over all the data</li>
+ <li>computing logical operations (<code>and</code>, <code>or</code>, <code>xor</code>)
+ over all the data</li>
+ <li>finding the minimum or maximum value within the data</li>
+ <li>searching for a specific value or for the coordinate of a specific value within the data</li>
+</ul>
+
+<p>In Android 7.0 (API level 24) and later, RenderScript supports <i>reduction kernels</i> to allow
+efficient user-written reduction algorithms. You may launch reduction kernels on inputs with
+1, 2, or 3 dimensions.<p>
+
+<p>An example above shows a simple <a href="#example-addint">addint</a> reduction kernel.
+Here is a more complicated <a id="example-findMinAndMax">findMinAndMax</a> reduction kernel
+that finds the locations of the minimum and maximum <code>long</code> values in a
+1-dimensional {@link android.renderscript.Allocation}:</p>
+
+<pre>
+#define LONG_MAX (long)((1UL << 63) - 1)
+#define LONG_MIN (long)(1UL << 63)
+
+#pragma rs reduce(findMinAndMax) \
+ initializer(fMMInit) accumulator(fMMAccumulator) \
+ combiner(fMMCombiner) outconverter(fMMOutConverter)
+
+// Either a value and the location where it was found, or <a href="#INITVAL">INITVAL</a>.
+typedef struct {
+ long val;
+ int idx; // -1 indicates <a href="#INITVAL">INITVAL</a>
+} IndexedVal;
+
+typedef struct {
+ IndexedVal min, max;
+} MinAndMax;
+
+// In discussion below, this initial value { { LONG_MAX, -1 }, { LONG_MIN, -1 } }
+// is called <a id="INITVAL">INITVAL</a>.
+static void fMMInit(MinAndMax *accum) {
+ accum->min.val = LONG_MAX;
+ accum->min.idx = -1;
+ accum->max.val = LONG_MIN;
+ accum->max.idx = -1;
+}
+
+//----------------------------------------------------------------------
+// In describing the behavior of the accumulator and combiner functions,
+// it is helpful to describe hypothetical functions
+// IndexedVal min(IndexedVal a, IndexedVal b)
+// IndexedVal max(IndexedVal a, IndexedVal b)
+// MinAndMax minmax(MinAndMax a, MinAndMax b)
+// MinAndMax minmax(MinAndMax accum, IndexedVal val)
+//
+// The effect of
+// IndexedVal min(IndexedVal a, IndexedVal b)
+// is to return the IndexedVal from among the two arguments
+// whose val is lesser, except that when an IndexedVal
+// has a negative index, that IndexedVal is never less than
+// any other IndexedVal; therefore, if exactly one of the
+// two arguments has a negative index, the min is the other
+// argument. Like ordinary arithmetic min and max, this function
+// is commutative and associative; that is,
+//
+// min(A, B) == min(B, A) // commutative
+// min(A, min(B, C)) == min((A, B), C) // associative
+//
+// The effect of
+// IndexedVal max(IndexedVal a, IndexedVal b)
+// is analogous (greater . . . never greater than).
+//
+// Then there is
+//
+// MinAndMax minmax(MinAndMax a, MinAndMax b) {
+// return MinAndMax(min(a.min, b.min), max(a.max, b.max));
+// }
+//
+// Like ordinary arithmetic min and max, the above function
+// is commutative and associative; that is:
+//
+// minmax(A, B) == minmax(B, A) // commutative
+// minmax(A, minmax(B, C)) == minmax((A, B), C) // associative
+//
+// Finally define
+//
+// MinAndMax minmax(MinAndMax accum, IndexedVal val) {
+// return minmax(accum, MinAndMax(val, val));
+// }
+//----------------------------------------------------------------------
+
+// This function can be explained as doing:
+// *accum = minmax(*accum, IndexedVal(in, x))
+//
+// This function simply computes minimum and maximum values as if
+// INITVAL.min were greater than any other minimum value and
+// INITVAL.max were less than any other maximum value. Note that if
+// *accum is INITVAL, then this function sets
+// *accum = IndexedVal(in, x)
+//
+// After this function is called, both accum->min.idx and accum->max.idx
+// will have nonnegative values:
+// - x is always nonnegative, so if this function ever sets one of the
+// idx fields, it will set it to a nonnegative value
+// - if one of the idx fields is negative, then the corresponding
+// val field must be LONG_MAX or LONG_MIN, so the function will always
+// set both the val and idx fields
+static void fMMAccumulator(MinAndMax *accum, long in, int x) {
+ IndexedVal me;
+ me.val = in;
+ me.idx = x;
+
+ if (me.val <= accum->min.val)
+ accum->min = me;
+ if (me.val >= accum->max.val)
+ accum->max = me;
+}
+
+// This function can be explained as doing:
+// *accum = minmax(*accum, *val)
+//
+// This function simply computes minimum and maximum values as if
+// INITVAL.min were greater than any other minimum value and
+// INITVAL.max were less than any other maximum value. Note that if
+// one of the two accumulator data items is INITVAL, then this
+// function sets *accum to the other one.
+static void fMMCombiner(MinAndMax *accum,
+ const MinAndMax *val) {
+ if ((accum->min.idx < 0) || (val->min.val < accum->min.val))
+ accum->min = val->min;
+ if ((accum->max.idx < 0) || (val->max.val > accum->max.val))
+ accum->max = val->max;
+}
+
+static void fMMOutConverter(int2 *result,
+ const MinAndMax *val) {
+ result->x = val->min.idx;
+ result->y = val->max.idx;
+}
+</pre>
+
+<p class="note"><strong>NOTE:</strong> There are more example reduction
+ kernels <a href="#more-example">here</a>.</p>
+
+<p>In order to run a reduction kernel, the RenderScript runtime creates <em>one or more</em>
+variables called <a id="accumulator-data-items"><strong><i>accumulator data
+items</i></strong></a> to hold the state of the reduction process. The RenderScript runtime
+picks the number of accumulator data items in such a way as to maximize performance. The type
+of the accumulator data items (<i>accumType</i>) is determined by the kernel's <i>accumulator
+function</i> -- the first argument to that function is a pointer to an accumulator data
+item. By default, every accumulator data item is initialized to zero (as if
+by <code>memset</code>); however, you may write an <i>initializer function</i> to do something
+different.</p>
+
+<p class="note"><strong>Example:</strong> In the <a href="#example-addint">addint</a>
+kernel, the accumulator data items (of type <code>int</code>) are used to add up input
+values. There is no initializer function, so each accumulator data item is initialized to
+zero.</p>
+
+<p class="note"><strong>Example:</strong> In
+the <a href="#example-findMinAndMax">findMinAndMax</a> kernel, the accumulator data items
+(of type <code>MinAndMax</code>) are used to keep track of the minimum and maximum values
+found so far. There is an initializer function to set these to <code>LONG_MAX</code> and
+<code>LONG_MIN</code>, respectively; and to set the locations of these values to -1, indicating that
+the values are not actually present in the (empty) portion of the input that has been
+processed.</p>
+
+<p>RenderScript calls your accumulator function once for every coordinate in the
+input(s). Typically, your function should update the accumulator data item in some way
+according to the input.</p>
+
+<p class="note"><strong>Example:</strong> In the <a href="#example-addint">addint</a>
+kernel, the accumulator function adds the value of an input Element to the accumulator
+data item.</p>
+
+<p class="note"><strong>Example:</strong> In
+the <a href="#example-findMinAndMax">findMinAndMax</a> kernel, the accumulator function
+checks to see whether the value of an input Element is less than or equal to the minimum
+value recorded in the accumulator data item and/or greater than or equal to the maximum
+value recorded in the accumulator data item, and updates the accumulator data item
+accordingly.</p>
+
+<p>After the accumulator function has been called once for every coordinate in the input(s),
+RenderScript must <strong>combine</strong> the <a href="#accumulator-data-items">accumulator
+data items</a> together into a single accumulator data item. You may write a <i>combiner
+function</i> to do this. If the accumulator function has a single input and
+no <a href="#special-arguments">special arguments</a>, then you do not need to write a combiner
+function; RenderScript will use the accumulator function to combine the accumulator data
+items. (You may still write a combiner function if this default behavior is not what you
+want.)</p>
+
+<p class="note"><strong>Example:</strong> In the <a href="#example-addint">addint</a>
+kernel, there is no combiner function, so the accumulator function will be used. This is
+the correct behavior, because if we split a collection of values into two pieces, and we
+add up the values in those two pieces separately, adding up those two sums is the same as
+adding up the entire collection.</p>
+
+<p class="note"><strong>Example:</strong> In
+the <a href="#example-findMinAndMax">findMinAndMax</a> kernel, the combiner function
+checks to see whether the minimum value recorded in the "source" accumulator data
+item <code>*val</code> is less then the minimum value recorded in the "destination"
+accumulator data item <code>*accum</code>, and updates <code>*accum</code>
+accordingly. It does similar work for the maximum value. This updates <code>*accum</code>
+to the state it would have had if all of the input values had been accumulated into
+<code>*accum</code> rather than some into <code>*accum</code> and some into
+<code>*val</code>.</p>
+
+<p>After all of the accumulator data items have been combined, RenderScript determines
+the result of the reduction to return to Java. You may write an <i>outconverter
+function</i> to do this. You do not need to write an outconverter function if you want
+the final value of the combined accumulator data items to be the result of the reduction.</p>
+
+<p class="note"><strong>Example:</strong> In the <a href="#example-addint">addint</a> kernel,
+there is no outconverter function. The final value of the combined data items is the sum of
+all Elements of the input, which is the value we want to return.</p>
+
+<p class="note"><strong>Example:</strong> In
+the <a href="#example-findMinAndMax">findMinAndMax</a> kernel, the outconverter function
+initializes an <code>int2</code> result value to hold the locations of the minimum and
+maximum values resulting from the combination of all of the accumulator data items.</p>
+
+<h3 id="writing-reduction-kernel">Writing a reduction kernel</h3>
+
+<p><code>#pragma rs reduce</code> defines a reduction kernel by
+specifying its name and the names and roles of the functions that make
+up the kernel. All such functions must be
+<code>static</code>. A reduction kernel always requires an <code>accumulator</code>
+function; you can omit some or all of the other functions, depending on what you want the
+kernel to do.</p>
+
+<pre>#pragma rs reduce(<i>kernelName</i>) \
+ initializer(<i>initializerName</i>) \
+ accumulator(<i>accumulatorName</i>) \
+ combiner(<i>combinerName</i>) \
+ outconverter(<i>outconverterName</i>)
+</pre>
+
+<p>The meaning of the items in the <code>#pragma</code> is as follows:</p>
+<ul>
+
+<li><code>reduce(<i>kernelName</i>)</code> (mandatory): Specifies that a reduction kernel is
+being defined. A reflected Java method <code>reduce_<i>kernelName</i></code> will launch the
+kernel.</li>
+
+<li><p><code>initializer(<i>initializerName</i>)</code> (optional): Specifies the name of the
+initializer function for this reduction kernel. When you launch the kernel, RenderScript calls
+this function once for each <a href="#accumulator-data-items">accumulator data item</a>. The
+function must be defined like this:</p>
+
+<pre>static void <i>initializerName</i>(<i>accumType</i> *accum) { … }</pre>
+
+<p><code>accum</code> is a pointer to an accumulator data item for this function to
+initialize.</p>
+
+<p>If you do not provide an initializer function, RenderScript initializes every accumulator
+data item to zero (as if by <code>memset</code>), behaving as if there were an initializer
+function that looks like this:</p>
+<pre>static void <i>initializerName</i>(<i>accumType</i> *accum) {
+ memset(accum, 0, sizeof(*accum));
+}</pre>
+</li>
+
+<li><p><code><a id="accumulator-function">accumulator(<i>accumulatorName</i>)</a></code>
+(mandatory): Specifies the name of the accumulator function for this
+reduction kernel. When you launch the kernel, RenderScript calls
+this function once for every coordinate in the input(s), to update an
+accumulator data item in some way according to the input(s). The function
+must be defined like this:</p>
+
+<pre>
+static void <i>accumulatorName</i>(<i>accumType</i> *accum,
+ <i>in1Type</i> in1, <i>…,</i> <i>inNType</i> in<i>N</i>
+ <i>[, specialArguments]</i>) { … }
+</pre>
+
+<p><code>accum</code> is a pointer to an accumulator data item for this function to
+modify. <code>in1</code> through <code>in<i>N</i></code> are one <em>or more</em> arguments that
+are automatically filled in based on the inputs passed to the kernel launch, one argument
+per input. The accumulator function may optionally take any of the <a
+href="#special-arguments">special arguments</a>.</p>
+
+<p>An example kernel with multiple inputs is <a href="#dot-product"><code>dotProduct</code></a>.</p>
+</li>
+
+<li><code><a id="combiner-function">combiner(<i>combinerName</i>)</a></code>
+(optional): Specifies the name of the combiner function for this
+reduction kernel. After RenderScript calls the accumulator function
+once for every coordinate in the input(s), it calls this function as many
+times as necessary to combine all accumulator data items into a single
+accumulator data item. The function must be defined like this:</p>
+
+<pre>static void <i>combinerName</i>(<i>accumType</i> *accum, const <i>accumType</i> *other) { … }</pre>
+
+<p><code>accum</code> is a pointer to a "destination" accumulator data item for this
+function to modify. <code>other</code> is a pointer to a "source" accumulator data item
+for this function to "combine" into <code>*accum</code>.</p>
+
+<p class="note"><strong>NOTE:</strong> It is possible
+ that <code>*accum</code>, <code>*other</code>, or both have been initialized but have never
+ been passed to the accumulator function; that is, one or both have never been updated
+ according to any input data. For example, in
+ the <a href="#example-findMinAndMax">findMinAndMax</a> kernel, the combiner
+ function <code>fMMCombiner</code> explicitly checks for <code>idx < 0</code> because that
+ indicates such an accumulator data item, whose value is <a href="#INITVAL">INITVAL</a>.</p>
+
+<p>If you do not provide a combiner function, RenderScript uses the accumulator function in its
+place, behaving as if there were a combiner function that looks like this:</p>
+
+<pre>static void <i>combinerName</i>(<i>accumType</i> *accum, const <i>accumType</i> *other) {
+ <i>accumulatorName</i>(accum, *other);
+}</pre>
+
+<p>A combiner function is mandatory if the kernel has more than one input, if the input data
+ type is not the same as the accumulator data type, or if the accumulator function takes one
+ or more <a href="#special-arguments">special arguments</a>.</p>
+</li>
+
+<li><p><code><a id="outconverter-function">outconverter(<i>outconverterName</i>)</a></code>
+(optional): Specifies the name of the outconverter function for this
+reduction kernel. After RenderScript combines all of the accumulator
+data items, it calls this function to determine the result of the
+reduction to return to Java. The function must be defined like
+this:</p>
+
+<pre>static void <i>outconverterName</i>(<i>resultType</i> *result, const <i>accumType</i> *accum) { … }</pre>
+
+<p><code>result</code> is a pointer to a result data item (allocated but not initialized
+by the RenderScript runtime) for this function to initialize with the result of the
+reduction. <i>resultType</i> is the type of that data item, which need not be the same
+as <i>accumType</i>. <code>accum</code> is a pointer to the final accumulator data item
+computed by the <a href="#combiner-function">combiner function</a>.</p>
+
+<p>If you do not provide an outconverter function, RenderScript copies the final accumulator
+data item to the result data item, behaving as if there were an outconverter function that
+looks like this:</p>
+
+<pre>static void <i>outconverterName</i>(<i>accumType</i> *result, const <i>accumType</i> *accum) {
+ *result = *accum;
+}</pre>
+
+<p>If you want a different result type than the accumulator data type, then the outconverter function is mandatory.</p>
+</li>
+
+</ul>
+
+<p>Note that a kernel has input types, an accumulator data item type, and a result type,
+ none of which need to be the same. For example, in
+ the <a href="#example-findMinAndMax">findMinAndMax</a> kernel, the input
+ type <code>long</code>, accumulator data item type <code>MinAndMax</code>, and result
+ type <code>int2</code> are all different.</p>
+
+<h4 id="assume">What can't you assume?</h4>
+
+<p>You must not rely on the number of accumulator data items created by RenderScript for a
+ given kernel launch. There is no guarantee that two launches of the same kernel with the
+ same input(s) will create the same number of accumulator data items.</p>
+
+<p>You must not rely on the order in which RenderScript calls the initializer, accumulator, and
+ combiner functions; it may even call some of them in parallel. There is no guarantee that
+ two launches of the same kernel with the same input will follow the same order. The only
+ guarantee is that only the initializer function will ever see an uninitialized accumulator
+ data item. For example:</p>
+<ul>
+<li>There is no guarantee that all accumulator data items will be initialized before the
+ accumulator function is called, although it will only be called on an initialized accumulator
+ data item.</li>
+<li>There is no guarantee on the order in which input Elements are passed to the accumulator
+ function.</li>
+<li>There is no guarantee that the accumulator function has been called for all input Elements
+ before the combiner function is called.</li>
+</ul>
+
+<p>One consequence of this is that the <a href="#example-findMinAndMax">findMinAndMax</a>
+ kernel is not deterministic: If the input contains more than one occurrence of the same
+ minimum or maximum value, you have no way of knowing which occurrence the kernel will
+ find.</p>
+
+<h4 id="guarantee">What must you guarantee?</h4>
+
+<p>Because the RenderScript system can choose to execute a kernel <a href="#assume">in many
+ different ways</a>, you must follow certain rules to ensure that your kernel behaves the
+ way you want. If you do not follow these rules, you may get incorrect results,
+ nondeterministic behavior, or runtime errors.</p>
+
+<p>The rules below often say that two accumulator data items must have "<a id="the-same">the
+ same value"</a>. What does this mean? That depends on what you want the kernel to do. For
+ a mathematical reduction such as <a href="#example-addint">addint</a>, it usually makes sense
+ for "the same" to mean mathematical equality. For a "pick any" search such
+ as <a href="#example-findMinAndMax">findMinAndMax</a> ("find the location of minimum and
+ maximum input values") where there might be more than one occurrence of identical input
+ values, all locations of a given input value must be considered "the same". You could write
+ a similar kernel to "find the location of <em>leftmost</em> minimum and maximum input values"
+ where (say) a minimum value at location 100 is preferred over an identical minimum value at location
+ 200; for this kernel, "the same" would mean identical <em>location</em>, not merely
+ identical <em>value</em>, and the accumulator and combiner functions would have to be
+ different than those for <a href="#example-findMinAndMax">findMinAndMax</a>.</p>
+
+<strong>The initializer function must create an <i>identity value</i>.</strong> That is,
+ if <code><i>I</i></code> and <code><i>A</i></code> are accumulator data items initialized
+ by the initializer function, and <code><i>I</i></code> has never been passed to the
+ accumulator function (but <code><i>A</i></code> may have been), then
+<ul>
+<li><code><i>combinerName</i>(&<i>A</i>, &<i>I</i>)</code> must
+ leave <code><i>A</i></code> <a href="#the-same">the same</a></li>
+<li><code><i>combinerName</i>(&<i>I</i>, &<i>A</i>)</code> must
+ leave <code><i>I</i></code> <a href="#the-same">the same</a> as <code><i>A</i></code></li>
+</ul>
+<p class="note"><strong>Example:</strong> In the <a href="#example-addint">addint</a>
+ kernel, an accumulator data item is initialized to zero. The combiner function for this
+ kernel performs addition; zero is the identity value for addition.</p>
+<div class="note">
+<p><strong>Example:</strong> In the <a href="#example-findMinAndMax">findMinAndMax</a>
+ kernel, an accumulator data item is initialized
+ to <a href="#INITVAL"><code>INITVAL</code></a>.
+<ul>
+<li><code>fMMCombiner(&<i>A</i>, &<i>I</i>)</code> leaves <code><i>A</i></code> the same,
+ because <code><i>I</i></code> is <code>INITVAL</code>.</li>
+<li><code>fMMCombiner(&<i>I</i>, &<i>A</i>)</code> sets <code><i>I</i></code>
+ to <code><i>A</i></code>, because <code><i>I</i></code> is <code>INITVAL</code>.</li>
+</ul>
+Therefore, <code>INITVAL</code> is indeed an identity value.
+</p></div>
+
+<p><strong>The combiner function must be <i>commutative</i>.</strong> That is,
+ if <code><i>A</i></code> and <code><i>B</i></code> are accumulator data items initialized
+ by the initializer function, and that may have been passed to the accumulator function zero
+ or more times, then <code><i>combinerName</i>(&<i>A</i>, &<i>B</i>)</code> must
+ set <code><i>A</i></code> to <a href="#the-same">the same value</a>
+ that <code><i>combinerName</i>(&<i>B</i>, &<i>A</i>)</code>
+ sets <code><i>B</i></code>.</p>
+<p class="note"><strong>Example:</strong> In the <a href="#example-addint">addint</a>
+ kernel, the combiner function adds the two accumulator data item values; addition is
+ commutative.</p>
+<div class="note">
+<p><strong>Example:</strong> In the <a href="#example-findMinAndMax">findMinAndMax</a> kernel,
+<pre>
+fMMCombiner(&<i>A</i>, &<i>B</i>)
+</pre>
+is the same as
+<pre>
+<i>A</i> = minmax(<i>A</i>, <i>B</i>)
+</pre>
+and <code>minmax</code> is commutative, so <code>fMMCombiner</code> is also.
+</p>
+</div>
+
+<p><strong>The combiner function must be <i>associative</i>.</strong> That is,
+ if <code><i>A</i></code>, <code><i>B</i></code>, and <code><i>C</i></code> are
+ accumulator data items initialized by the initializer function, and that may have been passed
+ to the accumulator function zero or more times, then the following two code sequences must
+ set <code><i>A</i></code> to <a href="#the-same">the same value</a>:</p>
+<ul>
+<li><pre>
+<i>combinerName</i>(&<i>A</i>, &<i>B</i>);
+<i>combinerName</i>(&<i>A</i>, &<i>C</i>);
+</pre></li>
+<li><pre>
+<i>combinerName</i>(&<i>B</i>, &<i>C</i>);
+<i>combinerName</i>(&<i>A</i>, &<i>B</i>);
+</pre></li>
+</ul>
+<div class="note">
+<p><strong>Example:</strong> In the <a href="#example-addint">addint</a> kernel, the
+ combiner function adds the two accumulator data item values:
+<ul>
+<li><pre>
+<i>A</i> = <i>A</i> + <i>B</i>
+<i>A</i> = <i>A</i> + <i>C</i>
+// Same as
+// <i>A</i> = (<i>A</i> + <i>B</i>) + <i>C</i>
+</pre></li>
+<li><pre>
+<i>B</i> = <i>B</i> + <i>C</i>
+<i>A</i> = <i>A</i> + <i>B</i>
+// Same as
+// <i>A</i> = <i>A</i> + (<i>B</i> + <i>C</i>)
+// <i>B</i> = <i>B</i> + <i>C</i>
+</li>
+</ul>
+Addition is associative, and so the combiner function is also.
+</p>
+</div>
+<div class="note">
+<p><strong>Example:</strong> In the <a href="#example-findMinAndMax">findMinAndMax</a> kernel,
+<pre>
+fMMCombiner(&<i>A</i>, &<i>B</i>)
+</pre>
+is the same as
+<pre>
+<i>A</i> = minmax(<i>A</i>, <i>B</i>)
+</pre>
+So the two sequences are
+<ul>
+<li><pre>
+<i>A</i> = minmax(<i>A</i>, <i>B</i>)
+<i>A</i> = minmax(<i>A</i>, <i>C</i>)
+// Same as
+// <i>A</i> = minmax(minmax(<i>A</i>, <i>B</i>), <i>C</i>)
+</pre></li>
+<li><pre>
+<i>B</i> = minmax(<i>B</i>, <i>C</i>)
+<i>A</i> = minmax(<i>A</i>, <i>B</i>)
+// Same as
+// <i>A</i> = minmax(<i>A</i>, minmax(<i>B</i>, <i>C</i>))
+// <i>B</i> = minmax(<i>B</i>, <i>C</i>)
+</pre></li>
+<code>minmax</code> is associative, and so <code>fMMCombiner</code> is also.
+</p>
+</div>
+
+<p><strong>The accumulator function and combiner function together must obey the <i>basic
+ folding rule</i>.</strong> That is, if <code><i>A</i></code>
+ and <code><i>B</i></code> are accumulator data items, <code><i>A</i></code> has been
+ initialized by the initializer function and may have been passed to the accumulator function
+ zero or more times, <code><i>B</i></code> has not been initialized, and <i>args</i> is
+ the list of input arguments and special arguments for a particular call to the accumulator
+ function, then the following two code sequences must set <code><i>A</i></code>
+ to <a href="#the-same">the same value</a>:</p>
+<ul>
+<li><pre>
+<i>accumulatorName</i>(&<i>A</i>, <i>args</i>); // statement 1
+</pre></li>
+<li><pre>
+<i>initializerName</i>(&<i>B</i>); // statement 2
+<i>accumulatorName</i>(&<i>B</i>, <i>args</i>); // statement 3
+<i>combinerName</i>(&<i>A</i>, &<i>B</i>); // statement 4
+</pre></li>
+</ul>
+<div class="note">
+<p><strong>Example:</strong> In the <a href="#example-addint">addint</a> kernel, for an input value <i>V</i>:
+<ul>
+<li>Statement 1 is the same as <code>A += <i>V</i></code></li>
+<li>Statement 2 is the same as <code>B = 0</code></li>
+<li>Statement 3 is the same as <code>B += <i>V</i></code>, which is the same as <code>B = <i>V</i></code></li>
+<li>Statement 4 is the same as <code>A += B</code>, which is the same as <code>A += <i>V</i></code></li>
+</ul>
+Statements 1 and 4 set <code><i>A</i></code> to the same value, and so this kernel obeys the
+basic folding rule.
+</p>
+</div>
+<div class="note">
+<p><strong>Example:</strong> In the <a href="#example-findMinAndMax">findMinAndMax</a> kernel, for an input
+ value <i>V</i> at coordinate <i>X</i>:
+<ul>
+<li>Statement 1 is the same as <code>A = minmax(A, IndexedVal(<i>V</i>, <i>X</i>))</code></li>
+<li>Statement 2 is the same as <code>B = <a href="#INITVAL">INITVAL</a></code></li>
+<li>Statement 3 is the same as
+<pre>
+B = minmax(B, IndexedVal(<i>V</i>, <i>X</i>))
+</pre>
+which, because <i>B</i> is the initial value, is the same as
+<pre>
+B = IndexedVal(<i>V</i>, <i>X</i>)
+</pre>
+</li>
+<li>Statement 4 is the same as
+<pre>
+A = minmax(A, B)
+</pre>
+which is the same as
+<pre>
+A = minmax(A, IndexedVal(<i>V</i>, <i>X</i>))
+</pre>
+</ul>
+Statements 1 and 4 set <code><i>A</i></code> to the same value, and so this kernel obeys the
+basic folding rule.
+</p>
+</div>
+
+<h3 id="calling-reduction-kernel">Calling a reduction kernel from Java code</h3>
+
+<p>For a reduction kernel named <i>kernelName</i> defined in the
+file <code><i>filename</i>.rs</code>, there are three methods reflected in the
+class <code>ScriptC_<i>filename</i></code>:</p>
+
+<pre>
+// Method 1
+public <i>javaFutureType</i> reduce_<i>kernelName</i>(Allocation ain1, <i>…,</i>
+ Allocation ain<i>N</i>);
+
+// Method 2
+public <i>javaFutureType</i> reduce_<i>kernelName</i>(Allocation ain1, <i>…,</i>
+ Allocation ain<i>N</i>,
+ Script.LaunchOptions sc);
+
+// Method 3
+public <i>javaFutureType</i> reduce_<i>kernelName</i>(<i><a href="#devec">devecSiIn1Type</a></i>[] in1, …,
+ <i><a href="#devec">devecSiInNType</a></i>[] in<i>N</i>);
+</pre>
+
+<p>Here are some examples of calling the <a href="#example-addint">addint</a> kernel:</p>
+<pre>
+ScriptC_example script = new ScriptC_example(mRenderScript);
+
+// 1D array
+// and obtain answer immediately
+int input1[] = <i>…</i>;
+int sum1 = script.reduce_addint(input1).get(); // Method 3
+
+// 2D allocation
+// and do some additional work before obtaining answer
+Type.Builder typeBuilder =
+ new Type.Builder(RS, Element.I32(RS));
+typeBuilder.setX(<i>…</i>);
+typeBuilder.setY(<i>…</i>);
+Allocation input2 = createTyped(RS, typeBuilder.create());
+<i>populateSomehow</i>(input2); // fill in input Allocation with data
+script.result_int result2 = script.reduce_addint(input2); // Method 1
+<i>doSomeAdditionalWork</i>(); // might run at same time as reduction
+int sum2 = result2.get();
+</pre>
+
+<p><strong>Method 1</strong> has one input {@link android.renderscript.Allocation} argument for
+ every input argument in the kernel's <a href="#accumulator-function">accumulator
+ function</a>. The RenderScript runtime checks to ensure that all of the input Allocations
+ have the same dimensions and that the {@link android.renderscript.Element} type of each of
+ the input Allocations matches that of the corresponding input argument of the accumulator
+ function's prototype. If any of these checks fail, RenderScript throws an exception. The
+ kernel executes over every coordinate in those dimensions.</p>
+
+<p><strong>Method 2</strong> is the same as Method 1 except that Method 2 takes an additional
+ argument <code>sc</code> that can be used to limit the kernel execution to a subset of the
+ coordinates.</p>
+
+<p><strong><a id="reduce-method-3">Method 3</a></strong> is the same as Method 1 except that
+ instead of taking Allocation inputs it takes Java array inputs. This is a convenience that
+ saves you from having to write code to explicitly create an Allocation and copy data to it
+ from a Java array. <em>However, using Method 3 instead of Method 1 does not increase the
+ performance of the code</em>. For each input array, Method 3 creates a temporary
+ 1-dimensional Allocation with the appropriate {@link android.renderscript.Element} type and
+ {@link android.renderscript.Allocation#setAutoPadding} enabled, and copies the array to the
+ Allocation as if by the appropriate <code>copyFrom()</code> method of {@link
+ android.renderscript.Allocation}. It then calls Method 1, passing those temporary
+ Allocations.</p>
+<p class="note"><strong>NOTE:</strong> If your application will make multiple kernel calls with
+ the same array, or with different arrays of the same dimensions and Element type, you may improve
+ performance by explicitly creating, populating, and reusing Allocations yourself, instead of
+ by using Method 3.</p>
+<p><strong><i><a id="javaFutureType">javaFutureType</a></i></strong>,
+ the return type of the reflected reduction methods, is a reflected
+ static nested class within the <code>ScriptC_<i>filename</i></code>
+ class. It represents the future result of a reduction
+ kernel run. To obtain the actual result of the run, call
+ the <code>get()</code> method of that class, which returns a value
+ of type <i>javaResultType</i>. <code>get()</code> is <a href="#asynchronous-model">synchronous</a>.</p>
+
+<pre>
+public class ScriptC_<i>filename</i> extends ScriptC {
+ public static class <i>javaFutureType</i> {
+ public <i>javaResultType</i> get() { … }
+ }
+}
+</pre>
+
+<p><strong><i>javaResultType</i></strong> is determined from the <i>resultType</i> of the
+ <a href="#outconverter-function">outconverter function</a>. Unless <i>resultType</i> is an
+ unsigned type (scalar, vector, or array), <i>javaResultType</i> is the directly corresponding
+ Java type. If <i>resultType</i> is an unsigned type and there is a larger Java signed type,
+ then <i>javaResultType</i> is that larger Java signed type; otherwise, it is the directly
+ corresponding Java type. For example:</p>
+<ul>
+<li>If <i>resultType</i> is <code>int</code>, <code>int2</code>, or <code>int[15]</code>,
+ then <i>javaResultType</i> is <code>int</code>, <code>Int2</code>,
+ or <code>int[]</code>. All values of <i>resultType</i> can be represented
+ by <i>javaResultType</i>.</li>
+<li>If <i>resultType</i> is <code>uint</code>, <code>uint2</code>, or <code>uint[15]</code>,
+ then <i>javaResultType</i> is <code>long</code>, <code>Long2</code>,
+ or <code>long[]</code>. All values of <i>resultType</i> can be represented
+ by <i>javaResultType</i>.</li>
+<li>If <i>resultType</i> is <code>ulong</code>, <code>ulong2</code>,
+ or <code>ulong[15]</code>, then <i>javaResultType</i>
+ is <code>long</code>, <code>Long2</code>, or <code>long[]</code>. There are certain values
+ of <i>resultType</i> that cannot be represented by <i>javaResultType</i>.</li>
+</ul>
+
+<p><strong><i>javaFutureType</i></strong> is the future result type corresponding
+ to the <i>resultType</i> of the <a href="#outconverter-function">outconverter
+ function</a>.</p>
+<ul>
+<li>If <i>resultType</i> is not an array type, then <i>javaFutureType</i>
+ is <code>result_<i>resultType</i></code>.</li>
+<li>If <i>resultType</i> is an array of length <i>Count</i> with members of type <i>memberType</i>,
+ then <i>javaFutureType</i> is <code>resultArray<i>Count</i>_<i>memberType</i></code>.</li>
+</ul>
+
+<p>For example:</p>
+
+<pre>
+public class ScriptC_<i>filename</i> extends ScriptC {
+ // for kernels with int result
+ public static class result_int {
+ public int get() { … }
+ }
+
+ // for kernels with int[10] result
+ public static class resultArray10_int {
+ public int[] get() { … }
+ }
+
+ // for kernels with int2 result
+ // note that the Java type name "Int2" is not the same as the script type name "int2"
+ public static class result_int2 {
+ public Int2 get() { … }
+ }
+
+ // for kernels with int2[10] result
+ // note that the Java type name "Int2" is not the same as the script type name "int2"
+ public static class resultArray10_int2 {
+ public Int2[] get() { … }
+ }
+
+ // for kernels with uint result
+ // note that the Java type "long" is a wider signed type than the unsigned script type "uint"
+ public static class result_uint {
+ public long get() { … }
+ }
+
+ // for kernels with uint[10] result
+ // note that the Java type "long" is a wider signed type than the unsigned script type "uint"
+ public static class resultArray10_uint {
+ public long[] get() { … }
+ }
+
+ // for kernels with uint2 result
+ // note that the Java type "Long2" is a wider signed type than the unsigned script type "uint2"
+ public static class result_uint2 {
+ public Long2 get() { … }
+ }
+
+ // for kernels with uint2[10] result
+ // note that the Java type "Long2" is a wider signed type than the unsigned script type "uint2"
+ public static class resultArray10_uint2 {
+ public Long2[] get() { … }
+ }
+}
+</pre>
+
+<p>If <i>javaResultType</i> is an object type (including an array type), each call
+ to <code><i>javaFutureType</i>.get()</code> on the same instance will return the same
+ object.</p>
+
+<p>If <i>javaResultType</i> cannot represent all values of type <i>resultType</i>, and a
+ reduction kernel produces an unrepresentible value,
+ then <code><i>javaFutureType</i>.get()</code> throws an exception.</p>
+
+<h4 id="devec">Method 3 and <i>devecSiInXType</i></h4>
+
+<p><strong><i>devecSiInXType</i></strong> is the Java type corresponding to
+ the <i>inXType</i> of the corresponding argument of
+ the <a href="#accumulator-function">accumulator function</a>. Unless <i>inXType</i> is an
+ unsigned type or a vector type, <i>devecSiInXType</i> is the directly corresponding Java
+ type. If <i>inXType</i> is an unsigned scalar type, then <i>devecSiInXType</i> is the
+ Java type directly corresponding to the signed scalar type of the same
+ size. If <i>inXType</i> is a signed vector type, then <i>devecSiInXType</i> is the Java
+ type directly corresponding to the vector component type. If <i>inXType</i> is an unsigned
+ vector type, then <i>devecSiInXType</i> is the Java type directly corresponding to the
+ signed scalar type of the same size as the vector component type. For example:</p>
+<ul>
+<li>If <i>inXType</i> is <code>int</code>, then <i>devecSiInXType</i>
+ is <code>int</code>.</li>
+<li>If <i>inXType</i> is <code>int2</code>, then <i>devecSiInXType</i>
+ is <code>int</code>. The array is a <em>flattened</em> representation: It has twice as
+ many <em>scalar</em> Elements as the Allocation has 2-component <em>vector</em>
+ Elements. This is the same way that the <code>copyFrom()</code> methods of {@link
+ android.renderscript.Allocation} work.</li>
+<li>If <i>inXType</i> is <code>uint</code>, then <i>deviceSiInXType</i>
+ is <code>int</code>. A signed value in the Java array is interpreted as an unsigned value of
+ the same bitpattern in the Allocation. This is the same way that the <code>copyFrom()</code>
+ methods of {@link android.renderscript.Allocation} work.</li>
+<li>If <i>inXType</i> is <code>uint2</code>, then <i>deviceSiInXType</i>
+ is <code>int</code>. This is a combination of the way <code>int2</code> and <code>uint</code>
+ are handled: The array is a flattened representation, and Java array signed values are
+ interpreted as RenderScript unsigned Element values.</li>
+</ul>
+
+<p>Note that for <a href="#reduce-method-3">Method 3</a>, input types are handled differently
+than result types:</p>
+
+<ul>
+<li>A script's vector input is flattened on the Java side, whereas a script's vector result is not.</li>
+<li>A script's unsigned input is represented as a signed input of the same size on the Java
+ side, whereas a script's unsigned result is represented as a widened signed type on the Java
+ side (except in the case of <code>ulong</code>).</li>
+</ul>
+
+<h3 id="more-example">More example reduction kernels</h3>
+
+<pre id="dot-product">
+#pragma rs reduce(dotProduct) \
+ accumulator(dotProductAccum) combiner(dotProductSum)
+
+// Note: No initializer function -- therefore,
+// each accumulator data item is implicitly initialized to 0.0f.
+
+static void dotProductAccum(float *accum, float in1, float in2) {
+ *accum += in1*in2;
+}
+
+// combiner function
+static void dotProductSum(float *accum, const float *val) {
+ *accum += *val;
+}
+</pre>
+
+<pre>
+// Find a zero Element in a 2D allocation; return (-1, -1) if none
+#pragma rs reduce(fz2) \
+ initializer(fz2Init) \
+ accumulator(fz2Accum) combiner(fz2Combine)
+
+static void fz2Init(int2 *accum) { accum->x = accum->y = -1; }
+
+static void fz2Accum(int2 *accum,
+ int inVal,
+ int x /* special arg */,
+ int y /* special arg */) {
+ if (inVal==0) {
+ accum->x = x;
+ accum->y = y;
+ }
+}
+
+static void fz2Combine(int2 *accum, const int2 *accum2) {
+ if (accum2->x >= 0) *accum = *accum2;
+}
+</pre>
+
+<pre>
+// Note that this kernel returns an array to Java
+#pragma rs reduce(histogram) \
+ accumulator(hsgAccum) combiner(hsgCombine)
+
+#define BUCKETS 256
+typedef uint32_t Histogram[BUCKETS];
+
+// Note: No initializer function --
+// therefore, each bucket is implicitly initialized to 0.
+
+static void hsgAccum(Histogram *h, uchar in) { ++(*h)[in]; }
+
+static void hsgCombine(Histogram *accum,
+ const Histogram *addend) {
+ for (int i = 0; i < BUCKETS; ++i)
+ (*accum)[i] += (*addend)[i];
+}
+
+// Determines the mode (most frequently occurring value), and returns
+// the value and the frequency.
+//
+// If multiple values have the same highest frequency, returns the lowest
+// of those values.
+//
+// Shares functions with the histogram reduction kernel.
+#pragma rs reduce(mode) \
+ accumulator(hsgAccum) combiner(hsgCombine) \
+ outconverter(modeOutConvert)
+
+static void modeOutConvert(int2 *result, const Histogram *h) {
+ uint32_t mode = 0;
+ for (int i = 1; i < BUCKETS; ++i)
+ if ((*h)[i] > (*h)[mode]) mode = i;
+ result->x = mode;
+ result->y = (*h)[mode];
+}
+</pre>
diff --git a/docs/html/guide/topics/ui/multi-window.jd b/docs/html/guide/topics/ui/multi-window.jd
index 704391f..dede557 100644
--- a/docs/html/guide/topics/ui/multi-window.jd
+++ b/docs/html/guide/topics/ui/multi-window.jd
@@ -169,7 +169,7 @@
A root activity's attribute settings apply to all activities
within its task stack. For example, if the root activity has
<code>android:resizeableActivity</code> set to true, then all activities
- in the task stack are resizeable.
+ in the task stack are resizable.
</p>
<p class="note">
@@ -599,7 +599,7 @@
<p>
If you disabled multi-window support by setting
- <code>android:resizableActivity="false"</code>, you should launch your app on
+ <code>android:resizeableActivity="false"</code>, you should launch your app on
a device running Android 7.0 or higher and attempt to put the app in
freeform and split-screen modes. Verify that when you do so, the app remains
in full-screen mode.
diff --git a/docs/html/guide/topics/ui/notifiers/notifications.jd b/docs/html/guide/topics/ui/notifiers/notifications.jd
index 09dd5f4..373d0a1 100644
--- a/docs/html/guide/topics/ui/notifiers/notifications.jd
+++ b/docs/html/guide/topics/ui/notifiers/notifications.jd
@@ -1,4 +1,6 @@
page.title=Notifications
+page.image=images/android-7.0/notifications-card.png
+page.tags="notifications", "alerts"
@jd:body
<div id="qv-wrapper">
diff --git a/docs/html/images/home/nougat_bg.jpg b/docs/html/images/home/nougat_bg.jpg
new file mode 100644
index 0000000..f2a239d
--- /dev/null
+++ b/docs/html/images/home/nougat_bg.jpg
Binary files differ
diff --git a/docs/html/images/home/nougat_bg_2x.jpg b/docs/html/images/home/nougat_bg_2x.jpg
new file mode 100644
index 0000000..5c7295e
--- /dev/null
+++ b/docs/html/images/home/nougat_bg_2x.jpg
Binary files differ
diff --git a/docs/html/index.jd b/docs/html/index.jd
index b1248af..fe5dada 100644
--- a/docs/html/index.jd
+++ b/docs/html/index.jd
@@ -6,50 +6,36 @@
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
-<section class="dac-expand dac-hero dac-invert" style="background-color:#455A64">
- <div class="wrap" style="max-width:1100px;margin-top:0">
- <div class="col-7of16 col-push-9of16" style="padding-left:2em;">
- <a href="{@docRoot}preview/index.html">
- <h1 class="dac-hero-title">Android N Developer Preview</h1>
- <p class="dac-hero-description">
- <strong>Android N final SDK is now available!</strong>
- Get ready for the next version of Android!
- <strong>Test your apps</strong> on Nexus and other devices. Support new system
- behaviors to <strong>save power and memory</strong>.
+<section class="dac-expand dac-hero" style="background-color:#b2dfdb;">
+ <div class="wrap" style="max-width:1000px;margin-top:0">
+ <div class="col-7of16 col-push-8of16">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <h1 class="dac-hero-title" style="color:#004d40">Android 7.0 Nougat!</h1>
+ <p class="dac-hero-description" style="color:#004d40">
+ <strong>Android 7.0 Nougat is here!</strong>
+ Get your apps ready for the latest version of Android, with new system
+ behaviors to <strong>save battery and memory</strong>.
Extend your apps with <strong>multi-window UI</strong>,
<strong>direct reply notifications</strong> and more.
</p>
- <a class="dac-hero-cta" href="/preview/index.html">
- <span class="dac-sprite dac-auto-chevron"></span>
+ <a class="dac-hero-cta" href="{@docRoot}about/versions/nougat/index.html" style="color:#004d40">
+ <span class="dac-sprite dac-auto-chevron" style="background-color:#b2dfdb"></span>
Learn more
- </a><!--<br>
- <a class="dac-hero-cta" href="/preview/support.html">
- <span class="dac-sprite dac-auto-chevron"></span>
- Update to Developer Preview (final SDK)
- </a><br>-->
+ </a>
+ </a>
</a>
</div>
- <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,
- /images/home/n-preview-hero_2x.png 2x">
+ <div class="col-6of16 col-pull-6of16 dac-hero-figure" style="padding-left:1em;padding-top:1em;">
+ <a href="{@docRoot}about/versions/nougat/index.html">
+ <img class="dac-hero-image" src="{@docRoot}images/home/nougat_bg.jpg"
+ srcset="{@docRoot}images/home/nougat_bg.jpg 1x,
+ {@docRoot}images/home/nougat_bg_2x.jpg 2x">
</a>
</div>
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
<i class="dac-sprite dac-arrow-down-gray"></i>
@@ -77,28 +63,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
- <a class="dac-fab dac-scroll-button" data-scroll-button="" href="#build-apps">
- <i class="dac-sprite dac-arrow-down-gray"></i>
- </a>
- <div class="actions">
- <div><a href="{@docRoot}studio/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Get Android Studio
- </a></div>
- <div><a href="{@docRoot}samples/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Browse Samples
- </a></div>
- <div><a href="{@docRoot}distribute/stories/index.html">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Watch Stories
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light" id="build-apps"><div class="wrap">
<h1 class="dac-section-title">Build Beautiful Apps</h1>
<div class="dac-section-subtitle">
diff --git a/docs/html/jd_collections.js b/docs/html/jd_collections.js
deleted file mode 100644
index 3ceddf2..0000000
--- a/docs/html/jd_collections.js
+++ /dev/null
@@ -1,1935 +0,0 @@
-/*
- * THIS FILE IS DEPRECATED.
- *
- * Please add and edit resource collections in jd_extras_<lang>.js
- * where lang matches the language code appropriate for the resource.
- * Last sync'd with jd_extras_<lang>.js on 29 Apr 2016.
- *
- */
-var RESOURCE_COLLECTIONS = {
- "index/carousel": {
- "title": "",
- "resources": [
- "about/versions/lollipop.html"
- ]
- },
- "index/primary": {
- "title": "",
- "resources": [
- "training/building-wearables.html",
- "training/material/index.html",
- "studio/index.html"
- ]
- },
- "index/secondary/carousel": {
- "title": "",
- "resources": [
- "http://www.youtube.com/watch?v=9m6MoBM-sFI",
- "http://www.youtube.com/watch?v=Pms0pcyPbAM",
- "http://www.youtube.com/watch?v=e7t3svG9PTk",
- "http://www.youtube.com/watch?v=J3IvOfvH1ys"
- ]
- },
- "index/multiscreen": {
- "title": "",
- "resources": [
- "wear/index.html",
- "tv/index.html",
- "auto/index.html"
- ]
- },
- "index/primary/zhcn": {
- "title": "",
- "resources": [
- "intl/zh-cn/resources.html",
- "intl/zh-cn/distribute/tools/launch-checklist.html",
- "intl/zh-cn/distribute/tools/localization-checklist.html"
- ]
- },
- "design/landing/latest": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=p4gmvHyuZzw",
- "https://www.youtube.com/watch?v=YaG_ljfzeUw",
- "https://www.youtube.com/watch?v=XOcCOBe8PTc"
- ]
- },
- "design/landing/materialdesign": {
- "title": "",
- "resources": [
- "https://www.google.com/design/spec/animation/",
- "https://www.google.com/design/spec/style/",
- "https://www.google.com/design/spec/layout/",
- "https://www.google.com/design/spec/components/",
- "https://www.google.com/design/spec/patterns/",
- "https://www.google.com/design/spec/usability/"
- ]
- },
- "design/landing/pureandroid": {
- "title": "",
- "resources": [
- "design/get-started/creative-vision.html",
- "design/material/index.html",
- "training/material/index.html",
- "design/patterns/pure-android.html",
- "design/patterns/new.html",
- "design/devices.html"
- ]
- },
- "design/landing/resources": {
- "title": "",
- "resources": [
- "https://www.google.com/design/spec/resources/color-palettes.html",
- "https://www.google.com/design/spec/resources/layout-templates.html",
- "https://www.google.com/design/spec/resources/sticker-sheets-icons.html",
- "https://www.google.com/design/spec/resources/roboto-noto-fonts.html",
- "https://www.google.com/design/icons/index.html",
- "design/downloads/index.html#Wear"
- ]
- },
- "develop/landing/mainlinks": {
- "title": "",
- "resources": [
- "tools/studio/index.html",
- "samples/new/index.html",
- "tools/projects/templates.html"
- ]
- },
- "develop/landing/latest": {
- "title": "",
- "resources": [
- "https://android-developers.blogspot.com/2015/04/new-android-code-samples.html",
- "https://android-developers.blogspot.com/2015/04/android-support-library-221.html",
- "https://android-developers.blogspot.com/2015/03/a-new-reference-app-for-multi-device.html"
- ]
- },
- "develop/landing/devpatterns": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=kmUGLURRPkI",
- "https://www.youtube.com/watch?v=HGElAW224dE",
- "https://www.youtube.com/watch?v=zQekzaAgIlQ"
- ]
- },
- "develop/landing/performance": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=fEEulSk1kNY",
- "https://www.youtube.com/watch?v=-3ry8PxcJJA",
- "https://www.youtube.com/watch?v=_kKTGK-Cb_4"
- ]
- },
- "develop/landing/buildwithgoogle": {
- "title": "",
- "resources": [
- ]
- },
- "develop/landing/ubicomp": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=AK38PJZmIW8&list=PLWz5rJ2EKKc-kIrPiq098QH9dOle-fLef",
- "https://www.youtube.com/watch?v=6K_jxccHv5M&index=1&list=PLOU2XLYxmsILFBfx66ens76VMLMEPJAB0",
- "https://www.youtube.com/watch?v=ctiaVxgclsg&list=PLWz5rJ2EKKc9BdE_PSLNIGjXXr3h_orXM"
- ]
- },
- "develop/landing/tools": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=K2dodTXARqc&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
- "https://www.youtube.com/watch?v=cD7NPxuuXYY&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
- "https://www.youtube.com/watch?v=JLLnhwtDoHw&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
- "https://www.youtube.com/watch?v=2I6fuD20qlY&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
- "https://www.youtube.com/watch?v=5Be2mJzP-Uw&list=PLWz5rJ2EKKc9e0d55YHgJFHXNZbGHEXJX"
- ]
- },
- "preview/landing/resources": {
- "title": "",
- "resources": [
- "preview/overview.html",
- "preview/api-overview.html",
- "preview/behavior-changes.html",
- "preview/setup-sdk.html",
- "preview/samples.html",
- "preview/support.html"
- ]
- },
- "preview/landing/more": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=CsulIu3UaUM",
- "preview/features/multi-window.html",
- "preview/features/notification-updates.html",
- "preview/features/background-optimization.html",
- "preview/features/data-saver.html",
- "preview/features/direct-boot.html",
- "preview/features/icu4j-framework.html",
- "preview/features/multilingual-support.html",
- "preview/features/scoped-folder-access.html",
- "preview/features/picture-in-picture.html",
- "preview/features/tv-recording-api.html"
- ]
- },
- "wear/preview/landing": {
- "title": "",
- "resources": [
- "wear/preview/api-overview.html",
- "wear/preview/downloads.html",
- "wear/preview/start.html"
- ]
- },
- "wear/preview/landing/resources": {
- "title": "",
- "resources": [
- "wear/preview/features/complications.html",
- "wear/preview/features/notifications.html",
- "wear/preview/features/ui-nav-actions.html"
- ]
- },
- "google/landing/services": {
- "title": "",
- "resources": [
- "https://developers.google.com/analytics/devguides/collection/android/",
- "https://developers.google.com/maps/documentation/android/",
- "https://developers.google.com/identity/sign-in/android/",
- "https://developers.google.com/mobile-ads-sdk/download",
- "https://developers.google.com/cloud-messaging/gcm",
- "https://developers.google.com/app-indexing/"
- ]
- },
- "google/landing/videos": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=M3Udfu6qidk&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf",
- "https://www.youtube.com/watch?v=FOn64iqlphk&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf",
- "https://www.youtube.com/watch?v=F0Kh_RnSM0w&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf",
- "https://www.youtube.com/watch?v=fvtMtfCuEpw&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf"
- ]
- },
- "google/landing/googleplay": {
- "title": "",
- "resources": [
- "google/play/billing/index.html",
- "google/play/billing/billing_subscriptions.html",
- "google/play/developer-api.html"
- ]
- },
- "develop/landing/courses": {
- "title": "",
- "resources": [
- "https://www.udacity.com/course/ud849",
- "https://www.udacity.com/course/ud853",
- "https://www.udacity.com/course/ud825",
- "https://www.udacity.com/android",
- "https://www.udacity.com/course/ud855",
- "https://www.udacity.com/course/ud875A",
- "https://www.udacity.com/course/ud875B",
- "https://www.udacity.com/course/ud875C",
- "https://www.udacity.com/course/ud876--1",
- "https://www.udacity.com/course/ud876--2",
- "https://www.udacity.com/course/ud876--3",
- "https://www.udacity.com/course/ud876--4",
- "https://www.udacity.com/course/ud876--5",
- "https://www.udacity.com/course/ud862",
- "https://www.udacity.com/course/ud837",
- "https://www.udacity.com/course/ud867"
- ]
- },
- "distribute/landing/carousel": {
- "title": "",
- "resources": [
- "distribute/googleplay/guide.html",
- "https://www.youtube.com/watch?v=JrR6o5tYMWQ",
- "https://www.youtube.com/watch?v=B6ydLpkhq04&list=PLOU2XLYxmsIKLNUPiFCWVtcO7mZRZ9MmS",
- "https://www.youtube.com/watch?v=yJisuP94lHU",
- ]
- },
- "distribute/landing/googleplay": {
- "title": "",
- "resources": [
- "distribute/googleplay/about.html",
- "distribute/googleplay/developer-console.html",
- "distribute/googleplay/index.html#opportunities"
- ]
- },
- "distribute/landing/more": {
- "title": "",
- "resources": [
- "distribute/users/promote-with-ads.html",
- "distribute/monetize/ads.html",
- "distribute/analyze/index.html",
- "distribute/engage/deep-linking.html",
- "distribute/engage/easy-signin.html",
- "https://cloud.google.com/docs/"
- ]
- },
- "distribute/edu/videos/stories": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=Idu7VcTTXfk",
- "https://www.youtube.com/watch?v=iokH4SAIfRw"
- ]
- },
- "distribute/edu/videos/bestpractices": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=iulXz8QTD1g",
- "https://www.youtube.com/watch?v=IKhU180eJMo",
- "https://www.youtube.com/watch?v=_AZ6UcPz-_g",
- "https://www.youtube.com/watch?v=Eh2adsAyTKc"
- ]
- },
- "distribute/edu/videos/experience": {
- "title": "",
- "resources": [
- "https://youtu.be/vzvpcEffvaE"
- ]
- },
-/* "launch/static": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=1RIz-cmTQB4",
- "https://www.youtube.com/watch?v=MVBMWDzyHAI",
- "https://android-developers.blogspot.com/2013/11/app-translation-service-now-available.html",
- "https://android-developers.blogspot.com/2013/10/more-visibility-for-tablet-apps-in.html",
- "https://android-developers.blogspot.com/2013/11/bring-your-apps-into-classroom-with.html",
- "distribute/essentials/quality/tablets.html",
- "distribute/users/build-buzz.html",
- "distribute/monetize/premium.html",
- "distribute/monetize/freemium.html",
- "distribute/monetize/ads.html",
- "distribute/essentials/best-practices/apps.html",
- "distribute/essentials/best-practices/games.html",
- "distribute/users/know-your-user.html",
- "distribute/googleplay/developer-console.html"
- ]
- }, */
- "launch/static/ja": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=xelYnWcYkuE",
- "https://www.youtube.com/playlist?list=PLCOC_kP3nqGIHEgwm9mybvA04Vn4Cg9nn",
- "https://googledevjp.blogspot.jp/2014/12/android-wear.html",
- "https://googledevjp.blogspot.jp/2014/12/android-studio-10.html",
- "https://googledevjp.blogspot.jp/2014/12/google-play-65.html",
- "intl/ja/distribute/googleplay/developer-console.html#alpha-beta",
- "intl/ja/distribute/googleplay/guide.html",
- "intl/ja/distribute/essentials/quality/core.html",
- "https://support.google.com/googleplay/android-developer/answer/4430948?hl=ja",
- "intl/ja/support.html",
- "intl/ja/distribute/essentials/quality/wear.html",
- "intl/ja/training/tv/start/index.html",
- "https://googleforwork-japan.blogspot.jp/2014/12/gcp-google-cloud-platform-rpg-gcp.html",
- "intl/ja/distribute/monetize/ads.html"
- ]
- },
- "launch/static/ko": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=7X9Ue0Nfdh4&index=2&list=PL_WJkTbDHdBksDBRoqfeyLchEQqBAOlNl",
- "https://www.youtube.com/watch?v=83FpwuschCQ",
- "https://googledevkr.blogspot.com/2014/11/android50guidefordevelopers.html",
- "https://googledevkr.blogspot.com/2014/10/material-design-on-android-checklist.html",
- "https://googledevkr.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html",
- "intl/ko/distribute/googleplay/developer-console.html#alpha-beta",
- "intl/ko/distribute/googleplay/guide.html",
- "intl/ko/distribute/essentials/quality/core.html",
- "https://support.google.com/googleplay/android-developer/answer/4430948?hl=ko",
- "intl/ko/support.html",
- "intl/ko/distribute/essentials/quality/wear.html",
- "intl/ko/tv/index.html",
- "intl/ko/google/play-services/games.html",
- "intl/ko/distribute/monetize/ads.html"
- ]
- },
- "distribute/gp/gplanding": {
- "resources": [
- "distribute/googleplay/about.html",
- "distribute/googleplay/start.html",
- "distribute/googleplay/developer-console.html"
- ]
- },
- "distribute/gp/gpfelanding": {
- "resources": [
- "distribute/googleplay/wear.html",
- "distribute/googleplay/tv.html",
- "distribute/googleplay/auto.html",
- "distribute/googleplay/families/about.html",
- "distribute/googleplay/work/about.html",
- "distribute/googleplay/edu/about.html",
- "distribute/googleplay/cast.html",
- "distribute/googleplay/cardboard.html",
- "distribute/googleplay/guide.html"
- ]
- },
- "distribute/googleplay/gpfw": {
- "resources": [
- "https://www.android.com/work/",
- "https://www.youtube.com/watch?v=jQWB_-o1kz4&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
- "work/index.html"
- ]
- },
- "distribute/essentials": {
- "resources": [
- "distribute/essentials/quality/core.html",
- "distribute/essentials/quality/tablets.html",
- "distribute/essentials/quality/tv.html",
- "distribute/essentials/quality/wear.html",
- "distribute/essentials/quality/auto.html",
- "distribute/essentials/quality/billions.html"
- ]
- },
- "distribute/essentials/zhcn": {
- "resources": [
- "intl/zh-cn/distribute/essentials/quality/core.html",
- "intl/zh-cn/distribute/essentials/quality/tablets.html",
- "distribute/essentials/quality/tv.html",
- "distribute/essentials/quality/wear.html",
- "https://developers.google.com/edu/guidelines",
- "distribute/essentials/optimizing-your-app.html"
- ]
- },
- "distribute/users": {
- "title": "",
- "resources": [
- "distribute/users/your-listing.html",
- "distribute/users/promote-with-ads.html",
- "distribute/googleplay/index.html#opportunities",
- "distribute/analyze/improve-roi.html",
- "distribute/users/expand-to-new-markets.html",
- "distribute/analyze/index.html",
- "distribute/users/app-invites.html",
- "distribute/users/ota-installs.html",
- "distribute/users/youtube.html",
- "distribute/users/house-ads.html",
- "distribute/users/experiments.html",
- "distribute/users/user-acquisition.html",
- "distribute/users/banners.html",
- "distribute/users/beta.html"
- ]
- },
- "distribute/engagelanding": {
- "resources": [
- "distribute/engage/intents.html",
- "distribute/engage/widgets.html",
- "distribute/engage/translate.html",
- "distribute/engage/notifications.html",
- "distribute/engage/deep-linking.html",
- "distribute/engage/ads.html",
- "distribute/engage/game-services.html",
- "distribute/engage/easy-signin.html",
- "distribute/analyze/build-better-apps.html",
- "distribute/engage/gcm.html",
- "distribute/engage/beta.html",
- "distribute/engage/nearby.html"
- ]
- },
- "distribute/monetize": {
- "resources": [
- "distribute/monetize/premium.html",
- "distribute/monetize/freemium.html",
- "distribute/monetize/subscriptions.html",
- "distribute/monetize/ads.html",
- "distribute/monetize/ecommerce.html",
- "distribute/monetize/payments.html",
- "distribute/monetize/conversions.html",
- "distribute/analyze/understand-user-value.html",
- ]
- },
- "distribute/analyzelanding": {
- "resources": [
- "distribute/analyze/start.html",
- "distribute/analyze/measure.html",
- "distribute/analyze/understand-user-value.html",
- "distribute/analyze/improve-roi.html",
- "distribute/analyze/build-better-apps.html",
- "distribute/analyze/google-services.html"
- ]
- },
- "distribute/analyzestart": {
- "resources": [
- "https://analyticsacademy.withgoogle.com/course04",
- "google/play-services/index.html",
- "https://developers.google.com/analytics/solutions/mobile-implementation-guide",
- "https://developers.google.com/analytics/devguides/collection/android/",
- "https://www.google.com/tagmanager/",
- "https://github.com/googleanalytics/google-analytics-plugin-for-unity"
- ]
- },
- "distribute/analyzemeasure": {
- "resources": [
-
- "https://developers.google.com/analytics/solutions/mobile-implementation-guide",
- "https://developers.google.com/analytics/devguides/collection/android/v4/enhanced-ecommerce",
- "https://support.google.com/analytics/answer/1032415",
- "https://developers.google.com/analytics/devguides/collection/android/v4/events",
- "https://developers.google.com/analytics/devguides/collection/android/v4/customdimsmets",
- "https://developers.google.com/analytics/devguides/collection/android/v4/user-id"
- ]
- },
- "distribute/analyzeunderstand": {
- "resources": [
- "https://developers.google.com/analytics/devguides/collection/android/v4/display-features",
- "https://support.google.com/analytics/answer/3123906",
- "https://support.google.com/analytics/answer/2568874?ref_topic=6012392",
- "https://developers.google.com/analytics/devguides/collection/android/v4/enhanced-ecommerce",
- "https://support.google.com/analytics/answer/1032415",
- ]
- },
- "distribute/analyzeimprove": {
- "resources": [
-
- "https://developers.google.com/analytics/devguides/collection/android/v4/campaigns",
- "https://support.google.com/analytics/answer/2956981",
- "https://support.google.com/analytics/answer/1033961",
- "https://developers.google.com/analytics/devguides/collection/android/v4/campaigns#google-play-url-builder",
- "https://developers.google.com/analytics/solutions/mobile-campaign-deep-link"
- ]
- },
- "distribute/analyzebuild": {
- "resources": [
- "https://support.google.com/tagmanager/answer/6003007",
- "https://support.google.com/analytics/answer/2785577",
- "https://support.google.com/analytics/answer/1151300"
- ]
- },
- "distribute/analyzeact": {
- "resources": [
- "https://support.google.com/analytics/answer/2611268",
- "https://support.google.com/analytics/answer/1033961",
- "https://support.google.com/admob/answer/3508177",
- "https://support.google.com/analytics/answer/2956981",
- "https://support.google.com/tagmanager/answer/6003007"
- ]
- },
- "distribute/essentials/guidelines": {
- "title": "",
- "resources": [
- "distribute/essentials/quality/core.html",
- "distribute/essentials/quality/tablets.html",
- "distribute/essentials/quality/wear.html",
- "distribute/essentials/quality/tv.html",
- "distribute/essentials/quality/auto.html",
- "distribute/essentials/quality/billions.html"
- ]
- },
- "distribute/essentials/tools": {
- "title": "",
- "resources": [
- "distribute/tools/launch-checklist.html",
- "distribute/tools/localization-checklist.html",
- "https://support.google.com/googleplay/android-developer",
- "distribute/tools/promote/brand.html",
- "distribute/tools/promote/device-art.html",
- "https://play.google.com/intl/en_us/badges/",
- "distribute/tools/promote/linking.html",
- "distribute/tools/open-distribution.html",
- "about/dashboards/index.html"
- ]
- },
- "distribute/tools/checklists": {
- "title": "",
- "resources": [
- "distribute/tools/launch-checklist.html",
- "distribute/tools/localization-checklist.html"
- ]
- },
- "distribute/tools/checklists/zhcn": {
- "title": "",
- "resources": [
- "intl/zh-cn/distribute/tools/launch-checklist.html",
- "intl/zh-cn/distribute/tools/localization-checklist.html"
- ]
- },
- "distribute/tools/promote": {
- "resources": [
- "distribute/tools/promote/device-art.html",
- "https://play.google.com/intl/en_us/badges/",
- "distribute/tools/promote/linking.html"
- ]
- },
- "distribute/tools/promote/zhcn": {
- "resources": [
- "intl/zh-cn/distribute/tools/promote/device-art.html",
- "https://play.google.com/intl/en_us/badges/",
- "intl/zh-cn/distribute/tools/promote/linking.html"
- ]
- },
- "distribute/tools/support": {
- "title": "Google Play",
- "resources": [
- "https://support.google.com/googleplay/android-developer",
- "https://support.google.com/googleplay/android-developer/answer/4430948",
- "support.html"
- ]
- },
- "distribute/tools/support/zhcn": {
- "title": "Google Play",
- "resources": [
- "https://support.google.com/googleplay/android-developer?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/answer/4430948?hl=zh-Hans",
- "support.html"
- ]
- },
- "distribute/tools/news": {
- "title": "",
- "resources": [
- "https://android-developers.blogspot.com/",
- "https://plus.google.com/+AndroidDevelopers/"
- ]
- },
- "distribute/tools/more": {
- "title": "Google Play",
- "resources": [
- "distribute/tools/promote/brand.html",
- "distribute/tools/open-distribution.html",
- "about/dashboards/index.html"
- ]
- },
- "distribute/tools/more/zhcn": {
- "title": "Google Play",
- "resources": [
- "intl/zh-cn/distribute/tools/promote/brand.html",
- "distribute/tools/open-distribution.html",
- "about/dashboards/index.html"
- ]
- },
- "distribute/googleplay": {
- "title": "Google Play",
- "resources": [
- "distribute/googleplay/developer-console.html",
- "distribute/essentials/best-practices/apps.html",
- "distribute/tools/launch-checklist.html",
- "distribute/essentials/best-practices/games.html",
- ]
- },
- "distribute/googleplay/gettingstarted": {
- "title": "Get Started",
- "resources": [
- "distribute/googleplay/developer-console.html",
- "https://support.google.com/googleplay/android-developer/answer/113468",
- "https://support.google.com/googleplay/android-developer/answer/138294",
- "https://support.google.com/googleplay/android-developer"
- ]
- },
- "distribute/googleplay/developerconsole/related": {
- "title": "Developer Console",
- "resources": [
- "google/play/billing/index.html",
- "https://support.google.com/googleplay/android-developer/answer/138294"
- ]
- },
- "distribute/googleplay/beta": {
- "title": "Alpha and Beta Testing",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/3131213",
- "https://support.google.com/googleplay/android-developer/answer/3131213#games",
- "distribute/googleplay/experiments.html"
- ]
- },
- "distribute/googleplay/experiments/successes": {
- "title": "Store Listing Experiment successes",
- "resources": [
- ]
- },
- "distribute/googleplay/experiments/related": {
- "title": "Store Listing Experiments",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/6227309",
- "https://www.youtube.com/watch?v=B6ydLpkhq04",
- "https://support.google.com/tagmanager/answer/6003007"
- ]
- },
- "distribute/googleplay/banners/related": {
- "title": "App Install Banners",
- "resources": [
- "https://developers.google.com/web/updates/2015/03/increasing-engagement-with-app-install-banners-in-chrome-for-android#native"
- ]
- },
- "distribute/googleplay/useracquisition/related": {
- "title": "User Acquisition",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/6263332"
- ]
- },
- "distribute/googleplay/cast": {
- "title": "Google Cast",
- "resources": [
- "https://developers.google.com/cast/docs/ux_guidelines",
- "https://developers.google.com/cast/docs/android_sender",
- "https://www.github.com/googlecast"
- ]
- },
- "distribute/googleplay/cardboard": {
- "title": "Google Cast",
- "resources": [
- "https://www.google.com/get/cardboard/get-cardboard/",
- "https://developers.google.com/cardboard/android/download",
- "https://www.google.com/design/spec-vr"
- ]
- },
- "distribute/googleplay/gpfe/highlight": {
- "title": "About Google Play for Education",
- "resources": [
- "https://youtu.be/vzvpcEffvaE"
- ]
- },
- "distribute/googleplay/gpfe/dev/about": {
- "title": "About Google Play for Education / Developers",
- "resources": [
- "distribute/googleplay/edu/start.html",
- "https://developers.google.com/edu/guidelines",
- "https://developers.google.com/edu/faq",
- "distribute/essentials/quality/tablets.html",
- "https://developers.google.com/edu/",
- "https://www.google.com/edu/tablets/#tablets-family"
- ]
- },
- "distribute/googleplay/gpfe/dev": {
- "title": "About Google Play for Education / Developers",
- "resources": [
- "distribute/googleplay/edu/about.html",
- "https://developers.google.com/edu/guidelines",
- "distribute/essentials/quality/tablets.html",
- "distribute/googleplay/developer-console.html",
- "https://play.google.com/about/developer-distribution-agreement-addendum.html",
- ]
- },
- "distribute/googleplay/aboutgpfe/educators/about": {
- "title": "About Google Play for Education / Educators",
- "resources": [
- "https://www.google.com/edu/tablets/",
- "https://www.youtube.com/watch?v=haEmsMo0f3w"
- ]
- },
- "distribute/googleplay/aboutgpfe/educators": {
- "title": "About Google Play for Education / Educators",
- "resources": [
- "https://www.google.com/edu/tablets/",
- "https://youtu.be/vzvpcEffvaE"
- ]
- },
- "distribute/googleplay/gettingstartedgpfe/educators": {
- "title": "About Google Play for Education / Educators",
- "resources": [
- "https://www.google.com/edu/tablets/",
- "https://youtu.be/vzvpcEffvaE"
- ]
- },
- "distribute/essentials/eduessentials/developers": {
- "title": "",
- "resources": [
- "distribute/googleplay/developer-console.html",
- "distribute/googleplay/edu/start.html",
- "https://developers.google.com/edu/faq"
- ]
- },
- "distribute/essentials/eduessentials/educators": {
- "title": "",
- "resources": [
- "https://www.google.com/edu/tablets/",
- "distribute/essentials/quality/tablets.html",
- ]
- },
- "distribute/essentials/optimizing": {
- "title": "Optimizing Your App",
- "resources": [
- "design/index.html",
- "training/articles/perf-anr.html",
- "https://android-developers.blogspot.com/2013/10/improved-app-insight-by-linking-google.html"
- ]
- },
- "distribute/users/appinvites": {
- "title": "",
- "resources": [
- "https://developers.google.com/app-invites/",
- "https://developers.google.com/identity/sign-in/android/",
- "https://developers.google.com/app-indexing/"
- ]
- },
- "distribute/users/knowyouruser": {
- "title": "",
- "resources": [
- "distribute/essentials/optimizing-your-app.html",
- "http://www.youtube.com/watch?v=RRelFvc6Czo",
- "distribute/stories/games/rvappstudios-zombie.html"
- ]
- },
- "distribute/users/promotewithads": {
- "title": "",
- "resources": [
- "https://support.google.com/adwords/answer/6032059",
- "https://support.google.com/adwords/answer/6032073",
- "https://support.google.com/adwords/answer/6167164",
- "https://support.google.com/adwords/answer/6167162"
- ]
- },
- "distribute/users/nearby": {
- "title": "",
- "resources": [
- "https://developers.google.com/nearby/",
- "https://www.youtube.com/watch?v=hultDpBS22s",
- "https://developers.google.com/beacons"
- ]
- },
- "distribute/users/buildbuzz": {
- "title": "",
- "resources": [
- "https://play.google.com/intl/en_us/badges/",
- "distribute/tools/promote/linking.html",
- "distribute/tools/promote/device-art.html",
- "https://plus.google.com/+GooglePlay"
- ]
- },
- "distribute/users/createagreatlisting": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/1078870",
- "https://android-developers.blogspot.com/2011/10/android-market-featured-image.html",
- "distribute/tools/launch-checklist.html",
- "https://android-developers.blogspot.com/2013/07/making-beautiful-android-app-icons.html",
- "https://android-developers.blogspot.com/2012/12/localize-your-promotional-graphics-on.html",
- "https://android-developers.blogspot.com/2013/10/making-your-app-content-more-accessible.html"
- ]
- },
- "distribute/users/buildcommunity": {
- "title": "",
- "resources": [
- "distribute/googleplay/developer-console.html",
- "https://support.google.com/groups/answer/46601",
- "https://support.google.com/plus/topic/2888488",
- "https://www.youtube.com/yt/dev/"
- ]
- },
- "distribute/users/appindexing": {
- "title": "",
- "resources": [
- "https://developers.google.com/app-indexing/",
- "https://developers.google.com/app-indexing/webmasters/details",
- "distribute/engage/deep-linking.html",
- "training/app-indexing/index.html"
- ]
- },
- "distribute/users/otas": {
- "title": "",
- "resources": [
- "https://developers.google.com/identity/sign-in/android/",
- "https://developers.google.com/+/features/play-installs",
- "https://developers.google.com/+/features/analytics"
- ]
- },
- "distribute/users/houseads": {
- "title": "",
- "resources": [
- "https://support.google.com/admob/topic/2784623",
- "https://developers.google.com/mobile-ads-sdk/download",
- "https://support.google.com/googleplay/android-developer/topic/2985714",
- "https://analyticsacademy.withgoogle.com/mobile-app",
- "https://support.google.com/analytics/answer/2611404",
- "https://support.google.com/admob/answer/3111064"
- ]
- },
- "distribute/users/youtube": {
- "title": "",
- "resources": [
- "https://support.google.com/youtube/answer/6140493",
- "https://support.google.com/youtube/answer/2797387"
- ]
- },
- "distribute/toolsreference/bestpractices/apps": {
- "title": "",
- "resources": [
- "distribute/googleplay/developer-console.html",
- "https://android-developers.blogspot.com/"
- ]
- },
- "distribute/toolsreference/bestpractices/games": {
- "title": "",
- "resources": [
- "google/play-services/games.html",
- "https://android-developers.blogspot.com/",
- "distribute/googleplay/developer-console.html",
- "https://www.youtube.com/watch?v=1RIz-cmTQB4"
- ]
- },
- "distribute/essentials/corequalityguidelines/visualdesign": {
- "title": "",
- "resources": [
- "design/index.html",
- "design/patterns/navigation.html",
- "design/patterns/actionbar.html",
- "design/style/iconography.html"
- ]
- },
- "distribute/essentials/corequalityguidelines/functionality": {
- "title": "",
- "resources": [
- "https://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html",
- "guide/components/tasks-and-back-stack.html",
- "training/basics/activity-lifecycle/recreating.html"
- ]
- },
- "distribute/essentials/tvqualityguidelines/visualdesign": {
- "title": "",
- "resources": [
- "design/tv/index.html",
- "training/tv/start/index.html"
- ]
- },
- "distribute/essentials/tvqualityguidelines/functionality": {
- "title": "",
- "resources": [
- "training/tv/start/hardware.html",
- "training/tv/games/index.html"
- ]
- },
- "distribute/essentials/wearqualityguidelines/visualdesign": {
- "title": "",
- "resources": [
- "design/wear/index.html",
- "training/building-wearables.html",
- "training/wearables/ui/index.html"
- ]
- },
- "distribute/essentials/wearqualityguidelines/functionality": {
- "title": "",
- "resources": [
- "training/wearables/notifications/index.html",
- "training/wearables/apps/index.html",
- "training/wearables/notifications/voice-input.html"
- ]
- },
- "distribute/essentials/autoqualityguidelines/visualdesign": {
- "title": "",
- "resources": [
- "training/auto/messaging/index.html",
- "training/auto/start/index.html"
- ]
- },
- "distribute/essentials/core/performance": {
- "title": "",
- "resources": [
- "https://android-developers.blogspot.com/2010/12/new-gingerbread-api-strictmode.html",
- "training/articles/perf-anr.html",
- "https://android-developers.blogspot.com/2010/07/multithreading-for-performance.html"
- ]
- },
- "distribute/essentials/core/play": {
- "title": "",
- "resources": [
- "distribute/tools/launch-checklist.html",
- "https://play.google.com/about/developer-content-policy.html?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/answer/188189?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/answer/1078870?hl=zh-Hans",
- "https://android-developers.blogspot.com/2011/10/android-market-featured-image.html",
- "https://support.google.com/googleplay/android-developer/answer/113477?hl=zh-Hans"
- ]
- },
- "distribute/essentials/core/play/zhcn": {
- "title": "",
- "resources": [
- "intl/zh-cn/distribute/tools/launch-checklist.html",
- "https://play.google.com/about/developer-content-policy.html",
- "https://support.google.com/googleplay/android-developer/answer/188189?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/answer/1078870?hl=zh-Hans",
- "https://android-developers.blogspot.com/2011/10/android-market-featured-image.html",
- "https://support.google.com/googleplay/android-developer/answer/113477?hl=zh-Hans"
- ]
- },
- "distribute/essentials/tabletguidelines/optimize": {
- "title": "",
- "resources": [
- "design/style/metrics-grids.html",
- "design/style/devices-displays.html",
- "guide/practices/screens_support.html",
- //"guide/practices/screens_support.html#ConfigurationExamples",
- ]
- },
- "distribute/essentials/tabletguidelines/extrascreen": {
- "title": "",
- "resources": [
- "design/patterns/multi-pane-layouts.html",
- "training/design-navigation/multiple-sizes.html",
- "training/multiscreen/index.html",
- ]
- },
- "distribute/essentials/tabletguidelines/assets": {
- "title": "",
- "resources": [
- "design/style/iconography.html",
- "guide/topics/resources/providing-resources.html",
- "guide/practices/screens_support.html",
- "training/basics/supporting-devices/screens.html"
- ]
- },
- "distribute/essentials/tabletguidelines/fonts": {
- "title": "",
- "resources": [
- "design/style/metrics-grids.html",
- "design/style/typography.html",
- "guide/practices/screens_support.html",
- "training/multiscreen/screendensities.html"
- ]
- },
- "distribute/essentials/tabletguidelines/widgets": {
- "title": "",
- "resources": [
- "guide/topics/appwidgets/index.html#MetaData",
- "guide/topics/appwidgets/index.html",
- "design/patterns/widgets.html"
- ]
- },
- "distribute/essentials/tabletguidelines/versions": {
- "title": "",
- "resources": [
- "guide/topics/manifest/uses-sdk-element.html#ApiLevels",
- "guide/topics/manifest/uses-sdk-element.html",
- "training/basics/supporting-devices/platforms.html"
- ]
- },
- "distribute/essentials/tabletguidelines/hardware": {
- "title": "",
- "resources": [
- "guide/topics/manifest/uses-feature-element.html",
- "guide/topics/manifest/uses-feature-element.html#testing"
- ]
- },
- "distribute/essentials/tabletguidelines/tabletscreens": {
- "title": "",
- "resources": [
- "guide/practices/screens_support.html#DeclaringScreenSizeSupport",
- "guide/practices/screens_support.html"
- ]
- },
- "distribute/essentials/tabletguidelines/showcase": {
- "title": "",
- "resources": [
- "distribute/tools/launch-checklist.html",
- "https://play.google.com/apps/publish/",
- "https://play.google.com/intl/en_us/badges/",
- "distribute/tools/promote/device-art.html"
- ]
- },
- "distribute/essentials/tabletguidelines/showcase/zhcn": {
- "title": "",
- "resources": [
- "intl/zh-cn/distribute/tools/launch-checklist.html",
- "https://play.google.com/apps/publish/?hl=zh-Hans",
- "https://play.google.com/intl/en_us/badges/",
- "intl/zh-cn/distribute/tools/promote/device-art.html"
- ]
- },
- "distribute/essentials/tabletguidelines/googleplay": {
- "title": "",
- "resources": [
- "https://android-developers.blogspot.com/2013/10/more-visibility-for-tablet-apps-in.html",
- "google/play/filters.html"
- ]
- },
- "distribute/essentials/billionsquality/connectivity": {
- "title": "",
- "resources": [
- "training/basics/network-ops/managing.html",
- "training/monitoring-device-state/connectivity-monitoring.html",
- "guide/topics/providers/content-providers.html"
- ]
- },
- "distribute/essentials/billionsquality/capability": {
- "title": "",
- "resources": [
- "guide/practices/screens_support.html",
- "training/multiscreen/screendensities.html",
- "training/articles/memory.html"
- ]
- },
- "distribute/essentials/billionsquality/cost": {
- "title": "",
- "resources": [
- "https://medium.com/@wkalicinski/smallerapk-part-6-image-optimization-zopfli-webp-4c462955647d#.23hlddo3x",
- "training/basics/network-ops/managing.html"
- ]
- },
- "distribute/essentials/billionsquality/consumption": {
- "title": "",
- "resources": [
- "training/efficient-downloads/efficient-network-access.html",
- "training/monitoring-device-state/index.html"
- ]
- },
- "distribute/essentials/billionsquality/content": {
- "title": "",
- "resources": [
- "training/material/animations.html#Touch",
- "training/articles/perf-anr.html",
- "training/improving-layouts/index.html"
- ]
- },
- "distribute/essentials/tabletguidelines": {
- "title": "",
- "resources": [
- "distribute/essentials/quality/core.html",
- "https://android-developers.blogspot.com/2013/10/more-visibility-for-tablet-apps-in.html",
- "distribute/tools/launch-checklist.html",
- "distribute/tools/promote/device-art.html"
- ]
- },
- "distribute/getusers/notifications": {
- "title": "",
- "resources": [
- "distribute/engage/gcm.html",
- "https://play.google.com/about/developer-content-policy.html"
- ]
- },
- "distribute/engage/analytics": {
- "title": "",
- "resources": [
- "https://www.google.com/analytics/mobile/",
- "https://android-developers.blogspot.com/2013/10/improved-app-insight-by-linking-google.html",
- "https://developers.google.com/analytics/devguides/collection/android/"
- ]
- },
- "distribute/engage/widgets": {
- "title": "",
- "resources": [
- "design/patterns/widgets.html",
- "guide/topics/appwidgets/index.html"
- ]
- },
- "distribute/engage/translate": {
- "title": "",
- "resources": [
- "https://support.google.com/l10n/answer/6359997"
- ]
- },
- "distribute/engage/reengage": {
- "title": "",
- "resources": [
- "https://support.google.com/adwords/answer/6032073",
- "distribute/engage/deep-linking.html",
- "https://support.google.com/adwords/answer/6167162",
- "distribute/users/promote-with-ads.html"
- ]
- },
- "distribute/engage/appindexing": {
- "title": "",
- "resources": [
- "distribute/engage/intents.html",
- "distribute/engage/deep-linking.html",
- "training/app-indexing/index.html"
- ]
- },
- "distribute/engage/intents": {
- "title": "",
- "resources": [
- "guide/components/intents-filters.html",
- "distribute/engage/deep-linking.html",
- "distribute/engage/ads.html"
- ]
- },
- "distribute/getusers/expandnewmarkets": {
- "title": "",
- "resources": [
- "distribute/tools/localization-checklist.html",
- "https://support.google.com/googleplay/android-developer/table/3541286",
- "https://play.google.com/intl/en_us/badges/",
- "distribute/tools/promote/device-art.html",
- "https://www.youtube.com/watch?v=SkHHPf3EdzE"
- ]
- },
- "distribute/engage/gcm": {
- "title": "",
- "resources": [
- "https://developers.google.com/cloud-messaging/gcm",
- "https://developers.google.com/cloud-messaging/android/client",
- ]
- },
- "distribute/engage/gamesservices/related": {
- "title": "",
- "resources": [
- "https://developers.google.com/games/services/",
- "distribute/analyze/start.html",
- "distribute/googleplay/cardboard.html",
- "https://www.google.com/admob/"
- ]
- },
- "distribute/engage/gplus": {
- "title": "",
- "resources": [
- "distribute/users/ota-installs.html",
- "https://developers.google.com/identity/sign-in/android/people",
- "https://developers.google.com/+/mobile/android/"
- ]
- },
- "distribute/engage/community": {
- "title": "",
- "resources": [
- "distribute/users/build-community.html",
- "distribute/engage/video.html"
- ]
- },
- "distribute/engage/deeplinks": {
- "title": "",
- "resources": [
- "distribute/engage/easy-signin.html",
- "https://developers.google.com/app-indexing/",
- "https://developers.google.com/+/mobile/android/share/interactive-post"
- ]
- },
- "distribute/engage/appupdates": {
- "title": "",
- "resources": [
- "distribute/essentials/optimizing-your-app.html",
- "distribute/tools/launch-checklist.html",
- "distribute/googleplay/developer-console.html"
- ]
- },
- "distribute/engage/video/more": {
- "title": "",
- "resources": [
- "https://www.youtube.com/yt/dev/",
- "distribute/essentials/best-practices/games.html",
- "https://www.youtube.com/watch?v=RRelFvc6Czo"
- ]
- },
- "distribute/engage/community": {
- "title": "",
- "resources": [
- "distribute/users/build-community.html",
- "distribute/engage/video.html"
- ]
- },
- "distribute/engage/kiwi": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=WWArLD6nqrk"
- ]
- },
- "distribute/toolsreference/gpfefaq": {
- "title": "",
- "resources": [
- "https://www.google.com/edu/tablets/",
- "distribute/googleplay/edu/start.html",
- "https://play.google.com/about/developer-distribution-agreement-addendum.html",
- "distribute/essentials/quality/core.html",
- "distribute/essentials/quality/tablets.html"
- ]
- },
- "distribute/toolsreference/localizationchecklist/identifylocales": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/138294"
- ]
- },
- "distribute/toolsreference/localizationchecklist/identifylocales/zhcn": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/138294?hl=zh-Hans"
- ]
- },
- "distribute/tools/loc/designforloc": {
- "title": "",
- "resources": [
- "https://android-developers.blogspot.com/2013/03/native-rtl-support-in-android-42.html",
- "guide/topics/resources/string-resource.html#Plurals",
- "guide/topics/resources/string-resource.html",
- "reference/java/util/Locale.html"
- ]
- },
- "distribute/toolsreference/localizationchecklist/managestrings": {
- "title": "",
- "resources": [
- "guide/topics/resources/string-resource.html",
- "design/style/writing.html",
- "https://en.wikipedia.org/wiki/XLIFF"
- ]
- },
- "distribute/toolsreference/localizationchecklist/managestrings/zhcn": {
- "title": "",
- "resources": [
- "guide/topics/resources/string-resource.html",
- "intl/zh-cn/design/style/writing.html",
- "https://en.wikipedia.org/wiki/XLIFF"
- ]
- },
- "distribute/toolsreference/localizationchecklist/preplaunch": {
- "title": "",
- "resources": [
- "https://play.google.com/intl/en_us/badges/",
- "distribute/tools/promote/device-art.html"
- ]
- },
- "distribute/toolsreference/localizationchecklist/preplaunch/zhcn": {
- "title": "",
- "resources": [
- "https://play.google.com/intl/en_us/badges/",
- "intl/zh-cn/distribute/tools/promote/device-art.html"
- ]
- },
- "distribute/toolsreference/localizationchecklist/supportlaunch": {
- "title": "",
- "resources": [
- "distribute/tools/launch-checklist.html",
- ]
- },
- "distribute/toolsreference/localizationchecklist/supportlaunch/zhcn": {
- "title": "",
- "resources": [
- "intl/zh-cn/distribute/tools/launch-checklist.html",
- ]
- },
- "distribute/toolsreference/launchchecklist/understanding": {
- "title": "",
- "resources": [
- "tools/publishing/publishing_overview.html",
- "tools/publishing/preparing.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/policies": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/4430948",
- "https://support.google.com/googleplay/android-developer/topic/2364761",
- "https://support.google.com/googleplay/android-developer"
- ]
- },
- "distribute/toolsreference/launchchecklist/quality": {
- "title": "",
- "resources": [
- "distribute/essentials/quality/core.html",
- "distribute/essentials/quality/tablets.html",
- "https://developers.google.com/edu/guidelines"
- ]
- },
- "distribute/toolsreference/launchchecklist/rating": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/188189",
- ]
- },
- "distribute/toolsreference/launchchecklist/country": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/138294"
- ]
- },
- "distribute/toolsreference/launchchecklist/size": {
- "title": "",
- "resources": [
- "google/play/expansion-files.html",
- "tools/help/proguard.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/platform": {
- "title": "",
- "resources": [
- "guide/practices/screens_support.html",
- "about/dashboards/index.html",
- "guide/topics/manifest/uses-sdk-element.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/price": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/table/3541286",
- ]
- },
- "distribute/toolsreference/launchchecklist/purchasemethod": {
- "title": "",
- "resources": [
- "google/play/billing/index.html",
- "google/play/billing/billing_subscriptions.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/setprice": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/1169947",
- "https://support.google.com/googleplay/android-developer/answer/138412",
- "https://support.google.com/googleplay/android-developer/answer/112622",
- "https://support.google.com/googleplay/android-developer/answer/138000"
- ]
- },
- "distribute/toolsreference/launchchecklist/localization": {
- "title": "",
- "resources": [
- "distribute/tools/localization-checklist.html",
- "https://support.google.com/l10n/answer/6359997"
- ]
- },
- "distribute/toolsreference/launchchecklist/graphics": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/1078870",
- "https://android-developers.blogspot.com/2011/10/android-market-featured-image.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/productdetails": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/113475",
- "https://support.google.com/googleplay/android-developer/answer/1078870"
- ]
- },
- "distribute/toolsreference/launchchecklist/badges": {
- "title": "",
- "resources": [
- "https://play.google.com/intl/en_us/badges/",
- "distribute/tools/promote/linking.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/finalchecks": {
- "title": "",
- "resources": [
- "https://play.google.com/about/developer-content-policy.html",
- "https://support.google.com/googleplay/android-developer/answer/113476",
- "support.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/afterlaunch": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/113477",
- "https://support.google.com/googleplay/android-developer/answer/1153479",
- "https://support.google.com/payments/answer/2741495",
- "distribute/essentials/optimizing-your-app.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/understanding/zhcn": {
- "title": "",
- "resources": [
- "intl/zh-cn/tools/publishing/publishing_overview.html",
- "intl/zh-cn/tools/publishing/preparing.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/policies/zhcn": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/4430948?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/topic/2364761?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer?hl=zh-Hans"
- ]
- },
- "distribute/toolsreference/launchchecklist/quality/zhcn": {
- "title": "",
- "resources": [
- "intl/zh-cn/distribute/essentials/quality/core.html",
- "intl/zh-cn/distribute/essentials/quality/tablets.html",
- "https://developers.google.com/edu/guidelines?hl=zh-Hans"
- ]
- },
-
- "distribute/toolsreference/launchchecklist/rating/zhcn": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/188189?hl=zh-Hans",
- ]
- },
- "distribute/toolsreference/launchchecklist/country/zhcn": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/138294?hl=zh-Hans"
- ]
- },
- "distribute/toolsreference/launchchecklist/size/zhcn": {
- "title": "",
- "resources": [
- "google/play/expansion-files.html",
- "intl/zh-cn/tools/help/proguard.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/price/zhcn": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/table/3541286?hl=zh-Hans",
- ]
- },
- "distribute/toolsreference/launchchecklist/purchasemethod/zhcn": {
- "title": "",
- "resources": [
- "intl/zh-cn/google/play/billing/index.html",
- "google/play/billing/billing_subscriptions.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/setprice/zhcn": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/1169947?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/answer/138412?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/answer/112622?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/answer/138000?hl=zh-Hans"
- ]
- },
- "distribute/stories/localization": {
- "title": "",
- "resources": [
- "distribute/stories/games/rvappstudios-zombie.html",
- "distribute/stories/games/g4a-indian-rummy.html",
- "distribute/stories/apps/sayhi.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/localization/zhcn": {
- "title": "",
- "resources": [
- "intl/zh-cn/distribute/tools/localization-checklist.html",
- ]
- },
- "distribute/toolsreference/launchchecklist/graphics/zhcn": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/1078870?hl=zh-Hans",
- "https://android-developers.blogspot.com/2011/10/android-market-featured-image.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/productdetails/zhcn": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/113475?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/answer/1078870?hl=zh-Hans"
- ]
- },
- "distribute/toolsreference/launchchecklist/badges/zhcn": {
- "title": "",
- "resources": [
- "https://play.google.com/intl/en_us/badges/",
- "intl/zh-cn/distribute/tools/promote/linking.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/finalchecks/zhcn": {
- "title": "",
- "resources": [
- "https://play.google.com/about/developer-content-policy.html",
- "https://support.google.com/googleplay/android-developer/answer/113476?hl=zh-Hans",
- "support.html"
- ]
- },
- "distribute/toolsreference/launchchecklist/afterlaunch/zhcn": {
- "title": "",
- "resources": [
- "https://support.google.com/googleplay/android-developer/answer/113477?hl=zh-Hans",
- "https://support.google.com/googleplay/android-developer/answer/1153479?hl=zh-Hans",
- "https://support.google.com/payments/answer/2741495?hl=zh-Hans",
- "distribute/essentials/optimizing-your-app.html"
- ]
- },
- "distribute/monetize/premium": {
- "title": "",
- "resources": [
- "google/play/billing/index.html",
- "https://support.google.com/googleplay/android-developer/answer/4407611"
- ]
- },
- "distribute/monetize/freemium": {
- "title": "",
- "resources": [
- "google/play/billing/index.html",
- "https://support.google.com/googleplay/android-developer/answer/4407611"
- ]
- },
- "distribute/monetize/subscriptions": {
- "title": "",
- "resources": [
- "google/play/billing/billing_subscriptions.html",
- "https://support.google.com/googleplay/android-developer/answer/4407611"
- ]
- },
- "distribute/monetize/ecommerce": {
- "title": "",
- "resources": [
- "https://developers.google.com/wallet/instant-buy/",
- "https://support.google.com/googleplay/android-developer/answer/4407611"
- ]
- },
- "distribute/monetize/advertising": {
- "title": "",
- "resources": [
- "https://www.google.com/ads/admob/#subid=us-en-et-dac",
- "https://www.google.com/doubleclick/publishers/small-business/index.html",
- "https://support.google.com/googleplay/android-developer/topic/2985714",
- "training/monetization/ads-and-ux.html"
- ]
- },
- "distribute/monetize/admob": {
- "title": "",
- "resources": [
- "https://support.google.com/admob/topic/2784623",
- "https://admob.blogspot.com/",
- "https://analyticsacademy.withgoogle.com/mobile-app",
- "https://www.udacity.com/courses/ud876-3"
- ]
- },
- "distribute/monetize/paymentmethods": {
- "title": "",
- "resources": [
- "https://play.google.com/about/giftcards/",
- "https://support.google.com/googleplay/answer/2651410"
- ]
- },
- "distribute/monetize/conversions": {
- "title": "",
- "resources": [
- "https://support.google.com/adwords/answer/2471188",
- "https://developers.google.com/app-conversion-tracking/",
- "https://support.google.com/analytics/answer/2611404",
- "https://support.google.com/adwords/answer/1704341"
- ]
- },
- "autolanding": {
- "title": "",
- "resources": [
- "auto/index.html",
- "design/auto/index.html",
- "training/auto/index.html"
- ]
- },
- "tvlanding": {
- "title": "",
- "resources": [
- "tv/index.html",
- "design/tv/index.html",
- "training/tv/index.html"
- ]
- },
- "wearlanding": {
- "title": "",
- "resources": [
- "design/wear/index.html",
- "training/building-wearables.html",
- "training/wearables/ui/index.html"
- ]
- },
- "design/auto/auto_ui_guidelines": {
- "title": "",
- "resources": [
- "shareables/auto/AndroidAuto-audio-apps.pdf",
- "shareables/auto/AndroidAuto-messaging-apps.pdf",
- "shareables/auto/AndroidAuto-custom-colors.pdf"
- ]
- },
- "training/auto/overview": {
- "title": "",
- "resources": [
- "training/auto/start/index.html",
- "design/auto/index.html",
- "shareables/auto/AndroidAuto-custom-colors.pdf"
- ]
- },
- "training/auto/messaging": {
- "title": "",
- "resources": [
- "training/auto/messaging/index.html",
- "shareables/auto/AndroidAuto-messaging-apps.pdf",
- "samples/MessagingService/index.html"
- ]
- },
- "training/auto/media": {
- "title": "",
- "resources": [
- "training/auto/audio/index.html",
- "shareables/auto/AndroidAuto-audio-apps.pdf",
- "samples/MediaBrowserService/index.html"
- ]
- },
- "training/auto/distribute": {
- "title": "",
- "resources": [
- "distribute/essentials/quality/auto.html",
- "distribute/googleplay/auto.html"
- ]
- },
- "training/testing/overview": {
- "title": "",
- "resources": [
- "training/testing/start/index.html",
- "tools/testing/testing_android.html",
- "https://www.youtube.com/watch?v=vdasFFfXKOY"
- ]
- },
- "training/testing/tools": {
- "title": "",
- "resources": [
- "tools/testing-support-library/index.html",
- "tools/help/monkey.html",
- "tools/help/monkeyrunner_concepts.html",
- "tools/testing/testing_otheride.html",
- "https://source.android.com/devices/tech/debug/dumpsys.html"
- ]
- },
- "training/testing/techniques": {
- "title": "",
- "resources": [
- "training/testing/ui-testing/index.html",
- "training/testing/unit-testing/index.html",
- "training/testing/performance.html"
- ]
- },
- "training/testing/resources": {
- "title": "",
- "resources": [
- "https://github.com/googlesamples/android-testing",
- "https://www.youtube.com/watch?v=2I6fuD20qlY",
- "https://codelabs.developers.google.com/codelabs/android-testing/index.html",
- "https://github.com/googlesamples/android-testing-templates",
- "https://google.github.io/android-testing-support-library"
- ]
- },
- "distribute/stories/games": {
- "title": "",
- "resources": [
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/Glu_Deerhunter2014_gpgs.pdf",
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/ConcreteSoftware_PBABowling_gpgs.pdf",
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/Dragonplay_DragonplaySlots_gpgs.pdf",
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/Gameloft_Asphalt8_gpgs.pdf",
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/Glu_EternityWarriors3_gpgs.pdf",
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/HotheadGames_RivalsatWar_gpgs.pdf",
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/TMSOFT_Compulsive_gpgs.pdf",
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/Noodlecake_SuperStickmanGolf2_gpgs.pdf",
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/TinyRebel_DoctorWhoLegacy_gpgs.pdf",
- "https://storage.googleapis.com/androiddevelopers/shareables/stories/Senri_LeosFortune_gpgs.pdf"
- ]
- },
- "overview/zhcn/1": {
- "title": "",
- "resources": [
- "intl/zh-cn/distribute/essentials/quality/core.html",
- "intl/zh-cn/distribute/essentials/quality/tablets.html",
- "intl/zh-cn/distribute/tools/launch-checklist.html",
- "intl/zh-cn/tools/publishing/publishing_overview.html",
- "intl/zh-cn/distribute/tools/localization-checklist.html"
- ]
- },
- "overview/zhcn/2": {
- "title": "",
- "resources": [
- "intl/zh-cn/google/play/billing/index.html",
- "intl/zh-cn/google/play/billing/api.html",
- "intl/zh-cn/google/play/billing/billing_admin.html",
- "intl/zh-cn/google/play/billing/billing_testing.html",
- "intl/zh-cn/google/play/billing/billing_best_practices.html"
- ]
- },
- "overview/zhcn/3": {
- "title": "",
- "resources": [
- "https://play.google.com/intl/en_us/badges/",
-
- "intl/zh-cn/distribute/tools/promote/device-art.html",
- "intl/zh-cn/distribute/tools/promote/linking.html",
- "intl/zh-cn/distribute/tools/promote/brand.html",
- "intl/zh-cn/tools/help/proguard.html"
- ]
- },
- "overview/zhcn/4": {
- "title": "",
- "resources": [
- "intl/zh-cn/design/style/writing.html",
- "intl/zh-cn/training/basics/fragments/fragment-ui.html",
- "intl/zh-cn/training/multiscreen/index.html",
- "intl/zh-cn/training/monitoring-device-state/index.html"
- ]
- },
- "overview/carousel/zhcn": {
- "title": "",
- "resources": [
- "https://www.youtube.com/watch?v=vGV7FHGzpFU",
- "https://www.youtube.com/watch?v=aqc3ZOTzpdk",
- "https://www.youtube.com/watch?v=jaNrJ8uyLSc"
- ]
- },
- "overview/1": {
- "title": "",
- "resources": [
- "distribute/essentials/quality/core.html",
- "distribute/essentials/quality/tablets.html",
- "distribute/tools/launch-checklist.html",
- "tools/publishing/publishing_overview.html",
- "distribute/tools/localization-checklist.html"
- ]
- },
- "overview/2": {
- "title": "",
- "resources": [
- "google/play/billing/index.html",
- "google/play/billing/api.html",
- "google/play/billing/billing_admin.html",
- "google/play/billing/billing_testing.html",
- "google/play/billing/billing_best_practices.html"
- ]
- },
- "overview/3": {
- "title": "",
- "resources": [
- "https://play.google.com/intl/en_us/badges/",
- "distribute/tools/promote/device-art.html",
- "distribute/tools/promote/linking.html",
- "distribute/tools/promote/brand.html",
- "tools/help/proguard.html"
- ]
- },
- "overview/4": {
- "title": "",
- "resources": [
- "design/style/writing.html",
- "training/basics/fragments/fragment-ui.html",
- "training/multiscreen/index.html",
- "training/monitoring-device-state/index.html"
- ]
- },
-"tools/help/log": {
- "title": "",
- "resources": [
- "tools/help/am-logcat.html"
- ]
- },
-"tools/help/monitor": {
- "title": "",
- "resources": [
- "tools/help/am-memory.html",
- "tools/help/am-cpu.html",
- "tools/help/am-gpu.html",
- "tools/help/am-network.html"
- ]
- },
- "tools/help/data": {
- "title": "",
- "resources": [
- "tools/help/am-hprof.html",
- "tools/help/am-allocation.html",
- "tools/help/am-methodtrace.html",
- "tools/help/am-sysinfo.html"
- ]
- },
- "tools/help/shot": {
- "title": "",
- "resources": [
- "tools/help/am-screenshot.html",
- "tools/help/am-video.html"
- ]
- },
- "tools/performance/rendering": {
- "title": "",
- "resources": [
- "tools/performance/debug-gpu-overdraw/index.html",
- "tools/performance/profile-gpu-rendering/index.html",
- "tools/performance/hierarchy-viewer/setup.html",
- "tools/performance/hierarchy-viewer/index.html",
- "tools/performance/hierarchy-viewer/profiling.html"
- ]
- },
- "tools/performance/memory": {
- "title": "",
- "resources": [
- "tools/performance/memory-monitor/index.html",
- "tools/performance/heap-viewer/index.html",
- "tools/performance/allocation-tracker/index.html",
- "tools/performance/comparison.html"
- ]
- },
- "tools/performance/cpu": {
- "title": "",
- "resources": [
- "tools/performance/traceview/index.html",
- "tools/performance/systrace/index.html"
- ]
- },
- "tools/performance/battery": {
- "title": "",
- "resources": [
- "tools/performance/batterystats-battery-historian/index.html",
- "tools/performance/batterystats-battery-historian/charts.html"
- ]
- },
- "marshmallow/landing/resources": {
- "title": "",
- "resources": [
- "about/versions/marshmallow/android-6.0-changes.html",
- "about/versions/marshmallow/android-6.0.html",
- "about/versions/marshmallow/samples.html"
- ]
- },
- "marshmallow/landing/videos": {
- "title": "",
- "resources": [
- "https://youtu.be/U9tw5ypqEN0",
- "https://youtu.be/N72ksDKrX6c",
- "https://youtu.be/iZqDdvhTZj0",
- "https://www.youtube.com/watch?v=vcSj8ln-BlE",
- "https://youtu.be/LQoohRwojmw",
- "https://www.youtube.com/watch?v=VOn7VrTRlA4",
- "https://youtu.be/5sCQjeGoE7M",
- "https://www.youtube.com/watch?v=C8lUdPVSzDk",
- "https://www.youtube.com/watch?v=HXacyy0HSW0",
- "https://www.youtube.com/watch?v=OW1A4XFRuyc",
- "https://www.youtube.com/watch?v=j3QC6hcpy90",
- "https://www.youtube.com/watch?v=f17qe9vZ8RM",
- "https://www.youtube.com/watch?v=ndBdf1_oOGA"
- ]
- },
- "marshmallow/landing/more": {
- "title": "",
- "resources": [
- "training/permissions/requesting.html",
- "training/backup/autosyncapi.html",
- "training/monitoring-device-state/doze-standby.html",
- "training/app-links/index.html",
- "training/articles/assistant.html",
- "training/testing/performance.html",
- "https://developers.google.com/android/nexus/images"
- ]
- },
- "tools/landing/resources": {
- "title": "",
- "resources": [
- "tools/studio/index.html",
- "tools/studio/studio-features.html",
- "studio/intro/index.html",
- ]
- },
- "tools/landing/latest": {
- "title": "",
- "resources": [
- "https://medium.com/google-developers/how-often-should-you-update-android-studio-db25785c488e#.8blbql35x",
- "http://android-developers.blogspot.com/2016/04/android-studio-2-0.html",
- "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/managed-configurations.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=Za0OQo8DRM4",
- "https://www.youtube.com/watch?v=dH41OutAMNM&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX"
- ]
- },
- "work/apps": {
- "title": "",
- "resources": [
- "work/managed-profiles.html",
- "work/managed-configurations.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
deleted file mode 100644
index 44ccafa..0000000
--- a/docs/html/jd_extras.js
+++ /dev/null
@@ -1,4120 +0,0 @@
-/*
- * THIS FILE IS DEPRECATED.
- *
- * Please add and edit resource collections in jd_extras_<lang>.js
- * where lang matches the language code appropriate for the resource.
- * Last sync'd with jd_extras_<lang>.js on 29 Apr 2016.
- *
- */
-DISTRIBUTE_RESOURCES = DISTRIBUTE_RESOURCES.concat([
- /* TODO Remove standard resources from here, such as below
- */
- {
- "title":"Writing More Code by Writing Less Code with Android Studio Live Templates",
- "titleFriendly":"",
- "summary":"Unless you’re getting paid by the keystroke, no one wants to write repetitive boilerplate code.",
- "url":"https://medium.com/google-developers/writing-more-code-by-writing-less-code-with-android-studio-live-templates-244f648d17c7#.hczcm02du",
- "group":"",
- "keywords": [],
- "tags": ['studio'],
- "image":"https://cdn-images-1.medium.com/max/800/1*JkrYXGs1AxZAbK0sCLrJAQ.gif",
- "type":"medium"
- },
- {
- "title":"How Often Should You Update Android Studio?",
- "titleFriendly":"",
- "summary":"One of the beauties of Android Studio is how quickly is evolves and improves.",
- "url":"https://medium.com/google-developers/how-often-should-you-update-android-studio-db25785c488e#.8blbql35x",
- "group":"",
- "keywords": [],
- "tags": ['studio'],
- "image":"https://cdn-images-1.medium.com/max/2000/1*chMiA9mGa_FBUOoesHHk3Q.png",
- "type":"medium"
- },
- {
- "title":"SmallerAPK, Part 6: Image optimization, Zopfli & WebP",
- "category":"",
- "summary":"Series of posts on minimizing your APK size.",
- "url":"https://medium.com/@wkalicinski/smallerapk-part-6-image-optimization-zopfli-webp-4c462955647d#.23hlddo3x",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"https://cdn-images-1.medium.com/max/2000/1*chMiA9mGa_FBUOoesHHk3Q.png",
- "type":"medium"
- },
- {
- "title":"Measure your app’s user acquisition channels",
- "titleFriendly":"",
- "summary":"Get details on how to use the Developer Console User Acquisitions reports to discover where your users come from.",
- "url":"https://support.google.com/googleplay/android-developer/answer/6263332",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title":"Set up native app install banners in Chrome",
- "titleFriendly":"",
- "summary":"Get the details you need to add your native app or game to your site’s web app manifest file.",
- "url":"https://developers.google.com/web/updates/2015/03/increasing-engagement-with-app-install-banners-in-chrome-for-android#native",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title":"Optimize your store listing pages with experiments",
- "titleFriendly":"",
- "summary":"You can run experiments to find the most effective graphics and localized text for your app.",
- "url":"https://support.google.com/googleplay/android-developer/answer/6227309",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title":"Content Experiments for Mobile Apps",
- "titleFriendly":"",
- "summary":"Google Analytics Content Experiments allows you to test multiple variations of a given web page.",
- "url":"https://support.google.com/tagmanager/answer/6003007",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title":"Store Listing Experiments for Google Play",
- "titleFriendly":"",
- "summary":"Learn how to use Google Play’s new store listing optimization feature to get more installs of your app.",
- "url":"https://www.youtube.com/watch?v=B6ydLpkhq04",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/B6ydLpkhq04/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Use alpha/beta testing & staged rollouts",
- "titleFriendly":"",
- "summary":"Using the Google Play Developer Console, you can choose groups of users to test different versions of your app.",
- "url":"https://support.google.com/googleplay/android-developer/answer/3131213",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title":"Quizlet Developer Story",
- "titleFriendly":"",
- "summary":"Quizlet is an extremely popular online learning tool for students. See how they optimized for the classroom with Android and the power of Google Play for Education.",
- "url":"https://www.youtube.com/watch?v=Idu7VcTTXfk",
- "group":"",
- "keywords": [],
- "tags": [
- "#gpfe",
- "#googleplay"
- ],
- "image":"https://i1.ytimg.com/vi/Idu7VcTTXfk/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"What's New in GPFE",
- "titleFriendly":"",
- "summary":"Learn about the vision and philosophy behind Google Play for Education",
- "url":"https://www.youtube.com/watch?v=IKhU180eJMo",
- "group":"",
- "keywords": [],
- "tags": [
- "#gpfe",
- "#googleplay"
- ],
- "image":"https://i1.ytimg.com/vi/IKhU180eJMo/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Get started with Google Cast",
- "titleFriendly":"",
- "summary":"Build multi-screen experiences, let the user send video and audio content to TVs and speakers.",
- "url":"https://developers.google.com/cast/docs/ux_guidelines",
- "group":"",
- "keywords": ["cast", "chromecast", "video", "audio"],
- "tags": [],
- "image":"images/cards/card-cast_2x.jpg",
- "type":"Guide"
- },
- {
- "title":"Android Sender Applications",
- "titleFriendly":"",
- "summary":"Get an overview of how your Android app can act as a Google Cast sender app.",
- "url":"https://developers.google.com/cast/docs/android_sender",
- "group":"",
- "keywords": ["cast", "sender"],
- "tags": [],
- "image":"images/cards/card-cast_2x.jpg",
- "type":"Guide"
- },
- {
- "title":"Cast sample apps",
- "titleFriendly":"",
- "summary":"Get example Google Cast applications for both senders and receivers.",
- "url":"https://www.github.com/googlecast",
- "group":"",
- "keywords": ["cast", "samples"],
- "tags": [],
- "image":"images/cards/card-cast_2x.jpg",
- "type":"Samples"
- },
- {
- "title":"Get Cardboard",
- "titleFriendly":"",
- "summary":"Get your own Cardboard, today. Buy one from a manufacturer or build your own, and start developing.",
- "url":"https://www.google.com/get/cardboard/get-cardboard/",
- "group":"",
- "keywords": ["carboard","vr"],
- "tags": [],
- "image":"images/cards/card-cardboard_2x.png",
- "type":"Guide"
- },
- {
- "title":"Download the Cardboard SDK",
- "titleFriendly":"",
- "summary":"Grab the Cardboard libraries from GitHub and start creating VR apps in your favorite development environment.",
- "url":"https://developers.google.com/cardboard/android/download",
- "group":"",
- "keywords": ["carboard","vr"],
- "tags": [],
- "image":"images/cards/card-cardboard_2x.png",
- "type":"Guide"
- },
- {
- "title":"Cardboard design guidelines",
- "titleFriendly":"",
- "summary":"Focus on overall usability and avoiding common VR pitfalls while creating an immersive experience of your own.",
- "url":"https://www.google.com/design/spec-vr",
- "group":"",
- "keywords": ["carboard","vr"],
- "tags": [],
- "image":"images/cards/card-cardboard_2x.png",
- "type":"Design"
- },
- {
- "title":"Maps",
- "titleFriendly":"",
- "summary":"Give users the map that more than a billion people use every month.",
- "url":"https://developers.google.com/maps/documentation/android/",
- "group":"",
- "keywords": ["maps"],
- "tags": [],
- "image":"images/google/gps-maps.png",
- "type":"Guide"
- },
- {
- "title":"Places API",
- "titleFriendly":"",
- "summary":"give your users contextual information about where they are, when they’re there.",
- "url":"https://developers.google.com/places/android/",
- "group":"",
- "keywords": ["places","location", "context"],
- "tags": [],
- "image":"images/cards/card-places_2x.png",
- "type":"Guide"
- },
- {
- "title":"GCM Client for Android",
- "titleFriendly":"",
- "summary":"Send push notifications and pubsub from your server to Android devices around the world.",
- "url":"https://developers.google.com/cloud-messaging/android/client",
- "group":"",
- "keywords": ["push","gcm"],
- "tags": [],
- "image":"images/cards/card-google-cloud-messaging_16-9_2x.png",
- "type":"Guide"
- },
- {
- "title":"Google Cloud Messaging",
- "titleFriendly":"",
- "summary":"Learn about GCM and the kinds of services you can offer to users through push notifications",
- "url":"https://developers.google.com/cloud-messaging/gcm",
- "group":"",
- "keywords": ["push","gcm"],
- "tags": [],
- "image":"images/cards/card-google-cloud-messaging_16-9_2x.png",
- "type":"Guide"
- },
- {
- "title":"ClassDojo Developer Story",
- "titleFriendly":"",
- "summary":"ClassDojo is a classroom tool that helps teachers improve behavior in their classrooms quickly and easily. See how they optimized for the classroom with Android and the power of Google Play for Education.",
- "url":"https://www.youtube.com/watch?v=iokH4SAIfRw",
- "group":"",
- "keywords": [],
- "tags": [
- "#gpfe",
- "#googleplay"
- ],
- "image":"https://i1.ytimg.com/vi/iokH4SAIfRw/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Plan for Success",
- "titleFriendly":"",
- "summary":"5 tips from developers on creating great EDU apps.",
- "url":"https://www.youtube.com/watch?v=Eh2adsAyTKc",
- "group":"",
- "keywords": [],
- "tags": [
- "#gpfe",
- "#googleplay"
- ],
- "image":"https://i1.ytimg.com/vi/Eh2adsAyTKc/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Optimizing Apps for Education",
- "titleFriendly":"",
- "summary":"Learn how to optimize your app for teachers and students.",
- "url":"https://www.youtube.com/watch?v=_AZ6UcPz-_g",
- "group":"",
- "keywords": [],
- "tags": [
- "#gpfe",
- "#googleplay"
- ],
- "image":"https://i1.ytimg.com/vi/_AZ6UcPz-_g/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Ideas and Tools for Building Innovative Education Apps",
- "titleFriendly":"",
- "summary":"Are you hungry to build an awesome app for education but don't quite know where to start? Come hear about apps that teachers want, and the APIs you're going to need to build them! In particular, we'll talk about app ideas that combine APIs for Google Drive, Google Login, Android Single Task Mode and more to build transformative Educational apps that will delight educators and kids in and out of the classroom.",
- "url":"https://www.youtube.com/watch?v=iulXz8QTD1g",
- "group":"",
- "keywords": [],
- "tags": [
- "#gpfe",
- "#googleplay"
- ],
- "image":"https://i1.ytimg.com/vi/iulXz8QTD1g/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"DesignBytes: Intro To Material Design",
- "titleFriendly":"",
- "summary":"These days, UI designers need to be thinking about phones, tablets, laptops, TVs, smartwatches, and beyond. In this DesignByte we talk about how Google designers have been working on making cross-platform and multi-screen design easier. We wanted to build a design system that felt at home on every screen, from the smallest watch to the largest TV.",
- "url":"https://www.youtube.com/watch?v=p4gmvHyuZzw",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/p4gmvHyuZzw/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"DesignBytes: Paper and Ink: The Materials that Matter",
- "titleFriendly":"",
- "summary":"Join Rich Fulcher to learn about the materials of material design. See how virtual paper and ink form the foundation of your tactile user interface and master the rules that govern their behaviour.",
- "url":"https://www.youtube.com/watch?v=YaG_ljfzeUw",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/YaG_ljfzeUw/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"DesignBytes: Material Design in the Google I/O App",
- "titleFriendly":"",
- "summary":"Roman Nurik shares details on the design process for the Google I/O 2014 app. To check out the app's source code, visit github.com/google/iosched.",
- "url":"https://www.youtube.com/watch?v=XOcCOBe8PTc",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/XOcCOBe8PTc/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Toolbars for a flexible Action Bar & more",
- "titleFriendly":"",
- "summary":"Toolbars are a flexible View you can add to your Android app which provides many of the same APIs as the system provided Action Bar, but can also do so much more such as reacting to scrolling or being integrated directly into your layouts.",
- "url":"https://www.youtube.com/watch?v=kmUGLURRPkI",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/kmUGLURRPkI/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Protecting Implicit Intents with Runtime Checks",
- "titleFriendly":"",
- "summary":"Make sure you protect your implicit intents with a simple runtime check.",
- "url":"https://www.youtube.com/watch?v=HGElAW224dE",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/HGElAW224dE/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Tabs and ViewPager",
- "titleFriendly":"",
- "summary":"Showing multiple screens or pages of content is easy with the help of ViewPager and a PagerAdapter. Combining that with tabs make for an effective top level navigation strategy for your app or for moving between content at the same level of hierarchy within your app.",
- "url":"https://www.youtube.com/watch?v=zQekzaAgIlQ",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/zQekzaAgIlQ/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Battery Drain and Networking",
- "titleFriendly":"",
- "summary":"Let’s take a moment to make something insanely clear: As far as battery is concerned, NETWORKING is the biggest, baddest, dirtiest offender there is. And optimizing performance here isn’t easy. Since the chip isn’t always awake and draining power, means you can optimize how it wakes up, sends traffic, and saves battery.",
- "url":"https://www.youtube.com/watch?v=fEEulSk1kNY",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/fEEulSk1kNY/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Batching Background Work Until Later",
- "titleFriendly":"",
- "summary":"Yes, your app is special. But when it comes to battery use, sometimes it’s better to be part of the crowd. Why not spread the battery blame around a bit? Ian Ni-Lewis shows you how ridiculously easy it is to go from battery hog to team player in this video.",
- "url":"https://www.youtube.com/watch?v=-3ry8PxcJJA",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/-3ry8PxcJJA/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"The Performance Lifecycle",
- "titleFriendly":"",
- "summary":"Performance problems surface in your application at the least-wanted times (like right before you’re about to ship your first build). But don’t freak out: There’s a simple process that you can follow to help get your performance back under control.",
- "url":"https://www.youtube.com/watch?v=_kKTGK-Cb_4",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/_kKTGK-Cb_4/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Introduction to Android Studio",
- "titleFriendly":"",
- "summary":"Learn why you should migrate your projects to Android Studio now and how it can help you be more productive as a developer. Rich layout editor, handy suggestions and fixes, new Android project view - these are just some of the things you can expect from the IDE, which is built on the successful IntelliJ IDEA.",
- "url":"https://www.youtube.com/watch?v=K2dodTXARqc&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
- "group":"",
- "keywords": ["studio", "tools"],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/K2dodTXARqc/maxresdefault.jpg",
- "type":"video"
- },
-
- {
- "title":"Google Play Services 7.5",
- "titleFriendly":"",
- "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.",
- "url":"https://www.youtube.com/watch?v=M3Udfu6qidk&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf",
- "group":"",
- "keywords": ["google play services"],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/M3Udfu6qidk/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Google Play Services 7.3",
- "titleFriendly":"",
- "summary":"This update brings the ability to connect multiple wearables simultaneously to a single phone. There are also some great new updates to Google Fit, including nutrition types, and to Location.",
- "url":"https://www.youtube.com/watch?v=FOn64iqlphk&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf",
- "group":"",
- "keywords": ["google play services"],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/FOn64iqlphk/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Google Play Services 6.5",
- "titleFriendly":"",
- "summary":"Google Play services 6.5 includes new features in Google Maps, Google Drive and Google Wallet as well as the recently launched Google Fit API. ",
- "url":"https://www.youtube.com/watch?v=fvtMtfCuEpw&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf",
- "group":"",
- "keywords": ["google play services"],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/fvtMtfCuEpw/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Google Play Services 7.0",
- "titleFriendly":"",
- "summary":"Google Play services 7.0 is here! we've added the Places API, made enhancements to Location and Google Fit, and you can also remote control your Android TV through the new Nearby Connections API.",
- "url":"https://www.youtube.com/watch?v=F0Kh_RnSM0w&list=PLWz5rJ2EKKc9Qk1_iCZNbBp6adYnJf9Vf",
- "group":"",
- "keywords": ["google play services"],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/F0Kh_RnSM0w/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Running a Successful Games Business with Google",
- "titleFriendly":"",
- "summary":"Sure, we all want to make the next great gaming masterpiece. But we also want to feed our families and/or dogs. Join Bob Meese from the Google Play team as he gives you some key pointers on how to make sure you're best taking advantage of Google Play and running a successful games business.",
- "url":"https://www.youtube.com/watch?v=tDmnGNkTtlE",
- "group":"",
- "keywords": [],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/tDmnGNkTtlE/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Introduction to Android TV",
- "titleFriendly":"",
- "summary":"Android TV brings the Android platform to the living room with rich content and entertaining app experiences. In this video, Timothy introduces the design philosophy and developer components that make building TV experiences easier than ever before.",
- "url":"https://www.youtube.com/watch?v=6K_jxccHv5M&index=1&list=PLOU2XLYxmsILFBfx66ens76VMLMEPJAB0",
- "group":"",
- "keywords": ["tv"],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/6K_jxccHv5M/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Introduction to Android Auto",
- "titleFriendly":"",
- "summary":"Android Auto brings the Android platform to the car in a way that's optimized for the driving experience. It's the same platform you already use for phones, tablets, televisions, wearables, and more. ",
- "url":"https://www.youtube.com/watch?v=ctiaVxgclsg&list=PLWz5rJ2EKKc9BdE_PSLNIGjXXr3h_orXM",
- "group":"",
- "keywords": ["auto"],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/ctiaVxgclsg/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Debugging and testing in Android Studio",
- "titleFriendly":"",
- "summary":"This video introduces the state of unit testing support in Studio and Google’s new Android Testing Support Library for functional UI testing and running instrumented tests on a device.",
- "url":"https://www.youtube.com/watch?v=2I6fuD20qlY",
- "group":"",
- "keywords": ["testing"],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/2I6fuD20qlY/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"Android Testing (Android Dev Summit 2015)",
- "titleFriendly":"",
- "summary":"Overview of the testing tools and frameworks provided by Google and how they can help you to iterate more quickly and maintain a more healthy codebase.",
- "url":"https://www.youtube.com/watch?v=vdasFFfXKOY",
- "group":"",
- "keywords": ["testing"],
- "tags": [
- ],
- "image":"https://i1.ytimg.com/vi/vdasFFfXKOY/maxresdefault.jpg",
- "type":"video"
- },
- {
- "title":"dumpsys",
- "titleFriendly":"",
- "summary":"A tool that runs on the device and provides information about the status of system services.",
- "url":"https://source.android.com/devices/tech/debug/dumpsys.html",
- "group":"",
- "keywords": ["testing"],
- "tags": [
- ],
- "image":"",
- "type":"google"
- },
- {
- "title":"Android Testing Samples",
- "titleFriendly":"",
- "summary":"A collection of samples demonstrating different frameworks and techniques for automated testing.",
- "url":"https://github.com/googlesamples/android-testing",
- "group":"",
- "keywords": ["testing"],
- "tags": [
- ],
- "image":"images/testing/testing-icon.png",
- "type":"Samples"
- },
- {
- "title":"Android Testing Templates",
- "titleFriendly":"",
- "summary":"A collection of Google's Android testing tools and frameworks, all integrated in a single application project.",
- "url":"https://github.com/googlesamples/android-testing-templates",
- "group":"",
- "keywords": ["testing"],
- "tags": [
- ],
- "image":"images/testing/testing-icon.png",
- "type":"Samples"
- },
- {
- "title":"Android Testing Support Library (GitHub)",
- "titleFriendly":"",
- "summary":"A resource page on GitHub for the Android Testing Support Library.",
- "url":"https://google.github.io/android-testing-support-library",
- "group":"",
- "keywords": ["testing"],
- "tags": [
- ],
- "image":"images/testing/testing-icon.png",
- "type":"Samples"
- },
- {
- "title":"Android Testing Codelab",
- "titleFriendly":"",
- "summary":"This codelab shows how to build an Android app from the ground up in Android Studio, using a Model View Presenter architecture, Unit Tests and Instrumentation Tests.",
- "url":"https://codelabs.developers.google.com/codelabs/android-testing/index.html",
- "group":"",
- "keywords": ["testing"],
- "tags": [
- ],
- "image":"images/testing/testing-icon.png",
- "type":"google"
- },
- {
- "title":"Developer Registration",
- "titleFriendly":"",
- "summary":"Additional information about the registration process.",
- "url":"https://support.google.com/googleplay/android-developer/answer/113468",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title": "Google Play Distribution and Seller Countries",
- "titleFriendly":"",
- "summary": "List of countries and territories where you can distribute your apps in Google Play.",
- "url":"https://support.google.com/googleplay/android-developer/answer/138294",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title": "支持向Google Play用户发布应用的地区",
- "lang": "zh-cn",
- "titleFriendly":"",
- "summary": "支持向Google Play用户发布应用的国家/地区。",
- "url":"https://support.google.com/googleplay/android-developer/answer/138294?hl=zh-Hans",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title":"Google Play Content Policies",
- "titleFriendly":"",
- "summary":"Details on policies relating to your developer account and app distribution is governed.",
- "url":"https://support.google.com/googleplay/android-developer/topic/3453577",
- "group":"",
- "keywords": [],
- "tags": ["#developersupport"],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title":"Google Play Badge Generator",
- "titleFriendly":"",
- "summary":"Build badges for your app in just a few clicks, or download hi-res badge assets localized for a variety of languages.",
- "url":"https://play.google.com/intl/en_us/badges/",
- "group":"",
- "keywords": [],
- "tags": ["#developersupport"],
- "image":"images/gp-badges-set.png",
- "type":"google"
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["#developersupport #termsandpolicies"],
- "url": "https://support.google.com/googleplay/android-developer/answer/4407611",
- "timestamp": 1194884220000,
- "image": 'images/play_dev.jpg',
- "title": "Google Play Terms and Policies",
- "summary": "Developer terms and policies that apply when you distribute apps in Google Play.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "title":"Google Play Policy Center",
- "titleFriendly":"",
- "summary":"A central resource for you to learn about Google Play policies and guidelines.",
- "url":"https://support.google.com/googleplay/android-developer/answer/4430948",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"https://storage.googleapis.com/support-kms-prod/SNP_712EA2784949DDF085C46E3BE7B1DC618A09_4389397_en_v0",
- "type":"google"
- },
- {
- "title":"Google Play应用政策中心",
- "titleFriendly":"",
- "summary":"一个方便你了解Google Play政策和指南的中心资源。",
- "url":"https://support.google.com/googleplay/android-developer/answer/4430948?hl=zh-Hans",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"https://storage.googleapis.com/support-kms-prod/SNP_712EA2784949DDF085C46E3BE7B1DC618A09_4389397_en_v0",
- "type":"google"
- },
- {
- "title":"Developer Help Center",
- "titleFriendly":"",
- "summary":"Complete details on getting started, publishing, troubleshooting, and more.",
- "url":"https://support.google.com/googleplay/android-developer",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/cards/google-play_2x.png",
- "type":"google"
- },
- {
- "title":"开发者帮助中心",
- "titleFriendly":"",
- "summary":"完整资料帮助开发者新手入手,发布,故障排除,等等",
- "url":"https://support.google.com/googleplay/android-developer?hl=zh-Hans",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/play_dev.jpg",
- "type":"google"
- },
- {
- "title":"Google for Education",
- "titleFriendly":"",
- "summary":"Find out more about how Google can support your work with apps and tablets.",
- "url":"https://www.google.com/edu/tablets/",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"distribute/images/gp-edu-apps-image.jpg",
- "type":"google"
- },
- {
- "title":"Keeping Your App Responsive",
- "titleFriendly":"",
- "summary":"This document describes how the Android system determines whether an application is not responding and provides guidelines for ensuring that your application stays responsive.",
- "url":"training/articles/perf-anr.html",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"",
- "type":"google"
- },
- {
- "title":"Google Play Game Services",
- "titleFriendly":"",
- "summary":"Make your games social with Google Play game services. Add achievements, leaderboards, real-time multiplayer, and other popular features using the Google Play game services SDK.",
- "url":"https://developers.google.com/games/services/",
- "group":"",
- "keywords": ["games","play games"],
- "tags": [],
- "image":"images/google/gps-play_games_logo.png",
- "type":"google"
- },
- {
- "title":"Get Started with Analytics",
- "titleFriendly":"",
- "summary":"Get advanced insight into how players discover and play your games.",
- "url":"distribute/analyze/start.html",
- "group":"",
- "keywords": ["analytics"],
- "tags": [],
- "image": "images/cards/analytics-mobile_2x.jpg",
- "type": "distribute"
- },
- {
- "title":"Build VR with Google Cardboard",
- "titleFriendly":"",
- "summary":"Turn any phone into a virtual reality headset with a Cardboard viewer and experiment with adding virtual reality to your games with the Cardboard SDK.",
- "url":"distribute/googleplay/cardboard.html",
- "group":"",
- "keywords": ["cardboard"],
- "tags": [],
- "image":"images/cards/card-cardboard_2x.png",
- "type": "distribute"
- },
- {
- "title":"Monetize your apps intelligently",
- "titleFriendly":"",
- "summary":"Generate revenue from your free games with ads tailored to match your game's look and feel.",
- "url":"https://www.google.com/admob/",
- "group":"",
- "keywords": ["AdMob"],
- "tags": [],
- "image":"images/cards/admob-analytics_2x.png",
- "type": "distribute"
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "versions", "blog", "googleplay"
- ],
- "url": "https://android-developers.blogspot.com/",
- "timestamp": 1004884220000,
- "image": "images/blog.jpg",
- "title": "Android Developers Blog",
- "summary": "Follow the latest news on Android design, development, and distribution.",
- "keywords": [],
- "type": "blog",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://android-developers.blogspot.com/2011/11/making-android-games-that-play-nice.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Making Android Apps that Play Nice",
- "summary": "Audio lifecycle and expected audio behaviors for Android apps.",
- "keywords": [],
- "type": "blog",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://android-developers.blogspot.com/2010/07/multithreading-for-performance.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Multithreading for Performance",
- "summary": "Ways to improve performance through multi-threading.",
- "keywords": [],
- "type": "blog",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://play.google.com/about/developer-content-policy.html",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Developer Program Policies",
- "summary": "Guidelines acceptable content in Google Play. Please read and understand the policies before publishing.",
- "keywords": [],
- "type": "google",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/188189",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Rating your application content for Google Play",
- "summary": "How to choose the appropriate content ratings level for your apps.",
- "keywords": [],
- "type": "support",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["devices", "nexus", "testing"],
- "url": "https://developers.google.com/android/nexus/images",
- "timestamp": 1194884220000,
- "image": "images/cards/card-download_16-9_2x.png",
- "title": "Factory Images for Nexus Devices",
- "summary": "System image files for Android 6.0 and other Android releases.",
- "keywords": ["nexus, downloads"],
- "type": "support",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/188189?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "针对Google Play为你的应用内容分级",
- "summary": "如何为你的应用内容分级。",
- "keywords": [],
- "type": "support",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://android-developers.blogspot.com/2011/10/android-market-featured-image.html",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Google Play Featured Image Guidelines",
- "summary": "How to create attractive, effective Featured Images for your apps.",
- "keywords": [],
- "type": "support",
- "titleFriendly": ""
- },
-{
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/113477",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Supporting your users",
- "summary": "Options for supporting users.",
- "keywords": [],
- "type": "support",
- "titleFriendly": ""
- },
-{
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/113477?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "为用户提供支持",
- "summary": "为用户提供支持的各种选择。",
- "keywords": [],
- "type": "support",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "guide/practices/screens_support.html#ConfigurationExamples",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Configuration examples",
- "summary": "How to declare layouts and other resources for specific screen sizes.",
- "keywords": [],
- "type": "design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "training/design-navigation/multiple-sizes.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Planning for Multiple Touchscreen Sizes",
- "summary": "",
- "keywords": [],
- "type": "design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "training/multiscreen/index.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Designing for Multiple Screens",
- "summary": "Designing an intuitive, effective navigation for tablets and other devices.",
- "keywords": [],
- "type": "design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "guide/topics/resources/providing-resources.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Providing Resources",
- "summary": "Layouts and drawable resources for specific ranges of device screens.",
- "keywords": [],
- "type": "design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "training/basics/supporting-devices/screens.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Supporting Different Screens",
- "summary": "Optimizing the user experience for different screen sizes and densities.",
- "keywords": [],
- "type": "design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "guide/topics/appwidgets/index.html#MetaData",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Adding the AppWidgetProviderInfo Metadata",
- "summary": "How to set the height and width dimensions of a widget.",
- "keywords": [],
- "type": "design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "guide/topics/manifest/uses-sdk-element.html#ApiLevels",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Android API Levels",
- "summary": "Introduction to API levels and how they relate to compatibility.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "guide/practices/screens_support.html#DeclaringScreenSizeSupport",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Declaring screen size support",
- "summary": "How to declare support for screen sizes in your app\'s manifest.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "training/material/animations.html#Touch",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Customize Touch Feedback",
- "summary": "Provide visual confirmation when users interact with your UI.",
- "keywords": [],
- "type": "develop",
- "category": "guide"
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "guide/topics/manifest/uses-feature-element.html#testing",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Checking for hardware feature requirements",
- "summary": "Determining an app’s hardware and software requirements.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://play.google.com/apps/publish/",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Google Play Developer Console",
- "summary": "The tools console for publishing your app.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://play.google.com/apps/publish/?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Google Play 开发者控制台",
- "summary": "发布应用的开发者控制台",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://youtu.be/SkHHPf3EdzE",
- "timestamp": 1194884220000,
- "image": "https://i1.ytimg.com/vi/SkHHPf3EdzE/maxresdefault.jpg",
- "title": "Level Up Your Android Game",
- "summary": "Learn how to take your game to the next level on Google Play.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/+/mobile/android/share/interactive-post",
- "timestamp": 1194884220000,
- "image": 'images/google/gps-googleplus.png',
- "title": "Sharing interactive posts to Google+ from your Android app",
- "summary": "Interactive posts provide an easy and prominent way to allow users to share your site or app with their friends and invite them to take a specific action.",
- "keywords": ["Interactive", "Google+"],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://play.google.com/about/developer-distribution-agreement.html",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Developer Distribution Agreement",
- "summary": "Terms for distributing and selling apps and in-app products in Google Play.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/113417",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Inappropriate content in comments and applications",
- "summary": "More details on what content is appropriate.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/legal/troubleshooter/1114905",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Removing content from Google",
- "summary": "Find how how to request the removal of content that infringes on your trademark.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://play.google.com/about/developer-distribution-agreement-addendum.html",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Google Play for Education Addendum",
- "summary": "Review the education-specific requirements.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://android-developers.blogspot.com/2013/03/native-rtl-support-in-android-42.html",
- "timestamp": null,
- "image": null,
- "title": "Native RTL Support in Android 4.2",
- "summary": "Blog post that explains how to support RTL in your UI.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "guide/topics/resources/string-resource.html#Plurals",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Quantity Strings (Plurals)",
- "summary": "How to work with string plurals according to rules of grammar in a given locale.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "reference/java/util/Locale.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Locale",
- "summary": "Determine what CLDR data or version of the Unicode spec a particular Android platform version uses.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "guide/topics/resources/string-resource.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "String Resources",
- "summary": "Explains how to use string resources in your UI.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "distribute/tools/localization-checklist.html#strings",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Manage strings for localization",
- "summary": "Guidance on having your strings translation ready.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "tools/publishing/publishing_overview.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "General Publishing Overview",
- "summary": "Start here for an overview of publishing options for Android apps.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "tools/publishing/preparing.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Preparing for Release",
- "summary": "Developer documentation on how to build the signed, release-ready APK. This process is the same for all Android apps.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "distribute/googleplay/policies/index.html",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Google Play Policies and Guidelines",
- "summary": "An overview of Google Play policies for spam, intellectual property, and ads, with examples of common problems.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/topic/2364761",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Policy and Best Practices",
- "summary": "Help Center document describing various content policies and processes.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/topic/2364761?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "政策和最佳做法",
- "summary": "内容政策和流程",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "google/play/expansion-files.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "APK Expansion Files",
- "summary": "Developer documentation describing APK Expansion Files and how to support them in your app.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "tools/help/proguard.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "ProGuard",
- "summary": "Developer documentation describing how to use ProGuard to shrink, optimize, and obfuscate your code prior to release.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "title":"Dashboards",
- "titleFriendly":"",
- "summary":"This page provides information about the relative number of devices that share a certain characteristic, such as Android version or screen size. This information may help you prioritize efforts for supporting different devices by revealing which devices…",
- "url":"about/dashboards/index.html",
- "group":"",
- "keywords": ["android","dashboard","platforms","versions"],
- "tags": ["#ecosystem","#versions","#whatsnew"],
- "image":"https://chart.googleapis.com/chart?chl=GL%201.1%20only%7CGL%202.0%7CGL%203.0&chf=bg%2Cs%2C00000000&chd=t%3A0.1%2C93.5%2C6.4&chco=c4df9b%2C6fad0c&chs=400x250&cht=p",
- "lang":"en",
- "type":"about"
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/wallet/instant-buy/",
- "timestamp": 1194884220000,
- "image": "",
- "title": "Android Pay APIs",
- "summary": "Developer documentation describing Instant Buy and how to support it in your apps.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/1169947",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Selling Apps in Multiple Currencies",
- "summary": "Help Center document describing how pricing works in Google Play.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/1169947?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "以多种货币销售应用",
- "summary": "如何在Google Play为应用定价",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/138412",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Prices and supported currencies",
- "summary": "Help Center document listing supported currencies for pricing your apps.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/138412?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "各国家/地区获许定价范围和货币",
- "summary": "各国家/地区获许定价范围和货币列表",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/112622",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Transaction Fees",
- "summary": "Help Center document describing transaction fees for priced apps and in-app products.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/112622?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "交易费用",
- "summary": "销售的应用和应用内产品的交易费。",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/138000",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Specifying tax rates",
- "summary": "Help Center document describing how to set tax rates for different countries.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/138000?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "税率",
- "summary": "如何设置不同国家/地区的税率",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "guide/topics/resources/localization.html",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Localizing with Resources",
- "summary": "Developer guide to localizing resources in your app.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/113475",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Category types",
- "summary": "Help Center document listing available categories for apps.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/113475?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "类别",
- "summary": "应用的类别列表。",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/113476",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Updates",
- "summary": "Requirements for app updates in Google Play.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/113476?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "更新应用",
- "summary": "更新Google Play应用的要求。",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/1153479",
- "timestamp": 1194884220000,
- "image": null,
- "title": "In-app Billing",
- "summary": "Help Center document describing how to correctly set up In-app Billing.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/1153479?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": null,
- "title": "应用内结算",
- "summary": "如何正确设置应用内商品和订阅结算。",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "#gpfe",
- "#googleplay"
- ],
- "url": "https://youtu.be/vzvpcEffvaE",
- "timestamp": 1383243492000,
- "image": "https://i1.ytimg.com/vi/vzvpcEffvaE/maxresdefault.jpg",
- "title": "Introducing Tablets with Google Play for Education",
- "summary": "Schools in Hillsborough, New Jersey were among the first to try out Nexus 7 tablets with Google Play for Education. See the difference it made for students, teachers, and administrators.",
- "keywords": [],
- "type": "video",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "#engagement",
- ],
- "url": "https://www.youtube.com/yt/dev/",
- "timestamp": 1383243492000,
- "image": "https://www.youtube.com/yt/dev/media/images/yt-dev-home-hero.jpg",
- "title": "YouTube for Developers",
- "summary": "The YouTube APIs and Tools enable you to integrate YouTube's video content and functionality into your website, app, or device.",
- "keywords": [],
- "type": "youtube",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "#engagement",
- ],
- "url": "https://www.google.com/analytics/mobile/",
- "timestamp": 1383243492000,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Mobile App Analytics",
- "summary": "Mobile App Analytics measures what matters most at all key stages: from first discovery and download to in-app purchases. ",
- "keywords": ["analytics,user behavior"],
- "type": "Guide",
- "titleFriendly": ""
- },
-
-
- {
- "lang": "en",
- "group": "",
- "tags": [
- "#gcm",
- ],
- "url": "https://www.youtube.com/watch?v=y76rjidm8cU",
- "timestamp": 1383243492000,
- "image": "https://1.bp.blogspot.com/-IF-1-1kA0sg/UYwTidxdi3I/AAAAAAAAAEU/ellLeQ-E1vs/s800/google-io-lockup-2.png",
- "title": "Google Cloud Messaging at I/O 2013",
- "summary": "Google Cloud Messaging allows your services to efficiently send data to applications on Android devices. See what's new, and learn how to use GCM to make your apps more efficient.",
- "keywords": ["gcm"],
- "type": "youtube",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "#gcm",
- ],
- "url": "https://developer.chrome.com/apps/cloudMessagingV2",
- "timestamp": 1383243492000,
- "image": "images/kk-chromium-icon.png",
- "title": "Google Cloud Messaging for Chrome",
- "summary": "Google Cloud Messaging for Chrome (GCM) is a service for signed-in Chrome users that helps developers send message data from servers to their Chrome apps and extensions.",
- "keywords": ["gcm"],
- "type": "guide",
- "titleFriendly": ""
- },
-
- {
- "lang": "en",
- "group": "",
- "tags": [
- "#sdkupdates"
- ],
- "url": "https://android-developers.blogspot.com/2013/07/making-beautiful-android-app-icons.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Make Beautiful Android App Icons",
- "summary": "Follow these in-depth launcher icon tips on the Android Developers blog.",
- "keywords": [],
- "type": "blog",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "#sdkupdates"
- ],
- "url": "https://android-developers.blogspot.com/2012/12/localize-your-promotional-graphics-on.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Localize Your Promotional Graphics",
- "summary": "Learn how to capitalise on international audiences.",
- "keywords": [],
- "type": "blog",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "#sdkupdates"
- ],
- "url": "https://android-developers.blogspot.com/2013/10/making-your-app-content-more-accessible.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Make your App Content more Accessible with App Linking",
- "summary": "About using search and deep linking to get more users.",
- "keywords": [],
- "type": "blog",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/+/mobile/android/share/interactive-post",
- "timestamp": 1194884220000,
- "image": 'images/google/gps-googleplus.png',
- "title": "Sharing interactive posts to Google+ from your Android app",
- "summary": "Interactive posts provide an easy and prominent way to allow users to share your site or app with their friends and invite them to take a specific action.",
- "keywords": ["Interactive", "Google+"],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/+/mobile/android/",
- "timestamp": 1194884220000,
- "image": 'images/google/gps-googleplus.png',
- "title": "Google+ Platform",
- "summary": "Find out about features such as interactive posts, Hangouts, accessing basic user details and their social graphs to make your app more personal.",
- "keywords": ["Google+"],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/2528691",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "How to add multiple user accounts to your Developer Console for testing and more.",
- "summary": "",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/+/mobile/android/share/deep-link",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Adding deep linking to Google+ posts shared from your Android app",
- "summary": "",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "google/play/licensing/index.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Application Licensing",
- "summary": "Information on the features of Google Play to protect your apps’ licences.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "design/style/writing.html",
- "timestamp": 1194884220000,
- "image": null,
- "title": "Writing Style",
- "summary": "Android Design guidelines for voice and style in your UI.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://en.wikipedia.org/wiki/XLIFF",
- "timestamp": 1194884220000,
- "image": null,
- "title": "XML Localisation Interchange File Format (XLIFF)",
- "summary": "Background information on XLIFF.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/1078870",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "Graphic Assets for your Application",
- "summary": "Details about the graphics you can add to your product listing.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/googleplay/android-developer/answer/1078870?hl=zh-Hans",
- "timestamp": 1194884220000,
- "image": "images/play_dev.jpg",
- "title": "为你的应用的图片资源",
- "summary": "如何在你的应用的商品详情页面上添加图片资源。",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/payments/answer/2741495",
- "timestamp": null,
- "image": null,
- "title": "Issuing Refunds",
- "summary": "Help Center document describing how to issue refunds.",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/payments/answer/2741495?hl=zh-Hans",
- "timestamp": null,
- "image": null,
- "title": "退回訂單款項",
- "summary": "如何退还已收取的订单款项。",
- "keywords": [],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://android-developers.blogspot.com/2013/11/bring-your-apps-into-classroom-with.html",
- "timestamp": null,
- "image": "distribute/images/gp-edu-apps-image.jpg",
- "title": "Google play for education",
- "summary": " ",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["localization", "pricing", "developer support"],
- "url": "https://support.google.com/googleplay/android-developer/table/3541286",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Supported locations for distributing your apps in Google Play",
- "summary": "Countries and regions where you can distribute your app in Google Play.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": ["localization", "pricing", "developer support"],
- "url": "https://support.google.com/googleplay/android-developer/table/3541286?hl=zh-Hans",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "支持向Google Play用户发布应用的地区",
- "summary": "支持向Google Play用户发布应用的国家/地区。",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["games", "localization", "quality"],
- "url": "https://www.youtube.com/watch?v=SkHHPf3EdzE",
- "timestamp": null,
- "image": "https://developers.google.com/apps/images/io_2013/google-io-logo.png",
- "title": "Level Up Your Android Game",
- "summary": "Learn how to take your game to the next level in this Google I/O session.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["support"],
- "url": "https://support.google.com/groups/answer/46601",
- "timestamp": null,
- "image": null,
- "title": "Google Groups",
- "summary": "Create a group for your community.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["support"],
- "url": "https://support.google.com/plus/topic/2888488",
- "timestamp": null,
- "image": null,
- "title": "Google+ Communities",
- "summary": "Host a Google+ community for testers or users.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["monetize", "ads"],
- "url": "https://www.google.com/doubleclick/publishers/small-business/index.html",
- "timestamp": null,
- "image": "https://www.google.com/doubleclick/publishers/small-business/images/define_ad.png",
- "title": "DoubleClick for Publishers",
- "summary": "A free ad management solution that helps growing publishers sell, schedule, deliver, and measure all of their digital ad inventory.",
- "keywords": ["ads"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["monetize", "ads"],
- "url": "https://support.google.com/googleplay/android-developer/topic/2985714",
- "timestamp": null,
- "image":"images/play_dev.jpg",
- "title": "Policy Center: Ads",
- "summary": "Introduction to ads and system interference policies in Google Play.",
- "keywords": ["ads"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/2611404",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Create Audience lists in Google Analytics",
- "summary": "Find out how to use your analytics data to discover high value users and create remarketing audiences to use in AdMob.",
- "keywords": ["ads, analytics, monetize"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://admob.blogspot.com/",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Inside Admob",
- "summary": "Google’s official blog for news, tips, and information on the AdMob developer platform.",
- "keywords": ["ads, analytics, monetize"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/admob/answer/3111064",
- "timestamp": null,
- "image": "distribute/images/advertising.jpg",
- "title": "AdMob in-app conversion tracking",
- "summary": "Use in-app conversion tracking to attribute revenue back to your IAP promotion campaigns and determine which ones earn you the most.",
- "keywords": ["ads, analytics, conversions"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["monetize", "giftcards"],
- "url": "https://play.google.com/about/giftcards/",
- "timestamp": null,
- "image": "images/gp-balance.png",
- "title": "Google Play Gift Cards",
- "summary": "Buy Google Play gift cards online or at a variety of retail stores.",
- "keywords": ["gift card"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["monetize", "paymentmethods"],
- "url": "https://support.google.com/googleplay/answer/2651410",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Google Play accepted payment methods",
- "summary": "Support details on the payment methods supported in Google Play.",
- "keywords": ["gift card"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/adwords/answer/2471188",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "AdWords Conversion Optimizer",
- "summary": "Learn how Conversion Optimizer works to find the users who are most likely to convert and to serve them your conversion ads.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/app-conversion-tracking/",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Track conversions with the AdWords SDK or server API",
- "summary": "Use the lightweight AdWords app SDK or server-to-server API to track remarketing conversions.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/2611404",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Create Remarketing Audiences in Google Analytics",
- "summary": "Learn how to use preconfigured audiences created by the Analytics team or create your own to use in your conversion campaigns.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/adwords/answer/1704341",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Link your Google Analytics and AdWords accounts",
- "summary": "Gain greater insight into how AdWords is driving app engagement and conversions, and use this insight to improve your ads and app.",
- "keywords": [],
- "type": "distribute",
- "titleFriendly": ""
- },
-
- {
- "lang": "en",
- "group": "",
- "tags": ["plus", "social"],
- "url": "https://plus.google.com/+AndroidDevelopers/",
- "timestamp": null,
- "image": "images/plus.jpg",
- "title": "+Android Developers",
- "summary": "Sharing news, ideas, and techniques for success.",
- "keywords": ["+AndroidDevelopers"],
- "type": "Google+",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["plus", "social"],
- "url": "https://plus.google.com/+GooglePlay",
- "timestamp": null,
- "image": "https://lh4.googleusercontent.com/-IKezweZlcXI/AAAAAAAAAAI/AAAAAAABOvg/uK8Z0jekVE4/s120-c/photo.jpg",
- "title": "+Google Play",
- "summary": "News and discussion about Google Play, apps, and other content in Google+.",
- "keywords": ["+GooglePlay"],
- "type": "Google+",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["support", "android"],
- "url": "support.html",
- "timestamp": null,
- "image": null,
- "title": "Developer Support",
- "summary": "Links to community and support resources for Android developers.",
- "keywords": ["support"],
- "type": "Google+",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/devguides/collection/android/",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Mobile App Analytics SDK",
- "summary": "Measure everything about your app. Get started with the Google Analytics SDK for Android.",
- "keywords": ["analytics, user behavior"],
- "type": "sdk",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/edu/guidelines",
- "timestamp": null,
- "image": "https://developer.android.com/distribute/images/edu-guidelines.jpg",
- "title": "Education Guidelines",
- "summary": "These guidelines and requirements help you develop great apps for students, which offer compelling content and an intuitive user experience on Android tablets.",
- "keywords": [],
- "type": "",
- "titleFriendly": ""
- },
- {
- "lang": "zh-cn",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/edu/guidelines?hl=zh-Hans",
- "timestamp": null,
- "image": "https://developer.android.com/distribute/images/edu-guidelines.jpg",
- "title": "Education Guidelines",
- "summary": "These guidelines and requirements help you develop great apps for students, which offer compelling content and an intuitive user experience on Android tablets.",
- "keywords": [],
- "type": "",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/edu/faq",
- "timestamp": null,
- "image": "https://developer.android.com/distribute/images/gpfe-faq.jpg",
- "title": "Education FAQ",
- "summary": "Answers to common questions you might have about Google Play for Education.",
- "keywords": [],
- "type": "",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/edu/",
- "timestamp": null,
- "image": "https://developers.google.com/edu/images/home-android.png",
- "title": "Chrome Apps in Google Play for Education",
- "summary": "Find out more about Chrome apps in Google Play for Education.",
- "keywords": [],
- "type": "",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/edu/tablets/#tablets-family",
- "timestamp": null,
- "image": "https://www.google.com/edu/images/tablets/big-tablet.png",
- "title": "Google Play for Education Tablets",
- "summary": "Google Play for Education leverages a diverse set up tablets approved for the classroom which may help inform you how to build educational apps.",
- "keywords": [],
- "type": "",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Glu_Deerhunter2014_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Glu_Deerhunter2014_gpgs.png",
- "title": "Deer Hunter 2014 by Glu — Sign-in",
- "summary": "Glu finds that Google Play Game Services helps improve the user experience which leads to increased player happiness. They also find that Play Games Services signed in users tend to play longer and have a higher lifetime value.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/ConcreteSoftware_PBABowling_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/ConcreteSoftware_PBABowling_gpgs.png",
- "title": "PBA® Bowling Challenge by Concrete Software — Quests",
- "summary": "Concrete Software finds that Google Play Game Services' quests are a great way to create new content for users that leads to higher engagement.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Dragonplay_DragonplaySlots_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Dragonplay_DragonplaySlots_gpgs.png",
- "title": "Dragonplay Slots by Dragonplay — Sign-in",
- "summary": "Dragonplay finds that players who sign in with Google Play Games services tend to be high quality users who were highly engaged. They also tend to be easier to convert to paying users.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Gameloft_Asphalt8_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Gameloft_Asphalt8_gpgs.png",
- "title": "Asphalt 8 by Gameloft — Friends invitations",
- "summary": "Gameloft finds that Google Play Game Services users are more engaged than the average Android user and more likely to convert to paying players.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Glu_EternityWarriors3_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Glu_EternityWarriors3_gpgs.png",
- "title": "Eternity Warriors 3 by Glu — Gifting",
- "summary": "Glu finds that Google Play Game Services gifting outperforms other implementations (including those with incentives) because of its seamless flow and consistent performance.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/HotheadGames_RivalsatWar_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/HotheadGames_RivalsatWar_gpgs.jpg",
- "title": "Rivals at War: Firefight by Hothead Games — Leaderboards",
- "summary": "Hothead Games is planning to include Google Play Game Services features in all their games going forwards after seeing that players that signed in with Play Games Services tend to show higher retention and a higher average revenue.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/TMSOFT_Compulsive_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/TMSOFT_Compulsive_gpgs.png",
- "title": "Compulsive by TMSOFT — Cross-platform",
- "summary": "TMSOFT finds that users who authenticate with Play Games Services on Android and iOS play Compulsive twice as much and purchase in-app products over four times as much.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Noodlecake_SuperStickmanGolf2_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Noodlecake_SuperStickmanGolf2_gpgs.png",
- "title": "Super Stickman Golf 2 by Noodlecake Studios — Multiplayer",
- "summary": "Noodlecake Studios finds that Google Play Game Services’ multiplayer feature helps reduce attrition.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/TinyRebel_DoctorWhoLegacy_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/TinyRebelGames_DrWhoLegacy_pgps.png",
- "title": "Dr. Doctor Who: Legacy by Tiny Rebel Games — Achievements",
- "summary": "After integrating achievements and cloud services from Google Play Game Services, Tiny Rebel Games saw a dramatic increase in daily revenues as a result of an increase in daily installs and an increase in the average revenue per install.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Senri_LeosFortune_gpgs.pdf",
- "timestamp": null,
- "image": "https://storage.googleapis.com/androiddevelopers/shareables/stories/Senri_LeosFortune_gpgs.png",
- "title": "Leo’s Fortune by 1337 & Senri — Saved games",
- "summary": "1337 + Senri finds that Google Play Game Services is easy to integrate and provides essential game functions like cloud saved games, achievements and leaderboards which have a very large adoption rate amongst players.",
- "keywords": ["stories"],
- "type": "Case Study Deck",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": ["play,protips"],
- "url": "shareables/distribute/secrets_play/v2/web/secrets_to_app_success_v2_en.pdf",
- "timestamp": 1447437450,
- "image": "images/distribute/secrets_v2_banner.jpg",
- "title": "The Secrets to App Success on Google Play",
- "summary": "Get the updated guide full of useful features, tips, and best practices that will help you grow a successful app or game business on Google Play.",
- "keywords": ["secrets, success, play, google"],
- "type": "Book",
- "category": "distribute"
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "shareables/auto/AndroidAuto-audio-apps.pdf",
- "timestamp": null,
- "image": "auto/images/assets/icons/media_app_playback.png",
- "title": "Android Auto Audio Apps UI Guidelines",
- "summary": "Guidelines for designing audio apps that work with Auto. ",
- "keywords": ["design", "Auto", "Automotive"],
- "type": "Design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "shareables/auto/AndroidAuto-messaging-apps.pdf",
- "timestamp": null,
- "image": "auto/images/assets/icons/messaging_app_notifications.png",
- "title": "Android Auto Messaging Apps UI Guidelines",
- "summary": "Guidelines for designing messaging apps that work with Auto. ",
- "keywords": ["design", "Auto", "Automotive"],
- "type": "Design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "shareables/auto/AndroidAuto-custom-colors.pdf",
- "timestamp": null,
- "image": "auto/images/ui/gearhead_generic_UI.png",
- "title": "Android Auto Color Customization UI Guidelines",
- "summary": "Guidelines for color-customizing apps that work with Auto. ",
- "keywords": ["design", "Auto", "Automotive"],
- "type": "Design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "http://www.youtube.com/watch?v=RRelFvc6Czo",
- "timestamp": null,
- "image": "https://i1.ytimg.com/vi/RRelFvc6Czo/maxresdefault.jpg",
- "title": "Android Developer Story: Smule",
- "summary": "The creators of AutoRap, Magic Piano, and Songify talk about their experiences launching on Android and the explosive global growth they've seen on Google Play.",
- "keywords": ["success", "users"],
- "type": "video",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/solutions/mobile-implementation-guide",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Mobile Analytics Implementation Guide",
- "summary": "Learn how you can implement additional Google Analytics features to better understand your users and their behavior.",
- "keywords": ["analytics", "Play", "users"],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/tagmanager/",
- "timestamp": null,
- "image": "https://www.google.com/tagmanager/images/gtm-hero-illustration-small.png",
- "title": "Google Tag Manager",
- "summary": "Google Tag Manager enables you to change configuration values in your mobile apps using the Google Tag Manager interface, without having to rebuild and resubmit application binaries to app marketplaces.",
- "keywords": ["analytics", "tagmanager"],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://analyticsacademy.withgoogle.com/course04",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Mobile App Analytics Fundamentals",
- "summary": "This self-paced online course on mobile app measurement shows you how Google Analytics data can help you make your app more discoverable and profitable.",
- "keywords": ["analytics"],
- "type": "Open Source Project",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://github.com/googleanalytics/google-analytics-plugin-for-unity",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Analytics Plugin for Unity",
- "summary": "If you're building games with Unity, you can now implement Analytics once and ship it on multiple platforms automatically.",
- "keywords": ["analytics", "unity"],
- "type": "Open Source Project",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/devguides/collection/android/v4/enhanced-ecommerce",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "In-App Purchases & Ecommerce",
- "summary": "If your app sells virtual or real goods, ecommerce tracking can help you understand what behaviors lead to purchases.",
- "keywords": ["analytics, ecommerce"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/1032415",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Goals",
- "summary": "Track important actions in your app as goals and measure performance against your objectives.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/2568874?ref_topic=6012392",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Active Users",
- "summary": "The active user report displays your 1-day, 7-day, 14-day and 30-day trailing active users next to each other, to help you analyze performance over time.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/devguides/collection/android/v4/events",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Events",
- "summary": "Events let you measure granular in-app activities and understand user journeys.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/devguides/collection/android/v4/customdimsmets",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Custom Dimensions",
- "summary": "Custom dimensions enable the association of metadata with hits, users, and sessions in Google Analytics.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/devguides/collection/android/v4/user-id",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "User ID",
- "summary": "The User ID feature enables Google Analytics to measure user activities that span across devices.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/devguides/collection/android/v4/display-features",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Demographic Reporting",
- "summary": "By enabling display features, you can see just how different user segments engage and monetize.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/3123906",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "User Segmentation",
- "summary": "Segments let you compare metrics for different subsets of users to identify trends and opportunities for your apps.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/devguides/collection/android/v4/campaigns",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Campaign Tracking",
- "summary": "Measuring campaigns in Google Analytics enables the attribution of campaigns and traffic sources to user activity within your app.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/2956981",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Google Play Integration",
- "summary": "By linking Analytics and the Play Developer Console, you can gain additional insights into the acquisition flow.",
- "keywords": ["play, analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/1033961",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "AdWords Integration",
- "summary": "Link Analytics and AdWords to see the entire picture of customer behavior, from ad click or impression through your site to conversion. ",
- "keywords": ["adwords, analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/devguides/collection/android/v4/campaigns#google-play-url-builder",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Campaign URL builder for Google Play",
- "summary": "Easily create your URLs to track install campaigns.",
- "keywords": ["play, analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/tagmanager/answer/6003007",
- "timestamp": null,
- "image": "https://www.google.com/tagmanager/images/gtm-hero-illustration-small.png",
- "title": "In-App A/B Testing",
- "summary": "With content experiments in Google Tag Manager you can test multiple variations of your app to find which works best.",
- "keywords": ["tagmanager"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/2785577",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Behavior Flow",
- "summary": "The Behavior Flow report visualizes the path users traveled from one Screen or Event to the next. This report can help you discover what content keeps users engaged with your app.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/1151300",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Custom Reports",
- "summary": "Custom Reports let you create your own reports in your Google Analytics account.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/2611268",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Audience Lists & Remarketing",
- "summary": "Remarketing with Google Analytics lets you deliver targeted ads to users who've already been to your site or app. You can even base those ads on the behavior those users displayed during their sessions.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/admob/answer/3508177",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "AdMob Integration",
- "summary": "With Google Analytics in AdMob, you can view Google Analytics data for your linked apps from within your AdMob account.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/analytics/solutions/mobile-campaign-deep-link",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Deep-Linking",
- "summary": "Google Analytics gives you a full view of how returning users are interacting with your app, for a holistic view beyond the install.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/admob/answer/3508177",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "AdMob Integration",
- "summary": "With Google Analytics in AdMob, you can view Google Analytics data for your linked apps from within your AdMob account.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/analytics/answer/2568874",
- "timestamp": null,
- "image": "images/cards/analytics-mobile_2x.jpg",
- "title": "Active User Report",
- "summary": "Active user report displays your 1-day, 7-day, 14-day and 30-day trailing active users next to each other, to help you run benchmark analyses of their performance over time.",
- "keywords": ["analytics"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/animation/",
- "timestamp": null,
- "image": "images/cards/material-animation_2x.png",
- "title": "Animation",
- "summary": "",
- "keywords": [],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/style/",
- "timestamp": null,
- "image": "images/cards/material-style_2x.jpg",
- "title": "Style",
- "summary": "",
- "keywords": [],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/layout/",
- "timestamp": null,
- "image": "images/cards/material-layout_2x.png",
- "title": "Layout",
- "summary": "",
- "keywords": [],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/components/",
- "timestamp": null,
- "image": "images/cards/material-components_2x.jpg",
- "title": "Components",
- "summary": "",
- "keywords": [],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/patterns/",
- "timestamp": null,
- "image": "images/cards/material-patterns_2x.png",
- "title": "Patterns",
- "summary": "",
- "keywords": [],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/usability/",
- "timestamp": null,
- "image": "images/cards/material-usability_2x.png",
- "title": "Usability",
- "summary": "",
- "keywords": [],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/resources/color-palettes.html",
- "timestamp": null,
- "image": "images/cards/material-color-palette_2x.jpg",
- "title": "Color Palettes",
- "summary": "",
- "keywords": [],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/resources/layout-templates.html",
- "timestamp": null,
- "image": "images/cards/material-layout-template_2x.jpg",
- "title": "Layout Templates",
- "summary": "",
- "keywords": [],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/resources/sticker-sheets-icons.html",
- "timestamp": null,
- "image": "images/cards/material-sticker-sheet_2x.jpg",
- "title": "Sticker Sheets & Icons",
- "summary": "",
- "keywords": [],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.google.com/design/spec/resources/roboto-noto-fonts.html",
- "timestamp": null,
- "image": "images/cards/material-typography_2x.jpg",
- "title": "Typography: Roboto and Noto Sans fonts",
- "summary": "",
- "keywords": [],
- "type": "materialdesign",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "icons",
- "material",
- "iconography"
- ],
- "url": "https://www.google.com/design/icons/index.html",
- "timestamp": null,
- "image": "images/cards/card-material-icons-16x9_2x.jpg",
- "title": "Material icon collection",
- "summary": "",
- "keywords": ["icons"],
- "type": "material design",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/adwords/answer/6032059",
- "timestamp": null,
- "image": "distribute/images/advertising.jpg",
- "title": "Setting up Mobile App Install Ads",
- "summary": "With Mobile app installs campaigns on the Search and Display Networks, and TrueView for mobile app promotion on YouTube, you can create custom app install ads that run exclusively on phones and tablets.",
- "keywords": ["marketing", "admob"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/nearby/",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Create features based on proximity",
- "summary": "Build simple interactions between nearby devices and people.",
- "keywords": ["nearby", "engage"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.youtube.com/watch?v=hultDpBS22s",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Use Nearby Messages to collaborate",
- "summary": "Nearby Messages is perfect for setting up ad-hoc groups, collaborative sessions, or sharing resources with people in a co-located space.",
- "keywords": ["nearby", "engage"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/beacons",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Mark up the world using beacons",
- "summary": "Give your users better location and proximity experiences by providing a strong context signal for their devices in the form of Bluetooth low energy (BLE) beacons with Eddystone.",
- "keywords": ["nearby", "engage"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/adwords/answer/6167164",
- "timestamp": null,
- "image": "distribute/images/advertising.jpg",
- "title": "Best practices for Mobile App Engagement",
- "summary": "Learn how to market to your user base to drive re-engagement with your app. ",
- "keywords": ["marketing", "admob"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "marketing",
- "engagement",
- "adwords1"
- ],
- "url": "https://support.google.com/adwords/answer/6032073",
- "timestamp": null,
- "image": "https://www.gstatic.com/images/icons/material/product/2x/adwords_64dp.png",
- "title": "Setting up Mobile App Engagement Ads",
- "summary": "Mobile app engagement campaigns are a great choice for advertisers focused on connecting with people who already have their app.",
- "keywords": [
- "marketing",
- "engagement",
- "adwords"
- ],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "marketing",
- "engagement",
- "translate"
- ],
- "url": "https://support.google.com/l10n/answer/6359997",
- "timestamp": null,
- "image": "images/play_dev.jpg",
- "title": "Use the App Translation Service",
- "summary": "The App Translation Service is a human translation service. It makes it easy to order translations for app UI strings, Play Store text, in-app purchase products, and universal app campaign ads.",
- "keywords": [
- "marketing",
- "engagement",
- "translate"
- ],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [
- "marketing",
- "engagement"
- ],
- "url": "https://support.google.com/adwords/answer/6167162",
- "timestamp": null,
- "image": "https://www.gstatic.com/images/icons/material/product/2x/adwords_64dp.png",
- "title": "Best Practices for Mobile App Installs",
- "summary": "Getting your mobile app discovered can be challenging. Learn how to drive downloads of your app and grow a valuable user base.",
- "keywords": ["marketing", "adwords"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/admob/topic/2784623",
- "timestamp": null,
- "image": "distribute/images/advertising.jpg",
- "title": "Set up your AdMob account",
- "summary": "Setting up your AdMob account in the right way will help you get the most value, check out the Setup and Basics guide.",
- "keywords": ["marketing", "admob"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://analyticsacademy.withgoogle.com/mobile-app",
- "timestamp": null,
- "image": "distribute/images/advertising.jpg",
- "title": "Analytics Academy for Mobile Apps",
- "summary": "Learn how to use Google Analytics to make your app more discoverable and profitable.",
- "keywords": ["marketing", "analytics"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://www.udacity.com/courses/ud876-3",
- "timestamp": null,
- "image": "distribute/images/advertising.jpg",
- "title": "Learn how to show ads in your Android app",
- "summary": "Take this online course to learn how to use AdMob to display ads in your Android app.",
- "keywords": ["marketing", "analytics"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/mobile-ads-sdk/download",
- "timestamp": null,
- "image": "distribute/images/advertising.jpg",
- "title": "Admob Ads",
- "summary": "Use the Mobile Ads SDK to start showing AdMob ads in your apps.",
- "keywords": ["marketing", "adwords"],
- "type": "Guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/admob/",
- "timestamp": null,
- "image": "distribute/images/advertising.jpg",
- "title": "AdMob Help Center",
- "summary": "For setup assistance, general info, and fixes for specific problems check out the AdMob Help Center.",
- "keywords": ["admob"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://support.google.com/admob/answer/2753860",
- "timestamp": null,
- "image": "distribute/images/advertising.jpg",
- "title": "AdMob Policy Guidelines",
- "summary": "Learn about best practices for displaying AdMob ads in your apps to maximize revenue.",
- "keywords": ["admob"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/app-invites/",
- "timestamp": 1383243492000,
- "image": "images/cards/google-search_2x.png",
- "title": "Set up App Invites",
- "summary": "Bring new users to your apps with personal recommendations, incentives, and offers.",
- "keywords": ["invites", "appinvites", "engagement", "getusers"],
- "type": "guide",
- "titleFriendly": ""
- },
-
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/app-indexing/",
- "timestamp": 1383243492000,
- "image": "images/cards/google-search_2x.png",
- "title": "Set Up App Indexing",
- "summary": "Surface your app content in Google seaerch. Deep link direct to your apps.",
- "keywords": ["search", "appindexing", "engagement", "getusers"],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/app-indexing/webmasters/details",
- "timestamp": null,
- "image": "images/cards/google-search_2x.png",
- "title": "Index your app",
- "summary": "Index your app today by adding deep links and verifying its official web site to ensure it starts appearing in Google Search results. ",
- "keywords": ["appindexing","search","getusers"],
- "type": "distribute",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/identity/sign-in/android/people",
- "timestamp": 1383243492000,
- "image": "images/cards/google-sign-in_2x.png",
- "title": "Get user profile details",
- "summary": "After users sign-in with Google, you can access their age range, language, and public profile information.",
- "keywords": ["signin", "identity", "google"],
- "type": "guide",
- "titleFriendly": ""
- },
-
-
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/identity/sign-in/android/",
- "timestamp": "",
- "image": "images/cards/google-sign-in_2x.png",
- "title": "Google Sign-In",
- "summary": "Discover how you can enhance user experiences on your website or in your app using information provided by their Google identity.",
- "keywords": ["signin", "identity", "google"],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/+/features/play-installs",
- "timestamp": 1383243492000,
- "image": "images/cards/google-sign-in_2x.png",
- "title": "Over-the-air installs",
- "summary": "Follow this step-by-step guide to quickly add Google Sign-in and over-the-air app installs to your website.",
- "keywords": ["signin", "google", "installs"],
- "type": "guide",
- "titleFriendly": ""
- },
- {
- "lang": "en",
- "group": "",
- "tags": [],
- "url": "https://developers.google.com/+/features/analytics",
- "timestamp": 1383243492000,
- "image": 'images/google/gps-googleplus.png',
- "title": "Google+ Insights",
- "summary": "Measure impressions of the over-the-air install prompt, resulting installs, and success rate by day, week, and month.",
- "keywords": ["signin", "identity"],
- "type": "guide",
- "titleFriendly": ""
- },
-
- // Online courses
-
- {
- "title":"UX Design for Mobile Developers",
- "titleFriendly":"",
- "summary":"Learn how to design a 5-star app.",
- "url":"https://www.udacity.com/course/ud849",
- "group":"",
- "keywords": ["mobile","ux","design"],
- "tags": ["courses, start"],
- "image":"images/cards/courses/mobile_ux_course.jpg",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Developing Android Apps",
- "titleFriendly":"",
- "summary":"Learn Android and build an app!",
- "url":"https://www.udacity.com/course/ud853",
- "group":"",
- "keywords": ["android", "start","firstapp","sdk"],
- "tags": ["courses, start"],
- "image":"images/cards/courses/android_fundamentals_course.jpg",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Android Performance",
- "titleFriendly":"",
- "summary":"Optimize your apps for speed and usability.",
- "url":"https://www.udacity.com/course/ud825",
- "group":"",
- "keywords": ["android, performance","battery"],
- "tags": ["courses, performance"],
- "image":"images/cards/courses/android_performance_course.jpg",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Enroll in the Android Nanodegree",
- "titleFriendly":"",
- "summary":"Enroll in the Android Nanodegree to build the skills to work as an Android developer.",
- "url":"https://www.udacity.com/android",
- "group":"",
- "keywords": ["android, nanodegree"],
- "tags": ["courses"],
- "image":"images/cards/courses/android_nanodegree.png",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Advanced Android App Development",
- "titleFriendly":"",
- "summary":"Productionize and publish your apps.",
- "url":"https://www.udacity.com/course/ud855",
- "group":"",
- "keywords": ["android, experts"],
- "tags": ["courses, expert"],
- "image":"images/cards/courses/advanced_android_course.jpg",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Material Design for Android Developers",
- "titleFriendly":"",
- "summary":"Learn how to make your apps material.",
- "url":"https://www.udacity.com/course/ud862",
- "group":"",
- "keywords": ["android, design, pure, material"],
- "tags": ["courses, start, material"],
- "image":"images/cards/courses/android_design_course.jpg",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Android for Beginners",
- "titleFriendly":"",
- "summary":"Make your first Android app, even if you don't write code.",
- "url":"https://www.udacity.com/course/ud837",
- "group":"",
- "keywords": ["android, sdk, firstapp"],
- "tags": ["courses, start"],
- "image":"images/cards/courses/beginning_android_course.jpg",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Gradle for Android and Java",
- "titleFriendly":"",
- "summary":"Build better apps through automation",
- "url":"https://www.udacity.com/course/ud867",
- "group":"",
- "keywords": ["gradle","studio", "sdk"],
- "tags": ["courses, gradle, sdk"],
- "image":"images/cards/courses/gradle_course.jpg",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Add Location and Context to your app",
- "titleFriendly":"",
- "summary":"Make Your Android App Location Aware.",
- "url":"https://www.udacity.com/course/ud876-1",
- "group":"",
- "keywords": ["google services, context, location"],
- "tags": ["courses, google, location, context"],
- "image":"images/cards/courses/android_location_course.png",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Analytics and Tag Manager for Android",
- "titleFriendly":"",
- "summary":"Use Analytics and Tag Manager in Your Apps.",
- "url":"https://www.udacity.com/course/ud876-2",
- "group":"",
- "keywords": ["google services, analytics, tag manager"],
- "tags": ["courses, google, analytics"],
- "image":"images/cards/courses/android_analytics_course.png",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"AdMob for Android",
- "titleFriendly":"",
- "summary":"Monetize Your App by Displaying Ads.",
- "url":"https://www.udacity.com/course/ud876-3",
- "group":"",
- "keywords": ["monetize, google services, ads, admob"],
- "tags": ["courses, google, ads, admob"],
- "image":"images/cards/courses/admob_course.png",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Add Maps to your Android app",
- "titleFriendly":"",
- "summary":"Use maps, cameras, markers and more in your app.",
- "url":"https://www.udacity.com/course/ud876-4",
- "group":"",
- "keywords": ["google, maps, marker, camera"],
- "tags": ["courses, google, maps"],
- "image":"images/cards/courses/android_maps_course.png",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Add Sign-in to your Android app",
- "titleFriendly":"",
- "summary":"Build a Seamless Sign-In Experience.",
- "url":"https://www.udacity.com/course/ud876-5",
- "group":"",
- "keywords": ["google services, signin, authorization"],
- "tags": ["courses, google, auth"],
- "image":"images/cards/courses/android_identity_course.png",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Android Wear Development",
- "titleFriendly":"",
- "summary":"Extend your Apps to Android Smartwatches.",
- "url":"https://www.udacity.com/course/ud875A",
- "group":"",
- "keywords": ["wear, wearables, smartwatch"],
- "tags": ["courses, wear, wearable"],
- "image":"images/cards/courses/android_wear_course.jpg",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Android TV and Google Cast Development",
- "titleFriendly":"",
- "summary":"Extend your Apps to the Big Screen.",
- "url":"https://www.udacity.com/course/ud875B",
- "group":"",
- "keywords": ["cast, living room"],
- "tags": ["courses, cast, tv"],
- "image":"images/cards/courses/android_tv_cast_course.jpg",
- "lang":"en",
- "type":"online course"
- },
- {
- "title":"Android Auto Development",
- "titleFriendly":"",
- "summary":"Put your apps in the driver's seat.",
- "url":"https://www.udacity.com/course/ud875C",
- "group":"",
- "keywords": ["auto"],
- "tags": ["courses, auto"],
- "image":"images/cards/courses/android_auto_course.jpg",
- "lang":"en",
- "type":"online course"
- },
-
-
- // TODO remove this?
- {
- "title":"Android Wear Materials",
- "titleFriendly":"",
- "summary":"Drag and drop your way to beautifully designed Android Wear apps.",
- "url":"design/downloads/index.html#Wear",
- "group":"",
- "keywords": ["icons","stencils","color swatches"],
- "tags": ["icons","stencils","colorswatches"],
- "image":"images/cards/android-wear-materials_2x.jpg",
- "lang":"en",
- "type":"design"
- },
- {
- "title":"Watch Faces for Android Wear",
- "titleFriendly":"",
- "summary":"Watch faces let you customize the most prominent UI feature of Android wearables. The API is simple enough for rapid development and flexible enough to build something awesome.",
- "url":"https://www.youtube.com/watch?v=AK38PJZmIW8&list=PLWz5rJ2EKKc-kIrPiq098QH9dOle-fLef",
- "group":"",
- "keywords": ["wear", "wearable", "watch face"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/AK38PJZmIW8/maxresdefault.jpg",
- "lang":"en",
- "type":"video"
- },
- {
- "title":"Android Support Library",
- "titleFriendly":"",
- "summary":"These essential components help you build a great app that works on the huge variety of Android devices, faster.",
- "url":"https://www.youtube.com/watch?v=3PIc-DuEU2s&list=PLWz5rJ2EKKc9e0d55YHgJFHXNZbGHEXJX",
- "group":"",
- "keywords": ["support", "compatibility"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/3PIc-DuEU2s/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Consistent Design with the AppCompat Support Library",
- "titleFriendly":"",
- "summary":"Getting a great looking app doesn't have to be hard: AppCompat, part of the Android Support Library, gives you a consistent design baseline that works on all Android 2.1 or higher devices.",
- "url":"https://www.youtube.com/watch?v=5Be2mJzP-Uw&list=PLWz5rJ2EKKc9e0d55YHgJFHXNZbGHEXJX",
- "group":"",
- "keywords": ["support", "compatibility","design-code"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/5Be2mJzP-Uw/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Introducing Gradle",
- "titleFriendly":"",
- "summary":"Android Studio uses an entirely new and flexible Gradle-based build system. You will be able to create multiple build variants for a single project, manage library dependencies and always be sure that your application builds correctly across different environments.",
- "url":"https://www.youtube.com/watch?v=cD7NPxuuXYY&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
- "group":"",
- "keywords": ["tools", "studio","gradle"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/cD7NPxuuXYY/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Android Studio Layout Editor",
- "titleFriendly":"",
- "summary":"Android Studio includes a rich, visual layout editor that helps developers create better user interfaces. It eliminates the need to deploy the APK on a real device with each change, making iterations faster and helping eliminate common errors earlier in the development process.",
- "url":"https://www.youtube.com/watch?v=JLLnhwtDoHw&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
- "group":"",
- "keywords": ["tools", "studio","layout"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/JLLnhwtDoHw/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Debugging and testing in Android Studio",
- "titleFriendly":"",
- "summary":"Learn about new debugger features in Android Studio 1.2: value inlining, quick access to referring objects and a Java .class decompiler, just to name a few. See some new tools and views that let you monitor the CPU and memory performance of your app from within the IDE. ",
- "url":"https://www.youtube.com/watch?v=2I6fuD20qlY&list=PLWz5rJ2EKKc8I9gHTMh5yKkwRRGE8BjbQ",
- "group":"",
- "keywords": ["tools", "studio","debugging","profiling","performance"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/2I6fuD20qlY/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Scale with Google Cloud Platform",
- "titleFriendly":"",
- "summary":"Build, test, and deploy applications on Google's highly-scalable and reliable infrastructure for your web, mobile and backend solutions.",
- "url":"https://cloud.google.com/docs/",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/cards/cloud-platform_2x.png",
- "lang":"en",
- "type":"distribute"
- },
- {
- "title":"Opportunities & Programs",
- "titleFriendly":"",
- "summary":"Take advantage of the many ways you can distribute your app to consumers, students, and businesses through Google Play.",
- "url":"distribute/googleplay/index.html#opportunities",
- "group":"",
- "keywords": [],
- "tags": [],
- "image":"images/cards/program-edu_2x.jpg",
- "lang":"en",
- "type":"distribute"
- },
- {
- "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":"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":"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",
- "group":"",
- "keywords": ["work", "enterprise", "emm"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/jQWB_-o1kz4/maxresdefault.jpg",
- "lang":"en",
- "type":"youtube"
- },
- {
- "title":"App Configurations, Testing and Launchers",
- "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":"",
- "keywords": ["work", "enterprise", "emm"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/39NkpWkaH8M/maxresdefault.jpg",
- "lang":"en",
- "type":"youtube"
- },
- {
- "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&list=PLOU2XLYxmsIKAK2Bhv19H2THwF-22O5WX",
- "group":"",
- "keywords": ["work", "enterprise", "emm"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/dH41OutAMNM/maxresdefault.jpg",
- "lang":"en",
- "type":"youtube"
- },
- {
- "title":"Android for Work: Single Use Devices",
- "titleFriendly":"",
- "summary":"Single-purpose computers are everywhere, and Android can meet that need.",
- "url":"https://www.youtube.com/watch?v=j3QC6hcpy90",
- "group":"",
- "keywords": ["work", "enterprise", "emm"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/j3QC6hcpy90/maxresdefault.jpg",
- "lang":"en",
- "type":"youtube"
- },
- {
- "title":"Your Apps at Work",
- "titleFriendly":"",
- "summary":"In this Google I/O 2016 session we’ll give you details for making your app more attractive to businesses.",
- "url":"https://www.youtube.com/watch?v=Za0OQo8DRM4",
- "group":"",
- "keywords": ["work", "enterprise", "emm"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/Za0OQo8DRM4/maxresdefault.jpg",
- "lang":"en",
- "type":"youtube"
- },
- {
- "title":"Discover YouTube cards",
- "titleFriendly":"",
- "summary":"Find out more about YouTube cards, the options available, and how to use them to get the most from your YouTube content.",
- "url":"https://support.google.com/youtube/answer/6140493",
- "group":"",
- "keywords": ["youtube", "video", "users", "installs"],
- "tags": [],
- "image":"images/cards/card-youtube_2x.png",
- "lang":"en",
- "type":"distribute"
- },
- {
- "title":"What is YouTube account good standing?",
- "titleFriendly":"",
- "summary":"Learn what it means for an account to be in good standing from the YouTube Help Center.",
- "url":"https://support.google.com/youtube/answer/2797387",
- "group":"",
- "keywords": ["youtube", "video", "users", "installs"],
- "tags": [],
- "image":"images/cards/card-youtube_2x.png",
- "lang":"en",
- "type":"distribute"
- },
- {
- "title":"What’s New in Android N Developer Preview",
- "titleFriendly":"",
- "summary":"Learn all about the new features in the Android N Preview.",
- "url":"https://www.youtube.com/watch?v=CsulIu3UaUM",
- "group":"",
- "keywords": ["n preview"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/CsulIu3UaUM/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Developing for Android 6.0 (Marshmallow)",
- "titleFriendly":"",
- "summary":"This video covers how to get started with the preview, important APIs to test and how to provide feedback on the preview.",
- "url":"https://www.youtube.com/watch?v=yYU4DHLwoRk",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/yYU4DHLwoRk/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Google I/O 2015 - What's new in Android",
- "titleFriendly":"",
- "summary":"This session will highlight the most exciting new developer features of the Android platform.",
- "url":"https://www.youtube.com/watch?v=ndBdf1_oOGA",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/ndBdf1_oOGA/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Fingerprint and payments APIs",
- "titleFriendly":"",
- "summary":"New fingerprint and payments APIs are introduced in M, to enable enhanced UX and security for online purchasing, banking, and retail payments.",
- "url":"https://www.youtube.com/watch?v=VOn7VrTRlA4",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/VOn7VrTRlA4/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Introduction to Voice Interaction API",
- "titleFriendly":"",
- "summary":"This video covers how to use the Voice Interaction API to support system or custom voice actions.",
- "url":"https://www.youtube.com/watch?v=OW1A4XFRuyc",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/OW1A4XFRuyc/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Android Auto Backup for Apps",
- "titleFriendly":"",
- "summary":"Android Backup is the automatic, cloud-based backup and restore of users’ apps when they set up a new device.",
- "url":"https://www.youtube.com/watch?v=HXacyy0HSW0",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/HXacyy0HSW0/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"New APIs in M for Android for Work",
- "titleFriendly":"",
- "summary":"Android M extends Android for Work functionality with a new set of APIs for Enterprise Mobility Management providers to offer new features and policy controls to IT Departments.",
- "url":"https://www.youtube.com/watch?v=vcSj8ln-BlE",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/vcSj8ln-BlE/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.",
- "url":"https://www.youtube.com/watch?v=C8lUdPVSzDk",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/C8lUdPVSzDk/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Introduction to Doze",
- "titleFriendly":"",
- "summary":"An overview of Doze and how to make sure that your app behaves as expected both in and out of Doze mode. ",
- "url":"https://youtu.be/N72ksDKrX6c",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/N72ksDKrX6c/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"The Nexus 5X, Nexus 6P and Android Marshmallow",
- "titleFriendly":"",
- "summary":"The new Nexus 5X and Nexus 6P along with some of the most significant developer features in the latest Android release,.",
- "url":"https://youtu.be/U9tw5ypqEN0",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/U9tw5ypqEN0/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Asking For Permission Fine",
- "titleFriendly":"",
- "summary":"Picking the right way and time to ask for a permission is critical to it being granted. ",
- "url":"https://youtu.be/iZqDdvhTZj0",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/iZqDdvhTZj0/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Data Binding Library",
- "titleFriendly":"",
- "summary":"Data Binding Library is a way to write declarative layouts and minimize the glue code necessary to bind your application logic and layouts. ",
- "url":"https://youtu.be/5sCQjeGoE7M",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/5sCQjeGoE7M/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"App Links",
- "titleFriendly":"",
- "summary":"App Links is a new feature of Android Marshmallow that brings a faster way of opening website links for domains that you own.",
- "url":"https://youtu.be/LQoohRwojmw",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/LQoohRwojmw/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "title":"Android M Permissions",
- "titleFriendly":"",
- "summary":"An introduction to Android M runtime permissions in Android M from Google I/O 2015. ",
- "url":"https://www.youtube.com/watch?v=f17qe9vZ8RM",
- "group":"",
- "keywords": ["Marshmallow"],
- "tags": [],
- "image":"https://i1.ytimg.com/vi/f17qe9vZ8RM/maxresdefault.jpg",
- "lang":"en",
- "type":"Video"
- },
- {
- "lang": "ja",
- "title": "Gaming Everywhere",
- "titleFriendly": "",
- "summary": "東京ゲームショウ 2014 の基調講演より。",
- "url": "https://www.youtube.com/watch?v=xelYnWcYkuE",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://img.youtube.com/vi/xelYnWcYkuE/hqdefault.jpg",
- "type": "youtube"
- },
- {
- "lang": "ja",
- "title": "Playtime Tokyo",
- "titleFriendly": "",
- "summary": "アプリビジネスのノウハウを各担当者が講演しました。",
- "url": "https://www.youtube.com/playlist?list=PLCOC_kP3nqGIHEgwm9mybvA04Vn4Cg9nn",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://img.youtube.com/vi/lJdjY3z6-LY/hqdefault.jpg",
- "type": "youtube"
- },
- {
- "lang": "ja",
- "title": "Android Wear 関連の動画に日本語字幕が付きました",
- "titleFriendly": "",
- "summary": "",
- "url": "https://googledevjp.blogspot.jp/2014/12/android-wear.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://i1.ytimg.com/vi/4JcDYkgqksY/maxresdefault.jpg",
- "type": "blog"
- },
- {
- "lang": "ja",
- "title": "Android Studio 1.0 をリリースしました",
- "titleFriendly": "",
- "summary": "",
- "url": "https://googledevjp.blogspot.jp/2014/12/android-studio-10.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://3.bp.blogspot.com/-1hV3sD1At74/VIaQSWBasUI/AAAAAAAABAU/9vYLJMsmMuQ/s1600/studio-logo.png",
- "type": "blog"
- },
- {
- "lang": "ja",
- "title": "Google Play 開発者サービス 6.5 のご紹介",
- "titleFriendly": "",
- "summary": "",
- "url": "https://googledevjp.blogspot.jp/2014/12/google-play-65.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://1.bp.blogspot.com/-4BNREC0Jojo/VGo7ahW35wI/AAAAAAAABAc/9thZl94F6fY/s1600/GMS%2B-%2BRelease%2BBlog%2BNacho%2B-%2BMap%2BToolbar.png",
- "type": "blog"
- },
- {
- "lang": "ja",
- "title": "Alpha and Beta Testing",
- "titleFriendly": "",
- "summary": "アプリのローンチにまつわるリスクを最小限にするために必須のツールです。[英語コンテンツ]",
- "url": "intl/ja/distribute/googleplay/developer-console.html#alpha-beta",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "images/gp-dc-ab.png",
- "type": "distribute"
- },
- {
- "lang": "ja",
- "title": "Finding Success on Google Play",
- "titleFriendly": "",
- "summary": "Google Play での成功の秘訣がこの一冊に。[英語コンテンツ]",
- "url": "intl/ja/distribute/googleplay/guide.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "distribute/images/play_dev_guide_b.jpg",
- "type": "distribute"
- },
- {
- "lang": "ja",
- "title": "Core App Quality",
- "titleFriendly": "",
- "summary": "",
- "url": "intl/ja/distribute/essentials/quality/core.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "images/gp-core-quality.png",
- "type": "distribute"
- },
- {
- "lang": "ja",
- "title": "Google Play アプリ ポリシー センター",
- "titleFriendly": "",
- "summary": "",
- "url": "https://support.google.com/googleplay/android-developer/answer/4430948?hl=ja",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://storage.googleapis.com/support-kms-prod/SNP_712EA2784949DDF085C46E3BE7B1DC618A09_4389356_en_v0",
- "type": "distribute"
- },
- {
- "lang": "ja",
- "title": "Developer Support",
- "titleFriendly": "",
- "summary": "",
- "url": "intl/ja/support.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "",
- "type": "distribute"
- },
- {
- "lang": "ja",
- "title": "Wear App Quality",
- "titleFriendly": "",
- "summary": "いよいよウェアラブルの時代が到来。[英語コンテンツ]",
- "url": "intl/ja/distribute/essentials/quality/wear.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "distribute/images/gp-wear-quality.png",
- "type": "distribute"
- },
- {
- "lang": "ja",
- "title": "Google Cloud Platform が支える、新感覚リアルタイム RPG ユニゾンリーグ - 株式会社エイチームの GCP 導入事例",
- "titleFriendly": "",
- "summary": "スケーラブルなバックエンドを実現する Google Cloud Platform の最新導入事例。",
- "url": "https://googleforwork-japan.blogspot.jp/2014/12/gcp-google-cloud-platform-rpg-gcp.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://3.bp.blogspot.com/-xp7KoPkbne4/VI_PfoFil3I/AAAAAAAAA3U/-k1UZ0zjCBc/s1600/unison-league.jpeg",
- "type": "distribute"
- },
- {
- "lang": "ja",
- "title": "Monetize with Ads",
- "titleFriendly": "",
- "summary": "アプリ内広告成功のコツがここに。[英語コンテンツ]",
- "url": "intl/ja/distribute/monetize/ads.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "distribute/images/advertising.jpg",
- "type": "distribute"
- },
- {
- "lang": "ko",
- "title": "구글 플레이 2015년 비전",
- "titleFriendly": "",
- "summary": "G-Star 구글 컨퍼런스",
- "url": "https://www.youtube.com/watch?v=7X9Ue0Nfdh4&index=2&list=PL_WJkTbDHdBksDBRoqfeyLchEQqBAOlNl",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://img.youtube.com/vi/7X9Ue0Nfdh4/hqdefault.jpg",
- "type": "youtube"
- },
- {
- "lang": "ko",
- "title": "구글 플레이 게임",
- "titleFriendly": "",
- "summary": "게임 프로필, 퀘스트, 세이브드 게임 등의 신기능 소개",
- "url": "https://www.youtube.com/watch?v=83FpwuschCQ",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://img.youtube.com/vi/83FpwuschCQ/hqdefault.jpg",
- "type": "youtube"
- },
- {
- "lang": "ko",
- "title": "안드로이드 5.0 롤리팝을 맞이하는 개발자를 위한 안내서",
- "titleFriendly": "",
- "summary": "",
- "url": "https://googledevkr.blogspot.com/2014/11/android50guidefordevelopers.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://lh5.googleusercontent.com/0Gx4Ob_WvIgNOMv3hVMuUm4O7KuSWyxCEFIvy39_6fgXh2q2azqjZf3bpZoEk-LMW-K8GwYMfyYfMUAwp38hhPQ6WFNnddhN2E2_GF3-XBQI_qjhISviz10h_mGgDWsZKA",
- "type": "blog"
- },
- {
- "lang": "ko",
- "title": "안드로이드 앱을 위한 머티리얼 디자인 체크 리스트",
- "titleFriendly": "",
- "summary": "",
- "url": "https://googledevkr.blogspot.com/2014/10/material-design-on-android-checklist.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://lh4.googleusercontent.com/JKoxeDdmsj6gYHV8rmp96U1jHj7FKeMzGBaaFu35kXp5EpJR9Ei9MQFAYghjwJoycdgydw-FZTuFNY8pDx63MWhy37rKC96ajoDXEMzvo9W0sj5yC2-uSYJdhpazVOP2cA",
- "type": "blog"
- },
- {
- "lang": "ko",
- "title": "App Compat 라이브러리",
- "titleFriendly": "",
- "summary": "",
- "url": "https://googledevkr.blogspot.com/2014/10/appcompat-v21-material-design-for-pre.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://2.bp.blogspot.com/-7fF9ayZ6PgI/U9iFpk5FNEI/AAAAAAAAAs0/4P4SCvdB_4M/s640/image00.png",
- "type": "blog"
- },
- {
- "lang": "ko",
- "title": "Alpha and Beta Testing",
- "titleFriendly": "",
- "summary": "출시 전에 완벽한 사전 테스트 [영문]",
- "url": "intl/ko/distribute/googleplay/developer-console.html#alpha-beta",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "images/gp-dc-ab.png",
- "type": "distribute"
- },
- {
- "lang": "ko",
- "title": "Finding Success on Google Play",
- "titleFriendly": "",
- "summary": "구글 플레이에서 성공하는 비결 [영문]",
- "url": "intl/ko/distribute/googleplay/guide.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "distribute/images/play_dev_guide_b.jpg",
- "type": "distribute"
- },
- {
- "lang": "ko",
- "title": "Core App Quality",
- "titleFriendly": "",
- "summary": "고품질 안드로이드 앱 개발 가이드 [영문]",
- "url": "intl/ko/distribute/essentials/quality/core.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "images/gp-core-quality.png",
- "type": "distribute"
- },
- {
- "lang": "ko",
- "title": "Policy Guidelines and Practices",
- "titleFriendly": "",
- "summary": "숙지해야할 중요한 정책 [영문]",
- "url": "https://support.google.com/googleplay/android-developer/answer/4430948?hl=ko",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://storage.googleapis.com/support-kms-prod/SNP_712EA2784949DDF085C46E3BE7B1DC618A09_4389356_en_v0",
- "type": "distribute"
- },
- {
- "lang": "ko",
- "title": "Developer Support",
- "titleFriendly": "",
- "summary": "개발자 지원 센터 활용 [영문]",
- "url": "intl/ko/support.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://lh3.googleusercontent.com/-mGTYed3Uh-E/AAAAAAAAAAI/AAAAAAAAF58/qNYbk4mMhI0/s120-c/photo.jpg",
- "type": "distribute"
- },
- {
- "lang": "ko",
- "title": "Wear App Quality",
- "titleFriendly": "",
- "summary": "웨어러블 앱 개발 가이드 [영문]",
- "url": "intl/ko/distribute/essentials/quality/wear.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "distribute/images/gp-wear-quality.png",
- "type": "distribute"
- },
- {
- "lang": "ko",
- "title": "Android TV 어플리케이션 개발",
- "titleFriendly": "",
- "summary": "앱과 게임을 거실에서 가족과 함께 [영문]",
- "url": "intl/ko/tv/index.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "design/tv/images/atv-home.jpg",
- "type": "distribute"
- },
- {
- "lang": "ko",
- "title": "구글 플레이 게임 서비스",
- "titleFriendly": "",
- "summary": "다양한 구글 플레이 게임 서비스 기능 알아보기 [영문]",
- "url": "intl/ko/google/play-services/games.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "https://developers.google.com/games/services/images/gamescreen3.jpg",
- "type": "distribute"
- },
- {
- "lang": "ko",
- "title": "Monetize with Ads",
- "titleFriendly": "",
- "summary": "광고로 수익 창출하기 [영문]",
- "url": "intl/ko/distribute/monetize/ads.html",
- "group": "",
- "keywords": [],
- "tags": [],
- "image": "distribute/images/advertising.jpg",
- "type": "distribute"
- },
- {
- "url":"https://www.youtube.com/watch?v=QDM52bblwlg",
- "image": "images/distribute/hero-family-discovery.jpg",
- "title": "Introducing the new family discovery experience on Google Play",
- "summary": "Help families create little moments on Google Play. Opt-in your apps now.",
- "tags":["families","googleplay"],
- "type":"youtube"
- },
- {
- "url":"https://www.youtube.com/watch?v=wcjqBSei3a0&list=PLOU2XLYxmsIKLNUPiFCWVtcO7mZRZ9MmS",
- "image": "https://i1.ytimg.com/vi/wcjqBSei3a0/maxresdefault.jpg",
- "title": "Developers connecting the world through Google Play",
- "summary": "The mobile ecosystem is empowering developers to make good on the dream of connecting the world through technology to improve people's lives.",
- "tags":["io15","googleplay"],
- "keywords":["Google I/O 2015","io"],
- "type":"youtube"
- },
- {
- "url":"https://www.youtube.com/watch?v=B6ydLpkhq04&list=PLOU2XLYxmsIKLNUPiFCWVtcO7mZRZ9MmS",
- "image": "https://i1.ytimg.com/vi/B6ydLpkhq04/maxresdefault.jpg",
- "title": "Store Listing Experiments for Google Play",
- "summary": "Learn how to use Google Play’s new store listing optimization feature to get more installs of your app, and how to test different graphics and text to find out which options perform the best. ",
- "tags":["io15","googleplay","store listing"],
- "tags":["google i/o","google play","store listing"],
- "type":"youtube"
- },
- {
- "url":"https://www.youtube.com/watch?v=jyO3-rF4Mu0&list=PLOU2XLYxmsIKLNUPiFCWVtcO7mZRZ9MmS",
- "image": "https://i1.ytimg.com/vi/jyO3-rF4Mu0/maxresdefault.jpg",
- "title": "Growing games with Google",
- "summary": "The games industry has never been more promising and full of opportunities. This talk covers how Google is helping developers across a broad range of existing and emerging platforms.",
- "tags":["io15","android", "googleplay","games"],
- "keywords":["Google I/O","google play","games"],
- "type":"youtube"
- },
- {
- "url":"https://www.youtube.com/watch?v=yJisuP94lHU",
- "image": "images/distribute/hero-playtime-opener.jpg",
- "title": "Playtime 2015: Innovation happens everywhere",
- "type":"Video",
- "tags":["googleplay"],
- "summary": "Watch the opening video from Google Play's annual event series, Playtime, which celebrates inspirational developers who are changing the world around them.",
- },
-{
- "url":"https://www.youtube.com/watch?v=JrR6o5tYMWQ",
- "image": "images/distribute/hero-acquisition-devbyte.jpg",
- "title": "User acquisition and tracking on Google Play",
- "type" : "Video",
- "tags" : "users,googleplay,googleio",
- "summary": "Learn how to get new users, using Universal app campaigns directly within the Google Play Developer Console to increase your installs from ads, and find out how your acquisition channels perform.",
- },
-]);
-
-var CAROUSEL_OVERRIDE = {
- "distribute/googleplay/guide.html": {
- "image": "images/distribute/hero-secrets-to-app-success.jpg",
- "title": "The Secrets to App Success on Google Play",
- "summary": "Get the updated guide full of useful features, tips, and best practices that will help you grow a successful app or game business on Google Play.",
- },
- "about/versions/lollipop.html": {
- "image": "images/home/hero-lollipop_2x.png",
- "heroColor": "#263238",
- "heroInvert": true,
- "title": "Android 5.0 Lollipop",
- "summary": "The Android 5.0 update adds a variety of new features for your apps, such as notifications on the lock screen, an all-new camera API, OpenGL ES 3.1, the new naterial design interface, and much more.",
- },
- "http://www.youtube.com/watch?v=Pms0pcyPbAM": {
- "url":"https://www.youtube.com/watch?v=Pms0pcyPbAM&list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c]",
- "image": "images/distribute/hero-carousel-giftedmom.jpg",
- "title": "Gifted Mom reaches more mothers across Africa with Android",
- "type":"youtube",
- "summary": "Gifted Mom is an app developed in Cameroon which provides users with critical information about pregnancy, breastfeeding and child vaccinations. Hear the creators explain how they built their business on Google Play.",
- },
- "http://www.youtube.com/watch?v=9m6MoBM-sFI": {
- "url":"https://www.youtube.com/watch?v=9m6MoBM-sFI&list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c&index=3",
- "image": "images/distribute/hero-carousel-sgn.jpg",
- "title": "SGN increases installs with Store Listing Experiments",
- "type" : "youtube",
- "summary": "Watch mobile game developer SGN talk about how using Store Listing Experiments to test multiple variants across their portfolio of games helped improve their ROI, conversion rates and gamer retention.",
- },
- "http://www.youtube.com/watch?v=e7t3svG9PTk": {
- "url":"https://www.youtube.com/watch?v=e7t3svG9PTk&index=2&list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c",
- "image": "images/distribute/hero-carousel-djit.jpg",
- "title": "DJiT builds higher quality experiences on Android",
- "type" : "youtube",
- "summary": "Learn how Music app developer DJiT create higher quality apps with improved latency on Android Marshmallow, as well as other Android and Google Play features.",
- },
- "http://www.youtube.com/watch?v=J3IvOfvH1ys": {
- "url":"https://www.youtube.com/watch?v=J3IvOfvH1ys&list=PLWz5rJ2EKKc9ofd2f-_-xmUi07wIGZa1c&index=1",
- "image": "images/distribute/hero-carousel-wego.jpg",
- "title": "Wego increases user retention with material design",
- "type" : "youtube",
- "summary": "Hear how online travel marketplace Wego, increased monthly user retention by 300% and reduced uninstall rates by up to 25% with material design.",
- },
- "https://www.youtube.com/watch?v=QDM52bblwlg": {
- "url":"distribute/googleplay/families/about.html",
- "image": "images/distribute/hero-family-discovery.jpg",
- "title": "Designed for families",
- "summary": "Introducing the new family discovery experience in Google Play. Your apps can benefit from enhanced discoverability and maintain their existing categories, rankings, and reviews elsewhere in the store. Opt-in your apps today.",
- "type":"distribute",
- },
- "https://www.youtube.com/watch?v=wcjqBSei3a0&list=PLOU2XLYxmsIKLNUPiFCWVtcO7mZRZ9MmS": {
- "url":"https://www.youtube.com/watch?v=wcjqBSei3a0&list=PLOU2XLYxmsIKLNUPiFCWVtcO7mZRZ9MmS",
- "image": "images/distribute/hero-IO15-google-play.jpg",
- "title": "Connecting the world through Google Play",
- "tags":["io15"],
- "summary": "In this this Google I/O talk, hear how the mobile ecosystem is empowering developers to connect the world through technology and improve people's lives.",
- },
- "https://www.youtube.com/watch?v=B6ydLpkhq04&list=PLOU2XLYxmsIKLNUPiFCWVtcO7mZRZ9MmS": {
- "image": "images/distribute/hero-store-listing-experience.jpg",
- "title": "Using Google Play store listing experiments",
- "tags":["io15"],
- "summary": "Learn how to use Google Play store listing experiments to get more installs in this Google I/O talk. Test different graphics and text to find out which options perform the best. ",
- },
- "https://www.youtube.com/watch?v=jyO3-rF4Mu0&list=PLOU2XLYxmsIKLNUPiFCWVtcO7mZRZ9MmS": {
- "image": "images/distribute/hero-IO15-growing-games.jpg",
- "title": "Growing games with Google",
- "tags":["io15"],
- "summary": "The games industry has never been more promising and full of opportunities. This talk from Google I/O 2015 covers how Google is helping developers across a broad range of existing and emerging platforms.",
- }
-};
diff --git a/docs/html/jd_extras_en.js b/docs/html/jd_extras_en.js
index c79ad88..f3469b4 100644
--- a/docs/html/jd_extras_en.js
+++ b/docs/html/jd_extras_en.js
@@ -156,6 +156,16 @@
"lang":"en"
},
{
+ "title":"GPU Debugger",
+ "summary":"Use the GPU Debugger to analyze and debug your OpenGL ES apps. Inspect the GPU state and understand what caused a specific rendering outcome.",
+ "url":"studio/debug/am-gpu-debugger.html",
+ "image":"images/tools/thumbnails/am-gpu-debugger_2-2_2x.png",
+ "type":"tools",
+ "keywords": ["android","performance","profiling","tools","monitor","debug"],
+ "tags": ["android","performance","profiling","tools","monitor","debug"],
+ "lang":"en"
+ },
+ {
"title":"HPROF Viewer and Analyzer",
"summary":"Use the Memory Monitor to dump the Java heap to an HPROF file. The HPROF Viewer displays classes, instances of each class, and a reference tree to help you track memory usage and find memory leaks.",
"url":"studio/profile/am-hprof.html",
@@ -5453,6 +5463,12 @@
"studio/profile/am-sysinfo.html"
]
},
+"tools/help/gpu": {
+ "title": "",
+ "resources": [
+ "studio/debug/am-gpu-debugger.html"
+ ]
+ },
"tools/help/shot": {
"title": "",
"resources": [
@@ -5559,13 +5575,13 @@
"nougat/landing/resources": {
"title": "",
"resources": [
- "about/versions/nougat/api-overview.html",
- "about/versions/nougat/behavior-changes.html",
- "about/versions/nougat/samples.html",
+ "about/versions/nougat/android-7.0.html",
+ "about/versions/nougat/android-7.0-changes.html",
+ "about/versions/nougat/android-7.0-samples.html",
]
},
- "preview/landing/videos/first": {
+ "nougat/landing/videos/first": {
"title": "",
"resources": [
"https://www.youtube.com/watch?v=CsulIu3UaUM"
@@ -5583,21 +5599,20 @@
"training/articles/memory.html",
]
},
-
- "preview/landing/more": {
+ "nougat/landing/more": {
"title": "",
"resources": [
- "preview/features/multi-window.html",
- "preview/features/notification-updates.html",
- "preview/features/background-optimization.html",
- "preview/features/data-saver.html",
- "preview/features/direct-boot.html",
- "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"
+ "guide/topics/ui/multi-window.html",
+ "guide/topics/ui/notifiers/notifications.html",
+ "topic/performance/background-optimization.html",
+ "training/basics/network-ops/data-saver.html",
+ "training/articles/direct-boot.html",
+ "guide/topics/resources/icu4j-framework.html",
+ "guide/topics/resources/multilingual-support.html",
+ "training/articles/scoped-directory-access.html",
+ "training/articles/security-config.html",
+ "training/tv/playback/picture-in-picture.html",
+ "training/tv/tif/content-recording.html"
]
},
"work/landing/primary": {
diff --git a/docs/html/sdk/1.0_r1/installing.jd b/docs/html/sdk/1.0_r1/installing.jd
index 38c2a1a..eb02742 100644
--- a/docs/html/sdk/1.0_r1/installing.jd
+++ b/docs/html/sdk/1.0_r1/installing.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.0_r1/requirements.jd b/docs/html/sdk/1.0_r1/requirements.jd
index 96fdcb26..41774f0 100644
--- a/docs/html/sdk/1.0_r1/requirements.jd
+++ b/docs/html/sdk/1.0_r1/requirements.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.0_r2/installing.jd b/docs/html/sdk/1.0_r2/installing.jd
index 38c2a1a..eb02742 100644
--- a/docs/html/sdk/1.0_r2/installing.jd
+++ b/docs/html/sdk/1.0_r2/installing.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.0_r2/requirements.jd b/docs/html/sdk/1.0_r2/requirements.jd
index 96fdcb26..41774f0 100644
--- a/docs/html/sdk/1.0_r2/requirements.jd
+++ b/docs/html/sdk/1.0_r2/requirements.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.1_r1/installing.jd b/docs/html/sdk/1.1_r1/installing.jd
index 38c2a1a..eb02742 100644
--- a/docs/html/sdk/1.1_r1/installing.jd
+++ b/docs/html/sdk/1.1_r1/installing.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.1_r1/requirements.jd b/docs/html/sdk/1.1_r1/requirements.jd
index 96fdcb26..41774f0 100644
--- a/docs/html/sdk/1.1_r1/requirements.jd
+++ b/docs/html/sdk/1.1_r1/requirements.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.5_r1/installing.jd b/docs/html/sdk/1.5_r1/installing.jd
index 38c2a1a..eb02742 100644
--- a/docs/html/sdk/1.5_r1/installing.jd
+++ b/docs/html/sdk/1.5_r1/installing.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.5_r1/requirements.jd b/docs/html/sdk/1.5_r1/requirements.jd
index 96fdcb26..41774f0 100644
--- a/docs/html/sdk/1.5_r1/requirements.jd
+++ b/docs/html/sdk/1.5_r1/requirements.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.5_r2/installing.jd b/docs/html/sdk/1.5_r2/installing.jd
index 38c2a1a..eb02742 100644
--- a/docs/html/sdk/1.5_r2/installing.jd
+++ b/docs/html/sdk/1.5_r2/installing.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.5_r2/requirements.jd b/docs/html/sdk/1.5_r2/requirements.jd
index 96fdcb26..41774f0 100644
--- a/docs/html/sdk/1.5_r2/requirements.jd
+++ b/docs/html/sdk/1.5_r2/requirements.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.5_r3/installing.jd b/docs/html/sdk/1.5_r3/installing.jd
index 38c2a1a..eb02742 100644
--- a/docs/html/sdk/1.5_r3/installing.jd
+++ b/docs/html/sdk/1.5_r3/installing.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.5_r3/requirements.jd b/docs/html/sdk/1.5_r3/requirements.jd
index 96fdcb26..41774f0 100644
--- a/docs/html/sdk/1.5_r3/requirements.jd
+++ b/docs/html/sdk/1.5_r3/requirements.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.6_r1/installing.jd b/docs/html/sdk/1.6_r1/installing.jd
index 38c2a1a..eb02742 100644
--- a/docs/html/sdk/1.6_r1/installing.jd
+++ b/docs/html/sdk/1.6_r1/installing.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/1.6_r1/requirements.jd b/docs/html/sdk/1.6_r1/requirements.jd
index 96fdcb26..41774f0 100644
--- a/docs/html/sdk/1.6_r1/requirements.jd
+++ b/docs/html/sdk/1.6_r1/requirements.jd
@@ -1,3 +1,4 @@
+excludeFromSuggestions=true
@jd:body
<script type="text/javascript">
diff --git a/docs/html/sdk/api_diff/23/changes/alldiffs_index_additions.html b/docs/html/sdk/api_diff/23/changes/alldiffs_index_additions.html
index 2383e43..6a3f6414 100644
--- a/docs/html/sdk/api_diff/23/changes/alldiffs_index_additions.html
+++ b/docs/html/sdk/api_diff/23/changes/alldiffs_index_additions.html
@@ -4182,8 +4182,7 @@
<!-- Field YUV_444_888 -->
<nobr><A HREF="android.graphics.ImageFormat.html#android.graphics.ImageFormat.YUV_444_888" class="hiddenlink" target="rightframe">YUV_444_888</A>
</nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/alldiffs_index_all.html b/docs/html/sdk/api_diff/23/changes/alldiffs_index_all.html
index e87800d..1fd3725 100644
--- a/docs/html/sdk/api_diff/23/changes/alldiffs_index_all.html
+++ b/docs/html/sdk/api_diff/23/changes/alldiffs_index_all.html
@@ -6082,8 +6082,7 @@
<!-- Field YUV_444_888 -->
<nobr><A HREF="android.graphics.ImageFormat.html#android.graphics.ImageFormat.YUV_444_888" class="hiddenlink" target="rightframe">YUV_444_888</A>
</nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/alldiffs_index_changes.html b/docs/html/sdk/api_diff/23/changes/alldiffs_index_changes.html
index 826aa62..33cc0bd 100644
--- a/docs/html/sdk/api_diff/23/changes/alldiffs_index_changes.html
+++ b/docs/html/sdk/api_diff/23/changes/alldiffs_index_changes.html
@@ -1983,8 +1983,7 @@
<!-- Field yearListSelectorColor -->
<nobr><A HREF="android.R.attr.html#android.R.attr.yearListSelectorColor" class="hiddenlink" target="rightframe">yearListSelectorColor</A>
</nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/alldiffs_index_removals.html b/docs/html/sdk/api_diff/23/changes/alldiffs_index_removals.html
index 19b6bb0..15930d0 100644
--- a/docs/html/sdk/api_diff/23/changes/alldiffs_index_removals.html
+++ b/docs/html/sdk/api_diff/23/changes/alldiffs_index_removals.html
@@ -973,8 +973,7 @@
<nobr> in
<A HREF="android.Manifest.permission_group.html#android.Manifest.permission_group.WRITE_USER_DICTIONARY" class="hiddenlink" target="rightframe"><strike>android.Manifest.permission_group</strike></A>
</nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.Manifest.permission.html b/docs/html/sdk/api_diff/23/changes/android.Manifest.permission.html
index be3ec69..501882a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.Manifest.permission.html
+++ b/docs/html/sdk/api_diff/23/changes/android.Manifest.permission.html
@@ -399,8 +399,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.Manifest.permission_group.html b/docs/html/sdk/api_diff/23/changes/android.Manifest.permission_group.html
index 1781743..9645fcd 100644
--- a/docs/html/sdk/api_diff/23/changes/android.Manifest.permission_group.html
+++ b/docs/html/sdk/api_diff/23/changes/android.Manifest.permission_group.html
@@ -319,8 +319,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.R.attr.html b/docs/html/sdk/api_diff/23/changes/android.R.attr.html
index 52d4ec2..8e86e0f 100644
--- a/docs/html/sdk/api_diff/23/changes/android.R.attr.html
+++ b/docs/html/sdk/api_diff/23/changes/android.R.attr.html
@@ -503,8 +503,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.R.id.html b/docs/html/sdk/api_diff/23/changes/android.R.id.html
index 6e6537d..235afdf 100644
--- a/docs/html/sdk/api_diff/23/changes/android.R.id.html
+++ b/docs/html/sdk/api_diff/23/changes/android.R.id.html
@@ -185,8 +185,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.R.string.html b/docs/html/sdk/api_diff/23/changes/android.R.string.html
index d1f5a19..6f44837 100644
--- a/docs/html/sdk/api_diff/23/changes/android.R.string.html
+++ b/docs/html/sdk/api_diff/23/changes/android.R.string.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.R.style.html b/docs/html/sdk/api_diff/23/changes/android.R.style.html
index c076156..b265fe9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.R.style.html
+++ b/docs/html/sdk/api_diff/23/changes/android.R.style.html
@@ -136,8 +136,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.accounts.AbstractAccountAuthenticator.html b/docs/html/sdk/api_diff/23/changes/android.accounts.AbstractAccountAuthenticator.html
index 7f3f24f..b3075446 100644
--- a/docs/html/sdk/api_diff/23/changes/android.accounts.AbstractAccountAuthenticator.html
+++ b/docs/html/sdk/api_diff/23/changes/android.accounts.AbstractAccountAuthenticator.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.accounts.AccountManager.html b/docs/html/sdk/api_diff/23/changes/android.accounts.AccountManager.html
index 9da3f90..b04bb6c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.accounts.AccountManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.accounts.AccountManager.html
@@ -148,8 +148,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.Activity.html b/docs/html/sdk/api_diff/23/changes/android.app.Activity.html
index b37bb90..f7cf218 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.Activity.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.Activity.html
@@ -206,8 +206,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.RecentTaskInfo.html b/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.RecentTaskInfo.html
index a2420b55..086938b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.RecentTaskInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.RecentTaskInfo.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.RunningAppProcessInfo.html b/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.RunningAppProcessInfo.html
index 83fdcbc..a937792 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.RunningAppProcessInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.RunningAppProcessInfo.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.html b/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.html
index 0e0eab2..3d8a173 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.ActivityManager.html
@@ -176,8 +176,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.ActivityOptions.html b/docs/html/sdk/api_diff/23/changes/android.app.ActivityOptions.html
index e014f34..8fd496b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.ActivityOptions.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.ActivityOptions.html
@@ -144,8 +144,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.AlarmManager.html b/docs/html/sdk/api_diff/23/changes/android.app.AlarmManager.html
index c02ce3d..3e641cd 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.AlarmManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.AlarmManager.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.AlertDialog.Builder.html b/docs/html/sdk/api_diff/23/changes/android.app.AlertDialog.Builder.html
index dc11ed4..1f1b513 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.AlertDialog.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.AlertDialog.Builder.html
@@ -111,8 +111,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.AlertDialog.html b/docs/html/sdk/api_diff/23/changes/android.app.AlertDialog.html
index 98ac4ee..06f572b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.AlertDialog.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.AlertDialog.html
@@ -146,8 +146,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.AppOpsManager.html b/docs/html/sdk/api_diff/23/changes/android.app.AppOpsManager.html
index 93ef93a..a641d72 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.AppOpsManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.AppOpsManager.html
@@ -305,8 +305,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.Dialog.html b/docs/html/sdk/api_diff/23/changes/android.app.Dialog.html
index eb2c903..15babc5 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.Dialog.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.Dialog.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.Fragment.html b/docs/html/sdk/api_diff/23/changes/android.app.Fragment.html
index b7bf3af..0051c3e 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.Fragment.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.Fragment.html
@@ -190,8 +190,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.Instrumentation.html b/docs/html/sdk/api_diff/23/changes/android.app.Instrumentation.html
index b159575..0d98974 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.Instrumentation.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.Instrumentation.html
@@ -121,8 +121,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.KeyguardManager.html b/docs/html/sdk/api_diff/23/changes/android.app.KeyguardManager.html
index 14eecf4..93d0f63 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.KeyguardManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.KeyguardManager.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.Notification.Action.Builder.html b/docs/html/sdk/api_diff/23/changes/android.app.Notification.Action.Builder.html
index 53af4ae..763a0d6 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.Notification.Action.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.Notification.Action.Builder.html
@@ -126,8 +126,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.Notification.Action.html b/docs/html/sdk/api_diff/23/changes/android.app.Notification.Action.html
index b19098e..2f6f3b9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.Notification.Action.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.Notification.Action.html
@@ -143,8 +143,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.Notification.BigPictureStyle.html b/docs/html/sdk/api_diff/23/changes/android.app.Notification.BigPictureStyle.html
index 70b14d9..1ba93ca4 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.Notification.BigPictureStyle.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.Notification.BigPictureStyle.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.Notification.Builder.html b/docs/html/sdk/api_diff/23/changes/android.app.Notification.Builder.html
index 8dab8ea..1109b07 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.Notification.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.Notification.Builder.html
@@ -133,8 +133,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.Notification.html b/docs/html/sdk/api_diff/23/changes/android.app.Notification.html
index ce5ef7c..81fb1a7 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.Notification.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.Notification.html
@@ -171,8 +171,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.NotificationManager.html b/docs/html/sdk/api_diff/23/changes/android.app.NotificationManager.html
index 97655b4e..a035224 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.NotificationManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.NotificationManager.html
@@ -207,8 +207,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.PendingIntent.html b/docs/html/sdk/api_diff/23/changes/android.app.PendingIntent.html
index b88319d..722c1a9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.PendingIntent.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.PendingIntent.html
@@ -123,8 +123,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.SharedElementCallback.html b/docs/html/sdk/api_diff/23/changes/android.app.SharedElementCallback.html
index 10129b1..934db81 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.SharedElementCallback.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.SharedElementCallback.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.WallpaperManager.html b/docs/html/sdk/api_diff/23/changes/android.app.WallpaperManager.html
index c7cfcab..292b27556 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.WallpaperManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.WallpaperManager.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.admin.DeviceAdminReceiver.html b/docs/html/sdk/api_diff/23/changes/android.app.admin.DeviceAdminReceiver.html
index 2cbe178..09b492e 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.admin.DeviceAdminReceiver.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.admin.DeviceAdminReceiver.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.admin.DevicePolicyManager.html b/docs/html/sdk/api_diff/23/changes/android.app.admin.DevicePolicyManager.html
index 122b54c..4cc2ccd 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.admin.DevicePolicyManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.admin.DevicePolicyManager.html
@@ -371,8 +371,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.usage.UsageEvents.Event.html b/docs/html/sdk/api_diff/23/changes/android.app.usage.UsageEvents.Event.html
index 4f860ab..45ae543 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.usage.UsageEvents.Event.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.usage.UsageEvents.Event.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.app.usage.UsageStatsManager.html b/docs/html/sdk/api_diff/23/changes/android.app.usage.UsageStatsManager.html
index 8761ae6..769af2e 100644
--- a/docs/html/sdk/api_diff/23/changes/android.app.usage.UsageStatsManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.app.usage.UsageStatsManager.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothDevice.html b/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothDevice.html
index d6b30ef..c9dbc8c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothDevice.html
+++ b/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothDevice.html
@@ -137,8 +137,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothProfile.html b/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothProfile.html
index 6649c72..bffb4d6 100644
--- a/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothProfile.html
+++ b/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothProfile.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothSocket.html b/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothSocket.html
index dee2254..8479ea9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothSocket.html
+++ b/docs/html/sdk/api_diff/23/changes/android.bluetooth.BluetoothSocket.html
@@ -151,8 +151,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.bluetooth.le.ScanSettings.Builder.html b/docs/html/sdk/api_diff/23/changes/android.bluetooth.le.ScanSettings.Builder.html
index 94d20f3..397e981 100644
--- a/docs/html/sdk/api_diff/23/changes/android.bluetooth.le.ScanSettings.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.bluetooth.le.ScanSettings.Builder.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.bluetooth.le.ScanSettings.html b/docs/html/sdk/api_diff/23/changes/android.bluetooth.le.ScanSettings.html
index 210a809..7fa4b7a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.bluetooth.le.ScanSettings.html
+++ b/docs/html/sdk/api_diff/23/changes/android.bluetooth.le.ScanSettings.html
@@ -157,8 +157,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.AbstractThreadedSyncAdapter.html b/docs/html/sdk/api_diff/23/changes/android.content.AbstractThreadedSyncAdapter.html
index 38f5c6b..25ddd8d 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.AbstractThreadedSyncAdapter.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.AbstractThreadedSyncAdapter.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.ComponentName.html b/docs/html/sdk/api_diff/23/changes/android.content.ComponentName.html
index a78ce74..3a1cb88 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.ComponentName.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.ComponentName.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.ContentProviderOperation.html b/docs/html/sdk/api_diff/23/changes/android.content.ContentProviderOperation.html
index bd570f0..1b047aa 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.ContentProviderOperation.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.ContentProviderOperation.html
@@ -129,8 +129,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.Context.html b/docs/html/sdk/api_diff/23/changes/android.content.Context.html
index be00806..ad2f8e1 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.Context.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.Context.html
@@ -189,8 +189,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.ContextWrapper.html b/docs/html/sdk/api_diff/23/changes/android.content.ContextWrapper.html
index 6e48e64..17c3b93 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.ContextWrapper.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.ContextWrapper.html
@@ -253,8 +253,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.Intent.html b/docs/html/sdk/api_diff/23/changes/android.content.Intent.html
index d71904b..4a0e289 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.Intent.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.Intent.html
@@ -164,8 +164,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.RestrictionEntry.html b/docs/html/sdk/api_diff/23/changes/android.content.RestrictionEntry.html
index 4e78b31..e368453 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.RestrictionEntry.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.RestrictionEntry.html
@@ -151,8 +151,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.RestrictionsManager.html b/docs/html/sdk/api_diff/23/changes/android.content.RestrictionsManager.html
index 0b5c0b6..7ca3272 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.RestrictionsManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.RestrictionsManager.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.pm.ApplicationInfo.html b/docs/html/sdk/api_diff/23/changes/android.content.pm.ApplicationInfo.html
index 3262fe3..66c10ef 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.pm.ApplicationInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.pm.ApplicationInfo.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.pm.PackageInfo.html b/docs/html/sdk/api_diff/23/changes/android.content.pm.PackageInfo.html
index 28be185..924dca5 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.pm.PackageInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.pm.PackageInfo.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.pm.PackageManager.html b/docs/html/sdk/api_diff/23/changes/android.content.pm.PackageManager.html
index d00bffa..e7ff620 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.pm.PackageManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.pm.PackageManager.html
@@ -158,8 +158,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.pm.PermissionInfo.html b/docs/html/sdk/api_diff/23/changes/android.content.pm.PermissionInfo.html
index c85a871..1148ad4 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.pm.PermissionInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.pm.PermissionInfo.html
@@ -178,8 +178,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.res.ColorStateList.html b/docs/html/sdk/api_diff/23/changes/android.content.res.ColorStateList.html
index ce13686..358f993 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.res.ColorStateList.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.res.ColorStateList.html
@@ -137,8 +137,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.res.Configuration.html b/docs/html/sdk/api_diff/23/changes/android.content.res.Configuration.html
index 398bcd8..06b13a0 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.res.Configuration.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.res.Configuration.html
@@ -144,8 +144,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.res.Resources.Theme.html b/docs/html/sdk/api_diff/23/changes/android.content.res.Resources.Theme.html
index 7339619..bb3a197 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.res.Resources.Theme.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.res.Resources.Theme.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.content.res.Resources.html b/docs/html/sdk/api_diff/23/changes/android.content.res.Resources.html
index a2df740..799d2dd 100644
--- a/docs/html/sdk/api_diff/23/changes/android.content.res.Resources.html
+++ b/docs/html/sdk/api_diff/23/changes/android.content.res.Resources.html
@@ -151,8 +151,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.database.AbstractCursor.html b/docs/html/sdk/api_diff/23/changes/android.database.AbstractCursor.html
index 2a16c48..463080ac 100644
--- a/docs/html/sdk/api_diff/23/changes/android.database.AbstractCursor.html
+++ b/docs/html/sdk/api_diff/23/changes/android.database.AbstractCursor.html
@@ -172,8 +172,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.database.Cursor.html b/docs/html/sdk/api_diff/23/changes/android.database.Cursor.html
index 53dd3d5..383f11e 100644
--- a/docs/html/sdk/api_diff/23/changes/android.database.Cursor.html
+++ b/docs/html/sdk/api_diff/23/changes/android.database.Cursor.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.database.CursorWrapper.html b/docs/html/sdk/api_diff/23/changes/android.database.CursorWrapper.html
index 72326bb..cbaa49b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.database.CursorWrapper.html
+++ b/docs/html/sdk/api_diff/23/changes/android.database.CursorWrapper.html
@@ -136,8 +136,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.Canvas.html b/docs/html/sdk/api_diff/23/changes/android.graphics.Canvas.html
index 2941907..1ba777a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.Canvas.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.Canvas.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.ImageFormat.html b/docs/html/sdk/api_diff/23/changes/android.graphics.ImageFormat.html
index e79f471..2e560e3 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.ImageFormat.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.ImageFormat.html
@@ -157,8 +157,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.Paint.html b/docs/html/sdk/api_diff/23/changes/android.graphics.Paint.html
index a318b03..f5a9b6c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.Paint.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.Paint.html
@@ -136,8 +136,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.AnimatedVectorDrawable.html b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.AnimatedVectorDrawable.html
index 5b69bf5..ca61893 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.AnimatedVectorDrawable.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.AnimatedVectorDrawable.html
@@ -130,8 +130,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.ClipDrawable.html b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.ClipDrawable.html
index 837e800..2f0c6c4 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.ClipDrawable.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.ClipDrawable.html
@@ -177,8 +177,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.Drawable.html b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.Drawable.html
index f47da86..30b0c36 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.Drawable.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.Drawable.html
@@ -154,8 +154,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.InsetDrawable.html b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.InsetDrawable.html
index 133fbaa..5c2dfa2 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.InsetDrawable.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.InsetDrawable.html
@@ -187,8 +187,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.LayerDrawable.html b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.LayerDrawable.html
index 4a74187..aa314ce 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.LayerDrawable.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.LayerDrawable.html
@@ -318,8 +318,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.RippleDrawable.html b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.RippleDrawable.html
index 11b3cd5..9d27715 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.RippleDrawable.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.RippleDrawable.html
@@ -130,8 +130,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.RotateDrawable.html b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.RotateDrawable.html
index 201aad5..4dad05f 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.RotateDrawable.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.RotateDrawable.html
@@ -197,8 +197,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.ScaleDrawable.html b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.ScaleDrawable.html
index 9a8f973..033edec 100644
--- a/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.ScaleDrawable.html
+++ b/docs/html/sdk/api_diff/23/changes/android.graphics.drawable.ScaleDrawable.html
@@ -187,8 +187,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.Camera.html b/docs/html/sdk/api_diff/23/changes/android.hardware.Camera.html
index f6cd4b4..6313228 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.Camera.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.Camera.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraAccessException.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraAccessException.html
index c814d74..3e894ae 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraAccessException.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraAccessException.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCaptureSession.StateCallback.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCaptureSession.StateCallback.html
index f7dea8a..ccb7a52 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCaptureSession.StateCallback.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCaptureSession.StateCallback.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCaptureSession.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCaptureSession.html
index 4a90974..5dd352d 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCaptureSession.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCaptureSession.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCharacteristics.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCharacteristics.html
index 5b0b7d1..ecab6df 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCharacteristics.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraCharacteristics.html
@@ -199,8 +199,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraDevice.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraDevice.html
index 6d82a71..2f74d97 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraDevice.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraDevice.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraManager.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraManager.html
index 673e92b..e927f0b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraManager.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraMetadata.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraMetadata.html
index 62d7ace..e4b9195 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraMetadata.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CameraMetadata.html
@@ -209,8 +209,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CaptureRequest.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CaptureRequest.html
index 72e5ce5..936c076 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CaptureRequest.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CaptureRequest.html
@@ -137,8 +137,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CaptureResult.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CaptureResult.html
index 0b1d532..0137f79 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CaptureResult.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.CaptureResult.html
@@ -150,8 +150,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.params.StreamConfigurationMap.html b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.params.StreamConfigurationMap.html
index b71163a..d95a6ac 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.params.StreamConfigurationMap.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.camera2.params.StreamConfigurationMap.html
@@ -129,8 +129,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.hardware.usb.UsbDevice.html b/docs/html/sdk/api_diff/23/changes/android.hardware.usb.UsbDevice.html
index 7e76be3..0a7732f 100644
--- a/docs/html/sdk/api_diff/23/changes/android.hardware.usb.UsbDevice.html
+++ b/docs/html/sdk/api_diff/23/changes/android.hardware.usb.UsbDevice.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.AsyncPlayer.html b/docs/html/sdk/api_diff/23/changes/android.media.AsyncPlayer.html
index f68d1e8..f74a543 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.AsyncPlayer.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.AsyncPlayer.html
@@ -130,8 +130,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.AudioFormat.Builder.html b/docs/html/sdk/api_diff/23/changes/android.media.AudioFormat.Builder.html
index c56efd8..bdbeb51 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.AudioFormat.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.AudioFormat.Builder.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.AudioFormat.html b/docs/html/sdk/api_diff/23/changes/android.media.AudioFormat.html
index cf84a6f..412bcb3 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.AudioFormat.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.AudioFormat.html
@@ -161,8 +161,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.AudioManager.html b/docs/html/sdk/api_diff/23/changes/android.media.AudioManager.html
index f479b11..bd9df5d 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.AudioManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.AudioManager.html
@@ -221,8 +221,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.AudioRecord.html b/docs/html/sdk/api_diff/23/changes/android.media.AudioRecord.html
index ad8a1da..a1d5a9c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.AudioRecord.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.AudioRecord.html
@@ -200,8 +200,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.AudioTrack.html b/docs/html/sdk/api_diff/23/changes/android.media.AudioTrack.html
index 62022ed..ea3bd18 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.AudioTrack.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.AudioTrack.html
@@ -185,8 +185,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.ExifInterface.html b/docs/html/sdk/api_diff/23/changes/android.media.ExifInterface.html
index 5318461..2b79d99 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.ExifInterface.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.ExifInterface.html
@@ -129,8 +129,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.Image.html b/docs/html/sdk/api_diff/23/changes/android.media.Image.html
index d05aa87..63c18eb 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.Image.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.Image.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.CodecException.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.CodecException.html
index 2c30a5a..0e1c9b5 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.CodecException.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.CodecException.html
@@ -130,8 +130,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.CryptoException.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.CryptoException.html
index bc9f887..985125a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.CryptoException.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.CryptoException.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.html
index dc5ccdb..293ec08 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodec.html
@@ -136,8 +136,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.CodecCapabilities.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.CodecCapabilities.html
index f3ac732..cbb34c3 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.CodecCapabilities.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.CodecCapabilities.html
@@ -501,8 +501,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.CodecProfileLevel.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.CodecProfileLevel.html
index 440e651..181a607 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.CodecProfileLevel.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.CodecProfileLevel.html
@@ -171,8 +171,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.VideoCapabilities.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.VideoCapabilities.html
index acceec8..7983a12 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.VideoCapabilities.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaCodecInfo.VideoCapabilities.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaCrypto.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaCrypto.html
index 8751953..9206dfc 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaCrypto.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaCrypto.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaDescription.Builder.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaDescription.Builder.html
index de70f44..a4f1496 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaDescription.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaDescription.Builder.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaDescription.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaDescription.html
index 869ae0f..b92a242 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaDescription.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaDescription.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaDrm.KeyRequest.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaDrm.KeyRequest.html
index 2ecbc24..c807b8b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaDrm.KeyRequest.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaDrm.KeyRequest.html
@@ -137,8 +137,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaDrm.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaDrm.html
index 2b2967a5..4254172 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaDrm.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaDrm.html
@@ -147,8 +147,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaExtractor.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaExtractor.html
index 0f99c34..bce1b1c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaExtractor.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaExtractor.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaFormat.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaFormat.html
index f308bfb..09fd3c6 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaFormat.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaFormat.html
@@ -150,8 +150,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaMetadataRetriever.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaMetadataRetriever.html
index 1290ded..ca59780 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaMetadataRetriever.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaMetadataRetriever.html
@@ -123,8 +123,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaPlayer.TrackInfo.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaPlayer.TrackInfo.html
index d222c25..831c6fb 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaPlayer.TrackInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaPlayer.TrackInfo.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaPlayer.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaPlayer.html
index 87b3eff..45d23e4 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaPlayer.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaPlayer.html
@@ -150,8 +150,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.MediaRecorder.html b/docs/html/sdk/api_diff/23/changes/android.media.MediaRecorder.html
index d3eb76f..fc17d9b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.MediaRecorder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.MediaRecorder.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.browse.MediaBrowser.html b/docs/html/sdk/api_diff/23/changes/android.media.browse.MediaBrowser.html
index 64bf6b6..7340a90 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.browse.MediaBrowser.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.browse.MediaBrowser.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.session.MediaController.TransportControls.html b/docs/html/sdk/api_diff/23/changes/android.media.session.MediaController.TransportControls.html
index 1bb85d3..30bd3e0 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.session.MediaController.TransportControls.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.session.MediaController.TransportControls.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.session.MediaSession.Callback.html b/docs/html/sdk/api_diff/23/changes/android.media.session.MediaSession.Callback.html
index 2137ecb..c62343e 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.session.MediaSession.Callback.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.session.MediaSession.Callback.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.session.PlaybackState.html b/docs/html/sdk/api_diff/23/changes/android.media.session.PlaybackState.html
index 64160b3..9b1913c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.session.PlaybackState.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.session.PlaybackState.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContentRating.html b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContentRating.html
index a6ef2e7..2eb9289 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContentRating.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContentRating.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContract.Channels.html b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContract.Channels.html
index 5171bf5..0504ca0 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContract.Channels.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContract.Channels.html
@@ -164,8 +164,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContract.Programs.html b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContract.Programs.html
index 49cee1d..e87dcb7 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContract.Programs.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvContract.Programs.html
@@ -136,8 +136,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvInputManager.html b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvInputManager.html
index c1ea72f..b55a2d0 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvInputManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvInputManager.html
@@ -143,8 +143,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvInputService.Session.html b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvInputService.Session.html
index c66ace3..57f8357 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvInputService.Session.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvInputService.Session.html
@@ -164,8 +164,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvTrackInfo.Builder.html b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvTrackInfo.Builder.html
index 808a001..5660eb1 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvTrackInfo.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvTrackInfo.Builder.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvTrackInfo.html b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvTrackInfo.html
index 4d90aec..e5bc56b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvTrackInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvTrackInfo.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvView.TvInputCallback.html b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvView.TvInputCallback.html
index df8a7ce..b0b2837 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvView.TvInputCallback.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvView.TvInputCallback.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvView.html b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvView.html
index b2ed301..fd3436f 100644
--- a/docs/html/sdk/api_diff/23/changes/android.media.tv.TvView.html
+++ b/docs/html/sdk/api_diff/23/changes/android.media.tv.TvView.html
@@ -136,8 +136,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.ConnectivityManager.html b/docs/html/sdk/api_diff/23/changes/android.net.ConnectivityManager.html
index be3320d..2d502b9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.ConnectivityManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.ConnectivityManager.html
@@ -282,8 +282,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.IpPrefix.html b/docs/html/sdk/api_diff/23/changes/android.net.IpPrefix.html
index 82570e1..75c7810 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.IpPrefix.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.IpPrefix.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.Network.html b/docs/html/sdk/api_diff/23/changes/android.net.Network.html
index eb7203d..c1ee6e0 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.Network.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.Network.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.NetworkCapabilities.html b/docs/html/sdk/api_diff/23/changes/android.net.NetworkCapabilities.html
index 4739b02..5d27820 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.NetworkCapabilities.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.NetworkCapabilities.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.Proxy.html b/docs/html/sdk/api_diff/23/changes/android.net.Proxy.html
index 847205a..2ecff4f 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.Proxy.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.Proxy.html
@@ -110,8 +110,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.ProxyInfo.html b/docs/html/sdk/api_diff/23/changes/android.net.ProxyInfo.html
index 61e1552..3b1bb7c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.ProxyInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.ProxyInfo.html
@@ -94,8 +94,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.SSLCertificateSocketFactory.html b/docs/html/sdk/api_diff/23/changes/android.net.SSLCertificateSocketFactory.html
index 9066e26..1c39138 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.SSLCertificateSocketFactory.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.SSLCertificateSocketFactory.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.wifi.ScanResult.html b/docs/html/sdk/api_diff/23/changes/android.net.wifi.ScanResult.html
index 640f0e2..acb7f4b6 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.wifi.ScanResult.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.wifi.ScanResult.html
@@ -193,8 +193,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiConfiguration.html b/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiConfiguration.html
index c49efb6..8319235 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiConfiguration.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiConfiguration.html
@@ -130,8 +130,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiEnterpriseConfig.Eap.html b/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiEnterpriseConfig.Eap.html
index 9a6cb9e..8ce143c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiEnterpriseConfig.Eap.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiEnterpriseConfig.Eap.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiEnterpriseConfig.html b/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiEnterpriseConfig.html
index ac0d9c3..a7ce4e2 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiEnterpriseConfig.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiEnterpriseConfig.html
@@ -185,8 +185,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiManager.html b/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiManager.html
index 21c1048..eb631ad 100644
--- a/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.net.wifi.WifiManager.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.nfc.NfcEvent.html b/docs/html/sdk/api_diff/23/changes/android.nfc.NfcEvent.html
index 39adff8..7a7310a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.nfc.NfcEvent.html
+++ b/docs/html/sdk/api_diff/23/changes/android.nfc.NfcEvent.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.BatteryManager.html b/docs/html/sdk/api_diff/23/changes/android.os.BatteryManager.html
index 1970c7b..12542d8 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.BatteryManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.BatteryManager.html
@@ -145,8 +145,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.Build.VERSION.html b/docs/html/sdk/api_diff/23/changes/android.os.Build.VERSION.html
index 9726626..ee3040c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.Build.VERSION.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.Build.VERSION.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.Build.VERSION_CODES.html b/docs/html/sdk/api_diff/23/changes/android.os.Build.VERSION_CODES.html
index 1d42a0f..8cf9c73 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.Build.VERSION_CODES.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.Build.VERSION_CODES.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.DeadObjectException.html b/docs/html/sdk/api_diff/23/changes/android.os.DeadObjectException.html
index ccbf91b..908c9c7 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.DeadObjectException.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.DeadObjectException.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.Debug.InstructionCount.html b/docs/html/sdk/api_diff/23/changes/android.os.Debug.InstructionCount.html
index 801afaf..cbdf07f 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.Debug.InstructionCount.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.Debug.InstructionCount.html
@@ -94,8 +94,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.Debug.MemoryInfo.html b/docs/html/sdk/api_diff/23/changes/android.os.Debug.MemoryInfo.html
index 77ee3a0..f409353 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.Debug.MemoryInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.Debug.MemoryInfo.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.Debug.html b/docs/html/sdk/api_diff/23/changes/android.os.Debug.html
index a97af60..583f481 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.Debug.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.Debug.html
@@ -350,8 +350,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.Environment.html b/docs/html/sdk/api_diff/23/changes/android.os.Environment.html
index e4d759a..56315a8 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.Environment.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.Environment.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.Looper.html b/docs/html/sdk/api_diff/23/changes/android.os.Looper.html
index e70904e..e200aed 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.Looper.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.Looper.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.MessageQueue.html b/docs/html/sdk/api_diff/23/changes/android.os.MessageQueue.html
index 31ac6891..1ac8eb3 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.MessageQueue.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.MessageQueue.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.Parcel.html b/docs/html/sdk/api_diff/23/changes/android.os.Parcel.html
index 2d5daba..9d724db 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.Parcel.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.Parcel.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.PowerManager.html b/docs/html/sdk/api_diff/23/changes/android.os.PowerManager.html
index a0e4809..af683c7 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.PowerManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.PowerManager.html
@@ -130,8 +130,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.Process.html b/docs/html/sdk/api_diff/23/changes/android.os.Process.html
index 73fcb63..84b9fa8 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.Process.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.Process.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.RecoverySystem.html b/docs/html/sdk/api_diff/23/changes/android.os.RecoverySystem.html
index 19fc015..48dcc36 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.RecoverySystem.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.RecoverySystem.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.StrictMode.ThreadPolicy.Builder.html b/docs/html/sdk/api_diff/23/changes/android.os.StrictMode.ThreadPolicy.Builder.html
index 414a7ca..90b3dbe 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.StrictMode.ThreadPolicy.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.StrictMode.ThreadPolicy.Builder.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.StrictMode.VmPolicy.Builder.html b/docs/html/sdk/api_diff/23/changes/android.os.StrictMode.VmPolicy.Builder.html
index ed031a0..780f1bc 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.StrictMode.VmPolicy.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.StrictMode.VmPolicy.Builder.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.TransactionTooLargeException.html b/docs/html/sdk/api_diff/23/changes/android.os.TransactionTooLargeException.html
index b4c452f..fb9883d 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.TransactionTooLargeException.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.TransactionTooLargeException.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.os.UserManager.html b/docs/html/sdk/api_diff/23/changes/android.os.UserManager.html
index c8cb278..d77c6b9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.os.UserManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.os.UserManager.html
@@ -169,8 +169,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.print.PrintAttributes.Builder.html b/docs/html/sdk/api_diff/23/changes/android.print.PrintAttributes.Builder.html
index 69d6fad..45b754c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.print.PrintAttributes.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.print.PrintAttributes.Builder.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.print.PrintAttributes.html b/docs/html/sdk/api_diff/23/changes/android.print.PrintAttributes.html
index a607bdb..34938b5 100644
--- a/docs/html/sdk/api_diff/23/changes/android.print.PrintAttributes.html
+++ b/docs/html/sdk/api_diff/23/changes/android.print.PrintAttributes.html
@@ -137,8 +137,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.print.PrinterCapabilitiesInfo.Builder.html b/docs/html/sdk/api_diff/23/changes/android.print.PrinterCapabilitiesInfo.Builder.html
index dc00459..a2ba700 100644
--- a/docs/html/sdk/api_diff/23/changes/android.print.PrinterCapabilitiesInfo.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.print.PrinterCapabilitiesInfo.Builder.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.print.PrinterCapabilitiesInfo.html b/docs/html/sdk/api_diff/23/changes/android.print.PrinterCapabilitiesInfo.html
index 1fc8ff6..94bd989 100644
--- a/docs/html/sdk/api_diff/23/changes/android.print.PrinterCapabilitiesInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.print.PrinterCapabilitiesInfo.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.printservice.PrintService.html b/docs/html/sdk/api_diff/23/changes/android.printservice.PrintService.html
index 7ffa278..32fe84c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.printservice.PrintService.html
+++ b/docs/html/sdk/api_diff/23/changes/android.printservice.PrintService.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.AlarmClock.html b/docs/html/sdk/api_diff/23/changes/android.provider.AlarmClock.html
index 15b2c45..0d7a2ce 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.AlarmClock.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.AlarmClock.html
@@ -164,8 +164,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.Browser.html b/docs/html/sdk/api_diff/23/changes/android.provider.Browser.html
index 3a5ba25..27b667c1 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.Browser.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.Browser.html
@@ -305,8 +305,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.CallLog.Calls.html b/docs/html/sdk/api_diff/23/changes/android.provider.CallLog.Calls.html
index 812e33c..5f91a2a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.CallLog.Calls.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.CallLog.Calls.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.CommonDataKinds.Email.html b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
index 2b1f7434..eb560eb 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.CommonDataKinds.Email.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.Contacts.html b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.Contacts.html
index a5b4618..13eb03a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.Contacts.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.Contacts.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.DataColumns.html b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.DataColumns.html
index d9dc7aa..95690b9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.DataColumns.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.DataColumns.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.DisplayNameSources.html b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.DisplayNameSources.html
index ebcf996..8e9ec5b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.DisplayNameSources.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.DisplayNameSources.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.Intents.Insert.html b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.Intents.Insert.html
index d399871..e9dbed6 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.Intents.Insert.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.Intents.Insert.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.QuickContact.html b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.QuickContact.html
index f09d783..0f722e7 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.QuickContact.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.ContactsContract.QuickContact.html
@@ -137,8 +137,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.DocumentsContract.html b/docs/html/sdk/api_diff/23/changes/android.provider.DocumentsContract.html
index b65d7a4..530a1b9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.DocumentsContract.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.DocumentsContract.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.MediaStore.html b/docs/html/sdk/api_diff/23/changes/android.provider.MediaStore.html
index 4aeb95c..37516f0 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.MediaStore.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.MediaStore.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.Settings.Global.html b/docs/html/sdk/api_diff/23/changes/android.provider.Settings.Global.html
index 37b53e6..da128db 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.Settings.Global.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.Settings.Global.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.Settings.Secure.html b/docs/html/sdk/api_diff/23/changes/android.provider.Settings.Secure.html
index 211e50b..518c7fe 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.Settings.Secure.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.Settings.Secure.html
@@ -128,8 +128,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.Settings.System.html b/docs/html/sdk/api_diff/23/changes/android.provider.Settings.System.html
index 9a18a09..22df972 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.Settings.System.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.Settings.System.html
@@ -201,8 +201,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.Settings.html b/docs/html/sdk/api_diff/23/changes/android.provider.Settings.html
index 6224aec..3d60046 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.Settings.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.Settings.html
@@ -214,8 +214,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.Telephony.Threads.html b/docs/html/sdk/api_diff/23/changes/android.provider.Telephony.Threads.html
index 7ea8016..bc1a029 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.Telephony.Threads.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.Telephony.Threads.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.VoicemailContract.Status.html b/docs/html/sdk/api_diff/23/changes/android.provider.VoicemailContract.Status.html
index 9afd431..fb885fb 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.VoicemailContract.Status.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.VoicemailContract.Status.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.provider.VoicemailContract.Voicemails.html b/docs/html/sdk/api_diff/23/changes/android.provider.VoicemailContract.Voicemails.html
index 237ded2..e577928 100644
--- a/docs/html/sdk/api_diff/23/changes/android.provider.VoicemailContract.Voicemails.html
+++ b/docs/html/sdk/api_diff/23/changes/android.provider.VoicemailContract.Voicemails.html
@@ -129,8 +129,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.renderscript.Allocation.html b/docs/html/sdk/api_diff/23/changes/android.renderscript.Allocation.html
index 04b9c76..f9e05cc 100644
--- a/docs/html/sdk/api_diff/23/changes/android.renderscript.Allocation.html
+++ b/docs/html/sdk/api_diff/23/changes/android.renderscript.Allocation.html
@@ -241,8 +241,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.renderscript.AllocationAdapter.html b/docs/html/sdk/api_diff/23/changes/android.renderscript.AllocationAdapter.html
index 2e4a7d8..beb15c5 100644
--- a/docs/html/sdk/api_diff/23/changes/android.renderscript.AllocationAdapter.html
+++ b/docs/html/sdk/api_diff/23/changes/android.renderscript.AllocationAdapter.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.renderscript.Element.html b/docs/html/sdk/api_diff/23/changes/android.renderscript.Element.html
index 78583e4..de45493 100644
--- a/docs/html/sdk/api_diff/23/changes/android.renderscript.Element.html
+++ b/docs/html/sdk/api_diff/23/changes/android.renderscript.Element.html
@@ -129,8 +129,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.renderscript.RenderScript.html b/docs/html/sdk/api_diff/23/changes/android.renderscript.RenderScript.html
index 24d4b9a..a9da0d8 100644
--- a/docs/html/sdk/api_diff/23/changes/android.renderscript.RenderScript.html
+++ b/docs/html/sdk/api_diff/23/changes/android.renderscript.RenderScript.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.renderscript.Script.html b/docs/html/sdk/api_diff/23/changes/android.renderscript.Script.html
index b86c319..af71e31 100644
--- a/docs/html/sdk/api_diff/23/changes/android.renderscript.Script.html
+++ b/docs/html/sdk/api_diff/23/changes/android.renderscript.Script.html
@@ -122,8 +122,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.renderscript.ScriptGroup.Builder.html b/docs/html/sdk/api_diff/23/changes/android.renderscript.ScriptGroup.Builder.html
index aaf8ccd..8971916 100644
--- a/docs/html/sdk/api_diff/23/changes/android.renderscript.ScriptGroup.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.renderscript.ScriptGroup.Builder.html
@@ -94,8 +94,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.renderscript.ScriptGroup.html b/docs/html/sdk/api_diff/23/changes/android.renderscript.ScriptGroup.html
index c3aa6e7..c639619 100644
--- a/docs/html/sdk/api_diff/23/changes/android.renderscript.ScriptGroup.html
+++ b/docs/html/sdk/api_diff/23/changes/android.renderscript.ScriptGroup.html
@@ -158,8 +158,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.security.KeyChain.html b/docs/html/sdk/api_diff/23/changes/android.security.KeyChain.html
index 33dbc3a1..17845b4 100644
--- a/docs/html/sdk/api_diff/23/changes/android.security.KeyChain.html
+++ b/docs/html/sdk/api_diff/23/changes/android.security.KeyChain.html
@@ -126,8 +126,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.security.KeyPairGeneratorSpec.Builder.html b/docs/html/sdk/api_diff/23/changes/android.security.KeyPairGeneratorSpec.Builder.html
index a61cc22..ab27faf 100644
--- a/docs/html/sdk/api_diff/23/changes/android.security.KeyPairGeneratorSpec.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.security.KeyPairGeneratorSpec.Builder.html
@@ -94,8 +94,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.security.KeyPairGeneratorSpec.html b/docs/html/sdk/api_diff/23/changes/android.security.KeyPairGeneratorSpec.html
index e6e22a3..bd25c91 100644
--- a/docs/html/sdk/api_diff/23/changes/android.security.KeyPairGeneratorSpec.html
+++ b/docs/html/sdk/api_diff/23/changes/android.security.KeyPairGeneratorSpec.html
@@ -94,8 +94,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.security.KeyStoreParameter.Builder.html b/docs/html/sdk/api_diff/23/changes/android.security.KeyStoreParameter.Builder.html
index 8b0a592..8e3a063 100644
--- a/docs/html/sdk/api_diff/23/changes/android.security.KeyStoreParameter.Builder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.security.KeyStoreParameter.Builder.html
@@ -94,8 +94,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.security.KeyStoreParameter.html b/docs/html/sdk/api_diff/23/changes/android.security.KeyStoreParameter.html
index 1200736..8aafe78 100644
--- a/docs/html/sdk/api_diff/23/changes/android.security.KeyStoreParameter.html
+++ b/docs/html/sdk/api_diff/23/changes/android.security.KeyStoreParameter.html
@@ -94,8 +94,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.service.carrier.CarrierMessagingService.html b/docs/html/sdk/api_diff/23/changes/android.service.carrier.CarrierMessagingService.html
index f82d8a3..46675f7 100644
--- a/docs/html/sdk/api_diff/23/changes/android.service.carrier.CarrierMessagingService.html
+++ b/docs/html/sdk/api_diff/23/changes/android.service.carrier.CarrierMessagingService.html
@@ -187,8 +187,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.service.dreams.DreamService.html b/docs/html/sdk/api_diff/23/changes/android.service.dreams.DreamService.html
index 7285d81..f58cdc3 100644
--- a/docs/html/sdk/api_diff/23/changes/android.service.dreams.DreamService.html
+++ b/docs/html/sdk/api_diff/23/changes/android.service.dreams.DreamService.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.service.media.MediaBrowserService.html b/docs/html/sdk/api_diff/23/changes/android.service.media.MediaBrowserService.html
index 92e64f6..0128032 100644
--- a/docs/html/sdk/api_diff/23/changes/android.service.media.MediaBrowserService.html
+++ b/docs/html/sdk/api_diff/23/changes/android.service.media.MediaBrowserService.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.service.notification.NotificationListenerService.html b/docs/html/sdk/api_diff/23/changes/android.service.notification.NotificationListenerService.html
index 635f562..b563ed6 100644
--- a/docs/html/sdk/api_diff/23/changes/android.service.notification.NotificationListenerService.html
+++ b/docs/html/sdk/api_diff/23/changes/android.service.notification.NotificationListenerService.html
@@ -130,8 +130,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.service.voice.VoiceInteractionService.html b/docs/html/sdk/api_diff/23/changes/android.service.voice.VoiceInteractionService.html
index 0a936f0..cedb8f1 100644
--- a/docs/html/sdk/api_diff/23/changes/android.service.voice.VoiceInteractionService.html
+++ b/docs/html/sdk/api_diff/23/changes/android.service.voice.VoiceInteractionService.html
@@ -144,8 +144,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.service.voice.VoiceInteractionSession.html b/docs/html/sdk/api_diff/23/changes/android.service.voice.VoiceInteractionSession.html
index 5c2ebb6..64fe582 100644
--- a/docs/html/sdk/api_diff/23/changes/android.service.voice.VoiceInteractionSession.html
+++ b/docs/html/sdk/api_diff/23/changes/android.service.voice.VoiceInteractionSession.html
@@ -395,8 +395,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.speech.RecognitionService.Callback.html b/docs/html/sdk/api_diff/23/changes/android.speech.RecognitionService.Callback.html
index 4907e35..4a20d3a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.speech.RecognitionService.Callback.html
+++ b/docs/html/sdk/api_diff/23/changes/android.speech.RecognitionService.Callback.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.speech.RecognizerIntent.html b/docs/html/sdk/api_diff/23/changes/android.speech.RecognizerIntent.html
index e347574..a27d165 100644
--- a/docs/html/sdk/api_diff/23/changes/android.speech.RecognizerIntent.html
+++ b/docs/html/sdk/api_diff/23/changes/android.speech.RecognizerIntent.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.speech.tts.UtteranceProgressListener.html b/docs/html/sdk/api_diff/23/changes/android.speech.tts.UtteranceProgressListener.html
index 0384ecb..2de54e9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.speech.tts.UtteranceProgressListener.html
+++ b/docs/html/sdk/api_diff/23/changes/android.speech.tts.UtteranceProgressListener.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.system.OsConstants.html b/docs/html/sdk/api_diff/23/changes/android.system.OsConstants.html
index 4037e49..5c08aa4 100644
--- a/docs/html/sdk/api_diff/23/changes/android.system.OsConstants.html
+++ b/docs/html/sdk/api_diff/23/changes/android.system.OsConstants.html
@@ -164,8 +164,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.telecom.TelecomManager.html b/docs/html/sdk/api_diff/23/changes/android.telecom.TelecomManager.html
index 118d9f0..64ac489 100644
--- a/docs/html/sdk/api_diff/23/changes/android.telecom.TelecomManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.telecom.TelecomManager.html
@@ -326,8 +326,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.telephony.CellSignalStrength.html b/docs/html/sdk/api_diff/23/changes/android.telephony.CellSignalStrength.html
index 1ddc8b4..d57b76e 100644
--- a/docs/html/sdk/api_diff/23/changes/android.telephony.CellSignalStrength.html
+++ b/docs/html/sdk/api_diff/23/changes/android.telephony.CellSignalStrength.html
@@ -136,8 +136,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.telephony.PhoneNumberUtils.html b/docs/html/sdk/api_diff/23/changes/android.telephony.PhoneNumberUtils.html
index 1146436..9d2b92f 100644
--- a/docs/html/sdk/api_diff/23/changes/android.telephony.PhoneNumberUtils.html
+++ b/docs/html/sdk/api_diff/23/changes/android.telephony.PhoneNumberUtils.html
@@ -129,8 +129,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.telephony.SignalStrength.html b/docs/html/sdk/api_diff/23/changes/android.telephony.SignalStrength.html
index de6e283..79db91e 100644
--- a/docs/html/sdk/api_diff/23/changes/android.telephony.SignalStrength.html
+++ b/docs/html/sdk/api_diff/23/changes/android.telephony.SignalStrength.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.telephony.SmsManager.html b/docs/html/sdk/api_diff/23/changes/android.telephony.SmsManager.html
index 1a4344c..792d85a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.telephony.SmsManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.telephony.SmsManager.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.telephony.SmsMessage.html b/docs/html/sdk/api_diff/23/changes/android.telephony.SmsMessage.html
index 7954e44..36b74dc 100644
--- a/docs/html/sdk/api_diff/23/changes/android.telephony.SmsMessage.html
+++ b/docs/html/sdk/api_diff/23/changes/android.telephony.SmsMessage.html
@@ -130,8 +130,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.telephony.TelephonyManager.html b/docs/html/sdk/api_diff/23/changes/android.telephony.TelephonyManager.html
index 8a2dadc..7b6b39c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.telephony.TelephonyManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.telephony.TelephonyManager.html
@@ -190,8 +190,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.test.mock.MockContext.html b/docs/html/sdk/api_diff/23/changes/android.test.mock.MockContext.html
index ae21729..9607b95 100644
--- a/docs/html/sdk/api_diff/23/changes/android.test.mock.MockContext.html
+++ b/docs/html/sdk/api_diff/23/changes/android.test.mock.MockContext.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.test.mock.MockCursor.html b/docs/html/sdk/api_diff/23/changes/android.test.mock.MockCursor.html
index e8abcf7..d61754c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.test.mock.MockCursor.html
+++ b/docs/html/sdk/api_diff/23/changes/android.test.mock.MockCursor.html
@@ -136,8 +136,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.test.mock.MockPackageManager.html b/docs/html/sdk/api_diff/23/changes/android.test.mock.MockPackageManager.html
index add80e0..3cca46a 100644
--- a/docs/html/sdk/api_diff/23/changes/android.test.mock.MockPackageManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.test.mock.MockPackageManager.html
@@ -129,8 +129,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.text.Layout.html b/docs/html/sdk/api_diff/23/changes/android.text.Layout.html
index 891e507..1764a94 100644
--- a/docs/html/sdk/api_diff/23/changes/android.text.Layout.html
+++ b/docs/html/sdk/api_diff/23/changes/android.text.Layout.html
@@ -143,8 +143,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.text.SpannableStringBuilder.html b/docs/html/sdk/api_diff/23/changes/android.text.SpannableStringBuilder.html
index 54dd172..fa301b4 100644
--- a/docs/html/sdk/api_diff/23/changes/android.text.SpannableStringBuilder.html
+++ b/docs/html/sdk/api_diff/23/changes/android.text.SpannableStringBuilder.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.transition.Transition.html b/docs/html/sdk/api_diff/23/changes/android.transition.Transition.html
index 0e3c3a2..c3dc5d2 100644
--- a/docs/html/sdk/api_diff/23/changes/android.transition.Transition.html
+++ b/docs/html/sdk/api_diff/23/changes/android.transition.Transition.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.transition.TransitionManager.html b/docs/html/sdk/api_diff/23/changes/android.transition.TransitionManager.html
index ff5355d..9f42e74 100644
--- a/docs/html/sdk/api_diff/23/changes/android.transition.TransitionManager.html
+++ b/docs/html/sdk/api_diff/23/changes/android.transition.TransitionManager.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.util.ArrayMap.html b/docs/html/sdk/api_diff/23/changes/android.util.ArrayMap.html
index 15df685..1c14a56 100644
--- a/docs/html/sdk/api_diff/23/changes/android.util.ArrayMap.html
+++ b/docs/html/sdk/api_diff/23/changes/android.util.ArrayMap.html
@@ -123,8 +123,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.util.DisplayMetrics.html b/docs/html/sdk/api_diff/23/changes/android.util.DisplayMetrics.html
index 4973462..a58b13d 100644
--- a/docs/html/sdk/api_diff/23/changes/android.util.DisplayMetrics.html
+++ b/docs/html/sdk/api_diff/23/changes/android.util.DisplayMetrics.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.util.EventLog.html b/docs/html/sdk/api_diff/23/changes/android.util.EventLog.html
index bed26da..5258217 100644
--- a/docs/html/sdk/api_diff/23/changes/android.util.EventLog.html
+++ b/docs/html/sdk/api_diff/23/changes/android.util.EventLog.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.util.FloatMath.html b/docs/html/sdk/api_diff/23/changes/android.util.FloatMath.html
index 894398b..d55276c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.util.FloatMath.html
+++ b/docs/html/sdk/api_diff/23/changes/android.util.FloatMath.html
@@ -157,8 +157,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.ActionMode.html b/docs/html/sdk/api_diff/23/changes/android.view.ActionMode.html
index d8112b3..d9ca5cc 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.ActionMode.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.ActionMode.html
@@ -165,8 +165,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.ContextThemeWrapper.html b/docs/html/sdk/api_diff/23/changes/android.view.ContextThemeWrapper.html
index d7481cc..33f2874 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.ContextThemeWrapper.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.ContextThemeWrapper.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.Display.html b/docs/html/sdk/api_diff/23/changes/android.view.Display.html
index b3917b5..b665292 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.Display.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.Display.html
@@ -155,8 +155,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.GestureDetector.SimpleOnGestureListener.html b/docs/html/sdk/api_diff/23/changes/android.view.GestureDetector.SimpleOnGestureListener.html
index 8810d92..4241464 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.GestureDetector.SimpleOnGestureListener.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.GestureDetector.SimpleOnGestureListener.html
@@ -109,8 +109,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.GestureDetector.html b/docs/html/sdk/api_diff/23/changes/android.view.GestureDetector.html
index f778072..ad933b0 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.GestureDetector.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.GestureDetector.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.HapticFeedbackConstants.html b/docs/html/sdk/api_diff/23/changes/android.view.HapticFeedbackConstants.html
index f9e878c..97e572c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.HapticFeedbackConstants.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.HapticFeedbackConstants.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.InputDevice.html b/docs/html/sdk/api_diff/23/changes/android.view.InputDevice.html
index ec45ec9..638b588 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.InputDevice.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.InputDevice.html
@@ -123,8 +123,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.KeyEvent.html b/docs/html/sdk/api_diff/23/changes/android.view.KeyEvent.html
index ce5e897..80a7567 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.KeyEvent.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.KeyEvent.html
@@ -157,8 +157,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.MotionEvent.html b/docs/html/sdk/api_diff/23/changes/android.view.MotionEvent.html
index 59b9393..494bd99 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.MotionEvent.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.MotionEvent.html
@@ -144,8 +144,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.ScaleGestureDetector.html b/docs/html/sdk/api_diff/23/changes/android.view.ScaleGestureDetector.html
index b5ecc30..898cf1b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.ScaleGestureDetector.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.ScaleGestureDetector.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.Surface.html b/docs/html/sdk/api_diff/23/changes/android.view.Surface.html
index 1b77929..0483d2b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.Surface.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.Surface.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.View.html b/docs/html/sdk/api_diff/23/changes/android.view.View.html
index 2a15daf..8edfdd4 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.View.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.View.html
@@ -340,8 +340,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.ViewConfiguration.html b/docs/html/sdk/api_diff/23/changes/android.view.ViewConfiguration.html
index 069b569..3aa4ac3 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.ViewConfiguration.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.ViewConfiguration.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.ViewGroup.html b/docs/html/sdk/api_diff/23/changes/android.view.ViewGroup.html
index 38a4519..5ddc109 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.ViewGroup.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.ViewGroup.html
@@ -190,8 +190,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.ViewParent.html b/docs/html/sdk/api_diff/23/changes/android.view.ViewParent.html
index 986b357..5f55d02b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.ViewParent.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.ViewParent.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.Window.Callback.html b/docs/html/sdk/api_diff/23/changes/android.view.Window.Callback.html
index 397ca61..b120060 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.Window.Callback.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.Window.Callback.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.WindowManager.LayoutParams.html b/docs/html/sdk/api_diff/23/changes/android.view.WindowManager.LayoutParams.html
index 936b438..b54ae82 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.WindowManager.LayoutParams.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.WindowManager.LayoutParams.html
@@ -125,8 +125,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityEvent.html b/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityEvent.html
index c107c65..f0f5381 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityEvent.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityEvent.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.html b/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.html
index f0876f3..13a4a42 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction.html
@@ -150,8 +150,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityNodeInfo.html b/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityNodeInfo.html
index 56997e2..670b4fc 100644
--- a/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityNodeInfo.html
+++ b/docs/html/sdk/api_diff/23/changes/android.view.accessibility.AccessibilityNodeInfo.html
@@ -137,8 +137,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.webkit.PermissionRequest.html b/docs/html/sdk/api_diff/23/changes/android.webkit.PermissionRequest.html
index 4e50f62e..ea81394 100644
--- a/docs/html/sdk/api_diff/23/changes/android.webkit.PermissionRequest.html
+++ b/docs/html/sdk/api_diff/23/changes/android.webkit.PermissionRequest.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.webkit.WebSettings.html b/docs/html/sdk/api_diff/23/changes/android.webkit.WebSettings.html
index 7f8d15e..cb7b0fc 100644
--- a/docs/html/sdk/api_diff/23/changes/android.webkit.WebSettings.html
+++ b/docs/html/sdk/api_diff/23/changes/android.webkit.WebSettings.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.webkit.WebView.html b/docs/html/sdk/api_diff/23/changes/android.webkit.WebView.html
index e8da78a..7c2e7a0 100644
--- a/docs/html/sdk/api_diff/23/changes/android.webkit.WebView.html
+++ b/docs/html/sdk/api_diff/23/changes/android.webkit.WebView.html
@@ -170,8 +170,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.webkit.WebViewClient.html b/docs/html/sdk/api_diff/23/changes/android.webkit.WebViewClient.html
index 9fcd572..2029886 100644
--- a/docs/html/sdk/api_diff/23/changes/android.webkit.WebViewClient.html
+++ b/docs/html/sdk/api_diff/23/changes/android.webkit.WebViewClient.html
@@ -144,8 +144,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.ActionMenuView.html b/docs/html/sdk/api_diff/23/changes/android.widget.ActionMenuView.html
index 2cf6bbd..b74eb0b 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.ActionMenuView.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.ActionMenuView.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.AnalogClock.html b/docs/html/sdk/api_diff/23/changes/android.widget.AnalogClock.html
index 27f89f9..ce830a8 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.AnalogClock.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.AnalogClock.html
@@ -94,8 +94,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.ArrayAdapter.html b/docs/html/sdk/api_diff/23/changes/android.widget.ArrayAdapter.html
index d6ec494..d50b405 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.ArrayAdapter.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.ArrayAdapter.html
@@ -116,8 +116,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.CalendarView.html b/docs/html/sdk/api_diff/23/changes/android.widget.CalendarView.html
index a758674..03dbcb0 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.CalendarView.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.CalendarView.html
@@ -251,8 +251,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.CompoundButton.html b/docs/html/sdk/api_diff/23/changes/android.widget.CompoundButton.html
index 72b241e..7daa319 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.CompoundButton.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.CompoundButton.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.CursorAdapter.html b/docs/html/sdk/api_diff/23/changes/android.widget.CursorAdapter.html
index b89641f..99187d4 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.CursorAdapter.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.CursorAdapter.html
@@ -116,8 +116,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.FrameLayout.html b/docs/html/sdk/api_diff/23/changes/android.widget.FrameLayout.html
index b784075..87adf30 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.FrameLayout.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.FrameLayout.html
@@ -181,8 +181,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.ImageView.html b/docs/html/sdk/api_diff/23/changes/android.widget.ImageView.html
index 3337cb6..bc03aa9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.ImageView.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.ImageView.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.ListPopupWindow.html b/docs/html/sdk/api_diff/23/changes/android.widget.ListPopupWindow.html
index 8f9b81e..def2ab5 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.ListPopupWindow.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.ListPopupWindow.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.PopupMenu.html b/docs/html/sdk/api_diff/23/changes/android.widget.PopupMenu.html
index 9f50f47..7c70493 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.PopupMenu.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.PopupMenu.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.PopupWindow.html b/docs/html/sdk/api_diff/23/changes/android.widget.PopupWindow.html
index 0a9003c..9336793 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.PopupWindow.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.PopupWindow.html
@@ -161,8 +161,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.QuickContactBadge.html b/docs/html/sdk/api_diff/23/changes/android.widget.QuickContactBadge.html
index e2d0228..0a22ffb 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.QuickContactBadge.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.QuickContactBadge.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.RelativeLayout.LayoutParams.html b/docs/html/sdk/api_diff/23/changes/android.widget.RelativeLayout.LayoutParams.html
index a3f9f45..fd0e043 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.RelativeLayout.LayoutParams.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.RelativeLayout.LayoutParams.html
@@ -108,8 +108,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.RemoteViews.html b/docs/html/sdk/api_diff/23/changes/android.widget.RemoteViews.html
index ec6c99d..510c9a8 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.RemoteViews.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.RemoteViews.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.SimpleAdapter.html b/docs/html/sdk/api_diff/23/changes/android.widget.SimpleAdapter.html
index 393dc93..8a7f9e9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.SimpleAdapter.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.SimpleAdapter.html
@@ -116,8 +116,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.Spinner.html b/docs/html/sdk/api_diff/23/changes/android.widget.Spinner.html
index 00a97ee..cb1ca3e 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.Spinner.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.Spinner.html
@@ -123,8 +123,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.Switch.html b/docs/html/sdk/api_diff/23/changes/android.widget.Switch.html
index f034770..bdbed7c 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.Switch.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.Switch.html
@@ -157,8 +157,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.TextView.html b/docs/html/sdk/api_diff/23/changes/android.widget.TextView.html
index 015f191..67a9611 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.TextView.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.TextView.html
@@ -196,8 +196,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.TimePicker.html b/docs/html/sdk/api_diff/23/changes/android.widget.TimePicker.html
index bad99a3..82541e9 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.TimePicker.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.TimePicker.html
@@ -177,8 +177,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/android.widget.Toolbar.html b/docs/html/sdk/api_diff/23/changes/android.widget.Toolbar.html
index 22cc2e5..3cbeea6 100644
--- a/docs/html/sdk/api_diff/23/changes/android.widget.Toolbar.html
+++ b/docs/html/sdk/api_diff/23/changes/android.widget.Toolbar.html
@@ -115,8 +115,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/changes-summary.html b/docs/html/sdk/api_diff/23/changes/changes-summary.html
index 39be588..604e4d2 100644
--- a/docs/html/sdk/api_diff/23/changes/changes-summary.html
+++ b/docs/html/sdk/api_diff/23/changes/changes-summary.html
@@ -697,8 +697,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/classes_index_additions.html b/docs/html/sdk/api_diff/23/changes/classes_index_additions.html
index bdea58d..a36f690 100644
--- a/docs/html/sdk/api_diff/23/changes/classes_index_additions.html
+++ b/docs/html/sdk/api_diff/23/changes/classes_index_additions.html
@@ -404,8 +404,7 @@
<A HREF="pkg_android.webkit.html#WebMessagePort.WebMessageCallback" class="hiddenlink" target="rightframe"><b>WebMessagePort.WebMessageCallback</b></A><br>
<A HREF="pkg_android.webkit.html#WebResourceError" class="hiddenlink" target="rightframe"><b>WebResourceError</b></A><br>
<A HREF="pkg_android.webkit.html#WebView.VisualStateCallback" class="hiddenlink" target="rightframe"><b>WebView.VisualStateCallback</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/classes_index_all.html b/docs/html/sdk/api_diff/23/changes/classes_index_all.html
index d1d50f1..f8b9958 100644
--- a/docs/html/sdk/api_diff/23/changes/classes_index_all.html
+++ b/docs/html/sdk/api_diff/23/changes/classes_index_all.html
@@ -1009,8 +1009,7 @@
<A HREF="android.net.wifi.WifiManager.html" class="hiddenlink" target="rightframe">WifiManager</A><br>
<A HREF="android.view.Window.Callback.html" class="hiddenlink" target="rightframe"><i>Window.Callback</i></A><br>
<A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/classes_index_changes.html b/docs/html/sdk/api_diff/23/changes/classes_index_changes.html
index a52e320..a2cef35 100644
--- a/docs/html/sdk/api_diff/23/changes/classes_index_changes.html
+++ b/docs/html/sdk/api_diff/23/changes/classes_index_changes.html
@@ -854,8 +854,7 @@
<A HREF="android.net.wifi.WifiManager.html" class="hiddenlink" target="rightframe">WifiManager</A><br>
<A HREF="android.view.Window.Callback.html" class="hiddenlink" target="rightframe"><i>Window.Callback</i></A><br>
<A HREF="android.view.WindowManager.LayoutParams.html" class="hiddenlink" target="rightframe">WindowManager.LayoutParams</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/classes_index_removals.html b/docs/html/sdk/api_diff/23/changes/classes_index_removals.html
index 7b780a6..5a939b2 100644
--- a/docs/html/sdk/api_diff/23/changes/classes_index_removals.html
+++ b/docs/html/sdk/api_diff/23/changes/classes_index_removals.html
@@ -213,8 +213,7 @@
<p><div style="line-height:1.5em;color:black">
<A HREF="pkg_org.apache.http.conn.scheme.html#Scheme" class="hiddenlink" target="rightframe"><strike>Scheme</strike></A><br>
<A HREF="pkg_org.apache.http.conn.scheme.html#SchemeRegistry" class="hiddenlink" target="rightframe"><strike>SchemeRegistry</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/constructors_index_additions.html b/docs/html/sdk/api_diff/23/changes/constructors_index_additions.html
index 53e7ab5..dec3a51 100644
--- a/docs/html/sdk/api_diff/23/changes/constructors_index_additions.html
+++ b/docs/html/sdk/api_diff/23/changes/constructors_index_additions.html
@@ -113,8 +113,7 @@
<p><div style="line-height:1.5em;color:black">
<nobr><A HREF="android.os.TransactionTooLargeException.html#android.os.TransactionTooLargeException.ctor_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>TransactionTooLargeException</b>
(<code>String</code>)</A></nobr> constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/constructors_index_all.html b/docs/html/sdk/api_diff/23/changes/constructors_index_all.html
index 6c7df45..de56e33 100644
--- a/docs/html/sdk/api_diff/23/changes/constructors_index_all.html
+++ b/docs/html/sdk/api_diff/23/changes/constructors_index_all.html
@@ -159,8 +159,7 @@
<p><div style="line-height:1.5em;color:black">
<nobr><A HREF="android.os.TransactionTooLargeException.html#android.os.TransactionTooLargeException.ctor_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>TransactionTooLargeException</b>
(<code>String</code>)</A></nobr> constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/constructors_index_changes.html b/docs/html/sdk/api_diff/23/changes/constructors_index_changes.html
index 409c83f..ac9eca1 100644
--- a/docs/html/sdk/api_diff/23/changes/constructors_index_changes.html
+++ b/docs/html/sdk/api_diff/23/changes/constructors_index_changes.html
@@ -55,8 +55,7 @@
(<code>int, CharSequence, PendingIntent</code>)</A></nobr> constructor<br>
<nobr><A HREF="android.app.Notification.Action.Builder.html#android.app.Notification.Action.Builder.ctor_changed(int, java.lang.CharSequence, android.app.PendingIntent)" class="hiddenlink" target="rightframe">Notification.Action.Builder
(<code>int, CharSequence, PendingIntent</code>)</A></nobr> constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/constructors_index_removals.html b/docs/html/sdk/api_diff/23/changes/constructors_index_removals.html
index 002ee1c..bff4a22 100644
--- a/docs/html/sdk/api_diff/23/changes/constructors_index_removals.html
+++ b/docs/html/sdk/api_diff/23/changes/constructors_index_removals.html
@@ -71,8 +71,7 @@
<p><div style="line-height:1.5em;color:black">
<nobr><A HREF="android.os.RecoverySystem.html#android.os.RecoverySystem.ctor_removed()" class="hiddenlink" target="rightframe"><strike>RecoverySystem</strike>
()</A></nobr> constructor<br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/fields_index_additions.html b/docs/html/sdk/api_diff/23/changes/fields_index_additions.html
index 59b8967..8ca1d60 100644
--- a/docs/html/sdk/api_diff/23/changes/fields_index_additions.html
+++ b/docs/html/sdk/api_diff/23/changes/fields_index_additions.html
@@ -1622,8 +1622,7 @@
</nobr><br>
<nobr><A HREF="android.graphics.ImageFormat.html#android.graphics.ImageFormat.YUV_444_888" class="hiddenlink" target="rightframe">YUV_444_888</A>
</nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/fields_index_all.html b/docs/html/sdk/api_diff/23/changes/fields_index_all.html
index 8d2742f..6ca8cd9 100644
--- a/docs/html/sdk/api_diff/23/changes/fields_index_all.html
+++ b/docs/html/sdk/api_diff/23/changes/fields_index_all.html
@@ -1972,8 +1972,7 @@
</nobr><br>
<nobr><A HREF="android.graphics.ImageFormat.html#android.graphics.ImageFormat.YUV_444_888" class="hiddenlink" target="rightframe">YUV_444_888</A>
</nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/fields_index_changes.html b/docs/html/sdk/api_diff/23/changes/fields_index_changes.html
index d1c45ba..d622434 100644
--- a/docs/html/sdk/api_diff/23/changes/fields_index_changes.html
+++ b/docs/html/sdk/api_diff/23/changes/fields_index_changes.html
@@ -532,8 +532,7 @@
</nobr><br>
<nobr><A HREF="android.R.attr.html#android.R.attr.yearListSelectorColor" class="hiddenlink" target="rightframe">yearListSelectorColor</A>
</nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/fields_index_removals.html b/docs/html/sdk/api_diff/23/changes/fields_index_removals.html
index 0725278..0882d50 100644
--- a/docs/html/sdk/api_diff/23/changes/fields_index_removals.html
+++ b/docs/html/sdk/api_diff/23/changes/fields_index_removals.html
@@ -556,8 +556,7 @@
<nobr> in
<A HREF="android.Manifest.permission_group.html#android.Manifest.permission_group.WRITE_USER_DICTIONARY" class="hiddenlink" target="rightframe"><strike>android.Manifest.permission_group</strike></A>
</nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/jdiff_help.html b/docs/html/sdk/api_diff/23/changes/jdiff_help.html
index acb8508..f909615 100644
--- a/docs/html/sdk/api_diff/23/changes/jdiff_help.html
+++ b/docs/html/sdk/api_diff/23/changes/jdiff_help.html
@@ -120,8 +120,7 @@
There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass.
In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes.
</BLOCKQUOTE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/jdiff_statistics.html b/docs/html/sdk/api_diff/23/changes/jdiff_statistics.html
index 26531a41..28a9e71 100644
--- a/docs/html/sdk/api_diff/23/changes/jdiff_statistics.html
+++ b/docs/html/sdk/api_diff/23/changes/jdiff_statistics.html
@@ -1673,8 +1673,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/jdiff_topleftframe.html b/docs/html/sdk/api_diff/23/changes/jdiff_topleftframe.html
index 36f9836..fc5c9d4 100644
--- a/docs/html/sdk/api_diff/23/changes/jdiff_topleftframe.html
+++ b/docs/html/sdk/api_diff/23/changes/jdiff_topleftframe.html
@@ -49,8 +49,7 @@
<TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
</TR>
</TABLE>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/methods_index_additions.html b/docs/html/sdk/api_diff/23/changes/methods_index_additions.html
index 4cb030a..5788a46 100644
--- a/docs/html/sdk/api_diff/23/changes/methods_index_additions.html
+++ b/docs/html/sdk/api_diff/23/changes/methods_index_additions.html
@@ -1752,8 +1752,7 @@
(<code>int, float</code>)</A></nobr><br>
<nobr><A HREF="android.os.Parcel.html#android.os.Parcel.writeTypedObject_added(T, int)" class="hiddenlink" target="rightframe"><b>writeTypedObject</b>
(<code>T, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/methods_index_all.html b/docs/html/sdk/api_diff/23/changes/methods_index_all.html
index a5e688d..4fac9c7 100644
--- a/docs/html/sdk/api_diff/23/changes/methods_index_all.html
+++ b/docs/html/sdk/api_diff/23/changes/methods_index_all.html
@@ -2190,8 +2190,7 @@
(<code>int, float</code>)</A></nobr><br>
<nobr><A HREF="android.os.Parcel.html#android.os.Parcel.writeTypedObject_added(T, int)" class="hiddenlink" target="rightframe"><b>writeTypedObject</b>
(<code>T, int</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/methods_index_changes.html b/docs/html/sdk/api_diff/23/changes/methods_index_changes.html
index 6923ce2..ff0f73e 100644
--- a/docs/html/sdk/api_diff/23/changes/methods_index_changes.html
+++ b/docs/html/sdk/api_diff/23/changes/methods_index_changes.html
@@ -511,8 +511,7 @@
<nobr><A HREF="android.graphics.drawable.ScaleDrawable.html#android.graphics.drawable.ScaleDrawable.unscheduleDrawable_changed(android.graphics.drawable.Drawable, java.lang.Runnable)" class="hiddenlink" target="rightframe">type
(<code>Drawable, Runnable</code>) in android.graphics.drawable.ScaleDrawable
</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/methods_index_removals.html b/docs/html/sdk/api_diff/23/changes/methods_index_removals.html
index 4f81ae9..c99af38 100644
--- a/docs/html/sdk/api_diff/23/changes/methods_index_removals.html
+++ b/docs/html/sdk/api_diff/23/changes/methods_index_removals.html
@@ -336,8 +336,7 @@
<p><div style="line-height:1.5em;color:black">
<nobr><A HREF="android.provider.Browser.html#android.provider.Browser.updateVisitedHistory_removed(android.content.ContentResolver, java.lang.String, boolean)" class="hiddenlink" target="rightframe"><strike>updateVisitedHistory</strike>
(<code>ContentResolver, String, boolean</code>)</A></nobr><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/packages_index_additions.html b/docs/html/sdk/api_diff/23/changes/packages_index_additions.html
index cefe356..7fc99fa 100644
--- a/docs/html/sdk/api_diff/23/changes/packages_index_additions.html
+++ b/docs/html/sdk/api_diff/23/changes/packages_index_additions.html
@@ -55,8 +55,7 @@
<A HREF="changes-summary.html#android.media.midi" class="hiddenlink" target="rightframe"><b>android.media.midi</b></A><br>
<A HREF="changes-summary.html#android.security.keystore" class="hiddenlink" target="rightframe"><b>android.security.keystore</b></A><br>
<A HREF="changes-summary.html#android.service.chooser" class="hiddenlink" target="rightframe"><b>android.service.chooser</b></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/packages_index_all.html b/docs/html/sdk/api_diff/23/changes/packages_index_all.html
index 1245d79..dd2cf5d 100644
--- a/docs/html/sdk/api_diff/23/changes/packages_index_all.html
+++ b/docs/html/sdk/api_diff/23/changes/packages_index_all.html
@@ -136,8 +136,7 @@
<A HREF="pkg_org.apache.http.params.html" class="hiddenlink" target="rightframe">org.apache.http.params</A><br>
<A HREF="changes-summary.html#org.apache.http.protocol" class="hiddenlink" target="rightframe"><strike>org.apache.http.protocol</strike></A><br>
<A HREF="changes-summary.html#org.apache.http.util" class="hiddenlink" target="rightframe"><strike>org.apache.http.util</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/packages_index_changes.html b/docs/html/sdk/api_diff/23/changes/packages_index_changes.html
index a06866b..ec301a6 100644
--- a/docs/html/sdk/api_diff/23/changes/packages_index_changes.html
+++ b/docs/html/sdk/api_diff/23/changes/packages_index_changes.html
@@ -103,8 +103,7 @@
<A HREF="pkg_org.apache.http.conn.html" class="hiddenlink" target="rightframe">org.apache.http.conn</A><br>
<A HREF="pkg_org.apache.http.conn.scheme.html" class="hiddenlink" target="rightframe">org.apache.http.conn.scheme</A><br>
<A HREF="pkg_org.apache.http.params.html" class="hiddenlink" target="rightframe">org.apache.http.params</A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/packages_index_removals.html b/docs/html/sdk/api_diff/23/changes/packages_index_removals.html
index 06f8ca7..fd7e1bd 100644
--- a/docs/html/sdk/api_diff/23/changes/packages_index_removals.html
+++ b/docs/html/sdk/api_diff/23/changes/packages_index_removals.html
@@ -78,8 +78,7 @@
<A HREF="changes-summary.html#org.apache.http.message" class="hiddenlink" target="rightframe"><strike>org.apache.http.message</strike></A><br>
<A HREF="changes-summary.html#org.apache.http.protocol" class="hiddenlink" target="rightframe"><strike>org.apache.http.protocol</strike></A><br>
<A HREF="changes-summary.html#org.apache.http.util" class="hiddenlink" target="rightframe"><strike>org.apache.http.util</strike></A><br>
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.accounts.html b/docs/html/sdk/api_diff/23/changes/pkg_android.accounts.html
index f959c44..4e34f17 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.accounts.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.accounts.html
@@ -112,8 +112,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.app.admin.html b/docs/html/sdk/api_diff/23/changes/pkg_android.app.admin.html
index 5e7a3fa..62d0b1d 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.app.admin.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.app.admin.html
@@ -127,8 +127,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.app.html b/docs/html/sdk/api_diff/23/changes/pkg_android.app.html
index d6294d2..fcb19b1 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.app.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.app.html
@@ -379,8 +379,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.app.usage.html b/docs/html/sdk/api_diff/23/changes/pkg_android.app.usage.html
index d206bb0..075cc0a 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.app.usage.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.app.usage.html
@@ -141,8 +141,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.bluetooth.html b/docs/html/sdk/api_diff/23/changes/pkg_android.bluetooth.html
index 183589d..2a44372 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.bluetooth.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.bluetooth.html
@@ -119,8 +119,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.bluetooth.le.html b/docs/html/sdk/api_diff/23/changes/pkg_android.bluetooth.le.html
index 2301b5a..f606cad 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.bluetooth.le.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.bluetooth.le.html
@@ -112,8 +112,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.content.html b/docs/html/sdk/api_diff/23/changes/pkg_android.content.html
index b7104d5..d883af0 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.content.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.content.html
@@ -154,8 +154,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.content.pm.html b/docs/html/sdk/api_diff/23/changes/pkg_android.content.pm.html
index 790ca7a..612eb4e 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.content.pm.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.content.pm.html
@@ -126,8 +126,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.content.res.html b/docs/html/sdk/api_diff/23/changes/pkg_android.content.res.html
index 1caebb8..f9dea56 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.content.res.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.content.res.html
@@ -126,8 +126,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.database.html b/docs/html/sdk/api_diff/23/changes/pkg_android.database.html
index 6267710..356534f 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.database.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.database.html
@@ -119,8 +119,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.graphics.drawable.html b/docs/html/sdk/api_diff/23/changes/pkg_android.graphics.drawable.html
index dab2acb..4ba1c23 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.graphics.drawable.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.graphics.drawable.html
@@ -197,8 +197,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.graphics.html b/docs/html/sdk/api_diff/23/changes/pkg_android.graphics.html
index 165d9eb..81037e3 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.graphics.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.graphics.html
@@ -119,8 +119,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.camera2.html b/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.camera2.html
index e5f179d..bc66e2e 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.camera2.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.camera2.html
@@ -183,8 +183,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.camera2.params.html b/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.camera2.params.html
index 8a78e5e..fb7a8e3 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.camera2.params.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.camera2.params.html
@@ -120,8 +120,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.html b/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.html
index 52fd539..8be6ae2 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.html
@@ -105,8 +105,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.usb.html b/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.usb.html
index 2862880..2f0318f 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.usb.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.hardware.usb.html
@@ -105,8 +105,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.html b/docs/html/sdk/api_diff/23/changes/pkg_android.html
index 3ccac32..096a6f4 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.html
@@ -140,8 +140,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.media.browse.html b/docs/html/sdk/api_diff/23/changes/pkg_android.media.browse.html
index 54ab1a2..016384b 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.media.browse.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.media.browse.html
@@ -120,8 +120,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.media.html b/docs/html/sdk/api_diff/23/changes/pkg_android.media.html
index 4dfad89..5014aa3 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.media.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.media.html
@@ -435,8 +435,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.media.session.html b/docs/html/sdk/api_diff/23/changes/pkg_android.media.session.html
index cad4d34..6788832 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.media.session.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.media.session.html
@@ -119,8 +119,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.media.tv.html b/docs/html/sdk/api_diff/23/changes/pkg_android.media.tv.html
index f11fb38..f9e5705 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.media.tv.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.media.tv.html
@@ -176,8 +176,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.net.html b/docs/html/sdk/api_diff/23/changes/pkg_android.net.html
index 9ccdbe5..8f803e5 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.net.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.net.html
@@ -162,8 +162,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.net.http.html b/docs/html/sdk/api_diff/23/changes/pkg_android.net.http.html
index 0377a16..2ffbe52 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.net.http.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.net.http.html
@@ -105,8 +105,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.net.wifi.html b/docs/html/sdk/api_diff/23/changes/pkg_android.net.wifi.html
index 894e26d..97cc79a 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.net.wifi.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.net.wifi.html
@@ -133,8 +133,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.nfc.html b/docs/html/sdk/api_diff/23/changes/pkg_android.nfc.html
index cd49ac9..9914d0f 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.nfc.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.nfc.html
@@ -105,8 +105,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.os.html b/docs/html/sdk/api_diff/23/changes/pkg_android.os.html
index 8dce606..68cda00 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.os.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.os.html
@@ -239,8 +239,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.print.html b/docs/html/sdk/api_diff/23/changes/pkg_android.print.html
index cdc3ad1..0543c691 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.print.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.print.html
@@ -126,8 +126,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.printservice.html b/docs/html/sdk/api_diff/23/changes/pkg_android.printservice.html
index 4129503..bb0617f 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.printservice.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.printservice.html
@@ -105,8 +105,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.provider.html b/docs/html/sdk/api_diff/23/changes/pkg_android.provider.html
index d129a28..e1b48cc 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.provider.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.provider.html
@@ -317,8 +317,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.renderscript.html b/docs/html/sdk/api_diff/23/changes/pkg_android.renderscript.html
index 82cf241..30ab1b7 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.renderscript.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.renderscript.html
@@ -204,8 +204,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.security.html b/docs/html/sdk/api_diff/23/changes/pkg_android.security.html
index 222b20a..af4daf0 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.security.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.security.html
@@ -148,8 +148,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.service.carrier.html b/docs/html/sdk/api_diff/23/changes/pkg_android.service.carrier.html
index a2d5e6d..fb256f8 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.service.carrier.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.service.carrier.html
@@ -127,8 +127,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.service.dreams.html b/docs/html/sdk/api_diff/23/changes/pkg_android.service.dreams.html
index 32d27bd..aa6ded8 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.service.dreams.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.service.dreams.html
@@ -105,8 +105,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.service.media.html b/docs/html/sdk/api_diff/23/changes/pkg_android.service.media.html
index 8596421..aa586e1 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.service.media.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.service.media.html
@@ -120,8 +120,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.service.notification.html b/docs/html/sdk/api_diff/23/changes/pkg_android.service.notification.html
index 3fb4785..d599f80 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.service.notification.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.service.notification.html
@@ -105,8 +105,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.service.voice.html b/docs/html/sdk/api_diff/23/changes/pkg_android.service.voice.html
index 1f27d84..32fa5b4 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.service.voice.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.service.voice.html
@@ -169,8 +169,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.speech.html b/docs/html/sdk/api_diff/23/changes/pkg_android.speech.html
index a88f1ba..6b18133 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.speech.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.speech.html
@@ -112,8 +112,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.speech.tts.html b/docs/html/sdk/api_diff/23/changes/pkg_android.speech.tts.html
index 59de522..ebe7ab4 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.speech.tts.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.speech.tts.html
@@ -105,8 +105,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.system.html b/docs/html/sdk/api_diff/23/changes/pkg_android.system.html
index ef568e0..fd9765f 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.system.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.system.html
@@ -105,8 +105,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.telecom.html b/docs/html/sdk/api_diff/23/changes/pkg_android.telecom.html
index 39f0245..10f3af7 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.telecom.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.telecom.html
@@ -302,8 +302,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.telephony.html b/docs/html/sdk/api_diff/23/changes/pkg_android.telephony.html
index b4abb53..4bdcf13 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.telephony.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.telephony.html
@@ -155,8 +155,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.test.mock.html b/docs/html/sdk/api_diff/23/changes/pkg_android.test.mock.html
index b1f13ee..fae868d 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.test.mock.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.test.mock.html
@@ -119,8 +119,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.text.html b/docs/html/sdk/api_diff/23/changes/pkg_android.text.html
index c8e15ac..37443f1 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.text.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.text.html
@@ -127,8 +127,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.transition.html b/docs/html/sdk/api_diff/23/changes/pkg_android.transition.html
index 03173a1..d15a1bb 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.transition.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.transition.html
@@ -127,8 +127,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.util.html b/docs/html/sdk/api_diff/23/changes/pkg_android.util.html
index 8156cfb..23e26da 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.util.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.util.html
@@ -141,8 +141,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.view.accessibility.html b/docs/html/sdk/api_diff/23/changes/pkg_android.view.accessibility.html
index ae13a87..9f919e3 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.view.accessibility.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.view.accessibility.html
@@ -119,8 +119,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.view.html b/docs/html/sdk/api_diff/23/changes/pkg_android.view.html
index ec3257a..07378a2 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.view.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.view.html
@@ -274,8 +274,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.webkit.html b/docs/html/sdk/api_diff/23/changes/pkg_android.webkit.html
index 80b4df0..331bd20 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.webkit.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.webkit.html
@@ -169,8 +169,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_android.widget.html b/docs/html/sdk/api_diff/23/changes/pkg_android.widget.html
index fb7ef96..0864272 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_android.widget.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_android.widget.html
@@ -253,8 +253,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.conn.html b/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.conn.html
index 249df56..268c66f 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.conn.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.conn.html
@@ -203,8 +203,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.conn.scheme.html b/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.conn.scheme.html
index fe7b3c7..870afbe 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.conn.scheme.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.conn.scheme.html
@@ -119,8 +119,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.params.html b/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.params.html
index 28f3469..792596c 100644
--- a/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.params.html
+++ b/docs/html/sdk/api_diff/23/changes/pkg_org.apache.http.params.html
@@ -154,8 +154,7 @@
</div> <!-- end footer -->
</div><!-- end doc-content -->
</div> <!-- end body-content -->
-<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
-</script>
+<script src="https://www.google-analytics.com/ga.js" type="text/javascript"></script>
<script type="text/javascript">
try {
var pageTracker = _gat._getTracker("UA-5831155-1");
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes.html b/docs/html/sdk/support_api_diff/24.2.0/changes.html
new file mode 100644
index 0000000..cdf8f36
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes.html
@@ -0,0 +1,45 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<!-- on Tue Aug 16 14:03:10 EDT 2016 -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Support Library API Differences Report
+</TITLE>
+<link href="../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</head>
+<frameset cols="242,**" framespacing="1" frameborder="yes" border="1" bordercolor="#e9e9e9">
+<frameset rows="174,**" framespacing="1" frameborder="yes" border="1" bordercolor="#e9e9e9">
+ <frame src="changes/jdiff_topleftframe.html" scrolling="no" name="topleftframe" frameborder="1">
+ <frame src="changes/alldiffs_index_all.html" scrolling="auto" name="bottomleftframe" frameborder="1">
+ </frameset>
+ <frame src="changes/changes-summary.html" scrolling="auto" name="rightframe" frameborder="1">
+</frameset>
+<noframes>
+<h2>
+Frame Alert
+</h2>
+
+<p>
+This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client.
+<br>
+Link to <a href="changes/changes-summary.html" target="_top">Non-frame version.</A>
+</noframes>
+</html>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_additions.html b/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_additions.html
new file mode 100644
index 0000000..cb62aa8
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_additions.html
@@ -0,0 +1,947 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="alldiffs_index_all.html" xclass="hiddenlink">All Differences</a>
+ <br>
+<A HREF="alldiffs_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="alldiffs_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Class AccessibilityManagerCompat.AccessibilityStateChangeListener -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v4.view.accessibility.html#AccessibilityManagerCompat.AccessibilityStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManagerCompat.AccessibilityStateChangeListener</i></b></A><br>
+<!-- Class AccessibilityManagerCompat.TouchExplorationStateChangeListener -->
+<A HREF="pkg_android.support.v4.view.accessibility.html#AccessibilityManagerCompat.TouchExplorationStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManagerCompat.TouchExplorationStateChangeListener</i></b></A><br>
+<!-- Field ACTION_ARGUMENT_COLUMN_INT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_COLUMN_INT</A>
+</nobr><br>
+<!-- Field ACTION_ARGUMENT_PROGRESS_VALUE -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_PROGRESS_VALUE</A>
+</nobr><br>
+<!-- Field ACTION_ARGUMENT_ROW_INT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_ROW_INT" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_ROW_INT</A>
+</nobr><br>
+<!-- Field ACTION_CONTEXT_CLICK -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CONTEXT_CLICK" class="hiddenlink" target="rightframe">ACTION_CONTEXT_CLICK</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_DOWN -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_DOWN" class="hiddenlink" target="rightframe">ACTION_SCROLL_DOWN</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_LEFT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_LEFT" class="hiddenlink" target="rightframe">ACTION_SCROLL_LEFT</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_RIGHT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_RIGHT" class="hiddenlink" target="rightframe">ACTION_SCROLL_RIGHT</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_TO_POSITION -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_TO_POSITION" class="hiddenlink" target="rightframe">ACTION_SCROLL_TO_POSITION</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_UP -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_UP" class="hiddenlink" target="rightframe">ACTION_SCROLL_UP</A>
+</nobr><br>
+<!-- Field ACTION_SET_PROGRESS -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SET_PROGRESS" class="hiddenlink" target="rightframe">ACTION_SET_PROGRESS</A>
+</nobr><br>
+<!-- Field ACTION_SHOW_ON_SCREEN -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SHOW_ON_SCREEN" class="hiddenlink" target="rightframe">ACTION_SHOW_ON_SCREEN</A>
+</nobr><br>
+<!-- Class ActionBarActivity -->
+<A HREF="pkg_android.support.v7.app.html#ActionBarActivity" class="hiddenlink" target="rightframe"><b>ActionBarActivity</b></A><br>
+<!-- Class ActionMenuView -->
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView" class="hiddenlink" target="rightframe"><b>ActionMenuView</b></A><br>
+<!-- Class ActionMenuView.LayoutParams -->
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView.LayoutParams" class="hiddenlink" target="rightframe"><b>ActionMenuView.LayoutParams</b></A><br>
+<!-- Class ActionMenuView.OnMenuItemClickListener -->
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>ActionMenuView.OnMenuItemClickListener</i></b></A><br>
+<!-- Method addTouchExplorationStateChangeListener -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.addTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" class="hiddenlink" target="rightframe"><b>addTouchExplorationStateChangeListener</b>
+(<code>AccessibilityManager, TouchExplorationStateChangeListener</code>)</A></nobr><br>
+<!-- Package android.support.transition -->
+<A HREF="changes-summary.html#android.support.transition" class="hiddenlink" target="rightframe"><b>android.support.transition</b></A><br>
+<!-- Package android.support.v4.text.util -->
+<A HREF="changes-summary.html#android.support.v4.text.util" class="hiddenlink" target="rightframe"><b>android.support.v4.text.util</b></A><br>
+<!-- Class AppCompatActivity -->
+<A HREF="pkg_android.support.v7.app.html#AppCompatActivity" class="hiddenlink" target="rightframe"><b>AppCompatActivity</b></A><br>
+<!-- Class AppCompatAutoCompleteTextView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatAutoCompleteTextView" class="hiddenlink" target="rightframe"><b>AppCompatAutoCompleteTextView</b></A><br>
+<!-- Class AppCompatButton -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatButton" class="hiddenlink" target="rightframe"><b>AppCompatButton</b></A><br>
+<!-- Class AppCompatCheckBox -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatCheckBox" class="hiddenlink" target="rightframe"><b>AppCompatCheckBox</b></A><br>
+<!-- Class AppCompatCheckedTextView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatCheckedTextView" class="hiddenlink" target="rightframe"><b>AppCompatCheckedTextView</b></A><br>
+<!-- Class AppCompatDialogFragment -->
+<A HREF="pkg_android.support.v7.app.html#AppCompatDialogFragment" class="hiddenlink" target="rightframe"><b>AppCompatDialogFragment</b></A><br>
+<!-- Class AppCompatEditText -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatEditText" class="hiddenlink" target="rightframe"><b>AppCompatEditText</b></A><br>
+<!-- Class AppCompatImageButton -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatImageButton" class="hiddenlink" target="rightframe"><b>AppCompatImageButton</b></A><br>
+<!-- Class AppCompatImageView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatImageView" class="hiddenlink" target="rightframe"><b>AppCompatImageView</b></A><br>
+<!-- Class AppCompatMultiAutoCompleteTextView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatMultiAutoCompleteTextView" class="hiddenlink" target="rightframe"><b>AppCompatMultiAutoCompleteTextView</b></A><br>
+<!-- Class AppCompatRadioButton -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatRadioButton" class="hiddenlink" target="rightframe"><b>AppCompatRadioButton</b></A><br>
+<!-- Class AppCompatRatingBar -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatRatingBar" class="hiddenlink" target="rightframe"><b>AppCompatRatingBar</b></A><br>
+<!-- Class AppCompatSeekBar -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatSeekBar" class="hiddenlink" target="rightframe"><b>AppCompatSeekBar</b></A><br>
+<!-- Class AppCompatSpinner -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatSpinner" class="hiddenlink" target="rightframe"><b>AppCompatSpinner</b></A><br>
+<!-- Class AppCompatTextView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatTextView" class="hiddenlink" target="rightframe"><b>AppCompatTextView</b></A><br>
+<!-- Class BatchingListUpdateCallback -->
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.util.html#BatchingListUpdateCallback" class="hiddenlink" target="rightframe"><b>BatchingListUpdateCallback</b></A><br>
+<!-- Field BT_FOLDER_TYPE_ALBUMS -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ALBUMS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_ALBUMS</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_ARTISTS -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ARTISTS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_ARTISTS</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_GENRES -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_GENRES" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_GENRES</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_MIXED -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_MIXED" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_MIXED</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_PLAYLISTS -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_PLAYLISTS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_PLAYLISTS</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_TITLES -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_TITLES" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_TITLES</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_YEARS -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_YEARS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_YEARS</A>
+</nobr><br>
+<!-- Method buildMediaButtonPendingIntent -->
+<i>buildMediaButtonPendingIntent</i><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaButtonReceiver.html#android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, android.content.ComponentName, long)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, ComponentName, long</code>)</b> in android.support.v4.media.session.MediaButtonReceiver
+</A></nobr><br>
+<!-- Method buildMediaButtonPendingIntent -->
+ <nobr><A HREF="android.support.v4.media.session.MediaButtonReceiver.html#android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, long)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, long</code>)</b> in android.support.v4.media.session.MediaButtonReceiver
+</A></nobr><br>
+<!-- Class CardView -->
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#CardView" class="hiddenlink" target="rightframe"><b>CardView</b></A><br>
+<!-- Method clearColorFilter -->
+<nobr><A HREF="android.support.v4.graphics.drawable.DrawableCompat.html#android.support.v4.graphics.drawable.DrawableCompat.clearColorFilter_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>clearColorFilter</b>
+(<code>Drawable</code>)</A></nobr><br>
+<!-- Method clearOnTabSelectedListeners -->
+<nobr><A HREF="android.support.design.widget.TabLayout.html#android.support.design.widget.TabLayout.clearOnTabSelectedListeners_added()" class="hiddenlink" target="rightframe"><b>clearOnTabSelectedListeners</b>
+()</A></nobr><br>
+<!-- Method computeScrollVectorForPosition -->
+<nobr><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html#android.support.v7.widget.StaggeredGridLayoutManager.computeScrollVectorForPosition_added(int)" class="hiddenlink" target="rightframe"><b>computeScrollVectorForPosition</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Class DiffUtil -->
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.util.html#DiffUtil" class="hiddenlink" target="rightframe"><b>DiffUtil</b></A><br>
+<!-- Class DiffUtil.Callback -->
+<A HREF="pkg_android.support.v7.util.html#DiffUtil.Callback" class="hiddenlink" target="rightframe"><b>DiffUtil.Callback</b></A><br>
+<!-- Class DiffUtil.DiffResult -->
+<A HREF="pkg_android.support.v7.util.html#DiffUtil.DiffResult" class="hiddenlink" target="rightframe"><b>DiffUtil.DiffResult</b></A><br>
+<!-- Field dodgeInsetEdges -->
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html#android.support.design.widget.CoordinatorLayout.LayoutParams.dodgeInsetEdges" class="hiddenlink" target="rightframe">dodgeInsetEdges</A>
+</nobr><br>
+<!-- Field EXTRA_BT_FOLDER_TYPE -->
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.EXTRA_BT_FOLDER_TYPE" class="hiddenlink" target="rightframe">EXTRA_BT_FOLDER_TYPE</A>
+</nobr><br>
+<!-- Field EXTRA_ENABLE_INSTANT_APPS -->
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.EXTRA_ENABLE_INSTANT_APPS" class="hiddenlink" target="rightframe">EXTRA_ENABLE_INSTANT_APPS</A>
+</nobr><br>
+<!-- Field EXTRA_SUGGESTION_KEYWORDS -->
+<nobr><A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html#android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.EXTRA_SUGGESTION_KEYWORDS" class="hiddenlink" target="rightframe">EXTRA_SUGGESTION_KEYWORDS</A>
+</nobr><br>
+<!-- Field EXTRA_USAGE_TIME_REPORT -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT" class="hiddenlink" target="rightframe">EXTRA_USAGE_TIME_REPORT</A>
+</nobr><br>
+<!-- Field EXTRA_USAGE_TIME_REPORT_PACKAGES -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT_PACKAGES" class="hiddenlink" target="rightframe">EXTRA_USAGE_TIME_REPORT_PACKAGES</A>
+</nobr><br>
+<!-- Method findFragmentByWho -->
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.FragmentController.html#android.support.v4.app.FragmentController.findFragmentByWho_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>findFragmentByWho</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Method fromMediaItem -->
+<nobr><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html#android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItem_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromMediaItem</b>
+(<code>Object</code>)</A></nobr><br>
+<!-- Method fromMediaItemList -->
+<nobr><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html#android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItemList_added(java.util.List<?>)" class="hiddenlink" target="rightframe"><b>fromMediaItemList</b>
+(<code>List<?></code>)</A></nobr><br>
+<!-- Method fromMediaSession -->
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.html#android.support.v4.media.session.MediaSessionCompat.fromMediaSession_added(android.content.Context, java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromMediaSession</b>
+(<code>Context, Object</code>)</A></nobr><br>
+<!-- Method fromQueueItem -->
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItem_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromQueueItem</b>
+(<code>Object</code>)</A></nobr><br>
+<!-- Method fromQueueItemList -->
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItemList_added(java.util.List<?>)" class="hiddenlink" target="rightframe"><b>fromQueueItemList</b>
+(<code>List<?></code>)</A></nobr><br>
+<!-- Method getAction -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.getAction_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>getAction</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method getCompoundDrawablesRelative -->
+<nobr><A HREF="android.support.v4.widget.TextViewCompat.html#android.support.v4.widget.TextViewCompat.getCompoundDrawablesRelative_added(android.widget.TextView)" class="hiddenlink" target="rightframe"><b>getCompoundDrawablesRelative</b>
+(<code>TextView</code>)</A></nobr><br>
+<!-- Method getDependents -->
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.html#android.support.design.widget.CoordinatorLayout.getDependents_added(android.view.View)" class="hiddenlink" target="rightframe"><b>getDependents</b>
+(<code>View</code>)</A></nobr><br>
+<!-- Method getDominantColor -->
+<nobr><A HREF="android.support.v7.graphics.Palette.html#android.support.v7.graphics.Palette.getDominantColor_added(int)" class="hiddenlink" target="rightframe"><b>getDominantColor</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getDominantSwatch -->
+<nobr><A HREF="android.support.v7.graphics.Palette.html#android.support.v7.graphics.Palette.getDominantSwatch_added()" class="hiddenlink" target="rightframe"><b>getDominantSwatch</b>
+()</A></nobr><br>
+<!-- Method getDrawable -->
+<nobr><A HREF="android.support.v7.content.res.AppCompatResources.html#android.support.v7.content.res.AppCompatResources.getDrawable_added(android.content.Context, int)" class="hiddenlink" target="rightframe"><b>getDrawable</b>
+(<code>Context, int</code>)</A></nobr><br>
+<!-- Method getDrawerArrowDrawable -->
+<nobr><A HREF="android.support.v7.app.ActionBarDrawerToggle.html#android.support.v7.app.ActionBarDrawerToggle.getDrawerArrowDrawable_added()" class="hiddenlink" target="rightframe"><b>getDrawerArrowDrawable</b>
+()</A></nobr><br>
+<!-- Method getInsetDodgeRect -->
+<i>getInsetDodgeRect</i><br>
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, V, Rect</code>)</b> in android.support.design.widget.CoordinatorLayout.Behavior
+</A></nobr><br>
+<!-- Method getInsetDodgeRect -->
+ <nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, FloatingActionButton, Rect</code>)</b> in android.support.design.widget.FloatingActionButton.Behavior
+</A></nobr><br>
+<!-- Method getLaunchBounds -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.getLaunchBounds_added()" class="hiddenlink" target="rightframe"><b>getLaunchBounds</b>
+()</A></nobr><br>
+<!-- Method getMediaItemNumberViewFlipper -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemNumberViewFlipper_added()" class="hiddenlink" target="rightframe"><b>getMediaItemNumberViewFlipper</b>
+()</A></nobr><br>
+<!-- Method getMediaItemPausedView -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPausedView_added()" class="hiddenlink" target="rightframe"><b>getMediaItemPausedView</b>
+()</A></nobr><br>
+<!-- Method getMediaItemPlayingView -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPlayingView_added()" class="hiddenlink" target="rightframe"><b>getMediaItemPlayingView</b>
+()</A></nobr><br>
+<!-- Method getMediaPlayState -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.getMediaPlayState_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>getMediaPlayState</b>
+(<code>Object</code>)</A></nobr><br>
+<!-- Method getMovementGranularity -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.getMovementGranularity_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>getMovementGranularity</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method getOnFlingListener -->
+<nobr><A HREF="android.support.v7.widget.RecyclerView.html#android.support.v7.widget.RecyclerView.getOnFlingListener_added()" class="hiddenlink" target="rightframe"><b>getOnFlingListener</b>
+()</A></nobr><br>
+<!-- Method getPasswordVisibilityToggleContentDescription -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleContentDescription_added()" class="hiddenlink" target="rightframe"><b>getPasswordVisibilityToggleContentDescription</b>
+()</A></nobr><br>
+<!-- Method getPasswordVisibilityToggleDrawable -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleDrawable_added()" class="hiddenlink" target="rightframe"><b>getPasswordVisibilityToggleDrawable</b>
+()</A></nobr><br>
+<!-- Method getSelectionMode -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.getSelectionMode_added()" class="hiddenlink" target="rightframe"><b>getSelectionMode</b>
+()</A></nobr><br>
+<!-- Class GridLayout -->
+<A HREF="pkg_android.support.v7.widget.html#GridLayout" class="hiddenlink" target="rightframe"><b>GridLayout</b></A><br>
+<!-- Class GridLayout.Alignment -->
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.Alignment" class="hiddenlink" target="rightframe"><b>GridLayout.Alignment</b></A><br>
+<!-- Class GridLayout.LayoutParams -->
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.LayoutParams" class="hiddenlink" target="rightframe"><b>GridLayout.LayoutParams</b></A><br>
+<!-- Class GridLayout.Spec -->
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.Spec" class="hiddenlink" target="rightframe"><b>GridLayout.Spec</b></A><br>
+<!-- Field HOST_VIEW_ID -->
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html#android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.HOST_VIEW_ID" class="hiddenlink" target="rightframe">HOST_VIEW_ID</A>
+</nobr><br>
+<!-- Field insetEdge -->
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html#android.support.design.widget.CoordinatorLayout.LayoutParams.insetEdge" class="hiddenlink" target="rightframe">insetEdge</A>
+</nobr><br>
+<!-- Method isAtLeastNMR1 -->
+<nobr><A HREF="android.support.v4.os.BuildCompat.html#android.support.v4.os.BuildCompat.isAtLeastNMR1_added()" class="hiddenlink" target="rightframe"><b>isAtLeastNMR1</b>
+()</A></nobr><br>
+<!-- Method isAutoHideEnabled -->
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.isAutoHideEnabled_added()" class="hiddenlink" target="rightframe"><b>isAutoHideEnabled</b>
+()</A></nobr><br>
+<!-- Method isContextClickable -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.isContextClickable_added()" class="hiddenlink" target="rightframe"><b>isContextClickable</b>
+()</A></nobr><br>
+<!-- Method isImmediateNotifySupported -->
+<nobr><A HREF="android.support.v17.leanback.widget.ObjectAdapter.html#android.support.v17.leanback.widget.ObjectAdapter.isImmediateNotifySupported_added()" class="hiddenlink" target="rightframe"><b>isImmediateNotifySupported</b>
+()</A></nobr><br>
+<!-- Method isImportantForAccessibility -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.isImportantForAccessibility_added(android.view.View)" class="hiddenlink" target="rightframe"><b>isImportantForAccessibility</b>
+(<code>View</code>)</A></nobr><br>
+<!-- Method isPasswordVisibilityToggleEnabled -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.isPasswordVisibilityToggleEnabled_added()" class="hiddenlink" target="rightframe"><b>isPasswordVisibilityToggleEnabled</b>
+()</A></nobr><br>
+<!-- Class LinearLayoutCompat -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#LinearLayoutCompat" class="hiddenlink" target="rightframe"><b>LinearLayoutCompat</b></A><br>
+<!-- Class LinearLayoutCompat.LayoutParams -->
+<A HREF="pkg_android.support.v7.widget.html#LinearLayoutCompat.LayoutParams" class="hiddenlink" target="rightframe"><b>LinearLayoutCompat.LayoutParams</b></A><br>
+<!-- Class LinearSnapHelper -->
+<A HREF="pkg_android.support.v7.widget.html#LinearSnapHelper" class="hiddenlink" target="rightframe"><b>LinearSnapHelper</b></A><br>
+<!-- Class ListPopupWindow -->
+<A HREF="pkg_android.support.v7.widget.html#ListPopupWindow" class="hiddenlink" target="rightframe"><b>ListPopupWindow</b></A><br>
+<!-- Class ListUpdateCallback -->
+<A HREF="pkg_android.support.v7.util.html#ListUpdateCallback" class="hiddenlink" target="rightframe"><b><i>ListUpdateCallback</i></b></A><br>
+<!-- Method loadDescription -->
+<nobr><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html#android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.loadDescription_added(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager)" class="hiddenlink" target="rightframe"><b>loadDescription</b>
+(<code>AccessibilityServiceInfo, PackageManager</code>)</A></nobr><br>
+<!-- Method makeBasic -->
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeBasic_added()" class="hiddenlink" target="rightframe"><b>makeBasic</b>
+()</A></nobr><br>
+<!-- Method makeClipRevealAnimation -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeClipRevealAnimation_added(android.view.View, int, int, int, int)" class="hiddenlink" target="rightframe"><b>makeClipRevealAnimation</b>
+(<code>View, int, int, int, int</code>)</A></nobr><br>
+<!-- Method makeTaskLaunchBehind -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeTaskLaunchBehind_added()" class="hiddenlink" target="rightframe"><b>makeTaskLaunchBehind</b>
+()</A></nobr><br>
+<!-- Field METADATA_KEY_BT_FOLDER_TYPE -->
+<nobr><A HREF="android.support.v4.media.MediaMetadataCompat.html#android.support.v4.media.MediaMetadataCompat.METADATA_KEY_BT_FOLDER_TYPE" class="hiddenlink" target="rightframe">METADATA_KEY_BT_FOLDER_TYPE</A>
+</nobr><br>
+<!-- Field METADATA_KEY_MEDIA_URI -->
+<nobr><A HREF="android.support.v4.media.MediaMetadataCompat.html#android.support.v4.media.MediaMetadataCompat.METADATA_KEY_MEDIA_URI" class="hiddenlink" target="rightframe">METADATA_KEY_MEDIA_URI</A>
+</nobr><br>
+<!-- Class MultiSelectListPreferenceDialogFragmentCompat -->
+<A HREF="pkg_android.support.v7.preference.html#MultiSelectListPreferenceDialogFragmentCompat" class="hiddenlink" target="rightframe"><b>MultiSelectListPreferenceDialogFragmentCompat</b></A><br>
+<!-- Class NotificationCompat -->
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat" class="hiddenlink" target="rightframe"><b>NotificationCompat</b></A><br>
+<!-- Class NotificationCompat.Builder -->
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat.Builder" class="hiddenlink" target="rightframe"><b>NotificationCompat.Builder</b></A><br>
+<!-- Class NotificationCompat.MediaStyle -->
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat.MediaStyle" class="hiddenlink" target="rightframe"><b>NotificationCompat.MediaStyle</b></A><br>
+<!-- Method notifyPlayStateChanged -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.notifyPlayStateChanged_added()" class="hiddenlink" target="rightframe"><b>notifyPlayStateChanged</b>
+()</A></nobr><br>
+<!-- Method obtain -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>obtain</i><br>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain_added(int, int, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int, boolean</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain_added(int, int, int, int, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int, int, int, boolean</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.obtain_added(int, float, float, float)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, float, float, float</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat
+</A></nobr><br>
+<!-- Method onAttachedToLayoutParams -->
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onAttachedToLayoutParams_added(android.support.design.widget.CoordinatorLayout.LayoutParams)" class="hiddenlink" target="rightframe"><b>onAttachedToLayoutParams</b>
+(<code>LayoutParams</code>)</A></nobr><br>
+<!-- Method onBindMediaPlayState -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.onBindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" class="hiddenlink" target="rightframe"><b>onBindMediaPlayState</b>
+(<code>ViewHolder</code>)</A></nobr><br>
+<!-- Method onChanged -->
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onChanged_added(int, int, java.lang.Object)" class="hiddenlink" target="rightframe"><b>onChanged</b>
+(<code>int, int, Object</code>)</A></nobr><br>
+<!-- Method onDetachedFromLayoutParams -->
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onDetachedFromLayoutParams_added()" class="hiddenlink" target="rightframe"><b>onDetachedFromLayoutParams</b>
+()</A></nobr><br>
+<!-- Method onRequestChildRectangleOnScreen -->
+<i>onRequestChildRectangleOnScreen</i><br>
+ <nobr><A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html#android.support.design.widget.AppBarLayout.ScrollingViewBehavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, View, Rect, boolean</code>)</b> in android.support.design.widget.AppBarLayout.ScrollingViewBehavior
+</A></nobr><br>
+<!-- Method onRequestChildRectangleOnScreen -->
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, V, Rect, boolean</code>)</b> in android.support.design.widget.CoordinatorLayout.Behavior
+</A></nobr><br>
+<!-- Method onSharedElementsArrived -->
+<nobr><A HREF="android.support.v4.app.SharedElementCallback.html#android.support.v4.app.SharedElementCallback.onSharedElementsArrived_added(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener)" class="hiddenlink" target="rightframe"><b>onSharedElementsArrived</b>
+(<code>List<String>, List<View>, OnSharedElementsReadyListener</code>)</A></nobr><br>
+<!-- Method onStart -->
+<nobr><A HREF="android.support.v7.app.AppCompatDelegate.html#android.support.v7.app.AppCompatDelegate.onStart_added()" class="hiddenlink" target="rightframe"><b>onStart</b>
+()</A></nobr><br>
+<!-- Method onUnbindMediaPlayState -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.onUnbindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" class="hiddenlink" target="rightframe"><b>onUnbindMediaPlayState</b>
+(<code>ViewHolder</code>)</A></nobr><br>
+<!-- Class PatternsCompat -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v4.util.html#PatternsCompat" class="hiddenlink" target="rightframe"><b>PatternsCompat</b></A><br>
+<!-- Field PEEK_HEIGHT_AUTO -->
+<nobr><A HREF="android.support.design.widget.BottomSheetBehavior.html#android.support.design.widget.BottomSheetBehavior.PEEK_HEIGHT_AUTO" class="hiddenlink" target="rightframe">PEEK_HEIGHT_AUTO</A>
+</nobr><br>
+<!-- Field PLAY_STATE_INITIAL -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_INITIAL" class="hiddenlink" target="rightframe">PLAY_STATE_INITIAL</A>
+</nobr><br>
+<!-- Field PLAY_STATE_PAUSED -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PAUSED" class="hiddenlink" target="rightframe">PLAY_STATE_PAUSED</A>
+</nobr><br>
+<!-- Field PLAY_STATE_PLAYING -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PLAYING" class="hiddenlink" target="rightframe">PLAY_STATE_PLAYING</A>
+</nobr><br>
+<!-- Class PopupMenu -->
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu" class="hiddenlink" target="rightframe"><b>PopupMenu</b></A><br>
+<!-- Class PopupMenu.OnDismissListener -->
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu.OnDismissListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnDismissListener</i></b></A><br>
+<!-- Class PopupMenu.OnMenuItemClickListener -->
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnMenuItemClickListener</i></b></A><br>
+<!-- Class RecyclerView.OnFlingListener -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#RecyclerView.OnFlingListener" class="hiddenlink" target="rightframe"><b>RecyclerView.OnFlingListener</b></A><br>
+<!-- Class RecyclerView.SmoothScroller.ScrollVectorProvider -->
+<A HREF="pkg_android.support.v7.widget.html#RecyclerView.SmoothScroller.ScrollVectorProvider" class="hiddenlink" target="rightframe"><b><i>RecyclerView.SmoothScroller.ScrollVectorProvider</i></b></A><br>
+<!-- Method removeTouchExplorationStateChangeListener -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.removeTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" class="hiddenlink" target="rightframe"><b>removeTouchExplorationStateChangeListener</b>
+(<code>AccessibilityManager, TouchExplorationStateChangeListener</code>)</A></nobr><br>
+<!-- Method requestUsageTimeReport -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.requestUsageTimeReport_added(android.app.PendingIntent)" class="hiddenlink" target="rightframe"><b>requestUsageTimeReport</b>
+(<code>PendingIntent</code>)</A></nobr><br>
+<!-- Class SearchView -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#SearchView" class="hiddenlink" target="rightframe"><b>SearchView</b></A><br>
+<!-- Class SearchView.OnCloseListener -->
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnCloseListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnCloseListener</i></b></A><br>
+<!-- Class SearchView.OnQueryTextListener -->
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnQueryTextListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnQueryTextListener</i></b></A><br>
+<!-- Class SearchView.OnSuggestionListener -->
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnSuggestionListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnSuggestionListener</i></b></A><br>
+<!-- Class SearchViewCompat.OnCloseListener -->
+<A HREF="pkg_android.support.v4.widget.html#SearchViewCompat.OnCloseListener" class="hiddenlink" target="rightframe"><b><i>SearchViewCompat.OnCloseListener</i></b></A><br>
+<!-- Class SearchViewCompat.OnQueryTextListener -->
+<A HREF="pkg_android.support.v4.widget.html#SearchViewCompat.OnQueryTextListener" class="hiddenlink" target="rightframe"><b><i>SearchViewCompat.OnQueryTextListener</i></b></A><br>
+<!-- Method setAction -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.setAction_added(android.view.accessibility.AccessibilityEvent, int)" class="hiddenlink" target="rightframe"><b>setAction</b>
+(<code>AccessibilityEvent, int</code>)</A></nobr><br>
+<!-- Method setAlwaysUseBrowserUI -->
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.setAlwaysUseBrowserUI_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>setAlwaysUseBrowserUI</b>
+(<code>Intent</code>)</A></nobr><br>
+<!-- Method setAutoHideEnabled -->
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.setAutoHideEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoHideEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setCollapsedTitleTextColor -->
+<nobr><A HREF="android.support.design.widget.CollapsingToolbarLayout.html#android.support.design.widget.CollapsingToolbarLayout.setCollapsedTitleTextColor_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setCollapsedTitleTextColor</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<!-- Method setContextClickable -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.setContextClickable_added(boolean)" class="hiddenlink" target="rightframe"><b>setContextClickable</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setDrawerArrowDrawable -->
+<nobr><A HREF="android.support.v7.app.ActionBarDrawerToggle.html#android.support.v7.app.ActionBarDrawerToggle.setDrawerArrowDrawable_added(android.support.v7.graphics.drawable.DrawerArrowDrawable)" class="hiddenlink" target="rightframe"><b>setDrawerArrowDrawable</b>
+(<code>DrawerArrowDrawable</code>)</A></nobr><br>
+<!-- Method setExpandedTitleTextColor -->
+<nobr><A HREF="android.support.design.widget.CollapsingToolbarLayout.html#android.support.design.widget.CollapsingToolbarLayout.setExpandedTitleTextColor_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setExpandedTitleTextColor</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<!-- Method setInstantAppsEnabled -->
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.Builder.html#android.support.customtabs.CustomTabsIntent.Builder.setInstantAppsEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setInstantAppsEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setLaunchBounds -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.setLaunchBounds_added(android.graphics.Rect)" class="hiddenlink" target="rightframe"><b>setLaunchBounds</b>
+(<code>Rect</code>)</A></nobr><br>
+<!-- Method setMovementGranularity -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.setMovementGranularity_added(android.view.accessibility.AccessibilityEvent, int)" class="hiddenlink" target="rightframe"><b>setMovementGranularity</b>
+(<code>AccessibilityEvent, int</code>)</A></nobr><br>
+<!-- Method setOnChildScrollUpCallback -->
+<nobr><A HREF="android.support.v4.widget.SwipeRefreshLayout.html#android.support.v4.widget.SwipeRefreshLayout.setOnChildScrollUpCallback_added(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback)" class="hiddenlink" target="rightframe"><b>setOnChildScrollUpCallback</b>
+(<code>OnChildScrollUpCallback</code>)</A></nobr><br>
+<!-- Method setOnFlingListener -->
+<nobr><A HREF="android.support.v7.widget.RecyclerView.html#android.support.v7.widget.RecyclerView.setOnFlingListener_added(android.support.v7.widget.RecyclerView.OnFlingListener)" class="hiddenlink" target="rightframe"><b>setOnFlingListener</b>
+(<code>OnFlingListener</code>)</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleContentDescription -->
+<i>setPasswordVisibilityToggleContentDescription</i><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleContentDescription -->
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <b>
+(<code>CharSequence</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleDrawable -->
+<i>setPasswordVisibilityToggleDrawable</i><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleDrawable -->
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleEnabled -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleTintList -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintList_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleTintList</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleTintMode -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintMode_added(android.graphics.PorterDuff.Mode)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleTintMode</b>
+(<code>Mode</code>)</A></nobr><br>
+<!-- Method setSecondaryToolbarViews -->
+<nobr><A HREF="android.support.customtabs.CustomTabsSession.html#android.support.customtabs.CustomTabsSession.setSecondaryToolbarViews_added(android.widget.RemoteViews, int[], android.app.PendingIntent)" class="hiddenlink" target="rightframe"><b>setSecondaryToolbarViews</b>
+(<code>RemoteViews, int[], PendingIntent</code>)</A></nobr><br>
+<!-- Method setSelectedMediaItemNumberView -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.setSelectedMediaItemNumberView_added(int)" class="hiddenlink" target="rightframe"><b>setSelectedMediaItemNumberView</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Class ShareActionProvider -->
+<A HREF="pkg_android.support.v7.widget.html#ShareActionProvider" class="hiddenlink" target="rightframe"><b>ShareActionProvider</b></A><br>
+<!-- Class ShareActionProvider.OnShareTargetSelectedListener -->
+<A HREF="pkg_android.support.v7.widget.html#ShareActionProvider.OnShareTargetSelectedListener" class="hiddenlink" target="rightframe"><b><i>ShareActionProvider.OnShareTargetSelectedListener</i></b></A><br>
+<!-- Class SharedElementCallback.OnSharedElementsReadyListener -->
+<A HREF="pkg_android.support.v4.app.html#SharedElementCallback.OnSharedElementsReadyListener" class="hiddenlink" target="rightframe"><b><i>SharedElementCallback.OnSharedElementsReadyListener</i></b></A><br>
+<!-- Method shouldAlwaysUseBrowserUI -->
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.shouldAlwaysUseBrowserUI_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>shouldAlwaysUseBrowserUI</b>
+(<code>Intent</code>)</A></nobr><br>
+<!-- Class SnapHelper -->
+<A HREF="pkg_android.support.v7.widget.html#SnapHelper" class="hiddenlink" target="rightframe"><b>SnapHelper</b></A><br>
+<!-- Class Space -->
+<A HREF="pkg_android.support.v7.widget.html#Space" class="hiddenlink" target="rightframe"><b>Space</b></A><br>
+<!-- Field STOP_FOREGROUND_DETACH -->
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.STOP_FOREGROUND_DETACH" class="hiddenlink" target="rightframe">STOP_FOREGROUND_DETACH</A>
+</nobr><br>
+<!-- Field STOP_FOREGROUND_REMOVE -->
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.STOP_FOREGROUND_REMOVE" class="hiddenlink" target="rightframe">STOP_FOREGROUND_REMOVE</A>
+</nobr><br>
+<!-- Method stopForeground -->
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.stopForeground_added(android.app.Service, int)" class="hiddenlink" target="rightframe"><b>stopForeground</b>
+(<code>Service, int</code>)</A></nobr><br>
+<!-- Class SwipeRefreshLayout.OnChildScrollUpCallback -->
+<A HREF="pkg_android.support.v4.widget.html#SwipeRefreshLayout.OnChildScrollUpCallback" class="hiddenlink" target="rightframe"><b><i>SwipeRefreshLayout.OnChildScrollUpCallback</i></b></A><br>
+<!-- Class SwitchCompat -->
+<A HREF="pkg_android.support.v7.widget.html#SwitchCompat" class="hiddenlink" target="rightframe"><b>SwitchCompat</b></A><br>
+<!-- Class ThemedSpinnerAdapter -->
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#ThemedSpinnerAdapter" class="hiddenlink" target="rightframe"><b><i>ThemedSpinnerAdapter</i></b></A><br>
+<!-- Class ThemedSpinnerAdapter.Helper -->
+<A HREF="pkg_android.support.v7.widget.html#ThemedSpinnerAdapter.Helper" class="hiddenlink" target="rightframe"><b>ThemedSpinnerAdapter.Helper</b></A><br>
+<!-- Method toKeyCode -->
+<nobr><A HREF="android.support.v4.media.session.PlaybackStateCompat.html#android.support.v4.media.session.PlaybackStateCompat.toKeyCode_added(long)" class="hiddenlink" target="rightframe"><b>toKeyCode</b>
+(<code>long</code>)</A></nobr><br>
+<!-- Class Toolbar -->
+<A HREF="pkg_android.support.v7.widget.html#Toolbar" class="hiddenlink" target="rightframe"><b>Toolbar</b></A><br>
+<!-- Class Toolbar.LayoutParams -->
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.LayoutParams" class="hiddenlink" target="rightframe"><b>Toolbar.LayoutParams</b></A><br>
+<!-- Class Toolbar.OnMenuItemClickListener -->
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>Toolbar.OnMenuItemClickListener</i></b></A><br>
+<!-- Class Toolbar.SavedState -->
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.SavedState" class="hiddenlink" target="rightframe"><b>Toolbar.SavedState</b></A><br>
+<!-- Field TYPE_ASSIST_READING_CONTEXT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_ASSIST_READING_CONTEXT" class="hiddenlink" target="rightframe">TYPE_ASSIST_READING_CONTEXT</A>
+</nobr><br>
+<!-- Field TYPE_SPLIT_SCREEN_DIVIDER -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html#android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.TYPE_SPLIT_SCREEN_DIVIDER" class="hiddenlink" target="rightframe">TYPE_SPLIT_SCREEN_DIVIDER</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_CONTEXT_CLICKED -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_VIEW_CONTEXT_CLICKED" class="hiddenlink" target="rightframe">TYPE_VIEW_CONTEXT_CLICKED</A>
+</nobr><br>
+<!-- Field TYPE_WINDOWS_CHANGED -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_WINDOWS_CHANGED" class="hiddenlink" target="rightframe">TYPE_WINDOWS_CHANGED</A>
+</nobr><br>
+<!-- Constructor WindowInsetsCompat -->
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.WindowInsetsCompat.html#android.support.v4.view.WindowInsetsCompat.ctor_added(android.support.v4.view.WindowInsetsCompat)" class="hiddenlink" target="rightframe"><b>WindowInsetsCompat</b>
+(<code>WindowInsetsCompat</code>)</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_all.html b/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_all.html
new file mode 100644
index 0000000..719f9af
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_all.html
@@ -0,0 +1,1327 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>All Differences</b>
+ <br>
+<A HREF="alldiffs_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="alldiffs_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="alldiffs_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Class AbstractMediaItemPresenter -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html" class="hiddenlink" target="rightframe">AbstractMediaItemPresenter</A><br>
+<!-- Class AbstractMediaItemPresenter.ViewHolder -->
+<A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html" class="hiddenlink" target="rightframe">AbstractMediaItemPresenter.ViewHolder</A><br>
+<!-- Class AccessibilityEventCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html" class="hiddenlink" target="rightframe">AccessibilityEventCompat</A><br>
+<!-- Class AccessibilityManagerCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html" class="hiddenlink" target="rightframe">AccessibilityManagerCompat</A><br>
+<!-- Class AccessibilityManagerCompat.AccessibilityStateChangeListener -->
+<A HREF="pkg_android.support.v4.view.accessibility.html#AccessibilityManagerCompat.AccessibilityStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManagerCompat.AccessibilityStateChangeListener</i></b></A><br>
+<!-- Class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html" class="hiddenlink" target="rightframe">AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat</A><br>
+<!-- Class AccessibilityManagerCompat.TouchExplorationStateChangeListener -->
+<A HREF="pkg_android.support.v4.view.accessibility.html#AccessibilityManagerCompat.TouchExplorationStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManagerCompat.TouchExplorationStateChangeListener</i></b></A><br>
+<!-- Class AccessibilityNodeInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat</A><br>
+<!-- Class AccessibilityNodeInfoCompat.AccessibilityActionCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.AccessibilityActionCompat</A><br>
+<!-- Class AccessibilityNodeInfoCompat.CollectionInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.CollectionInfoCompat</A><br>
+<!-- Class AccessibilityNodeInfoCompat.CollectionItemInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.CollectionItemInfoCompat</A><br>
+<!-- Class AccessibilityNodeInfoCompat.RangeInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.RangeInfoCompat</A><br>
+<!-- Class AccessibilityNodeProviderCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeProviderCompat</A><br>
+<!-- Class AccessibilityServiceInfoCompat -->
+<A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityServiceInfoCompat</A><br>
+<!-- Class AccessibilityWindowInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityWindowInfoCompat</A><br>
+<!-- Field ACTION_ARGUMENT_COLUMN_INT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_COLUMN_INT</A>
+</nobr><br>
+<!-- Field ACTION_ARGUMENT_PROGRESS_VALUE -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_PROGRESS_VALUE</A>
+</nobr><br>
+<!-- Field ACTION_ARGUMENT_ROW_INT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_ROW_INT" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_ROW_INT</A>
+</nobr><br>
+<!-- Field ACTION_CONTEXT_CLICK -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CONTEXT_CLICK" class="hiddenlink" target="rightframe">ACTION_CONTEXT_CLICK</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_DOWN -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_DOWN" class="hiddenlink" target="rightframe">ACTION_SCROLL_DOWN</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_LEFT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_LEFT" class="hiddenlink" target="rightframe">ACTION_SCROLL_LEFT</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_RIGHT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_RIGHT" class="hiddenlink" target="rightframe">ACTION_SCROLL_RIGHT</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_TO_POSITION -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_TO_POSITION" class="hiddenlink" target="rightframe">ACTION_SCROLL_TO_POSITION</A>
+</nobr><br>
+<!-- Field ACTION_SCROLL_UP -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_UP" class="hiddenlink" target="rightframe">ACTION_SCROLL_UP</A>
+</nobr><br>
+<!-- Field ACTION_SET_PROGRESS -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SET_PROGRESS" class="hiddenlink" target="rightframe">ACTION_SET_PROGRESS</A>
+</nobr><br>
+<!-- Field ACTION_SHOW_ON_SCREEN -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SHOW_ON_SCREEN" class="hiddenlink" target="rightframe">ACTION_SHOW_ON_SCREEN</A>
+</nobr><br>
+<!-- Class ActionBarActivity -->
+<A HREF="pkg_android.support.v7.app.html#ActionBarActivity" class="hiddenlink" target="rightframe"><b>ActionBarActivity</b></A><br>
+<!-- Class ActionBarDrawerToggle -->
+<A HREF="android.support.v7.app.ActionBarDrawerToggle.html" class="hiddenlink" target="rightframe">ActionBarDrawerToggle</A><br>
+<!-- Class ActionMenuView -->
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView" class="hiddenlink" target="rightframe"><b>ActionMenuView</b></A><br>
+<!-- Class ActionMenuView.LayoutParams -->
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView.LayoutParams" class="hiddenlink" target="rightframe"><b>ActionMenuView.LayoutParams</b></A><br>
+<!-- Class ActionMenuView.OnMenuItemClickListener -->
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>ActionMenuView.OnMenuItemClickListener</i></b></A><br>
+<!-- Class ActivityCompat -->
+<i>ActivityCompat</i><br>
+ <A HREF="android.support.v4.app.ActivityCompat.html" class="hiddenlink" target="rightframe">android.support.v4.app</A><br>
+<!-- Constructor ActivityCompat -->
+ <nobr><A HREF="android.support.v4.app.ActivityCompat.html#android.support.v4.app.ActivityCompat.ctor_changed()" class="hiddenlink" target="rightframe">ActivityCompat
+()</A></nobr> constructor<br>
+<!-- Class ActivityOptionsCompat -->
+<A HREF="android.support.v4.app.ActivityOptionsCompat.html" class="hiddenlink" target="rightframe">ActivityOptionsCompat</A><br>
+<!-- Method addAccessibilityStateChangeListener -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.addAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe">addAccessibilityStateChangeListener
+(<code>AccessibilityManager, AccessibilityStateChangeListener</code>)</A></nobr><br>
+<!-- Method addTouchExplorationStateChangeListener -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.addTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" class="hiddenlink" target="rightframe"><b>addTouchExplorationStateChangeListener</b>
+(<code>AccessibilityManager, TouchExplorationStateChangeListener</code>)</A></nobr><br>
+<!-- Package android.support.customtabs -->
+<A HREF="pkg_android.support.customtabs.html" class="hiddenlink" target="rightframe">android.support.customtabs</A><br>
+<!-- Package android.support.design.widget -->
+<A HREF="pkg_android.support.design.widget.html" class="hiddenlink" target="rightframe">android.support.design.widget</A><br>
+<!-- Package android.support.transition -->
+<A HREF="changes-summary.html#android.support.transition" class="hiddenlink" target="rightframe"><b>android.support.transition</b></A><br>
+<!-- Package android.support.v14.preference -->
+<A HREF="pkg_android.support.v14.preference.html" class="hiddenlink" target="rightframe">android.support.v14.preference</A><br>
+<!-- Package android.support.v17.leanback.widget -->
+<A HREF="pkg_android.support.v17.leanback.widget.html" class="hiddenlink" target="rightframe">android.support.v17.leanback.widget</A><br>
+<!-- Package android.support.v17.preference -->
+<A HREF="pkg_android.support.v17.preference.html" class="hiddenlink" target="rightframe">android.support.v17.preference</A><br>
+<!-- Package android.support.v4.accessibilityservice -->
+<A HREF="pkg_android.support.v4.accessibilityservice.html" class="hiddenlink" target="rightframe">android.support.v4.accessibilityservice</A><br>
+<!-- Package android.support.v4.app -->
+<A HREF="pkg_android.support.v4.app.html" class="hiddenlink" target="rightframe">android.support.v4.app</A><br>
+<!-- Package android.support.v4.content -->
+<A HREF="pkg_android.support.v4.content.html" class="hiddenlink" target="rightframe">android.support.v4.content</A><br>
+<!-- Package android.support.v4.graphics.drawable -->
+<A HREF="pkg_android.support.v4.graphics.drawable.html" class="hiddenlink" target="rightframe">android.support.v4.graphics.drawable</A><br>
+<!-- Package android.support.v4.media -->
+<A HREF="pkg_android.support.v4.media.html" class="hiddenlink" target="rightframe">android.support.v4.media</A><br>
+<!-- Package android.support.v4.media.session -->
+<A HREF="pkg_android.support.v4.media.session.html" class="hiddenlink" target="rightframe">android.support.v4.media.session</A><br>
+<!-- Package android.support.v4.os -->
+<A HREF="pkg_android.support.v4.os.html" class="hiddenlink" target="rightframe">android.support.v4.os</A><br>
+<!-- Package android.support.v4.text.util -->
+<A HREF="changes-summary.html#android.support.v4.text.util" class="hiddenlink" target="rightframe"><b>android.support.v4.text.util</b></A><br>
+<!-- Package android.support.v4.util -->
+<A HREF="pkg_android.support.v4.util.html" class="hiddenlink" target="rightframe">android.support.v4.util</A><br>
+<!-- Package android.support.v4.view -->
+<A HREF="pkg_android.support.v4.view.html" class="hiddenlink" target="rightframe">android.support.v4.view</A><br>
+<!-- Package android.support.v4.view.accessibility -->
+<A HREF="pkg_android.support.v4.view.accessibility.html" class="hiddenlink" target="rightframe">android.support.v4.view.accessibility</A><br>
+<!-- Package android.support.v4.widget -->
+<A HREF="pkg_android.support.v4.widget.html" class="hiddenlink" target="rightframe">android.support.v4.widget</A><br>
+<!-- Package android.support.v7.app -->
+<A HREF="pkg_android.support.v7.app.html" class="hiddenlink" target="rightframe">android.support.v7.app</A><br>
+<!-- Package android.support.v7.appcompat -->
+<A HREF="changes-summary.html#android.support.v7.appcompat" class="hiddenlink" target="rightframe"><strike>android.support.v7.appcompat</strike></A><br>
+<!-- Package android.support.v7.content.res -->
+<A HREF="pkg_android.support.v7.content.res.html" class="hiddenlink" target="rightframe">android.support.v7.content.res</A><br>
+<!-- Package android.support.v7.graphics -->
+<A HREF="pkg_android.support.v7.graphics.html" class="hiddenlink" target="rightframe">android.support.v7.graphics</A><br>
+<!-- Package android.support.v7.preference -->
+<A HREF="pkg_android.support.v7.preference.html" class="hiddenlink" target="rightframe">android.support.v7.preference</A><br>
+<!-- Package android.support.v7.recyclerview -->
+<A HREF="changes-summary.html#android.support.v7.recyclerview" class="hiddenlink" target="rightframe"><strike>android.support.v7.recyclerview</strike></A><br>
+<!-- Package android.support.v7.util -->
+<A HREF="pkg_android.support.v7.util.html" class="hiddenlink" target="rightframe">android.support.v7.util</A><br>
+<!-- Package android.support.v7.widget -->
+<A HREF="pkg_android.support.v7.widget.html" class="hiddenlink" target="rightframe">android.support.v7.widget</A><br>
+<!-- Package android.support.v8.renderscript -->
+<A HREF="changes-summary.html#android.support.v8.renderscript" class="hiddenlink" target="rightframe"><strike>android.support.v8.renderscript</strike></A><br>
+<!-- Class AppBarLayout.ScrollingViewBehavior -->
+<A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html" class="hiddenlink" target="rightframe">AppBarLayout.ScrollingViewBehavior</A><br>
+<!-- Class AppCompatActivity -->
+<A HREF="pkg_android.support.v7.app.html#AppCompatActivity" class="hiddenlink" target="rightframe"><b>AppCompatActivity</b></A><br>
+<!-- Class AppCompatAutoCompleteTextView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatAutoCompleteTextView" class="hiddenlink" target="rightframe"><b>AppCompatAutoCompleteTextView</b></A><br>
+<!-- Class AppCompatButton -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatButton" class="hiddenlink" target="rightframe"><b>AppCompatButton</b></A><br>
+<!-- Class AppCompatCheckBox -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatCheckBox" class="hiddenlink" target="rightframe"><b>AppCompatCheckBox</b></A><br>
+<!-- Class AppCompatCheckedTextView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatCheckedTextView" class="hiddenlink" target="rightframe"><b>AppCompatCheckedTextView</b></A><br>
+<!-- Class AppCompatDelegate -->
+<A HREF="android.support.v7.app.AppCompatDelegate.html" class="hiddenlink" target="rightframe">AppCompatDelegate</A><br>
+<!-- Class AppCompatDialogFragment -->
+<A HREF="pkg_android.support.v7.app.html#AppCompatDialogFragment" class="hiddenlink" target="rightframe"><b>AppCompatDialogFragment</b></A><br>
+<!-- Class AppCompatEditText -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatEditText" class="hiddenlink" target="rightframe"><b>AppCompatEditText</b></A><br>
+<!-- Class AppCompatImageButton -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatImageButton" class="hiddenlink" target="rightframe"><b>AppCompatImageButton</b></A><br>
+<!-- Class AppCompatImageView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatImageView" class="hiddenlink" target="rightframe"><b>AppCompatImageView</b></A><br>
+<!-- Class AppCompatMultiAutoCompleteTextView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatMultiAutoCompleteTextView" class="hiddenlink" target="rightframe"><b>AppCompatMultiAutoCompleteTextView</b></A><br>
+<!-- Class AppCompatRadioButton -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatRadioButton" class="hiddenlink" target="rightframe"><b>AppCompatRadioButton</b></A><br>
+<!-- Class AppCompatRatingBar -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatRatingBar" class="hiddenlink" target="rightframe"><b>AppCompatRatingBar</b></A><br>
+<!-- Class AppCompatResources -->
+<A HREF="android.support.v7.content.res.AppCompatResources.html" class="hiddenlink" target="rightframe">AppCompatResources</A><br>
+<!-- Class AppCompatSeekBar -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatSeekBar" class="hiddenlink" target="rightframe"><b>AppCompatSeekBar</b></A><br>
+<!-- Class AppCompatSpinner -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatSpinner" class="hiddenlink" target="rightframe"><b>AppCompatSpinner</b></A><br>
+<!-- Class AppCompatTextView -->
+<A HREF="pkg_android.support.v7.widget.html#AppCompatTextView" class="hiddenlink" target="rightframe"><b>AppCompatTextView</b></A><br>
+<!-- Class BatchingListUpdateCallback -->
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.util.html#BatchingListUpdateCallback" class="hiddenlink" target="rightframe"><b>BatchingListUpdateCallback</b></A><br>
+<!-- Class BottomSheetBehavior -->
+<A HREF="android.support.design.widget.BottomSheetBehavior.html" class="hiddenlink" target="rightframe">BottomSheetBehavior</A><br>
+<!-- Field BT_FOLDER_TYPE_ALBUMS -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ALBUMS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_ALBUMS</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_ARTISTS -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ARTISTS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_ARTISTS</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_GENRES -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_GENRES" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_GENRES</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_MIXED -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_MIXED" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_MIXED</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_PLAYLISTS -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_PLAYLISTS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_PLAYLISTS</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_TITLES -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_TITLES" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_TITLES</A>
+</nobr><br>
+<!-- Field BT_FOLDER_TYPE_YEARS -->
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_YEARS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_YEARS</A>
+</nobr><br>
+<!-- Class BuildCompat -->
+<A HREF="android.support.v4.os.BuildCompat.html" class="hiddenlink" target="rightframe">BuildCompat</A><br>
+<!-- Method buildMediaButtonPendingIntent -->
+<i>buildMediaButtonPendingIntent</i><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaButtonReceiver.html#android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, android.content.ComponentName, long)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, ComponentName, long</code>)</b> in android.support.v4.media.session.MediaButtonReceiver
+</A></nobr><br>
+<!-- Method buildMediaButtonPendingIntent -->
+ <nobr><A HREF="android.support.v4.media.session.MediaButtonReceiver.html#android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, long)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, long</code>)</b> in android.support.v4.media.session.MediaButtonReceiver
+</A></nobr><br>
+<!-- Class CardView -->
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#CardView" class="hiddenlink" target="rightframe"><b>CardView</b></A><br>
+<!-- Method clearColorFilter -->
+<nobr><A HREF="android.support.v4.graphics.drawable.DrawableCompat.html#android.support.v4.graphics.drawable.DrawableCompat.clearColorFilter_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>clearColorFilter</b>
+(<code>Drawable</code>)</A></nobr><br>
+<!-- Method clearOnTabSelectedListeners -->
+<nobr><A HREF="android.support.design.widget.TabLayout.html#android.support.design.widget.TabLayout.clearOnTabSelectedListeners_added()" class="hiddenlink" target="rightframe"><b>clearOnTabSelectedListeners</b>
+()</A></nobr><br>
+<!-- Class CollapsingToolbarLayout -->
+<A HREF="android.support.design.widget.CollapsingToolbarLayout.html" class="hiddenlink" target="rightframe">CollapsingToolbarLayout</A><br>
+<!-- Method computeScrollVectorForPosition -->
+<i>computeScrollVectorForPosition</i><br>
+ <nobr><A HREF="android.support.v7.widget.LinearSmoothScroller.html#android.support.v7.widget.LinearSmoothScroller.computeScrollVectorForPosition_changed(int)" class="hiddenlink" target="rightframe">type
+(<code>int</code>) in android.support.v7.widget.LinearSmoothScroller
+</A></nobr><br>
+<!-- Method computeScrollVectorForPosition -->
+ <nobr><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html#android.support.v7.widget.StaggeredGridLayoutManager.computeScrollVectorForPosition_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.v7.widget.StaggeredGridLayoutManager
+</A></nobr><br>
+<!-- Class ContextCompat -->
+<i>ContextCompat</i><br>
+ <A HREF="android.support.v4.content.ContextCompat.html" class="hiddenlink" target="rightframe">android.support.v4.content</A><br>
+<!-- Constructor ContextCompat -->
+ <nobr><A HREF="android.support.v4.content.ContextCompat.html#android.support.v4.content.ContextCompat.ctor_changed()" class="hiddenlink" target="rightframe">ContextCompat
+()</A></nobr> constructor<br>
+<!-- Class CoordinatorLayout -->
+<A HREF="android.support.design.widget.CoordinatorLayout.html" class="hiddenlink" target="rightframe">CoordinatorLayout</A><br>
+<!-- Class CoordinatorLayout.Behavior -->
+<A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html" class="hiddenlink" target="rightframe">CoordinatorLayout.Behavior</A><br>
+<!-- Class CoordinatorLayout.LayoutParams -->
+<A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html" class="hiddenlink" target="rightframe">CoordinatorLayout.LayoutParams</A><br>
+<!-- Class CustomTabsIntent -->
+<A HREF="android.support.customtabs.CustomTabsIntent.html" class="hiddenlink" target="rightframe">CustomTabsIntent</A><br>
+<!-- Class CustomTabsIntent.Builder -->
+<A HREF="android.support.customtabs.CustomTabsIntent.Builder.html" class="hiddenlink" target="rightframe">CustomTabsIntent.Builder</A><br>
+<!-- Class CustomTabsSession -->
+<A HREF="android.support.customtabs.CustomTabsSession.html" class="hiddenlink" target="rightframe">CustomTabsSession</A><br>
+<!-- Class DiffUtil -->
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.util.html#DiffUtil" class="hiddenlink" target="rightframe"><b>DiffUtil</b></A><br>
+<!-- Class DiffUtil.Callback -->
+<A HREF="pkg_android.support.v7.util.html#DiffUtil.Callback" class="hiddenlink" target="rightframe"><b>DiffUtil.Callback</b></A><br>
+<!-- Class DiffUtil.DiffResult -->
+<A HREF="pkg_android.support.v7.util.html#DiffUtil.DiffResult" class="hiddenlink" target="rightframe"><b>DiffUtil.DiffResult</b></A><br>
+<!-- Method dispatch -->
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.dispatch_changed(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object)" class="hiddenlink" target="rightframe">dispatch
+(<code>KeyEvent, Callback, Object, Object</code>)</A></nobr><br>
+<!-- Field dodgeInsetEdges -->
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html#android.support.design.widget.CoordinatorLayout.LayoutParams.dodgeInsetEdges" class="hiddenlink" target="rightframe">dodgeInsetEdges</A>
+</nobr><br>
+<!-- Class DrawableCompat -->
+<A HREF="android.support.v4.graphics.drawable.DrawableCompat.html" class="hiddenlink" target="rightframe">DrawableCompat</A><br>
+<!-- Field EXTRA_BT_FOLDER_TYPE -->
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.EXTRA_BT_FOLDER_TYPE" class="hiddenlink" target="rightframe">EXTRA_BT_FOLDER_TYPE</A>
+</nobr><br>
+<!-- Field EXTRA_ENABLE_INSTANT_APPS -->
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.EXTRA_ENABLE_INSTANT_APPS" class="hiddenlink" target="rightframe">EXTRA_ENABLE_INSTANT_APPS</A>
+</nobr><br>
+<!-- Field EXTRA_SUGGESTION_KEYWORDS -->
+<nobr><A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html#android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.EXTRA_SUGGESTION_KEYWORDS" class="hiddenlink" target="rightframe">EXTRA_SUGGESTION_KEYWORDS</A>
+</nobr><br>
+<!-- Field EXTRA_USAGE_TIME_REPORT -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT" class="hiddenlink" target="rightframe">EXTRA_USAGE_TIME_REPORT</A>
+</nobr><br>
+<!-- Field EXTRA_USAGE_TIME_REPORT_PACKAGES -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT_PACKAGES" class="hiddenlink" target="rightframe">EXTRA_USAGE_TIME_REPORT_PACKAGES</A>
+</nobr><br>
+<!-- Method findFragmentByWho -->
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.FragmentController.html#android.support.v4.app.FragmentController.findFragmentByWho_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>findFragmentByWho</b>
+(<code>String</code>)</A></nobr><br>
+<!-- Method findPointerIndex -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.findPointerIndex_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">findPointerIndex
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<!-- Class FloatingActionButton.Behavior -->
+<A HREF="android.support.design.widget.FloatingActionButton.Behavior.html" class="hiddenlink" target="rightframe">FloatingActionButton.Behavior</A><br>
+<!-- Class FragmentController -->
+<A HREF="android.support.v4.app.FragmentController.html" class="hiddenlink" target="rightframe">FragmentController</A><br>
+<!-- Method fromMediaItem -->
+<nobr><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html#android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItem_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromMediaItem</b>
+(<code>Object</code>)</A></nobr><br>
+<!-- Method fromMediaItemList -->
+<nobr><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html#android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItemList_added(java.util.List<?>)" class="hiddenlink" target="rightframe"><b>fromMediaItemList</b>
+(<code>List<?></code>)</A></nobr><br>
+<!-- Method fromMediaSession -->
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.html#android.support.v4.media.session.MediaSessionCompat.fromMediaSession_added(android.content.Context, java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromMediaSession</b>
+(<code>Context, Object</code>)</A></nobr><br>
+<!-- Method fromQueueItem -->
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItem_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromQueueItem</b>
+(<code>Object</code>)</A></nobr><br>
+<!-- Method fromQueueItemList -->
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItemList_added(java.util.List<?>)" class="hiddenlink" target="rightframe"><b>fromQueueItemList</b>
+(<code>List<?></code>)</A></nobr><br>
+<!-- Method getAction -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.getAction_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>getAction</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method getCompoundDrawablesRelative -->
+<nobr><A HREF="android.support.v4.widget.TextViewCompat.html#android.support.v4.widget.TextViewCompat.getCompoundDrawablesRelative_added(android.widget.TextView)" class="hiddenlink" target="rightframe"><b>getCompoundDrawablesRelative</b>
+(<code>TextView</code>)</A></nobr><br>
+<!-- Method getDependents -->
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.html#android.support.design.widget.CoordinatorLayout.getDependents_added(android.view.View)" class="hiddenlink" target="rightframe"><b>getDependents</b>
+(<code>View</code>)</A></nobr><br>
+<!-- Method getDescription -->
+<nobr><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html#android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.getDescription_changed(android.accessibilityservice.AccessibilityServiceInfo)" class="hiddenlink" target="rightframe">getDescription
+(<code>AccessibilityServiceInfo</code>)</A></nobr><br>
+<!-- Method getDominantColor -->
+<nobr><A HREF="android.support.v7.graphics.Palette.html#android.support.v7.graphics.Palette.getDominantColor_added(int)" class="hiddenlink" target="rightframe"><b>getDominantColor</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method getDominantSwatch -->
+<nobr><A HREF="android.support.v7.graphics.Palette.html#android.support.v7.graphics.Palette.getDominantSwatch_added()" class="hiddenlink" target="rightframe"><b>getDominantSwatch</b>
+()</A></nobr><br>
+<!-- Method getDrawable -->
+<nobr><A HREF="android.support.v7.content.res.AppCompatResources.html#android.support.v7.content.res.AppCompatResources.getDrawable_added(android.content.Context, int)" class="hiddenlink" target="rightframe"><b>getDrawable</b>
+(<code>Context, int</code>)</A></nobr><br>
+<!-- Method getDrawerArrowDrawable -->
+<nobr><A HREF="android.support.v7.app.ActionBarDrawerToggle.html#android.support.v7.app.ActionBarDrawerToggle.getDrawerArrowDrawable_added()" class="hiddenlink" target="rightframe"><b>getDrawerArrowDrawable</b>
+()</A></nobr><br>
+<!-- Method getInsetDodgeRect -->
+<i>getInsetDodgeRect</i><br>
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, V, Rect</code>)</b> in android.support.design.widget.CoordinatorLayout.Behavior
+</A></nobr><br>
+<!-- Method getInsetDodgeRect -->
+ <nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, FloatingActionButton, Rect</code>)</b> in android.support.design.widget.FloatingActionButton.Behavior
+</A></nobr><br>
+<!-- Method getKeyDispatcherState -->
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.getKeyDispatcherState_changed(android.view.View)" class="hiddenlink" target="rightframe">getKeyDispatcherState
+(<code>View</code>)</A></nobr><br>
+<!-- Method getLaunchBounds -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.getLaunchBounds_added()" class="hiddenlink" target="rightframe"><b>getLaunchBounds</b>
+()</A></nobr><br>
+<!-- Method getMediaItemNumberViewFlipper -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemNumberViewFlipper_added()" class="hiddenlink" target="rightframe"><b>getMediaItemNumberViewFlipper</b>
+()</A></nobr><br>
+<!-- Method getMediaItemPausedView -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPausedView_added()" class="hiddenlink" target="rightframe"><b>getMediaItemPausedView</b>
+()</A></nobr><br>
+<!-- Method getMediaItemPlayingView -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPlayingView_added()" class="hiddenlink" target="rightframe"><b>getMediaItemPlayingView</b>
+()</A></nobr><br>
+<!-- Method getMediaPlayState -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.getMediaPlayState_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>getMediaPlayState</b>
+(<code>Object</code>)</A></nobr><br>
+<!-- Method getMovementGranularity -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.getMovementGranularity_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>getMovementGranularity</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<!-- Method getOnFlingListener -->
+<nobr><A HREF="android.support.v7.widget.RecyclerView.html#android.support.v7.widget.RecyclerView.getOnFlingListener_added()" class="hiddenlink" target="rightframe"><b>getOnFlingListener</b>
+()</A></nobr><br>
+<!-- Method getOverScrollMode -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.getOverScrollMode_changed(android.view.View)" class="hiddenlink" target="rightframe">getOverScrollMode
+(<code>View</code>)</A></nobr><br>
+<!-- Method getPasswordVisibilityToggleContentDescription -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleContentDescription_added()" class="hiddenlink" target="rightframe"><b>getPasswordVisibilityToggleContentDescription</b>
+()</A></nobr><br>
+<!-- Method getPasswordVisibilityToggleDrawable -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleDrawable_added()" class="hiddenlink" target="rightframe"><b>getPasswordVisibilityToggleDrawable</b>
+()</A></nobr><br>
+<!-- Method getPointerCount -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getPointerCount_changed(android.view.MotionEvent)" class="hiddenlink" target="rightframe">getPointerCount
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method getPointerId -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getPointerId_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getPointerId
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<!-- Method getReferrer -->
+<nobr><A HREF="android.support.v4.app.ActivityCompat.html#android.support.v4.app.ActivityCompat.getReferrer_changed(android.app.Activity)" class="hiddenlink" target="rightframe">getReferrer
+(<code>Activity</code>)</A></nobr><br>
+<!-- Method getScaledPagingTouchSlop -->
+<nobr><A HREF="android.support.v4.view.ViewConfigurationCompat.html#android.support.v4.view.ViewConfigurationCompat.getScaledPagingTouchSlop_changed(android.view.ViewConfiguration)" class="hiddenlink" target="rightframe">getScaledPagingTouchSlop
+(<code>ViewConfiguration</code>)</A></nobr><br>
+<!-- Method getSelectionMode -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.getSelectionMode_added()" class="hiddenlink" target="rightframe"><b>getSelectionMode</b>
+()</A></nobr><br>
+<!-- Method getSource -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getSource_changed(android.view.MotionEvent)" class="hiddenlink" target="rightframe">getSource
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method getX -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getX_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getX
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<!-- Method getY -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getY_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getY
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<!-- Class GridLayout -->
+<A HREF="pkg_android.support.v7.widget.html#GridLayout" class="hiddenlink" target="rightframe"><b>GridLayout</b></A><br>
+<!-- Class GridLayout.Alignment -->
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.Alignment" class="hiddenlink" target="rightframe"><b>GridLayout.Alignment</b></A><br>
+<!-- Class GridLayout.LayoutParams -->
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.LayoutParams" class="hiddenlink" target="rightframe"><b>GridLayout.LayoutParams</b></A><br>
+<!-- Class GridLayout.Spec -->
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.Spec" class="hiddenlink" target="rightframe"><b>GridLayout.Spec</b></A><br>
+<!-- Field HOST_VIEW_ID -->
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html#android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.HOST_VIEW_ID" class="hiddenlink" target="rightframe">HOST_VIEW_ID</A>
+</nobr><br>
+<!-- Field insetEdge -->
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html#android.support.design.widget.CoordinatorLayout.LayoutParams.insetEdge" class="hiddenlink" target="rightframe">insetEdge</A>
+</nobr><br>
+<!-- Method isAtLeastNMR1 -->
+<nobr><A HREF="android.support.v4.os.BuildCompat.html#android.support.v4.os.BuildCompat.isAtLeastNMR1_added()" class="hiddenlink" target="rightframe"><b>isAtLeastNMR1</b>
+()</A></nobr><br>
+<!-- Method isAutoHideEnabled -->
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.isAutoHideEnabled_added()" class="hiddenlink" target="rightframe"><b>isAutoHideEnabled</b>
+()</A></nobr><br>
+<!-- Method isContextClickable -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.isContextClickable_added()" class="hiddenlink" target="rightframe"><b>isContextClickable</b>
+()</A></nobr><br>
+<!-- Method isDirty -->
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.isDirty_changed(android.support.design.widget.CoordinatorLayout, V)" class="hiddenlink" target="rightframe">isDirty
+(<code>CoordinatorLayout, V</code>)</A></nobr><br>
+<!-- Method isImmediateNotifySupported -->
+<nobr><A HREF="android.support.v17.leanback.widget.ObjectAdapter.html#android.support.v17.leanback.widget.ObjectAdapter.isImmediateNotifySupported_added()" class="hiddenlink" target="rightframe"><b>isImmediateNotifySupported</b>
+()</A></nobr><br>
+<!-- Method isImportantForAccessibility -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.isImportantForAccessibility_added(android.view.View)" class="hiddenlink" target="rightframe"><b>isImportantForAccessibility</b>
+(<code>View</code>)</A></nobr><br>
+<!-- Method isOpaque -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.isOpaque_changed(android.view.View)" class="hiddenlink" target="rightframe">isOpaque
+(<code>View</code>)</A></nobr><br>
+<!-- Method isPasswordVisibilityToggleEnabled -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.isPasswordVisibilityToggleEnabled_added()" class="hiddenlink" target="rightframe"><b>isPasswordVisibilityToggleEnabled</b>
+()</A></nobr><br>
+<!-- Method isTracking -->
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.isTracking_changed(android.view.KeyEvent)" class="hiddenlink" target="rightframe">isTracking
+(<code>KeyEvent</code>)</A></nobr><br>
+<!-- Class KeyEventCompat -->
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.KeyEventCompat.html" class="hiddenlink" target="rightframe">KeyEventCompat</A><br>
+<!-- Method layoutDependsOn -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.layoutDependsOn_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)" class="hiddenlink" target="rightframe"><strike>layoutDependsOn</strike>
+(<code>CoordinatorLayout, FloatingActionButton, View</code>)</A></nobr><br>
+<!-- Class LeanbackSettingsFragment -->
+<A HREF="android.support.v17.preference.LeanbackSettingsFragment.html" class="hiddenlink" target="rightframe">LeanbackSettingsFragment</A><br>
+<!-- Class LinearLayoutCompat -->
+<A HREF="pkg_android.support.v7.widget.html#LinearLayoutCompat" class="hiddenlink" target="rightframe"><b>LinearLayoutCompat</b></A><br>
+<!-- Class LinearLayoutCompat.LayoutParams -->
+<A HREF="pkg_android.support.v7.widget.html#LinearLayoutCompat.LayoutParams" class="hiddenlink" target="rightframe"><b>LinearLayoutCompat.LayoutParams</b></A><br>
+<!-- Class LinearLayoutManager -->
+<A HREF="android.support.v7.widget.LinearLayoutManager.html" class="hiddenlink" target="rightframe">LinearLayoutManager</A><br>
+<!-- Class LinearSmoothScroller -->
+<A HREF="android.support.v7.widget.LinearSmoothScroller.html" class="hiddenlink" target="rightframe">LinearSmoothScroller</A><br>
+<!-- Class LinearSnapHelper -->
+<A HREF="pkg_android.support.v7.widget.html#LinearSnapHelper" class="hiddenlink" target="rightframe"><b>LinearSnapHelper</b></A><br>
+<!-- Class ListPopupWindow -->
+<A HREF="pkg_android.support.v7.widget.html#ListPopupWindow" class="hiddenlink" target="rightframe"><b>ListPopupWindow</b></A><br>
+<!-- Class ListUpdateCallback -->
+<A HREF="pkg_android.support.v7.util.html#ListUpdateCallback" class="hiddenlink" target="rightframe"><b><i>ListUpdateCallback</i></b></A><br>
+<!-- Method loadDescription -->
+<nobr><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html#android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.loadDescription_added(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager)" class="hiddenlink" target="rightframe"><b>loadDescription</b>
+(<code>AccessibilityServiceInfo, PackageManager</code>)</A></nobr><br>
+<!-- Method makeBasic -->
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeBasic_added()" class="hiddenlink" target="rightframe"><b>makeBasic</b>
+()</A></nobr><br>
+<!-- Method makeClipRevealAnimation -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeClipRevealAnimation_added(android.view.View, int, int, int, int)" class="hiddenlink" target="rightframe"><b>makeClipRevealAnimation</b>
+(<code>View, int, int, int, int</code>)</A></nobr><br>
+<!-- Method makeTaskLaunchBehind -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeTaskLaunchBehind_added()" class="hiddenlink" target="rightframe"><b>makeTaskLaunchBehind</b>
+()</A></nobr><br>
+<!-- Class MediaBrowserCompat.MediaItem -->
+<A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html" class="hiddenlink" target="rightframe">MediaBrowserCompat.MediaItem</A><br>
+<!-- Class MediaBrowserServiceCompat.BrowserRoot -->
+<A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html" class="hiddenlink" target="rightframe">MediaBrowserServiceCompat.BrowserRoot</A><br>
+<!-- Class MediaButtonReceiver -->
+<A HREF="android.support.v4.media.session.MediaButtonReceiver.html" class="hiddenlink" target="rightframe">MediaButtonReceiver</A><br>
+<!-- Class MediaDescriptionCompat -->
+<A HREF="android.support.v4.media.MediaDescriptionCompat.html" class="hiddenlink" target="rightframe">MediaDescriptionCompat</A><br>
+<!-- Class MediaMetadataCompat -->
+<A HREF="android.support.v4.media.MediaMetadataCompat.html" class="hiddenlink" target="rightframe">MediaMetadataCompat</A><br>
+<!-- Class MediaSessionCompat -->
+<A HREF="android.support.v4.media.session.MediaSessionCompat.html" class="hiddenlink" target="rightframe">MediaSessionCompat</A><br>
+<!-- Class MediaSessionCompat.QueueItem -->
+<A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html" class="hiddenlink" target="rightframe">MediaSessionCompat.QueueItem</A><br>
+<!-- Field METADATA_KEY_BT_FOLDER_TYPE -->
+<nobr><A HREF="android.support.v4.media.MediaMetadataCompat.html#android.support.v4.media.MediaMetadataCompat.METADATA_KEY_BT_FOLDER_TYPE" class="hiddenlink" target="rightframe">METADATA_KEY_BT_FOLDER_TYPE</A>
+</nobr><br>
+<!-- Field METADATA_KEY_MEDIA_URI -->
+<nobr><A HREF="android.support.v4.media.MediaMetadataCompat.html#android.support.v4.media.MediaMetadataCompat.METADATA_KEY_MEDIA_URI" class="hiddenlink" target="rightframe">METADATA_KEY_MEDIA_URI</A>
+</nobr><br>
+<!-- Class MotionEventCompat -->
+<A HREF="android.support.v4.view.MotionEventCompat.html" class="hiddenlink" target="rightframe">MotionEventCompat</A><br>
+<!-- Class MultiSelectListPreferenceDialogFragmentCompat -->
+<A HREF="pkg_android.support.v7.preference.html#MultiSelectListPreferenceDialogFragmentCompat" class="hiddenlink" target="rightframe"><b>MultiSelectListPreferenceDialogFragmentCompat</b></A><br>
+<!-- Class NotificationCompat -->
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat" class="hiddenlink" target="rightframe"><b>NotificationCompat</b></A><br>
+<!-- Class NotificationCompat.Builder -->
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat.Builder" class="hiddenlink" target="rightframe"><b>NotificationCompat.Builder</b></A><br>
+<!-- Class NotificationCompat.MediaStyle -->
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat.MediaStyle" class="hiddenlink" target="rightframe"><b>NotificationCompat.MediaStyle</b></A><br>
+<!-- Method notifyPlayStateChanged -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.notifyPlayStateChanged_added()" class="hiddenlink" target="rightframe"><b>notifyPlayStateChanged</b>
+()</A></nobr><br>
+<!-- Class ObjectAdapter -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.leanback.widget.ObjectAdapter.html" class="hiddenlink" target="rightframe">ObjectAdapter</A><br>
+<!-- Method obtain -->
+<i>obtain</i><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.html#android.support.v4.media.session.MediaSessionCompat.obtain_changed(android.content.Context, java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Context, Object</code>) in android.support.v4.media.session.MediaSessionCompat
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.obtain_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in android.support.v4.media.session.MediaSessionCompat.QueueItem
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain_added(int, int, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int, boolean</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain_added(int, int, int, int, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int, int, int, boolean</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.obtain_added(int, float, float, float)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, float, float, float</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat
+</A></nobr><br>
+<!-- Method onAccessibilityStateChanged -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.onAccessibilityStateChanged_removed(boolean)" class="hiddenlink" target="rightframe"><strike>onAccessibilityStateChanged</strike>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method onAttachedToLayoutParams -->
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onAttachedToLayoutParams_added(android.support.design.widget.CoordinatorLayout.LayoutParams)" class="hiddenlink" target="rightframe"><b>onAttachedToLayoutParams</b>
+(<code>LayoutParams</code>)</A></nobr><br>
+<!-- Method onBindMediaPlayState -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.onBindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" class="hiddenlink" target="rightframe"><b>onBindMediaPlayState</b>
+(<code>ViewHolder</code>)</A></nobr><br>
+<!-- Method onChanged -->
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onChanged_added(int, int, java.lang.Object)" class="hiddenlink" target="rightframe"><b>onChanged</b>
+(<code>int, int, Object</code>)</A></nobr><br>
+<!-- Method onDependentViewRemoved -->
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.onDependentViewRemoved_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)" class="hiddenlink" target="rightframe"><strike>onDependentViewRemoved</strike>
+(<code>CoordinatorLayout, FloatingActionButton, View</code>)</A></nobr><br>
+<!-- Method onDetachedFromLayoutParams -->
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onDetachedFromLayoutParams_added()" class="hiddenlink" target="rightframe"><b>onDetachedFromLayoutParams</b>
+()</A></nobr><br>
+<!-- Method onInserted -->
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onInserted_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onInserted</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method onMoved -->
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onMoved_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onMoved</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method onRemoved -->
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onRemoved_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onRemoved</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method onRequestChildRectangleOnScreen -->
+<i>onRequestChildRectangleOnScreen</i><br>
+ <nobr><A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html#android.support.design.widget.AppBarLayout.ScrollingViewBehavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, View, Rect, boolean</code>)</b> in android.support.design.widget.AppBarLayout.ScrollingViewBehavior
+</A></nobr><br>
+<!-- Method onRequestChildRectangleOnScreen -->
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, V, Rect, boolean</code>)</b> in android.support.design.widget.CoordinatorLayout.Behavior
+</A></nobr><br>
+<!-- Method onSharedElementsArrived -->
+<nobr><A HREF="android.support.v4.app.SharedElementCallback.html#android.support.v4.app.SharedElementCallback.onSharedElementsArrived_added(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener)" class="hiddenlink" target="rightframe"><b>onSharedElementsArrived</b>
+(<code>List<String>, List<View>, OnSharedElementsReadyListener</code>)</A></nobr><br>
+<!-- Method onStart -->
+<nobr><A HREF="android.support.v7.app.AppCompatDelegate.html#android.support.v7.app.AppCompatDelegate.onStart_added()" class="hiddenlink" target="rightframe"><b>onStart</b>
+()</A></nobr><br>
+<!-- Method onUnbindMediaPlayState -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.onUnbindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" class="hiddenlink" target="rightframe"><b>onUnbindMediaPlayState</b>
+(<code>ViewHolder</code>)</A></nobr><br>
+<!-- Field OVER_SCROLL_ALWAYS -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_ALWAYS" class="hiddenlink" target="rightframe">OVER_SCROLL_ALWAYS</A>
+</nobr><br>
+<!-- Field OVER_SCROLL_IF_CONTENT_SCROLLS -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS" class="hiddenlink" target="rightframe">OVER_SCROLL_IF_CONTENT_SCROLLS</A>
+</nobr><br>
+<!-- Field OVER_SCROLL_NEVER -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_NEVER" class="hiddenlink" target="rightframe">OVER_SCROLL_NEVER</A>
+</nobr><br>
+<!-- Class Palette -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v7.graphics.Palette.html" class="hiddenlink" target="rightframe">Palette</A><br>
+<!-- Class PatternsCompat -->
+<A HREF="pkg_android.support.v4.util.html#PatternsCompat" class="hiddenlink" target="rightframe"><b>PatternsCompat</b></A><br>
+<!-- Field PEEK_HEIGHT_AUTO -->
+<nobr><A HREF="android.support.design.widget.BottomSheetBehavior.html#android.support.design.widget.BottomSheetBehavior.PEEK_HEIGHT_AUTO" class="hiddenlink" target="rightframe">PEEK_HEIGHT_AUTO</A>
+</nobr><br>
+<!-- Field PLAY_STATE_INITIAL -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_INITIAL" class="hiddenlink" target="rightframe">PLAY_STATE_INITIAL</A>
+</nobr><br>
+<!-- Field PLAY_STATE_PAUSED -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PAUSED" class="hiddenlink" target="rightframe">PLAY_STATE_PAUSED</A>
+</nobr><br>
+<!-- Field PLAY_STATE_PLAYING -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PLAYING" class="hiddenlink" target="rightframe">PLAY_STATE_PLAYING</A>
+</nobr><br>
+<!-- Class PlaybackStateCompat -->
+<A HREF="android.support.v4.media.session.PlaybackStateCompat.html" class="hiddenlink" target="rightframe">PlaybackStateCompat</A><br>
+<!-- Class PopupMenu -->
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu" class="hiddenlink" target="rightframe"><b>PopupMenu</b></A><br>
+<!-- Class PopupMenu.OnDismissListener -->
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu.OnDismissListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnDismissListener</i></b></A><br>
+<!-- Class PopupMenu.OnMenuItemClickListener -->
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnMenuItemClickListener</i></b></A><br>
+<!-- Class PreferenceFragment -->
+<A HREF="android.support.v14.preference.PreferenceFragment.html" class="hiddenlink" target="rightframe">PreferenceFragment</A><br>
+<!-- Method prepareForDrop -->
+<nobr><A HREF="android.support.v7.widget.LinearLayoutManager.html#android.support.v7.widget.LinearLayoutManager.prepareForDrop_removed(android.view.View, android.view.View, int, int)" class="hiddenlink" target="rightframe"><strike>prepareForDrop</strike>
+(<code>View, View, int, int</code>)</A></nobr><br>
+<!-- Class RecyclerView -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v7.widget.RecyclerView.html" class="hiddenlink" target="rightframe">RecyclerView</A><br>
+<!-- Class RecyclerView.OnFlingListener -->
+<A HREF="pkg_android.support.v7.widget.html#RecyclerView.OnFlingListener" class="hiddenlink" target="rightframe"><b>RecyclerView.OnFlingListener</b></A><br>
+<!-- Class RecyclerView.SmoothScroller.ScrollVectorProvider -->
+<A HREF="pkg_android.support.v7.widget.html#RecyclerView.SmoothScroller.ScrollVectorProvider" class="hiddenlink" target="rightframe"><b><i>RecyclerView.SmoothScroller.ScrollVectorProvider</i></b></A><br>
+<!-- Method removeAccessibilityStateChangeListener -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.removeAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe">removeAccessibilityStateChangeListener
+(<code>AccessibilityManager, AccessibilityStateChangeListener</code>)</A></nobr><br>
+<!-- Method removeTouchExplorationStateChangeListener -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.removeTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" class="hiddenlink" target="rightframe"><b>removeTouchExplorationStateChangeListener</b>
+(<code>AccessibilityManager, TouchExplorationStateChangeListener</code>)</A></nobr><br>
+<!-- Method requestUsageTimeReport -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.requestUsageTimeReport_added(android.app.PendingIntent)" class="hiddenlink" target="rightframe"><b>requestUsageTimeReport</b>
+(<code>PendingIntent</code>)</A></nobr><br>
+<!-- Class SearchView -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#SearchView" class="hiddenlink" target="rightframe"><b>SearchView</b></A><br>
+<!-- Class SearchView.OnCloseListener -->
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnCloseListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnCloseListener</i></b></A><br>
+<!-- Class SearchView.OnQueryTextListener -->
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnQueryTextListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnQueryTextListener</i></b></A><br>
+<!-- Class SearchView.OnSuggestionListener -->
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnSuggestionListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnSuggestionListener</i></b></A><br>
+<!-- Class SearchViewCompat -->
+<A HREF="android.support.v4.widget.SearchViewCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat</A><br>
+<!-- Class SearchViewCompat.OnCloseListener -->
+<A HREF="pkg_android.support.v4.widget.html#SearchViewCompat.OnCloseListener" class="hiddenlink" target="rightframe"><b><i>SearchViewCompat.OnCloseListener</i></b></A><br>
+<!-- Class SearchViewCompat.OnCloseListenerCompat -->
+<A HREF="android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat.OnCloseListenerCompat</A><br>
+<!-- Class SearchViewCompat.OnQueryTextListener -->
+<A HREF="pkg_android.support.v4.widget.html#SearchViewCompat.OnQueryTextListener" class="hiddenlink" target="rightframe"><b><i>SearchViewCompat.OnQueryTextListener</i></b></A><br>
+<!-- Class SearchViewCompat.OnQueryTextListenerCompat -->
+<A HREF="android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat.OnQueryTextListenerCompat</A><br>
+<!-- Class ServiceCompat -->
+<A HREF="android.support.v4.app.ServiceCompat.html" class="hiddenlink" target="rightframe">ServiceCompat</A><br>
+<!-- Method setAction -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.setAction_added(android.view.accessibility.AccessibilityEvent, int)" class="hiddenlink" target="rightframe"><b>setAction</b>
+(<code>AccessibilityEvent, int</code>)</A></nobr><br>
+<!-- Method setAlwaysUseBrowserUI -->
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.setAlwaysUseBrowserUI_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>setAlwaysUseBrowserUI</b>
+(<code>Intent</code>)</A></nobr><br>
+<!-- Method setAutoHideEnabled -->
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.setAutoHideEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoHideEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setCollapsedTitleTextColor -->
+<nobr><A HREF="android.support.design.widget.CollapsingToolbarLayout.html#android.support.design.widget.CollapsingToolbarLayout.setCollapsedTitleTextColor_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setCollapsedTitleTextColor</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<!-- Method setContextClickable -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.setContextClickable_added(boolean)" class="hiddenlink" target="rightframe"><b>setContextClickable</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setDrawerArrowDrawable -->
+<nobr><A HREF="android.support.v7.app.ActionBarDrawerToggle.html#android.support.v7.app.ActionBarDrawerToggle.setDrawerArrowDrawable_added(android.support.v7.graphics.drawable.DrawerArrowDrawable)" class="hiddenlink" target="rightframe"><b>setDrawerArrowDrawable</b>
+(<code>DrawerArrowDrawable</code>)</A></nobr><br>
+<!-- Method setExpandedTitleTextColor -->
+<nobr><A HREF="android.support.design.widget.CollapsingToolbarLayout.html#android.support.design.widget.CollapsingToolbarLayout.setExpandedTitleTextColor_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setExpandedTitleTextColor</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<!-- Method setInstantAppsEnabled -->
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.Builder.html#android.support.customtabs.CustomTabsIntent.Builder.setInstantAppsEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setInstantAppsEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setLaunchBounds -->
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.setLaunchBounds_added(android.graphics.Rect)" class="hiddenlink" target="rightframe"><b>setLaunchBounds</b>
+(<code>Rect</code>)</A></nobr><br>
+<!-- Method setMovementGranularity -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.setMovementGranularity_added(android.view.accessibility.AccessibilityEvent, int)" class="hiddenlink" target="rightframe"><b>setMovementGranularity</b>
+(<code>AccessibilityEvent, int</code>)</A></nobr><br>
+<!-- Method setOnChildScrollUpCallback -->
+<nobr><A HREF="android.support.v4.widget.SwipeRefreshLayout.html#android.support.v4.widget.SwipeRefreshLayout.setOnChildScrollUpCallback_added(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback)" class="hiddenlink" target="rightframe"><b>setOnChildScrollUpCallback</b>
+(<code>OnChildScrollUpCallback</code>)</A></nobr><br>
+<!-- Method setOnCloseListener -->
+<nobr><A HREF="android.support.v4.widget.SearchViewCompat.html#android.support.v4.widget.SearchViewCompat.setOnCloseListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListener)" class="hiddenlink" target="rightframe">setOnCloseListener
+(<code>View, OnCloseListener</code>)</A></nobr><br>
+<!-- Method setOnFlingListener -->
+<nobr><A HREF="android.support.v7.widget.RecyclerView.html#android.support.v7.widget.RecyclerView.setOnFlingListener_added(android.support.v7.widget.RecyclerView.OnFlingListener)" class="hiddenlink" target="rightframe"><b>setOnFlingListener</b>
+(<code>OnFlingListener</code>)</A></nobr><br>
+<!-- Method setOnQueryTextListener -->
+<nobr><A HREF="android.support.v4.widget.SearchViewCompat.html#android.support.v4.widget.SearchViewCompat.setOnQueryTextListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListener)" class="hiddenlink" target="rightframe">setOnQueryTextListener
+(<code>View, OnQueryTextListener</code>)</A></nobr><br>
+<!-- Method setOverScrollMode -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.setOverScrollMode_changed(android.view.View, int)" class="hiddenlink" target="rightframe">setOverScrollMode
+(<code>View, int</code>)</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleContentDescription -->
+<i>setPasswordVisibilityToggleContentDescription</i><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleContentDescription -->
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <b>
+(<code>CharSequence</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleDrawable -->
+<i>setPasswordVisibilityToggleDrawable</i><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleDrawable -->
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleEnabled -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleTintList -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintList_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleTintList</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<!-- Method setPasswordVisibilityToggleTintMode -->
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintMode_added(android.graphics.PorterDuff.Mode)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleTintMode</b>
+(<code>Mode</code>)</A></nobr><br>
+<!-- Method setSecondaryToolbarViews -->
+<nobr><A HREF="android.support.customtabs.CustomTabsSession.html#android.support.customtabs.CustomTabsSession.setSecondaryToolbarViews_added(android.widget.RemoteViews, int[], android.app.PendingIntent)" class="hiddenlink" target="rightframe"><b>setSecondaryToolbarViews</b>
+(<code>RemoteViews, int[], PendingIntent</code>)</A></nobr><br>
+<!-- Method setSelectedMediaItemNumberView -->
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.setSelectedMediaItemNumberView_added(int)" class="hiddenlink" target="rightframe"><b>setSelectedMediaItemNumberView</b>
+(<code>int</code>)</A></nobr><br>
+<!-- Method setToolbarItem -->
+<nobr><A HREF="android.support.customtabs.CustomTabsSession.html#android.support.customtabs.CustomTabsSession.setToolbarItem_changed(int, android.graphics.Bitmap, java.lang.String)" class="hiddenlink" target="rightframe">setToolbarItem
+(<code>int, Bitmap, String</code>)</A></nobr><br>
+<!-- Class ShareActionProvider -->
+<A HREF="pkg_android.support.v7.widget.html#ShareActionProvider" class="hiddenlink" target="rightframe"><b>ShareActionProvider</b></A><br>
+<!-- Class ShareActionProvider.OnShareTargetSelectedListener -->
+<A HREF="pkg_android.support.v7.widget.html#ShareActionProvider.OnShareTargetSelectedListener" class="hiddenlink" target="rightframe"><b><i>ShareActionProvider.OnShareTargetSelectedListener</i></b></A><br>
+<!-- Class SharedElementCallback -->
+<A HREF="android.support.v4.app.SharedElementCallback.html" class="hiddenlink" target="rightframe">SharedElementCallback</A><br>
+<!-- Class SharedElementCallback.OnSharedElementsReadyListener -->
+<A HREF="pkg_android.support.v4.app.html#SharedElementCallback.OnSharedElementsReadyListener" class="hiddenlink" target="rightframe"><b><i>SharedElementCallback.OnSharedElementsReadyListener</i></b></A><br>
+<!-- Method shouldAlwaysUseBrowserUI -->
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.shouldAlwaysUseBrowserUI_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>shouldAlwaysUseBrowserUI</b>
+(<code>Intent</code>)</A></nobr><br>
+<!-- Class SnapHelper -->
+<A HREF="pkg_android.support.v7.widget.html#SnapHelper" class="hiddenlink" target="rightframe"><b>SnapHelper</b></A><br>
+<!-- Class SortedList.Callback -->
+<A HREF="android.support.v7.util.SortedList.Callback.html" class="hiddenlink" target="rightframe">SortedList.Callback</A><br>
+<!-- Class Space -->
+<A HREF="pkg_android.support.v7.widget.html#Space" class="hiddenlink" target="rightframe"><b>Space</b></A><br>
+<!-- Class StaggeredGridLayoutManager -->
+<A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html" class="hiddenlink" target="rightframe">StaggeredGridLayoutManager</A><br>
+<!-- Method startTracking -->
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.startTracking_changed(android.view.KeyEvent)" class="hiddenlink" target="rightframe">startTracking
+(<code>KeyEvent</code>)</A></nobr><br>
+<!-- Field STOP_FOREGROUND_DETACH -->
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.STOP_FOREGROUND_DETACH" class="hiddenlink" target="rightframe">STOP_FOREGROUND_DETACH</A>
+</nobr><br>
+<!-- Field STOP_FOREGROUND_REMOVE -->
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.STOP_FOREGROUND_REMOVE" class="hiddenlink" target="rightframe">STOP_FOREGROUND_REMOVE</A>
+</nobr><br>
+<!-- Method stopForeground -->
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.stopForeground_added(android.app.Service, int)" class="hiddenlink" target="rightframe"><b>stopForeground</b>
+(<code>Service, int</code>)</A></nobr><br>
+<!-- Class SwipeRefreshLayout -->
+<A HREF="android.support.v4.widget.SwipeRefreshLayout.html" class="hiddenlink" target="rightframe">SwipeRefreshLayout</A><br>
+<!-- Class SwipeRefreshLayout.OnChildScrollUpCallback -->
+<A HREF="pkg_android.support.v4.widget.html#SwipeRefreshLayout.OnChildScrollUpCallback" class="hiddenlink" target="rightframe"><b><i>SwipeRefreshLayout.OnChildScrollUpCallback</i></b></A><br>
+<!-- Class SwitchCompat -->
+<A HREF="pkg_android.support.v7.widget.html#SwitchCompat" class="hiddenlink" target="rightframe"><b>SwitchCompat</b></A><br>
+<!-- Class TabLayout -->
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.TabLayout.html" class="hiddenlink" target="rightframe">TabLayout</A><br>
+<!-- Field TAG -->
+<nobr><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html#android.support.v7.widget.StaggeredGridLayoutManager.TAG" class="hiddenlink" target="rightframe"><strike>TAG</strike></A>
+</nobr><br>
+<!-- Class TextInputLayout -->
+<A HREF="android.support.design.widget.TextInputLayout.html" class="hiddenlink" target="rightframe">TextInputLayout</A><br>
+<!-- Class TextViewCompat -->
+<A HREF="android.support.v4.widget.TextViewCompat.html" class="hiddenlink" target="rightframe">TextViewCompat</A><br>
+<!-- Class ThemedSpinnerAdapter -->
+<A HREF="pkg_android.support.v7.widget.html#ThemedSpinnerAdapter" class="hiddenlink" target="rightframe"><b><i>ThemedSpinnerAdapter</i></b></A><br>
+<!-- Class ThemedSpinnerAdapter.Helper -->
+<A HREF="pkg_android.support.v7.widget.html#ThemedSpinnerAdapter.Helper" class="hiddenlink" target="rightframe"><b>ThemedSpinnerAdapter.Helper</b></A><br>
+<!-- Method toKeyCode -->
+<nobr><A HREF="android.support.v4.media.session.PlaybackStateCompat.html#android.support.v4.media.session.PlaybackStateCompat.toKeyCode_added(long)" class="hiddenlink" target="rightframe"><b>toKeyCode</b>
+(<code>long</code>)</A></nobr><br>
+<!-- Class Toolbar -->
+<A HREF="pkg_android.support.v7.widget.html#Toolbar" class="hiddenlink" target="rightframe"><b>Toolbar</b></A><br>
+<!-- Class Toolbar.LayoutParams -->
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.LayoutParams" class="hiddenlink" target="rightframe"><b>Toolbar.LayoutParams</b></A><br>
+<!-- Class Toolbar.OnMenuItemClickListener -->
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>Toolbar.OnMenuItemClickListener</i></b></A><br>
+<!-- Class Toolbar.SavedState -->
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.SavedState" class="hiddenlink" target="rightframe"><b>Toolbar.SavedState</b></A><br>
+<!-- Field TYPE_ASSIST_READING_CONTEXT -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_ASSIST_READING_CONTEXT" class="hiddenlink" target="rightframe">TYPE_ASSIST_READING_CONTEXT</A>
+</nobr><br>
+<!-- Field TYPE_SPLIT_SCREEN_DIVIDER -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html#android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.TYPE_SPLIT_SCREEN_DIVIDER" class="hiddenlink" target="rightframe">TYPE_SPLIT_SCREEN_DIVIDER</A>
+</nobr><br>
+<!-- Field TYPE_VIEW_CONTEXT_CLICKED -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_VIEW_CONTEXT_CLICKED" class="hiddenlink" target="rightframe">TYPE_VIEW_CONTEXT_CLICKED</A>
+</nobr><br>
+<!-- Field TYPE_WINDOWS_CHANGED -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_WINDOWS_CHANGED" class="hiddenlink" target="rightframe">TYPE_WINDOWS_CHANGED</A>
+</nobr><br>
+<!-- Class ViewCompat -->
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.ViewCompat.html" class="hiddenlink" target="rightframe">ViewCompat</A><br>
+<!-- Class ViewConfigurationCompat -->
+<A HREF="android.support.v4.view.ViewConfigurationCompat.html" class="hiddenlink" target="rightframe">ViewConfigurationCompat</A><br>
+<!-- Class WindowInsetsCompat -->
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>WindowInsetsCompat</i><br>
+ <A HREF="android.support.v4.view.WindowInsetsCompat.html" class="hiddenlink" target="rightframe">android.support.v4.view</A><br>
+<!-- Constructor WindowInsetsCompat -->
+ <nobr><A HREF="android.support.v4.view.WindowInsetsCompat.html#android.support.v4.view.WindowInsetsCompat.ctor_added(android.support.v4.view.WindowInsetsCompat)" class="hiddenlink" target="rightframe"><b>WindowInsetsCompat</b>
+(<code>WindowInsetsCompat</code>)</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_changes.html b/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_changes.html
new file mode 100644
index 0000000..854a487
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_changes.html
@@ -0,0 +1,666 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="alldiffs_index_all.html" xclass="hiddenlink">All Differences</a>
+ <br>
+<A HREF="alldiffs_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="alldiffs_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Class AbstractMediaItemPresenter -->
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html" class="hiddenlink" target="rightframe">AbstractMediaItemPresenter</A><br>
+<!-- Class AbstractMediaItemPresenter.ViewHolder -->
+<A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html" class="hiddenlink" target="rightframe">AbstractMediaItemPresenter.ViewHolder</A><br>
+<!-- Class AccessibilityEventCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html" class="hiddenlink" target="rightframe">AccessibilityEventCompat</A><br>
+<!-- Class AccessibilityManagerCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html" class="hiddenlink" target="rightframe">AccessibilityManagerCompat</A><br>
+<!-- Class AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html" class="hiddenlink" target="rightframe">AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat</A><br>
+<!-- Class AccessibilityNodeInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat</A><br>
+<!-- Class AccessibilityNodeInfoCompat.AccessibilityActionCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.AccessibilityActionCompat</A><br>
+<!-- Class AccessibilityNodeInfoCompat.CollectionInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.CollectionInfoCompat</A><br>
+<!-- Class AccessibilityNodeInfoCompat.CollectionItemInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.CollectionItemInfoCompat</A><br>
+<!-- Class AccessibilityNodeInfoCompat.RangeInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.RangeInfoCompat</A><br>
+<!-- Class AccessibilityNodeProviderCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeProviderCompat</A><br>
+<!-- Class AccessibilityServiceInfoCompat -->
+<A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityServiceInfoCompat</A><br>
+<!-- Class AccessibilityWindowInfoCompat -->
+<A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityWindowInfoCompat</A><br>
+<!-- Class ActionBarDrawerToggle -->
+<A HREF="android.support.v7.app.ActionBarDrawerToggle.html" class="hiddenlink" target="rightframe">ActionBarDrawerToggle</A><br>
+<!-- Class ActivityCompat -->
+<i>ActivityCompat</i><br>
+ <A HREF="android.support.v4.app.ActivityCompat.html" class="hiddenlink" target="rightframe">android.support.v4.app</A><br>
+<!-- Constructor ActivityCompat -->
+ <nobr><A HREF="android.support.v4.app.ActivityCompat.html#android.support.v4.app.ActivityCompat.ctor_changed()" class="hiddenlink" target="rightframe">ActivityCompat
+()</A></nobr> constructor<br>
+<!-- Class ActivityOptionsCompat -->
+<A HREF="android.support.v4.app.ActivityOptionsCompat.html" class="hiddenlink" target="rightframe">ActivityOptionsCompat</A><br>
+<!-- Method addAccessibilityStateChangeListener -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.addAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe">addAccessibilityStateChangeListener
+(<code>AccessibilityManager, AccessibilityStateChangeListener</code>)</A></nobr><br>
+<!-- Package android.support.customtabs -->
+<A HREF="pkg_android.support.customtabs.html" class="hiddenlink" target="rightframe">android.support.customtabs</A><br>
+<!-- Package android.support.design.widget -->
+<A HREF="pkg_android.support.design.widget.html" class="hiddenlink" target="rightframe">android.support.design.widget</A><br>
+<!-- Package android.support.v14.preference -->
+<A HREF="pkg_android.support.v14.preference.html" class="hiddenlink" target="rightframe">android.support.v14.preference</A><br>
+<!-- Package android.support.v17.leanback.widget -->
+<A HREF="pkg_android.support.v17.leanback.widget.html" class="hiddenlink" target="rightframe">android.support.v17.leanback.widget</A><br>
+<!-- Package android.support.v17.preference -->
+<A HREF="pkg_android.support.v17.preference.html" class="hiddenlink" target="rightframe">android.support.v17.preference</A><br>
+<!-- Package android.support.v4.accessibilityservice -->
+<A HREF="pkg_android.support.v4.accessibilityservice.html" class="hiddenlink" target="rightframe">android.support.v4.accessibilityservice</A><br>
+<!-- Package android.support.v4.app -->
+<A HREF="pkg_android.support.v4.app.html" class="hiddenlink" target="rightframe">android.support.v4.app</A><br>
+<!-- Package android.support.v4.content -->
+<A HREF="pkg_android.support.v4.content.html" class="hiddenlink" target="rightframe">android.support.v4.content</A><br>
+<!-- Package android.support.v4.graphics.drawable -->
+<A HREF="pkg_android.support.v4.graphics.drawable.html" class="hiddenlink" target="rightframe">android.support.v4.graphics.drawable</A><br>
+<!-- Package android.support.v4.media -->
+<A HREF="pkg_android.support.v4.media.html" class="hiddenlink" target="rightframe">android.support.v4.media</A><br>
+<!-- Package android.support.v4.media.session -->
+<A HREF="pkg_android.support.v4.media.session.html" class="hiddenlink" target="rightframe">android.support.v4.media.session</A><br>
+<!-- Package android.support.v4.os -->
+<A HREF="pkg_android.support.v4.os.html" class="hiddenlink" target="rightframe">android.support.v4.os</A><br>
+<!-- Package android.support.v4.util -->
+<A HREF="pkg_android.support.v4.util.html" class="hiddenlink" target="rightframe">android.support.v4.util</A><br>
+<!-- Package android.support.v4.view -->
+<A HREF="pkg_android.support.v4.view.html" class="hiddenlink" target="rightframe">android.support.v4.view</A><br>
+<!-- Package android.support.v4.view.accessibility -->
+<A HREF="pkg_android.support.v4.view.accessibility.html" class="hiddenlink" target="rightframe">android.support.v4.view.accessibility</A><br>
+<!-- Package android.support.v4.widget -->
+<A HREF="pkg_android.support.v4.widget.html" class="hiddenlink" target="rightframe">android.support.v4.widget</A><br>
+<!-- Package android.support.v7.app -->
+<A HREF="pkg_android.support.v7.app.html" class="hiddenlink" target="rightframe">android.support.v7.app</A><br>
+<!-- Package android.support.v7.content.res -->
+<A HREF="pkg_android.support.v7.content.res.html" class="hiddenlink" target="rightframe">android.support.v7.content.res</A><br>
+<!-- Package android.support.v7.graphics -->
+<A HREF="pkg_android.support.v7.graphics.html" class="hiddenlink" target="rightframe">android.support.v7.graphics</A><br>
+<!-- Package android.support.v7.preference -->
+<A HREF="pkg_android.support.v7.preference.html" class="hiddenlink" target="rightframe">android.support.v7.preference</A><br>
+<!-- Package android.support.v7.util -->
+<A HREF="pkg_android.support.v7.util.html" class="hiddenlink" target="rightframe">android.support.v7.util</A><br>
+<!-- Package android.support.v7.widget -->
+<A HREF="pkg_android.support.v7.widget.html" class="hiddenlink" target="rightframe">android.support.v7.widget</A><br>
+<!-- Class AppBarLayout.ScrollingViewBehavior -->
+<A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html" class="hiddenlink" target="rightframe">AppBarLayout.ScrollingViewBehavior</A><br>
+<!-- Class AppCompatDelegate -->
+<A HREF="android.support.v7.app.AppCompatDelegate.html" class="hiddenlink" target="rightframe">AppCompatDelegate</A><br>
+<!-- Class AppCompatResources -->
+<A HREF="android.support.v7.content.res.AppCompatResources.html" class="hiddenlink" target="rightframe">AppCompatResources</A><br>
+<!-- Class BottomSheetBehavior -->
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.BottomSheetBehavior.html" class="hiddenlink" target="rightframe">BottomSheetBehavior</A><br>
+<!-- Class BuildCompat -->
+<A HREF="android.support.v4.os.BuildCompat.html" class="hiddenlink" target="rightframe">BuildCompat</A><br>
+<!-- Class CollapsingToolbarLayout -->
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.CollapsingToolbarLayout.html" class="hiddenlink" target="rightframe">CollapsingToolbarLayout</A><br>
+<!-- Method computeScrollVectorForPosition -->
+<nobr><A HREF="android.support.v7.widget.LinearSmoothScroller.html#android.support.v7.widget.LinearSmoothScroller.computeScrollVectorForPosition_changed(int)" class="hiddenlink" target="rightframe">computeScrollVectorForPosition
+(<code>int</code>)</A></nobr><br>
+<!-- Class ContextCompat -->
+<i>ContextCompat</i><br>
+ <A HREF="android.support.v4.content.ContextCompat.html" class="hiddenlink" target="rightframe">android.support.v4.content</A><br>
+<!-- Constructor ContextCompat -->
+ <nobr><A HREF="android.support.v4.content.ContextCompat.html#android.support.v4.content.ContextCompat.ctor_changed()" class="hiddenlink" target="rightframe">ContextCompat
+()</A></nobr> constructor<br>
+<!-- Class CoordinatorLayout -->
+<A HREF="android.support.design.widget.CoordinatorLayout.html" class="hiddenlink" target="rightframe">CoordinatorLayout</A><br>
+<!-- Class CoordinatorLayout.Behavior -->
+<A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html" class="hiddenlink" target="rightframe">CoordinatorLayout.Behavior</A><br>
+<!-- Class CoordinatorLayout.LayoutParams -->
+<A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html" class="hiddenlink" target="rightframe">CoordinatorLayout.LayoutParams</A><br>
+<!-- Class CustomTabsIntent -->
+<A HREF="android.support.customtabs.CustomTabsIntent.html" class="hiddenlink" target="rightframe">CustomTabsIntent</A><br>
+<!-- Class CustomTabsIntent.Builder -->
+<A HREF="android.support.customtabs.CustomTabsIntent.Builder.html" class="hiddenlink" target="rightframe">CustomTabsIntent.Builder</A><br>
+<!-- Class CustomTabsSession -->
+<A HREF="android.support.customtabs.CustomTabsSession.html" class="hiddenlink" target="rightframe">CustomTabsSession</A><br>
+<!-- Method dispatch -->
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.dispatch_changed(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object)" class="hiddenlink" target="rightframe">dispatch
+(<code>KeyEvent, Callback, Object, Object</code>)</A></nobr><br>
+<!-- Class DrawableCompat -->
+<A HREF="android.support.v4.graphics.drawable.DrawableCompat.html" class="hiddenlink" target="rightframe">DrawableCompat</A><br>
+<!-- Method findPointerIndex -->
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.findPointerIndex_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">findPointerIndex
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<!-- Class FloatingActionButton.Behavior -->
+<A HREF="android.support.design.widget.FloatingActionButton.Behavior.html" class="hiddenlink" target="rightframe">FloatingActionButton.Behavior</A><br>
+<!-- Class FragmentController -->
+<A HREF="android.support.v4.app.FragmentController.html" class="hiddenlink" target="rightframe">FragmentController</A><br>
+<!-- Method getDescription -->
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html#android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.getDescription_changed(android.accessibilityservice.AccessibilityServiceInfo)" class="hiddenlink" target="rightframe">getDescription
+(<code>AccessibilityServiceInfo</code>)</A></nobr><br>
+<!-- Method getKeyDispatcherState -->
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.getKeyDispatcherState_changed(android.view.View)" class="hiddenlink" target="rightframe">getKeyDispatcherState
+(<code>View</code>)</A></nobr><br>
+<!-- Method getOverScrollMode -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.getOverScrollMode_changed(android.view.View)" class="hiddenlink" target="rightframe">getOverScrollMode
+(<code>View</code>)</A></nobr><br>
+<!-- Method getPointerCount -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getPointerCount_changed(android.view.MotionEvent)" class="hiddenlink" target="rightframe">getPointerCount
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method getPointerId -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getPointerId_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getPointerId
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<!-- Method getReferrer -->
+<nobr><A HREF="android.support.v4.app.ActivityCompat.html#android.support.v4.app.ActivityCompat.getReferrer_changed(android.app.Activity)" class="hiddenlink" target="rightframe">getReferrer
+(<code>Activity</code>)</A></nobr><br>
+<!-- Method getScaledPagingTouchSlop -->
+<nobr><A HREF="android.support.v4.view.ViewConfigurationCompat.html#android.support.v4.view.ViewConfigurationCompat.getScaledPagingTouchSlop_changed(android.view.ViewConfiguration)" class="hiddenlink" target="rightframe">getScaledPagingTouchSlop
+(<code>ViewConfiguration</code>)</A></nobr><br>
+<!-- Method getSource -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getSource_changed(android.view.MotionEvent)" class="hiddenlink" target="rightframe">getSource
+(<code>MotionEvent</code>)</A></nobr><br>
+<!-- Method getX -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getX_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getX
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<!-- Method getY -->
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getY_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getY
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<!-- Method isDirty -->
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.isDirty_changed(android.support.design.widget.CoordinatorLayout, V)" class="hiddenlink" target="rightframe">isDirty
+(<code>CoordinatorLayout, V</code>)</A></nobr><br>
+<!-- Method isOpaque -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.isOpaque_changed(android.view.View)" class="hiddenlink" target="rightframe">isOpaque
+(<code>View</code>)</A></nobr><br>
+<!-- Method isTracking -->
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.isTracking_changed(android.view.KeyEvent)" class="hiddenlink" target="rightframe">isTracking
+(<code>KeyEvent</code>)</A></nobr><br>
+<!-- Class KeyEventCompat -->
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.KeyEventCompat.html" class="hiddenlink" target="rightframe">KeyEventCompat</A><br>
+<!-- Class LeanbackSettingsFragment -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.preference.LeanbackSettingsFragment.html" class="hiddenlink" target="rightframe">LeanbackSettingsFragment</A><br>
+<!-- Class LinearLayoutManager -->
+<A HREF="android.support.v7.widget.LinearLayoutManager.html" class="hiddenlink" target="rightframe">LinearLayoutManager</A><br>
+<!-- Class LinearSmoothScroller -->
+<A HREF="android.support.v7.widget.LinearSmoothScroller.html" class="hiddenlink" target="rightframe">LinearSmoothScroller</A><br>
+<!-- Class MediaBrowserCompat.MediaItem -->
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html" class="hiddenlink" target="rightframe">MediaBrowserCompat.MediaItem</A><br>
+<!-- Class MediaBrowserServiceCompat.BrowserRoot -->
+<A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html" class="hiddenlink" target="rightframe">MediaBrowserServiceCompat.BrowserRoot</A><br>
+<!-- Class MediaButtonReceiver -->
+<A HREF="android.support.v4.media.session.MediaButtonReceiver.html" class="hiddenlink" target="rightframe">MediaButtonReceiver</A><br>
+<!-- Class MediaDescriptionCompat -->
+<A HREF="android.support.v4.media.MediaDescriptionCompat.html" class="hiddenlink" target="rightframe">MediaDescriptionCompat</A><br>
+<!-- Class MediaMetadataCompat -->
+<A HREF="android.support.v4.media.MediaMetadataCompat.html" class="hiddenlink" target="rightframe">MediaMetadataCompat</A><br>
+<!-- Class MediaSessionCompat -->
+<A HREF="android.support.v4.media.session.MediaSessionCompat.html" class="hiddenlink" target="rightframe">MediaSessionCompat</A><br>
+<!-- Class MediaSessionCompat.QueueItem -->
+<A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html" class="hiddenlink" target="rightframe">MediaSessionCompat.QueueItem</A><br>
+<!-- Class MotionEventCompat -->
+<A HREF="android.support.v4.view.MotionEventCompat.html" class="hiddenlink" target="rightframe">MotionEventCompat</A><br>
+<!-- Class ObjectAdapter -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.leanback.widget.ObjectAdapter.html" class="hiddenlink" target="rightframe">ObjectAdapter</A><br>
+<!-- Method obtain -->
+<i>obtain</i><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.html#android.support.v4.media.session.MediaSessionCompat.obtain_changed(android.content.Context, java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Context, Object</code>) in android.support.v4.media.session.MediaSessionCompat
+</A></nobr><br>
+<!-- Method obtain -->
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.obtain_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in android.support.v4.media.session.MediaSessionCompat.QueueItem
+</A></nobr><br>
+<!-- Field OVER_SCROLL_ALWAYS -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_ALWAYS" class="hiddenlink" target="rightframe">OVER_SCROLL_ALWAYS</A>
+</nobr><br>
+<!-- Field OVER_SCROLL_IF_CONTENT_SCROLLS -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS" class="hiddenlink" target="rightframe">OVER_SCROLL_IF_CONTENT_SCROLLS</A>
+</nobr><br>
+<!-- Field OVER_SCROLL_NEVER -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_NEVER" class="hiddenlink" target="rightframe">OVER_SCROLL_NEVER</A>
+</nobr><br>
+<!-- Class Palette -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v7.graphics.Palette.html" class="hiddenlink" target="rightframe">Palette</A><br>
+<!-- Class PlaybackStateCompat -->
+<A HREF="android.support.v4.media.session.PlaybackStateCompat.html" class="hiddenlink" target="rightframe">PlaybackStateCompat</A><br>
+<!-- Class PreferenceFragment -->
+<A HREF="android.support.v14.preference.PreferenceFragment.html" class="hiddenlink" target="rightframe">PreferenceFragment</A><br>
+<!-- Class RecyclerView -->
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v7.widget.RecyclerView.html" class="hiddenlink" target="rightframe">RecyclerView</A><br>
+<!-- Method removeAccessibilityStateChangeListener -->
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.removeAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe">removeAccessibilityStateChangeListener
+(<code>AccessibilityManager, AccessibilityStateChangeListener</code>)</A></nobr><br>
+<!-- Class SearchViewCompat -->
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.widget.SearchViewCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat</A><br>
+<!-- Class SearchViewCompat.OnCloseListenerCompat -->
+<A HREF="android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat.OnCloseListenerCompat</A><br>
+<!-- Class SearchViewCompat.OnQueryTextListenerCompat -->
+<A HREF="android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat.OnQueryTextListenerCompat</A><br>
+<!-- Class ServiceCompat -->
+<A HREF="android.support.v4.app.ServiceCompat.html" class="hiddenlink" target="rightframe">ServiceCompat</A><br>
+<!-- Method setOnCloseListener -->
+<nobr><A HREF="android.support.v4.widget.SearchViewCompat.html#android.support.v4.widget.SearchViewCompat.setOnCloseListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListener)" class="hiddenlink" target="rightframe">setOnCloseListener
+(<code>View, OnCloseListener</code>)</A></nobr><br>
+<!-- Method setOnQueryTextListener -->
+<nobr><A HREF="android.support.v4.widget.SearchViewCompat.html#android.support.v4.widget.SearchViewCompat.setOnQueryTextListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListener)" class="hiddenlink" target="rightframe">setOnQueryTextListener
+(<code>View, OnQueryTextListener</code>)</A></nobr><br>
+<!-- Method setOverScrollMode -->
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.setOverScrollMode_changed(android.view.View, int)" class="hiddenlink" target="rightframe">setOverScrollMode
+(<code>View, int</code>)</A></nobr><br>
+<!-- Method setToolbarItem -->
+<nobr><A HREF="android.support.customtabs.CustomTabsSession.html#android.support.customtabs.CustomTabsSession.setToolbarItem_changed(int, android.graphics.Bitmap, java.lang.String)" class="hiddenlink" target="rightframe">setToolbarItem
+(<code>int, Bitmap, String</code>)</A></nobr><br>
+<!-- Class SharedElementCallback -->
+<A HREF="android.support.v4.app.SharedElementCallback.html" class="hiddenlink" target="rightframe">SharedElementCallback</A><br>
+<!-- Class SortedList.Callback -->
+<A HREF="android.support.v7.util.SortedList.Callback.html" class="hiddenlink" target="rightframe">SortedList.Callback</A><br>
+<!-- Class StaggeredGridLayoutManager -->
+<A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html" class="hiddenlink" target="rightframe">StaggeredGridLayoutManager</A><br>
+<!-- Method startTracking -->
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.startTracking_changed(android.view.KeyEvent)" class="hiddenlink" target="rightframe">startTracking
+(<code>KeyEvent</code>)</A></nobr><br>
+<!-- Class SwipeRefreshLayout -->
+<A HREF="android.support.v4.widget.SwipeRefreshLayout.html" class="hiddenlink" target="rightframe">SwipeRefreshLayout</A><br>
+<!-- Class TabLayout -->
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.TabLayout.html" class="hiddenlink" target="rightframe">TabLayout</A><br>
+<!-- Class TextInputLayout -->
+<A HREF="android.support.design.widget.TextInputLayout.html" class="hiddenlink" target="rightframe">TextInputLayout</A><br>
+<!-- Class TextViewCompat -->
+<A HREF="android.support.v4.widget.TextViewCompat.html" class="hiddenlink" target="rightframe">TextViewCompat</A><br>
+<!-- Class ViewCompat -->
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.ViewCompat.html" class="hiddenlink" target="rightframe">ViewCompat</A><br>
+<!-- Class ViewConfigurationCompat -->
+<A HREF="android.support.v4.view.ViewConfigurationCompat.html" class="hiddenlink" target="rightframe">ViewConfigurationCompat</A><br>
+<!-- Class WindowInsetsCompat -->
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.WindowInsetsCompat.html" class="hiddenlink" target="rightframe">WindowInsetsCompat</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_removals.html b/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_removals.html
new file mode 100644
index 0000000..e6d9e07
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/alldiffs_index_removals.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+All Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for All Differences" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="alldiffs_index_all.html" xclass="hiddenlink">All Differences</a>
+ <br>
+<b>Removals</b>
+ <br>
+<A HREF="alldiffs_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="alldiffs_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<!-- Package android.support.v7.appcompat -->
+<A NAME="A"></A>
+<A HREF="changes-summary.html#android.support.v7.appcompat" class="hiddenlink" target="rightframe"><strike>android.support.v7.appcompat</strike></A><br>
+<!-- Package android.support.v7.recyclerview -->
+<A HREF="changes-summary.html#android.support.v7.recyclerview" class="hiddenlink" target="rightframe"><strike>android.support.v7.recyclerview</strike></A><br>
+<!-- Package android.support.v8.renderscript -->
+<A HREF="changes-summary.html#android.support.v8.renderscript" class="hiddenlink" target="rightframe"><strike>android.support.v8.renderscript</strike></A><br>
+<!-- Method layoutDependsOn -->
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.layoutDependsOn_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)" class="hiddenlink" target="rightframe"><strike>layoutDependsOn</strike>
+(<code>CoordinatorLayout, FloatingActionButton, View</code>)</A></nobr><br>
+<!-- Method onAccessibilityStateChanged -->
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.onAccessibilityStateChanged_removed(boolean)" class="hiddenlink" target="rightframe"><strike>onAccessibilityStateChanged</strike>
+(<code>boolean</code>)</A></nobr><br>
+<!-- Method onDependentViewRemoved -->
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.onDependentViewRemoved_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)" class="hiddenlink" target="rightframe"><strike>onDependentViewRemoved</strike>
+(<code>CoordinatorLayout, FloatingActionButton, View</code>)</A></nobr><br>
+<!-- Method onInserted -->
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onInserted_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onInserted</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method onMoved -->
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onMoved_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onMoved</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method onRemoved -->
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onRemoved_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onRemoved</strike>
+(<code>int, int</code>)</A></nobr><br>
+<!-- Method prepareForDrop -->
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v7.widget.LinearLayoutManager.html#android.support.v7.widget.LinearLayoutManager.prepareForDrop_removed(android.view.View, android.view.View, int, int)" class="hiddenlink" target="rightframe"><strike>prepareForDrop</strike>
+(<code>View, View, int, int</code>)</A></nobr><br>
+<!-- Field TAG -->
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html#android.support.v7.widget.StaggeredGridLayoutManager.TAG" class="hiddenlink" target="rightframe"><strike>TAG</strike></A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.customtabs.CustomTabsIntent.Builder.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.customtabs.CustomTabsIntent.Builder.html
new file mode 100644
index 0000000..d6a9415
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.customtabs.CustomTabsIntent.Builder.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.customtabs.CustomTabsIntent.Builder
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.customtabs.<A HREF="../../../../reference/android/support/customtabs/CustomTabsIntent.Builder.html" target="_top"><font size="+2"><code>CustomTabsIntent.Builder</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.customtabs.CustomTabsIntent.Builder.setInstantAppsEnabled_added(boolean)"></A>
+ <nobr><code>Builder</code> <A HREF="../../../../reference/android/support/customtabs/CustomTabsIntent.Builder.html#setInstantAppsEnabled(boolean)" target="_top"><code>setInstantAppsEnabled</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.customtabs.CustomTabsIntent.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.customtabs.CustomTabsIntent.html
new file mode 100644
index 0000000..dd0b511
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.customtabs.CustomTabsIntent.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.customtabs.CustomTabsIntent
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.customtabs.<A HREF="../../../../reference/android/support/customtabs/CustomTabsIntent.html" target="_top"><font size="+2"><code>CustomTabsIntent</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.customtabs.CustomTabsIntent.setAlwaysUseBrowserUI_added(android.content.Intent)"></A>
+ <nobr><code>Intent</code> <A HREF="../../../../reference/android/support/customtabs/CustomTabsIntent.html#setAlwaysUseBrowserUI(android.content.Intent)" target="_top"><code>setAlwaysUseBrowserUI</code></A>(<code>Intent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.customtabs.CustomTabsIntent.shouldAlwaysUseBrowserUI_added(android.content.Intent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/customtabs/CustomTabsIntent.html#shouldAlwaysUseBrowserUI(android.content.Intent)" target="_top"><code>shouldAlwaysUseBrowserUI</code></A>(<code>Intent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.customtabs.CustomTabsIntent.EXTRA_ENABLE_INSTANT_APPS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/customtabs/CustomTabsIntent.html#EXTRA_ENABLE_INSTANT_APPS" target="_top"><code>EXTRA_ENABLE_INSTANT_APPS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.customtabs.CustomTabsSession.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.customtabs.CustomTabsSession.html
new file mode 100644
index 0000000..16cac31
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.customtabs.CustomTabsSession.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.customtabs.CustomTabsSession
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.customtabs.<A HREF="../../../../reference/android/support/customtabs/CustomTabsSession.html" target="_top"><font size="+2"><code>CustomTabsSession</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.customtabs.CustomTabsSession.setSecondaryToolbarViews_added(android.widget.RemoteViews, int[], android.app.PendingIntent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/customtabs/CustomTabsSession.html#setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent)" target="_top"><code>setSecondaryToolbarViews</code></A>(<code>RemoteViews,</nobr> int[]<nobr>,</nobr> PendingIntent<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.customtabs.CustomTabsSession.setToolbarItem_changed(int, android.graphics.Bitmap, java.lang.String)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/customtabs/CustomTabsSession.html#setToolbarItem(int, android.graphics.Bitmap, java.lang.String)" target="_top"><code>setToolbarItem</code></A>(<code>int,</nobr> Bitmap<nobr>,</nobr> String<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html
new file mode 100644
index 0000000..7e1e59a
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget.AppBarLayout.ScrollingViewBehavior
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.design.widget.<A HREF="../../../../reference/android/support/design/widget/AppBarLayout.ScrollingViewBehavior.html" target="_top"><font size="+2"><code>AppBarLayout.ScrollingViewBehavior</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/design/widget/AppBarLayout.ScrollingViewBehavior.html#onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean)" target="_top"><code>onRequestChildRectangleOnScreen</code></A>(<code>CoordinatorLayout,</nobr> View<nobr>,</nobr> Rect<nobr>,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.BottomSheetBehavior.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.BottomSheetBehavior.html
new file mode 100644
index 0000000..e98c6f3
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.BottomSheetBehavior.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget.BottomSheetBehavior
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.design.widget.<A HREF="../../../../reference/android/support/design/widget/BottomSheetBehavior.html" target="_top"><font size="+2"><code>BottomSheetBehavior</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.BottomSheetBehavior.PEEK_HEIGHT_AUTO"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/design/widget/BottomSheetBehavior.html#PEEK_HEIGHT_AUTO" target="_top"><code>PEEK_HEIGHT_AUTO</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CollapsingToolbarLayout.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CollapsingToolbarLayout.html
new file mode 100644
index 0000000..ebfdce1
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CollapsingToolbarLayout.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget.CollapsingToolbarLayout
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.design.widget.<A HREF="../../../../reference/android/support/design/widget/CollapsingToolbarLayout.html" target="_top"><font size="+2"><code>CollapsingToolbarLayout</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CollapsingToolbarLayout.setCollapsedTitleTextColor_added(android.content.res.ColorStateList)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/CollapsingToolbarLayout.html#setCollapsedTitleTextColor(android.content.res.ColorStateList)" target="_top"><code>setCollapsedTitleTextColor</code></A>(<code>ColorStateList</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CollapsingToolbarLayout.setExpandedTitleTextColor_added(android.content.res.ColorStateList)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/CollapsingToolbarLayout.html#setExpandedTitleTextColor(android.content.res.ColorStateList)" target="_top"><code>setExpandedTitleTextColor</code></A>(<code>ColorStateList</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CoordinatorLayout.Behavior.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CoordinatorLayout.Behavior.html
new file mode 100644
index 0000000..8cf6146
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CoordinatorLayout.Behavior.html
@@ -0,0 +1,161 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget.CoordinatorLayout.Behavior
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.design.widget.<A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.Behavior.html" target="_top"><font size="+2"><code>CoordinatorLayout.Behavior</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CoordinatorLayout.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.Behavior.html#getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect)" target="_top"><code>getInsetDodgeRect</code></A>(<code>CoordinatorLayout,</nobr> V<nobr>,</nobr> Rect<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CoordinatorLayout.Behavior.onAttachedToLayoutParams_added(android.support.design.widget.CoordinatorLayout.LayoutParams)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.Behavior.html#onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams)" target="_top"><code>onAttachedToLayoutParams</code></A>(<code>LayoutParams</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CoordinatorLayout.Behavior.onDetachedFromLayoutParams_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.Behavior.html#onDetachedFromLayoutParams()" target="_top"><code>onDetachedFromLayoutParams</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CoordinatorLayout.Behavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.Behavior.html#onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean)" target="_top"><code>onRequestChildRectangleOnScreen</code></A>(<code>CoordinatorLayout,</nobr> V<nobr>,</nobr> Rect<nobr>,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CoordinatorLayout.Behavior.isDirty_changed(android.support.design.widget.CoordinatorLayout, V)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.Behavior.html#isDirty(android.support.design.widget.CoordinatorLayout, V)" target="_top"><code>isDirty</code></A>(<code>CoordinatorLayout,</nobr> V<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CoordinatorLayout.LayoutParams.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CoordinatorLayout.LayoutParams.html
new file mode 100644
index 0000000..a36eab0
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CoordinatorLayout.LayoutParams.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget.CoordinatorLayout.LayoutParams
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.design.widget.<A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.LayoutParams.html" target="_top"><font size="+2"><code>CoordinatorLayout.LayoutParams</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CoordinatorLayout.LayoutParams.dodgeInsetEdges"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.LayoutParams.html#dodgeInsetEdges" target="_top"><code>dodgeInsetEdges</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CoordinatorLayout.LayoutParams.insetEdge"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.LayoutParams.html#insetEdge" target="_top"><code>insetEdge</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CoordinatorLayout.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CoordinatorLayout.html
new file mode 100644
index 0000000..4a7247a
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.CoordinatorLayout.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget.CoordinatorLayout
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.design.widget.<A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.html" target="_top"><font size="+2"><code>CoordinatorLayout</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>android.support.v4.view.NestedScrollingParent</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.CoordinatorLayout.getDependents_added(android.view.View)"></A>
+ <nobr><code>List<View></code> <A HREF="../../../../reference/android/support/design/widget/CoordinatorLayout.html#getDependents(android.view.View)" target="_top"><code>getDependents</code></A>(<code>View</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.FloatingActionButton.Behavior.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.FloatingActionButton.Behavior.html
new file mode 100644
index 0000000..633db38
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.FloatingActionButton.Behavior.html
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget.FloatingActionButton.Behavior
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.design.widget.<A HREF="../../../../reference/android/support/design/widget/FloatingActionButton.Behavior.html" target="_top"><font size="+2"><code>FloatingActionButton.Behavior</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.FloatingActionButton.Behavior.layoutDependsOn_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)"></A>
+ <nobr><code>boolean</code> layoutDependsOn(<code>CoordinatorLayout,</nobr> FloatingActionButton<nobr>,</nobr> View<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.FloatingActionButton.Behavior.onDependentViewRemoved_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)"></A>
+ <nobr><code>void</code> onDependentViewRemoved(<code>CoordinatorLayout,</nobr> FloatingActionButton<nobr>,</nobr> View<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.FloatingActionButton.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/design/widget/FloatingActionButton.Behavior.html#getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect)" target="_top"><code>getInsetDodgeRect</code></A>(<code>CoordinatorLayout,</nobr> FloatingActionButton<nobr>,</nobr> Rect<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.FloatingActionButton.Behavior.isAutoHideEnabled_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/design/widget/FloatingActionButton.Behavior.html#isAutoHideEnabled()" target="_top"><code>isAutoHideEnabled</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.FloatingActionButton.Behavior.setAutoHideEnabled_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/FloatingActionButton.Behavior.html#setAutoHideEnabled(boolean)" target="_top"><code>setAutoHideEnabled</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.TabLayout.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.TabLayout.html
new file mode 100644
index 0000000..01d4b6d
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.TabLayout.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget.TabLayout
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.design.widget.<A HREF="../../../../reference/android/support/design/widget/TabLayout.html" target="_top"><font size="+2"><code>TabLayout</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TabLayout.clearOnTabSelectedListeners_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/TabLayout.html#clearOnTabSelectedListeners()" target="_top"><code>clearOnTabSelectedListeners</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.TextInputLayout.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.TextInputLayout.html
new file mode 100644
index 0000000..ecd6fd4
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.design.widget.TextInputLayout.html
@@ -0,0 +1,185 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget.TextInputLayout
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.design.widget.<A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html" target="_top"><font size="+2"><code>TextInputLayout</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleContentDescription_added()"></A>
+ <nobr><code>CharSequence</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#getPasswordVisibilityToggleContentDescription()" target="_top"><code>getPasswordVisibilityToggleContentDescription</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleDrawable_added()"></A>
+ <nobr><code>Drawable</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#getPasswordVisibilityToggleDrawable()" target="_top"><code>getPasswordVisibilityToggleDrawable</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.isPasswordVisibilityToggleEnabled_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#isPasswordVisibilityToggleEnabled()" target="_top"><code>isPasswordVisibilityToggleEnabled</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#setPasswordVisibilityToggleContentDescription(int)" target="_top"><code>setPasswordVisibilityToggleContentDescription</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(java.lang.CharSequence)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#setPasswordVisibilityToggleContentDescription(java.lang.CharSequence)" target="_top"><code>setPasswordVisibilityToggleContentDescription</code></A>(<code>CharSequence</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(android.graphics.drawable.Drawable)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#setPasswordVisibilityToggleDrawable(android.graphics.drawable.Drawable)" target="_top"><code>setPasswordVisibilityToggleDrawable</code></A>(<code>Drawable</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#setPasswordVisibilityToggleDrawable(int)" target="_top"><code>setPasswordVisibilityToggleDrawable</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleEnabled_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#setPasswordVisibilityToggleEnabled(boolean)" target="_top"><code>setPasswordVisibilityToggleEnabled</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintList_added(android.content.res.ColorStateList)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#setPasswordVisibilityToggleTintList(android.content.res.ColorStateList)" target="_top"><code>setPasswordVisibilityToggleTintList</code></A>(<code>ColorStateList</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintMode_added(android.graphics.PorterDuff.Mode)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/design/widget/TextInputLayout.html#setPasswordVisibilityToggleTintMode(android.graphics.PorterDuff.Mode)" target="_top"><code>setPasswordVisibilityToggleTintMode</code></A>(<code>Mode</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v14.preference.PreferenceFragment.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v14.preference.PreferenceFragment.html
new file mode 100644
index 0000000..9b31c9e
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v14.preference.PreferenceFragment.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v14.preference.PreferenceFragment
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v14.preference.<A HREF="../../../../reference/android/support/v14/preference/PreferenceFragment.html" target="_top"><font size="+2"><code>PreferenceFragment</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>android.support.v7.preference.DialogPreference.TargetFragment</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html
new file mode 100644
index 0000000..9df6536
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html
@@ -0,0 +1,150 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v17.leanback.widget.<A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.ViewHolder.html" target="_top"><font size="+2"><code>AbstractMediaItemPresenter.ViewHolder</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemNumberViewFlipper_added()"></A>
+ <nobr><code>ViewFlipper</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.ViewHolder.html#getMediaItemNumberViewFlipper()" target="_top"><code>getMediaItemNumberViewFlipper</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPausedView_added()"></A>
+ <nobr><code>View</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.ViewHolder.html#getMediaItemPausedView()" target="_top"><code>getMediaItemPausedView</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPlayingView_added()"></A>
+ <nobr><code>View</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.ViewHolder.html#getMediaItemPlayingView()" target="_top"><code>getMediaItemPlayingView</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.notifyPlayStateChanged_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.ViewHolder.html#notifyPlayStateChanged()" target="_top"><code>notifyPlayStateChanged</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.setSelectedMediaItemNumberView_added(int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.ViewHolder.html#setSelectedMediaItemNumberView(int)" target="_top"><code>setSelectedMediaItemNumberView</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.leanback.widget.AbstractMediaItemPresenter.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.leanback.widget.AbstractMediaItemPresenter.html
new file mode 100644
index 0000000..16b03ad
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.leanback.widget.AbstractMediaItemPresenter.html
@@ -0,0 +1,165 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v17.leanback.widget.AbstractMediaItemPresenter
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v17.leanback.widget.<A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.html" target="_top"><font size="+2"><code>AbstractMediaItemPresenter</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.getMediaPlayState_added(java.lang.Object)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.html#getMediaPlayState(java.lang.Object)" target="_top"><code>getMediaPlayState</code></A>(<code>Object</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.onBindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.html#onBindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" target="_top"><code>onBindMediaPlayState</code></A>(<code>ViewHolder</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.onUnbindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.html#onUnbindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" target="_top"><code>onUnbindMediaPlayState</code></A>(<code>ViewHolder</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_INITIAL"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.html#PLAY_STATE_INITIAL" target="_top"><code>PLAY_STATE_INITIAL</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PAUSED"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.html#PLAY_STATE_PAUSED" target="_top"><code>PLAY_STATE_PAUSED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PLAYING"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/AbstractMediaItemPresenter.html#PLAY_STATE_PLAYING" target="_top"><code>PLAY_STATE_PLAYING</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.leanback.widget.ObjectAdapter.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.leanback.widget.ObjectAdapter.html
new file mode 100644
index 0000000..3e3ded0
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.leanback.widget.ObjectAdapter.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v17.leanback.widget.ObjectAdapter
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v17.leanback.widget.<A HREF="../../../../reference/android/support/v17/leanback/widget/ObjectAdapter.html" target="_top"><font size="+2"><code>ObjectAdapter</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget.ObjectAdapter.isImmediateNotifySupported_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v17/leanback/widget/ObjectAdapter.html#isImmediateNotifySupported()" target="_top"><code>isImmediateNotifySupported</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.preference.LeanbackSettingsFragment.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.preference.LeanbackSettingsFragment.html
new file mode 100644
index 0000000..6e54465
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v17.preference.LeanbackSettingsFragment.html
@@ -0,0 +1,108 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v17.preference.LeanbackSettingsFragment
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v17.preference.<A HREF="../../../../reference/android/support/v17/preference/LeanbackSettingsFragment.html" target="_top"><font size="+2"><code>LeanbackSettingsFragment</code></font></A>
+</H2>
+<p><font xsize="+1">Added interfaces <code>android.support.v14.preference.PreferenceFragment.OnPreferenceDisplayDialogCallback, android.support.v14.preference.PreferenceFragment.OnPreferenceStartFragmentCallback, android.support.v14.preference.PreferenceFragment.OnPreferenceStartScreenCallback</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html
new file mode 100644
index 0000000..0600e44
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.accessibilityservice.<A HREF="../../../../reference/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.html" target="_top"><font size="+2"><code>AccessibilityServiceInfoCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.loadDescription_added(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager)"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.html#loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager)" target="_top"><code>loadDescription</code></A>(<code>AccessibilityServiceInfo,</nobr> PackageManager<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.getDescription_changed(android.accessibilityservice.AccessibilityServiceInfo)"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.html#getDescription(android.accessibilityservice.AccessibilityServiceInfo)" target="_top"><code>getDescription</code></A>(<code>AccessibilityServiceInfo</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.ActivityCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.ActivityCompat.html
new file mode 100644
index 0000000..74ae6f6
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.ActivityCompat.html
@@ -0,0 +1,143 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.app.ActivityCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.app.<A HREF="../../../../reference/android/support/v4/app/ActivityCompat.html" target="_top"><font size="+2"><code>ActivityCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityCompat.ctor_changed()"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/app/ActivityCompat.html#ActivityCompat()" target="_top"><code>ActivityCompat</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityCompat.getReferrer_changed(android.app.Activity)"></A>
+ <nobr><code>Uri</code> <A HREF="../../../../reference/android/support/v4/app/ActivityCompat.html#getReferrer(android.app.Activity)" target="_top"><code>getReferrer</code></A>(<code>Activity</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.ActivityOptionsCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.ActivityOptionsCompat.html
new file mode 100644
index 0000000..ce96b49
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.ActivityOptionsCompat.html
@@ -0,0 +1,179 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.app.ActivityOptionsCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.app.<A HREF="../../../../reference/android/support/v4/app/ActivityOptionsCompat.html" target="_top"><font size="+2"><code>ActivityOptionsCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityOptionsCompat.getLaunchBounds_added()"></A>
+ <nobr><code>Rect</code> <A HREF="../../../../reference/android/support/v4/app/ActivityOptionsCompat.html#getLaunchBounds()" target="_top"><code>getLaunchBounds</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityOptionsCompat.makeBasic_added()"></A>
+ <nobr><code>ActivityOptionsCompat</code> <A HREF="../../../../reference/android/support/v4/app/ActivityOptionsCompat.html#makeBasic()" target="_top"><code>makeBasic</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityOptionsCompat.makeClipRevealAnimation_added(android.view.View, int, int, int, int)"></A>
+ <nobr><code>ActivityOptionsCompat</code> <A HREF="../../../../reference/android/support/v4/app/ActivityOptionsCompat.html#makeClipRevealAnimation(android.view.View, int, int, int, int)" target="_top"><code>makeClipRevealAnimation</code></A>(<code>View,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityOptionsCompat.makeTaskLaunchBehind_added()"></A>
+ <nobr><code>ActivityOptionsCompat</code> <A HREF="../../../../reference/android/support/v4/app/ActivityOptionsCompat.html#makeTaskLaunchBehind()" target="_top"><code>makeTaskLaunchBehind</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityOptionsCompat.requestUsageTimeReport_added(android.app.PendingIntent)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/app/ActivityOptionsCompat.html#requestUsageTimeReport(android.app.PendingIntent)" target="_top"><code>requestUsageTimeReport</code></A>(<code>PendingIntent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityOptionsCompat.setLaunchBounds_added(android.graphics.Rect)"></A>
+ <nobr><code>ActivityOptionsCompat</code> <A HREF="../../../../reference/android/support/v4/app/ActivityOptionsCompat.html#setLaunchBounds(android.graphics.Rect)" target="_top"><code>setLaunchBounds</code></A>(<code>Rect</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/app/ActivityOptionsCompat.html#EXTRA_USAGE_TIME_REPORT" target="_top"><code>EXTRA_USAGE_TIME_REPORT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT_PACKAGES"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/app/ActivityOptionsCompat.html#EXTRA_USAGE_TIME_REPORT_PACKAGES" target="_top"><code>EXTRA_USAGE_TIME_REPORT_PACKAGES</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.FragmentController.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.FragmentController.html
new file mode 100644
index 0000000..13b2ce1
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.FragmentController.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.app.FragmentController
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.app.<A HREF="../../../../reference/android/support/v4/app/FragmentController.html" target="_top"><font size="+2"><code>FragmentController</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.FragmentController.findFragmentByWho_added(java.lang.String)"></A>
+ <nobr><code>Fragment</code> <A HREF="../../../../reference/android/support/v4/app/FragmentController.html#findFragmentByWho(java.lang.String)" target="_top"><code>findFragmentByWho</code></A>(<code>String</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.ServiceCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.ServiceCompat.html
new file mode 100644
index 0000000..6a404eb
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.ServiceCompat.html
@@ -0,0 +1,144 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.app.ServiceCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.app.<A HREF="../../../../reference/android/support/v4/app/ServiceCompat.html" target="_top"><font size="+2"><code>ServiceCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ServiceCompat.stopForeground_added(android.app.Service, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/app/ServiceCompat.html#stopForeground(android.app.Service, int)" target="_top"><code>stopForeground</code></A>(<code>Service,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ServiceCompat.STOP_FOREGROUND_DETACH"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/app/ServiceCompat.html#STOP_FOREGROUND_DETACH" target="_top"><code>STOP_FOREGROUND_DETACH</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.ServiceCompat.STOP_FOREGROUND_REMOVE"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/app/ServiceCompat.html#STOP_FOREGROUND_REMOVE" target="_top"><code>STOP_FOREGROUND_REMOVE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.SharedElementCallback.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.SharedElementCallback.html
new file mode 100644
index 0000000..1495fb4
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.app.SharedElementCallback.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.app.SharedElementCallback
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.app.<A HREF="../../../../reference/android/support/v4/app/SharedElementCallback.html" target="_top"><font size="+2"><code>SharedElementCallback</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app.SharedElementCallback.onSharedElementsArrived_added(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/app/SharedElementCallback.html#onSharedElementsArrived(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener)" target="_top"><code>onSharedElementsArrived</code></A>(<code>List<String>,</nobr> List<View><nobr>,</nobr> OnSharedElementsReadyListener<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.content.ContextCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.content.ContextCompat.html
new file mode 100644
index 0000000..1d6b9b1
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.content.ContextCompat.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.content.ContextCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.content.<A HREF="../../../../reference/android/support/v4/content/ContextCompat.html" target="_top"><font size="+2"><code>ContextCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.content.ContextCompat.ctor_changed()"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/content/ContextCompat.html#ContextCompat()" target="_top"><code>ContextCompat</code></A>() </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.graphics.drawable.DrawableCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.graphics.drawable.DrawableCompat.html
new file mode 100644
index 0000000..3408caa
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.graphics.drawable.DrawableCompat.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.graphics.drawable.DrawableCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.graphics.drawable.<A HREF="../../../../reference/android/support/v4/graphics/drawable/DrawableCompat.html" target="_top"><font size="+2"><code>DrawableCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.graphics.drawable.DrawableCompat.clearColorFilter_added(android.graphics.drawable.Drawable)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/graphics/drawable/DrawableCompat.html#clearColorFilter(android.graphics.drawable.Drawable)" target="_top"><code>clearColorFilter</code></A>(<code>Drawable</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaBrowserCompat.MediaItem.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaBrowserCompat.MediaItem.html
new file mode 100644
index 0000000..acc16c1
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaBrowserCompat.MediaItem.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media.MediaBrowserCompat.MediaItem
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.media.<A HREF="../../../../reference/android/support/v4/media/MediaBrowserCompat.MediaItem.html" target="_top"><font size="+2"><code>MediaBrowserCompat.MediaItem</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItem_added(java.lang.Object)"></A>
+ <nobr><code>MediaItem</code> <A HREF="../../../../reference/android/support/v4/media/MediaBrowserCompat.MediaItem.html#fromMediaItem(java.lang.Object)" target="_top"><code>fromMediaItem</code></A>(<code>Object</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItemList_added(java.util.List<?>)"></A>
+ <nobr><code>List<MediaItem></code> <A HREF="../../../../reference/android/support/v4/media/MediaBrowserCompat.MediaItem.html#fromMediaItemList(java.util.List<?>)" target="_top"><code>fromMediaItemList</code></A>(<code>List<?></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html
new file mode 100644
index 0000000..7a9c73311
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.media.<A HREF="../../../../reference/android/support/v4/media/MediaBrowserServiceCompat.BrowserRoot.html" target="_top"><font size="+2"><code>MediaBrowserServiceCompat.BrowserRoot</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.EXTRA_SUGGESTION_KEYWORDS"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/media/MediaBrowserServiceCompat.BrowserRoot.html#EXTRA_SUGGESTION_KEYWORDS" target="_top"><code>EXTRA_SUGGESTION_KEYWORDS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaDescriptionCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaDescriptionCompat.html
new file mode 100644
index 0000000..fbbaa19
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaDescriptionCompat.html
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media.MediaDescriptionCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.media.<A HREF="../../../../reference/android/support/v4/media/MediaDescriptionCompat.html" target="_top"><font size="+2"><code>MediaDescriptionCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ALBUMS"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/support/v4/media/MediaDescriptionCompat.html#BT_FOLDER_TYPE_ALBUMS" target="_top"><code>BT_FOLDER_TYPE_ALBUMS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ARTISTS"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/support/v4/media/MediaDescriptionCompat.html#BT_FOLDER_TYPE_ARTISTS" target="_top"><code>BT_FOLDER_TYPE_ARTISTS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_GENRES"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/support/v4/media/MediaDescriptionCompat.html#BT_FOLDER_TYPE_GENRES" target="_top"><code>BT_FOLDER_TYPE_GENRES</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_MIXED"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/support/v4/media/MediaDescriptionCompat.html#BT_FOLDER_TYPE_MIXED" target="_top"><code>BT_FOLDER_TYPE_MIXED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_PLAYLISTS"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/support/v4/media/MediaDescriptionCompat.html#BT_FOLDER_TYPE_PLAYLISTS" target="_top"><code>BT_FOLDER_TYPE_PLAYLISTS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_TITLES"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/support/v4/media/MediaDescriptionCompat.html#BT_FOLDER_TYPE_TITLES" target="_top"><code>BT_FOLDER_TYPE_TITLES</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_YEARS"></A>
+ <nobr><code>long</code> <A HREF="../../../../reference/android/support/v4/media/MediaDescriptionCompat.html#BT_FOLDER_TYPE_YEARS" target="_top"><code>BT_FOLDER_TYPE_YEARS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaDescriptionCompat.EXTRA_BT_FOLDER_TYPE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/media/MediaDescriptionCompat.html#EXTRA_BT_FOLDER_TYPE" target="_top"><code>EXTRA_BT_FOLDER_TYPE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaMetadataCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaMetadataCompat.html
new file mode 100644
index 0000000..e52493b
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.MediaMetadataCompat.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media.MediaMetadataCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.media.<A HREF="../../../../reference/android/support/v4/media/MediaMetadataCompat.html" target="_top"><font size="+2"><code>MediaMetadataCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaMetadataCompat.METADATA_KEY_BT_FOLDER_TYPE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/media/MediaMetadataCompat.html#METADATA_KEY_BT_FOLDER_TYPE" target="_top"><code>METADATA_KEY_BT_FOLDER_TYPE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.MediaMetadataCompat.METADATA_KEY_MEDIA_URI"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/media/MediaMetadataCompat.html#METADATA_KEY_MEDIA_URI" target="_top"><code>METADATA_KEY_MEDIA_URI</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.MediaButtonReceiver.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.MediaButtonReceiver.html
new file mode 100644
index 0000000..3e2c68b
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.MediaButtonReceiver.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media.session.MediaButtonReceiver
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.media.session.<A HREF="../../../../reference/android/support/v4/media/session/MediaButtonReceiver.html" target="_top"><font size="+2"><code>MediaButtonReceiver</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, android.content.ComponentName, long)"></A>
+ <nobr><code>PendingIntent</code> <A HREF="../../../../reference/android/support/v4/media/session/MediaButtonReceiver.html#buildMediaButtonPendingIntent(android.content.Context, android.content.ComponentName, long)" target="_top"><code>buildMediaButtonPendingIntent</code></A>(<code>Context,</nobr> ComponentName<nobr>,</nobr> long<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, long)"></A>
+ <nobr><code>PendingIntent</code> <A HREF="../../../../reference/android/support/v4/media/session/MediaButtonReceiver.html#buildMediaButtonPendingIntent(android.content.Context, long)" target="_top"><code>buildMediaButtonPendingIntent</code></A>(<code>Context,</nobr> long<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.MediaSessionCompat.QueueItem.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.MediaSessionCompat.QueueItem.html
new file mode 100644
index 0000000..5ce173f
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.MediaSessionCompat.QueueItem.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media.session.MediaSessionCompat.QueueItem
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.media.session.<A HREF="../../../../reference/android/support/v4/media/session/MediaSessionCompat.QueueItem.html" target="_top"><font size="+2"><code>MediaSessionCompat.QueueItem</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItem_added(java.lang.Object)"></A>
+ <nobr><code>QueueItem</code> <A HREF="../../../../reference/android/support/v4/media/session/MediaSessionCompat.QueueItem.html#fromQueueItem(java.lang.Object)" target="_top"><code>fromQueueItem</code></A>(<code>Object</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItemList_added(java.util.List<?>)"></A>
+ <nobr><code>List<QueueItem></code> <A HREF="../../../../reference/android/support/v4/media/session/MediaSessionCompat.QueueItem.html#fromQueueItemList(java.util.List<?>)" target="_top"><code>fromQueueItemList</code></A>(<code>List<?></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.session.MediaSessionCompat.QueueItem.obtain_changed(java.lang.Object)"></A>
+ <nobr><code>QueueItem</code> <A HREF="../../../../reference/android/support/v4/media/session/MediaSessionCompat.QueueItem.html#obtain(java.lang.Object)" target="_top"><code>obtain</code></A>(<code>Object</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.MediaSessionCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.MediaSessionCompat.html
new file mode 100644
index 0000000..ee71244
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.MediaSessionCompat.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media.session.MediaSessionCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.media.session.<A HREF="../../../../reference/android/support/v4/media/session/MediaSessionCompat.html" target="_top"><font size="+2"><code>MediaSessionCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.session.MediaSessionCompat.fromMediaSession_added(android.content.Context, java.lang.Object)"></A>
+ <nobr><code>MediaSessionCompat</code> <A HREF="../../../../reference/android/support/v4/media/session/MediaSessionCompat.html#fromMediaSession(android.content.Context, java.lang.Object)" target="_top"><code>fromMediaSession</code></A>(<code>Context,</nobr> Object<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.session.MediaSessionCompat.obtain_changed(android.content.Context, java.lang.Object)"></A>
+ <nobr><code>MediaSessionCompat</code> <A HREF="../../../../reference/android/support/v4/media/session/MediaSessionCompat.html#obtain(android.content.Context, java.lang.Object)" target="_top"><code>obtain</code></A>(<code>Context,</nobr> Object<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.PlaybackStateCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.PlaybackStateCompat.html
new file mode 100644
index 0000000..2c54c1d
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.media.session.PlaybackStateCompat.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media.session.PlaybackStateCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.media.session.<A HREF="../../../../reference/android/support/v4/media/session/PlaybackStateCompat.html" target="_top"><font size="+2"><code>PlaybackStateCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.session.PlaybackStateCompat.toKeyCode_added(long)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/media/session/PlaybackStateCompat.html#toKeyCode(long)" target="_top"><code>toKeyCode</code></A>(<code>long</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.os.BuildCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.os.BuildCompat.html
new file mode 100644
index 0000000..eb59ddb
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.os.BuildCompat.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.os.BuildCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.os.<A HREF="../../../../reference/android/support/v4/os/BuildCompat.html" target="_top"><font size="+2"><code>BuildCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.os.BuildCompat.isAtLeastNMR1_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/os/BuildCompat.html#isAtLeastNMR1()" target="_top"><code>isAtLeastNMR1</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.KeyEventCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.KeyEventCompat.html
new file mode 100644
index 0000000..b5f4371
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.KeyEventCompat.html
@@ -0,0 +1,155 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.KeyEventCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.<A HREF="../../../../reference/android/support/v4/view/KeyEventCompat.html" target="_top"><font size="+2"><code>KeyEventCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.KeyEventCompat.dispatch_changed(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/view/KeyEventCompat.html#dispatch(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object)" target="_top"><code>dispatch</code></A>(<code>KeyEvent,</nobr> Callback<nobr>,</nobr> Object<nobr>,</nobr> Object<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.KeyEventCompat.getKeyDispatcherState_changed(android.view.View)"></A>
+ <nobr><code>Object</code> <A HREF="../../../../reference/android/support/v4/view/KeyEventCompat.html#getKeyDispatcherState(android.view.View)" target="_top"><code>getKeyDispatcherState</code></A>(<code>View</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.KeyEventCompat.isTracking_changed(android.view.KeyEvent)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/view/KeyEventCompat.html#isTracking(android.view.KeyEvent)" target="_top"><code>isTracking</code></A>(<code>KeyEvent</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.KeyEventCompat.startTracking_changed(android.view.KeyEvent)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/view/KeyEventCompat.html#startTracking(android.view.KeyEvent)" target="_top"><code>startTracking</code></A>(<code>KeyEvent</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.MotionEventCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.MotionEventCompat.html
new file mode 100644
index 0000000..9f85dab
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.MotionEventCompat.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.MotionEventCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.<A HREF="../../../../reference/android/support/v4/view/MotionEventCompat.html" target="_top"><font size="+2"><code>MotionEventCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.MotionEventCompat.findPointerIndex_changed(android.view.MotionEvent, int)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/MotionEventCompat.html#findPointerIndex(android.view.MotionEvent, int)" target="_top"><code>findPointerIndex</code></A>(<code>MotionEvent,</nobr> int<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.MotionEventCompat.getPointerCount_changed(android.view.MotionEvent)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/MotionEventCompat.html#getPointerCount(android.view.MotionEvent)" target="_top"><code>getPointerCount</code></A>(<code>MotionEvent</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.MotionEventCompat.getPointerId_changed(android.view.MotionEvent, int)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/MotionEventCompat.html#getPointerId(android.view.MotionEvent, int)" target="_top"><code>getPointerId</code></A>(<code>MotionEvent,</nobr> int<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.MotionEventCompat.getSource_changed(android.view.MotionEvent)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/MotionEventCompat.html#getSource(android.view.MotionEvent)" target="_top"><code>getSource</code></A>(<code>MotionEvent</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.MotionEventCompat.getX_changed(android.view.MotionEvent, int)"></A>
+ <nobr><code>float</code> <A HREF="../../../../reference/android/support/v4/view/MotionEventCompat.html#getX(android.view.MotionEvent, int)" target="_top"><code>getX</code></A>(<code>MotionEvent,</nobr> int<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.MotionEventCompat.getY_changed(android.view.MotionEvent, int)"></A>
+ <nobr><code>float</code> <A HREF="../../../../reference/android/support/v4/view/MotionEventCompat.html#getY(android.view.MotionEvent, int)" target="_top"><code>getY</code></A>(<code>MotionEvent,</nobr> int<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.ViewCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.ViewCompat.html
new file mode 100644
index 0000000..1b4ea0f
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.ViewCompat.html
@@ -0,0 +1,195 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.ViewCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.<A HREF="../../../../reference/android/support/v4/view/ViewCompat.html" target="_top"><font size="+2"><code>ViewCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.ViewCompat.isImportantForAccessibility_added(android.view.View)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/view/ViewCompat.html#isImportantForAccessibility(android.view.View)" target="_top"><code>isImportantForAccessibility</code></A>(<code>View</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.ViewCompat.getOverScrollMode_changed(android.view.View)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/ViewCompat.html#getOverScrollMode(android.view.View)" target="_top"><code>getOverScrollMode</code></A>(<code>View</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.ViewCompat.isOpaque_changed(android.view.View)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/view/ViewCompat.html#isOpaque(android.view.View)" target="_top"><code>isOpaque</code></A>(<code>View</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.ViewCompat.setOverScrollMode_changed(android.view.View, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/view/ViewCompat.html#setOverScrollMode(android.view.View, int)" target="_top"><code>setOverScrollMode</code></A>(<code>View,</nobr> int<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.ViewCompat.OVER_SCROLL_ALWAYS"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/ViewCompat.html#OVER_SCROLL_ALWAYS" target="_top"><code>OVER_SCROLL_ALWAYS</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/ViewCompat.html#OVER_SCROLL_IF_CONTENT_SCROLLS" target="_top"><code>OVER_SCROLL_IF_CONTENT_SCROLLS</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.ViewCompat.OVER_SCROLL_NEVER"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/ViewCompat.html#OVER_SCROLL_NEVER" target="_top"><code>OVER_SCROLL_NEVER</code></font></A></nobr> </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.ViewConfigurationCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.ViewConfigurationCompat.html
new file mode 100644
index 0000000..dcb2023
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.ViewConfigurationCompat.html
@@ -0,0 +1,125 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.ViewConfigurationCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.<A HREF="../../../../reference/android/support/v4/view/ViewConfigurationCompat.html" target="_top"><font size="+2"><code>ViewConfigurationCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.ViewConfigurationCompat.getScaledPagingTouchSlop_changed(android.view.ViewConfiguration)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/ViewConfigurationCompat.html#getScaledPagingTouchSlop(android.view.ViewConfiguration)" target="_top"><code>getScaledPagingTouchSlop</code></A>(<code>ViewConfiguration</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+<b>Now deprecated</b>.<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.WindowInsetsCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.WindowInsetsCompat.html
new file mode 100644
index 0000000..e0f77c9
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.WindowInsetsCompat.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.WindowInsetsCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.<A HREF="../../../../reference/android/support/v4/view/WindowInsetsCompat.html" target="_top"><font size="+2"><code>WindowInsetsCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Constructors" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Constructors</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.WindowInsetsCompat.ctor_added(android.support.v4.view.WindowInsetsCompat)"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/view/WindowInsetsCompat.html#WindowInsetsCompat(android.support.v4.view.WindowInsetsCompat)" target="_top"><code>WindowInsetsCompat</code></A>(<code>WindowInsetsCompat</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityEventCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityEventCompat.html
new file mode 100644
index 0000000..6ff46b8
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityEventCompat.html
@@ -0,0 +1,172 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityEventCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html" target="_top"><font size="+2"><code>AccessibilityEventCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityEventCompat.getAction_added(android.view.accessibility.AccessibilityEvent)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html#getAction(android.view.accessibility.AccessibilityEvent)" target="_top"><code>getAction</code></A>(<code>AccessibilityEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityEventCompat.getMovementGranularity_added(android.view.accessibility.AccessibilityEvent)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html#getMovementGranularity(android.view.accessibility.AccessibilityEvent)" target="_top"><code>getMovementGranularity</code></A>(<code>AccessibilityEvent</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityEventCompat.setAction_added(android.view.accessibility.AccessibilityEvent, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html#setAction(android.view.accessibility.AccessibilityEvent, int)" target="_top"><code>setAction</code></A>(<code>AccessibilityEvent,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityEventCompat.setMovementGranularity_added(android.view.accessibility.AccessibilityEvent, int)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html#setMovementGranularity(android.view.accessibility.AccessibilityEvent, int)" target="_top"><code>setMovementGranularity</code></A>(<code>AccessibilityEvent,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_ASSIST_READING_CONTEXT"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html#TYPE_ASSIST_READING_CONTEXT" target="_top"><code>TYPE_ASSIST_READING_CONTEXT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_VIEW_CONTEXT_CLICKED"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html#TYPE_VIEW_CONTEXT_CLICKED" target="_top"><code>TYPE_VIEW_CONTEXT_CLICKED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_WINDOWS_CHANGED"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityEventCompat.html#TYPE_WINDOWS_CHANGED" target="_top"><code>TYPE_WINDOWS_CHANGED</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html
new file mode 100644
index 0000000..5d63b93a
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html
@@ -0,0 +1,124 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html" target="_top"><font size="+2"><code>AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener</code>.<br></font>
+<p><b>Now deprecated</b>.<br>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.onAccessibilityStateChanged_removed(boolean)"></A>
+ <nobr><code>void</code> onAccessibilityStateChanged(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityManagerCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityManagerCompat.html
new file mode 100644
index 0000000..004d89e
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityManagerCompat.html
@@ -0,0 +1,157 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityManagerCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.html" target="_top"><font size="+2"><code>AccessibilityManagerCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityManagerCompat.addTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.html#addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" target="_top"><code>addTouchExplorationStateChangeListener</code></A>(<code>AccessibilityManager,</nobr> TouchExplorationStateChangeListener<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityManagerCompat.removeTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.html#removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" target="_top"><code>removeTouchExplorationStateChangeListener</code></A>(<code>AccessibilityManager,</nobr> TouchExplorationStateChangeListener<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityManagerCompat.addAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.html#addAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" target="_top"><code>addAccessibilityStateChangeListener</code></A>(<code>AccessibilityManager,</nobr> AccessibilityStateChangeListener<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in signature from (<code>AccessibilityManager, AccessibilityStateChangeListenerCompat</code>) to (<code>AccessibilityManager, AccessibilityStateChangeListener</code>).<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityManagerCompat.removeAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.html#removeAccessibilityStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" target="_top"><code>removeAccessibilityStateChangeListener</code></A>(<code>AccessibilityManager,</nobr> AccessibilityStateChangeListener<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in signature from (<code>AccessibilityManager, AccessibilityStateChangeListenerCompat</code>) to (<code>AccessibilityManager, AccessibilityStateChangeListener</code>).<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html
new file mode 100644
index 0000000..695028b
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html
@@ -0,0 +1,171 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.AccessibilityActionCompat.html" target="_top"><font size="+2"><code>AccessibilityNodeInfoCompat.AccessibilityActionCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CONTEXT_CLICK"></A>
+ <nobr><code>AccessibilityActionCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#ACTION_CONTEXT_CLICK" target="_top"><code>ACTION_CONTEXT_CLICK</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_DOWN"></A>
+ <nobr><code>AccessibilityActionCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#ACTION_SCROLL_DOWN" target="_top"><code>ACTION_SCROLL_DOWN</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_LEFT"></A>
+ <nobr><code>AccessibilityActionCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#ACTION_SCROLL_LEFT" target="_top"><code>ACTION_SCROLL_LEFT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_RIGHT"></A>
+ <nobr><code>AccessibilityActionCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#ACTION_SCROLL_RIGHT" target="_top"><code>ACTION_SCROLL_RIGHT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_TO_POSITION"></A>
+ <nobr><code>AccessibilityActionCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#ACTION_SCROLL_TO_POSITION" target="_top"><code>ACTION_SCROLL_TO_POSITION</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_UP"></A>
+ <nobr><code>AccessibilityActionCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#ACTION_SCROLL_UP" target="_top"><code>ACTION_SCROLL_UP</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SET_PROGRESS"></A>
+ <nobr><code>AccessibilityActionCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#ACTION_SET_PROGRESS" target="_top"><code>ACTION_SET_PROGRESS</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SHOW_ON_SCREEN"></A>
+ <nobr><code>AccessibilityActionCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#ACTION_SHOW_ON_SCREEN" target="_top"><code>ACTION_SHOW_ON_SCREEN</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html
new file mode 100644
index 0000000..17109ec
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.CollectionInfoCompat.html" target="_top"><font size="+2"><code>AccessibilityNodeInfoCompat.CollectionInfoCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.getSelectionMode_added()"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.CollectionInfoCompat.html#getSelectionMode()" target="_top"><code>getSelectionMode</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain_added(int, int, boolean)"></A>
+ <nobr><code>CollectionInfoCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.CollectionInfoCompat.html#obtain(int, int, boolean)" target="_top"><code>obtain</code></A>(<code>int,</nobr> int<nobr>,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html
new file mode 100644
index 0000000..30df540
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html" target="_top"><font size="+2"><code>AccessibilityNodeInfoCompat.CollectionItemInfoCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain_added(int, int, int, int, boolean)"></A>
+ <nobr><code>CollectionItemInfoCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html#obtain(int, int, int, int, boolean)" target="_top"><code>obtain</code></A>(<code>int,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> int<nobr>,</nobr> boolean<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html
new file mode 100644
index 0000000..1d5a250
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.RangeInfoCompat.html" target="_top"><font size="+2"><code>AccessibilityNodeInfoCompat.RangeInfoCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.obtain_added(int, float, float, float)"></A>
+ <nobr><code>RangeInfoCompat</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.RangeInfoCompat.html#obtain(int, float, float, float)" target="_top"><code>obtain</code></A>(<code>int,</nobr> float<nobr>,</nobr> float<nobr>,</nobr> float<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html
new file mode 100644
index 0000000..727576d
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html
@@ -0,0 +1,158 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html" target="_top"><font size="+2"><code>AccessibilityNodeInfoCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.isContextClickable_added()"></A>
+ <nobr><code>boolean</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html#isContextClickable()" target="_top"><code>isContextClickable</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.setContextClickable_added(boolean)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html#setContextClickable(boolean)" target="_top"><code>setContextClickable</code></A>(<code>boolean</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html#ACTION_ARGUMENT_COLUMN_INT" target="_top"><code>ACTION_ARGUMENT_COLUMN_INT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html#ACTION_ARGUMENT_PROGRESS_VALUE" target="_top"><code>ACTION_ARGUMENT_PROGRESS_VALUE</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_ROW_INT"></A>
+ <nobr><code>String</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeInfoCompat.html#ACTION_ARGUMENT_ROW_INT" target="_top"><code>ACTION_ARGUMENT_ROW_INT</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html
new file mode 100644
index 0000000..101070c
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityNodeProviderCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.html" target="_top"><font size="+2"><code>AccessibilityNodeProviderCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.HOST_VIEW_ID"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityNodeProviderCompat.html#HOST_VIEW_ID" target="_top"><code>HOST_VIEW_ID</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html
new file mode 100644
index 0000000..a3b8d96
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility.AccessibilityWindowInfoCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.view.accessibility.<A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.html" target="_top"><font size="+2"><code>AccessibilityWindowInfoCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.TYPE_SPLIT_SCREEN_DIVIDER"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityWindowInfoCompat.html#TYPE_SPLIT_SCREEN_DIVIDER" target="_top"><code>TYPE_SPLIT_SCREEN_DIVIDER</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat.html
new file mode 100644
index 0000000..cba004e
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.widget.<A HREF="../../../../reference/android/support/v4/widget/SearchViewCompat.OnCloseListenerCompat.html" target="_top"><font size="+2"><code>SearchViewCompat.OnCloseListenerCompat</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>android.support.v4.widget.SearchViewCompat.OnCloseListener</code>.<br></font>
+<p><b>Now deprecated</b>.<br>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat.html
new file mode 100644
index 0000000..c15d1b9
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat.html
@@ -0,0 +1,109 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.widget.<A HREF="../../../../reference/android/support/v4/widget/SearchViewCompat.OnQueryTextListenerCompat.html" target="_top"><font size="+2"><code>SearchViewCompat.OnQueryTextListenerCompat</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>android.support.v4.widget.SearchViewCompat.OnQueryTextListener</code>.<br></font>
+<p><b>Now deprecated</b>.<br>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SearchViewCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SearchViewCompat.html
new file mode 100644
index 0000000..cbb3925
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SearchViewCompat.html
@@ -0,0 +1,135 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.widget.SearchViewCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.widget.<A HREF="../../../../reference/android/support/v4/widget/SearchViewCompat.html" target="_top"><font size="+2"><code>SearchViewCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.widget.SearchViewCompat.setOnCloseListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListener)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/widget/SearchViewCompat.html#setOnCloseListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListener)" target="_top"><code>setOnCloseListener</code></A>(<code>View,</nobr> OnCloseListener<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in signature from (<code>View, OnCloseListenerCompat</code>) to (<code>View, OnCloseListener</code>).<br>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.widget.SearchViewCompat.setOnQueryTextListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListener)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/widget/SearchViewCompat.html#setOnQueryTextListener(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListener)" target="_top"><code>setOnQueryTextListener</code></A>(<code>View,</nobr> OnQueryTextListener<nobr><nobr></code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Change in signature from (<code>View, OnQueryTextListenerCompat</code>) to (<code>View, OnQueryTextListener</code>).<br>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SwipeRefreshLayout.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SwipeRefreshLayout.html
new file mode 100644
index 0000000..77dbdf6
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.SwipeRefreshLayout.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.widget.SwipeRefreshLayout
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.widget.<A HREF="../../../../reference/android/support/v4/widget/SwipeRefreshLayout.html" target="_top"><font size="+2"><code>SwipeRefreshLayout</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.widget.SwipeRefreshLayout.setOnChildScrollUpCallback_added(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v4/widget/SwipeRefreshLayout.html#setOnChildScrollUpCallback(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback)" target="_top"><code>setOnChildScrollUpCallback</code></A>(<code>OnChildScrollUpCallback</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.TextViewCompat.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.TextViewCompat.html
new file mode 100644
index 0000000..a803634
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v4.widget.TextViewCompat.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.widget.TextViewCompat
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v4.widget.<A HREF="../../../../reference/android/support/v4/widget/TextViewCompat.html" target="_top"><font size="+2"><code>TextViewCompat</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.widget.TextViewCompat.getCompoundDrawablesRelative_added(android.widget.TextView)"></A>
+ <nobr><code>Drawable[]</code> <A HREF="../../../../reference/android/support/v4/widget/TextViewCompat.html#getCompoundDrawablesRelative(android.widget.TextView)" target="_top"><code>getCompoundDrawablesRelative</code></A>(<code>TextView</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.app.ActionBarDrawerToggle.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.app.ActionBarDrawerToggle.html
new file mode 100644
index 0000000..2a864f0
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.app.ActionBarDrawerToggle.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.app.ActionBarDrawerToggle
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v7.app.<A HREF="../../../../reference/android/support/v7/app/ActionBarDrawerToggle.html" target="_top"><font size="+2"><code>ActionBarDrawerToggle</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.app.ActionBarDrawerToggle.getDrawerArrowDrawable_added()"></A>
+ <nobr><code>DrawerArrowDrawable</code> <A HREF="../../../../reference/android/support/v7/app/ActionBarDrawerToggle.html#getDrawerArrowDrawable()" target="_top"><code>getDrawerArrowDrawable</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.app.ActionBarDrawerToggle.setDrawerArrowDrawable_added(android.support.v7.graphics.drawable.DrawerArrowDrawable)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v7/app/ActionBarDrawerToggle.html#setDrawerArrowDrawable(android.support.v7.graphics.drawable.DrawerArrowDrawable)" target="_top"><code>setDrawerArrowDrawable</code></A>(<code>DrawerArrowDrawable</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.app.AppCompatDelegate.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.app.AppCompatDelegate.html
new file mode 100644
index 0000000..adfcabb
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.app.AppCompatDelegate.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.app.AppCompatDelegate
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v7.app.<A HREF="../../../../reference/android/support/v7/app/AppCompatDelegate.html" target="_top"><font size="+2"><code>AppCompatDelegate</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.app.AppCompatDelegate.onStart_added()"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v7/app/AppCompatDelegate.html#onStart()" target="_top"><code>onStart</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.content.res.AppCompatResources.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.content.res.AppCompatResources.html
new file mode 100644
index 0000000..e26c32b
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.content.res.AppCompatResources.html
@@ -0,0 +1,122 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.content.res.AppCompatResources
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v7.content.res.<A HREF="../../../../reference/android/support/v7/content/res/AppCompatResources.html" target="_top"><font size="+2"><code>AppCompatResources</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.content.res.AppCompatResources.getDrawable_added(android.content.Context, int)"></A>
+ <nobr><code>Drawable</code> <A HREF="../../../../reference/android/support/v7/content/res/AppCompatResources.html#getDrawable(android.content.Context, int)" target="_top"><code>getDrawable</code></A>(<code>Context,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.graphics.Palette.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.graphics.Palette.html
new file mode 100644
index 0000000..f588384
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.graphics.Palette.html
@@ -0,0 +1,129 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.graphics.Palette
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v7.graphics.<A HREF="../../../../reference/android/support/v7/graphics/Palette.html" target="_top"><font size="+2"><code>Palette</code></font></A>
+</H2>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.graphics.Palette.getDominantColor_added(int)"></A>
+ <nobr><code>int</code> <A HREF="../../../../reference/android/support/v7/graphics/Palette.html#getDominantColor(int)" target="_top"><code>getDominantColor</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.graphics.Palette.getDominantSwatch_added()"></A>
+ <nobr><code>Swatch</code> <A HREF="../../../../reference/android/support/v7/graphics/Palette.html#getDominantSwatch()" target="_top"><code>getDominantSwatch</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.util.SortedList.Callback.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.util.SortedList.Callback.html
new file mode 100644
index 0000000..d2350979
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.util.SortedList.Callback.html
@@ -0,0 +1,152 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.util.SortedList.Callback
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v7.util.<A HREF="../../../../reference/android/support/v7/util/SortedList.Callback.html" target="_top"><font size="+2"><code>SortedList.Callback</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>android.support.v7.util.ListUpdateCallback</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.util.SortedList.Callback.onInserted_removed(int, int)"></A>
+ <nobr><code>void</code> onInserted(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.util.SortedList.Callback.onMoved_removed(int, int)"></A>
+ <nobr><code>void</code> onMoved(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.util.SortedList.Callback.onRemoved_removed(int, int)"></A>
+ <nobr><code>void</code> onRemoved(<code>int,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.util.SortedList.Callback.onChanged_added(int, int, java.lang.Object)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v7/util/SortedList.Callback.html#onChanged(int, int, java.lang.Object)" target="_top"><code>onChanged</code></A>(<code>int,</nobr> int<nobr>,</nobr> Object<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.LinearLayoutManager.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.LinearLayoutManager.html
new file mode 100644
index 0000000..cf5c0f6
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.LinearLayoutManager.html
@@ -0,0 +1,123 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.widget.LinearLayoutManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v7.widget.<A HREF="../../../../reference/android/support/v7/widget/LinearLayoutManager.html" target="_top"><font size="+2"><code>LinearLayoutManager</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.widget.LinearLayoutManager.prepareForDrop_removed(android.view.View, android.view.View, int, int)"></A>
+ <nobr><code>void</code> prepareForDrop(<code>View,</nobr> View<nobr>,</nobr> int<nobr>,</nobr> int<nobr><nobr></code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.LinearSmoothScroller.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.LinearSmoothScroller.html
new file mode 100644
index 0000000..3e13735
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.LinearSmoothScroller.html
@@ -0,0 +1,126 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.widget.LinearSmoothScroller
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v7.widget.<A HREF="../../../../reference/android/support/v7/widget/LinearSmoothScroller.html" target="_top"><font size="+2"><code>LinearSmoothScroller</code></font></A>
+</H2>
+<p>Changed from abstract to non-abstract.
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.widget.LinearSmoothScroller.computeScrollVectorForPosition_changed(int)"></A>
+ <nobr><code>PointF</code> <A HREF="../../../../reference/android/support/v7/widget/LinearSmoothScroller.html#computeScrollVectorForPosition(int)" target="_top"><code>computeScrollVectorForPosition</code></A>(<code>int</code>) </nobr>
+ </TD>
+ <TD VALIGN="TOP" WIDTH="30%">
+Changed from abstract to non-abstract.
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.RecyclerView.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.RecyclerView.html
new file mode 100644
index 0000000..d5e36f0
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.RecyclerView.html
@@ -0,0 +1,130 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.widget.RecyclerView
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v7.widget.<A HREF="../../../../reference/android/support/v7/widget/RecyclerView.html" target="_top"><font size="+2"><code>RecyclerView</code></font></A>
+</H2>
+<p><font xsize="+1">Added interfaces <code>android.support.v4.view.NestedScrollingChild, android.support.v4.view.ScrollingView</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.widget.RecyclerView.getOnFlingListener_added()"></A>
+ <nobr><code>OnFlingListener</code> <A HREF="../../../../reference/android/support/v7/widget/RecyclerView.html#getOnFlingListener()" target="_top"><code>getOnFlingListener</code></A>()</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.widget.RecyclerView.setOnFlingListener_added(android.support.v7.widget.RecyclerView.OnFlingListener)"></A>
+ <nobr><code>void</code> <A HREF="../../../../reference/android/support/v7/widget/RecyclerView.html#setOnFlingListener(android.support.v7.widget.RecyclerView.OnFlingListener)" target="_top"><code>setOnFlingListener</code></A>(<code>OnFlingListener</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.StaggeredGridLayoutManager.html b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.StaggeredGridLayoutManager.html
new file mode 100644
index 0000000..640ef38
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/android.support.v7.widget.StaggeredGridLayoutManager.html
@@ -0,0 +1,138 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.widget.StaggeredGridLayoutManager
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Class android.support.v7.widget.<A HREF="../../../../reference/android/support/v7/widget/StaggeredGridLayoutManager.html" target="_top"><font size="+2"><code>StaggeredGridLayoutManager</code></font></A>
+</H2>
+<p><font xsize="+1">Added interface <code>android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider</code>.<br></font>
+<a NAME="constructors"></a>
+<a NAME="methods"></a>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Methods" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Methods</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.widget.StaggeredGridLayoutManager.computeScrollVectorForPosition_added(int)"></A>
+ <nobr><code>PointF</code> <A HREF="../../../../reference/android/support/v7/widget/StaggeredGridLayoutManager.html#computeScrollVectorForPosition(int)" target="_top"><code>computeScrollVectorForPosition</code></A>(<code>int</code>)</nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<a NAME="fields"></a>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Fields" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Fields</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.widget.StaggeredGridLayoutManager.TAG"></A>
+ <code>String</code> TAG
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/changes-summary.html b/docs/html/sdk/support_api_diff/24.2.0/changes/changes-summary.html
new file mode 100644
index 0000000..12dfb4e
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/changes-summary.html
@@ -0,0 +1,329 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Support Library API Differences Report
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<body class="gc-documentation">
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+ <div id="docTitleContainer">
+ <h1>Support Library API Differences Report</h1>
+<p>This report details the changes in the Android Support Library API between two versions.
+It shows additions, modifications, and removals for packages, classes, methods, and fields.
+The report also includes general statistics that characterize the extent and type of the differences.</p>
+<p>This report is based a comparison of the Support Library API specifications
+whose version level identifiers are given in the upper-right corner of this page. It compares a
+newer "to" version's API to an older "from" version's API, noting all changes relative to the
+older API. So, for example, API elements marked as removed are no longer present in the "to"
+API specification.</p>
+<p>To navigate the report, use the "Select a Diffs Index" and "Filter the Index"
+controls on the left. The report uses text formatting to indicate <em>interface names</em>,
+<a href= ><code>links to reference documentation</code></a>, and <a href= >links to change
+description</a>. The statistics are accessible from the "Statistics" link in the upper-right corner.</p>
+<p>For more information about the Android API and SDK,
+see the <a href="http://developer.android.com/index.html" target="_top">Android Developers site</a>.</p>
+<p>
+<a NAME="Removed"></a>
+<TABLE summary="Removed Packages" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Removed Packages</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.appcompat"></A>
+ android.support.v7.appcompat </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.recyclerview"></A>
+ android.support.v7.recyclerview </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v8.renderscript"></A>
+ android.support.v8.renderscript </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Packages" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Packages</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.transition"></A>
+ <nobr><A HREF="../../../../reference/android/support/transition/package-summary.html" target="_top"><code>android.support.transition</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.text.util"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/text/util/package-summary.html" target="_top"><code>android.support.v4.text.util</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Packages" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=3>Changed Packages</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.customtabs"></A>
+ <nobr><A HREF="pkg_android.support.customtabs.html">android.support.customtabs</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.design.widget"></A>
+ <nobr><A HREF="pkg_android.support.design.widget.html">android.support.design.widget</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v14.preference"></A>
+ <nobr><A HREF="pkg_android.support.v14.preference.html">android.support.v14.preference</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.leanback.widget"></A>
+ <nobr><A HREF="pkg_android.support.v17.leanback.widget.html">android.support.v17.leanback.widget</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v17.preference"></A>
+ <nobr><A HREF="pkg_android.support.v17.preference.html">android.support.v17.preference</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.accessibilityservice"></A>
+ <nobr><A HREF="pkg_android.support.v4.accessibilityservice.html">android.support.v4.accessibilityservice</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.app"></A>
+ <nobr><A HREF="pkg_android.support.v4.app.html">android.support.v4.app</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.content"></A>
+ <nobr><A HREF="pkg_android.support.v4.content.html">android.support.v4.content</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.graphics.drawable"></A>
+ <nobr><A HREF="pkg_android.support.v4.graphics.drawable.html">android.support.v4.graphics.drawable</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media"></A>
+ <nobr><A HREF="pkg_android.support.v4.media.html">android.support.v4.media</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.media.session"></A>
+ <nobr><A HREF="pkg_android.support.v4.media.session.html">android.support.v4.media.session</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.os"></A>
+ <nobr><A HREF="pkg_android.support.v4.os.html">android.support.v4.os</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.util"></A>
+ <nobr><A HREF="pkg_android.support.v4.util.html">android.support.v4.util</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view"></A>
+ <nobr><A HREF="pkg_android.support.v4.view.html">android.support.v4.view</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.view.accessibility"></A>
+ <nobr><A HREF="pkg_android.support.v4.view.accessibility.html">android.support.v4.view.accessibility</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v4.widget"></A>
+ <nobr><A HREF="pkg_android.support.v4.widget.html">android.support.v4.widget</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.app"></A>
+ <nobr><A HREF="pkg_android.support.v7.app.html">android.support.v7.app</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.content.res"></A>
+ <nobr><A HREF="pkg_android.support.v7.content.res.html">android.support.v7.content.res</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.graphics"></A>
+ <nobr><A HREF="pkg_android.support.v7.graphics.html">android.support.v7.graphics</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.preference"></A>
+ <nobr><A HREF="pkg_android.support.v7.preference.html">android.support.v7.preference</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.util"></A>
+ <nobr><A HREF="pkg_android.support.v7.util.html">android.support.v7.util</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="android.support.v7.widget"></A>
+ <nobr><A HREF="pkg_android.support.v7.widget.html">android.support.v7.widget</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<!-- End of API section -->
+<!-- Start of packages section -->
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_additions.html b/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_additions.html
new file mode 100644
index 0000000..f3eb2ed
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_additions.html
@@ -0,0 +1,305 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="classes_index_all.html" class="staysblack">All Classes</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="classes_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v4.view.accessibility.html#AccessibilityManagerCompat.AccessibilityStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManagerCompat.AccessibilityStateChangeListener</i></b></A><br>
+<A HREF="pkg_android.support.v4.view.accessibility.html#AccessibilityManagerCompat.TouchExplorationStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManagerCompat.TouchExplorationStateChangeListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.app.html#ActionBarActivity" class="hiddenlink" target="rightframe"><b>ActionBarActivity</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView" class="hiddenlink" target="rightframe"><b>ActionMenuView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView.LayoutParams" class="hiddenlink" target="rightframe"><b>ActionMenuView.LayoutParams</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>ActionMenuView.OnMenuItemClickListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.app.html#AppCompatActivity" class="hiddenlink" target="rightframe"><b>AppCompatActivity</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatAutoCompleteTextView" class="hiddenlink" target="rightframe"><b>AppCompatAutoCompleteTextView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatButton" class="hiddenlink" target="rightframe"><b>AppCompatButton</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatCheckBox" class="hiddenlink" target="rightframe"><b>AppCompatCheckBox</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatCheckedTextView" class="hiddenlink" target="rightframe"><b>AppCompatCheckedTextView</b></A><br>
+<A HREF="pkg_android.support.v7.app.html#AppCompatDialogFragment" class="hiddenlink" target="rightframe"><b>AppCompatDialogFragment</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatEditText" class="hiddenlink" target="rightframe"><b>AppCompatEditText</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatImageButton" class="hiddenlink" target="rightframe"><b>AppCompatImageButton</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatImageView" class="hiddenlink" target="rightframe"><b>AppCompatImageView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatMultiAutoCompleteTextView" class="hiddenlink" target="rightframe"><b>AppCompatMultiAutoCompleteTextView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatRadioButton" class="hiddenlink" target="rightframe"><b>AppCompatRadioButton</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatRatingBar" class="hiddenlink" target="rightframe"><b>AppCompatRatingBar</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatSeekBar" class="hiddenlink" target="rightframe"><b>AppCompatSeekBar</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatSpinner" class="hiddenlink" target="rightframe"><b>AppCompatSpinner</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatTextView" class="hiddenlink" target="rightframe"><b>AppCompatTextView</b></A><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.util.html#BatchingListUpdateCallback" class="hiddenlink" target="rightframe"><b>BatchingListUpdateCallback</b></A><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#CardView" class="hiddenlink" target="rightframe"><b>CardView</b></A><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.util.html#DiffUtil" class="hiddenlink" target="rightframe"><b>DiffUtil</b></A><br>
+<A HREF="pkg_android.support.v7.util.html#DiffUtil.Callback" class="hiddenlink" target="rightframe"><b>DiffUtil.Callback</b></A><br>
+<A HREF="pkg_android.support.v7.util.html#DiffUtil.DiffResult" class="hiddenlink" target="rightframe"><b>DiffUtil.DiffResult</b></A><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#GridLayout" class="hiddenlink" target="rightframe"><b>GridLayout</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.Alignment" class="hiddenlink" target="rightframe"><b>GridLayout.Alignment</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.LayoutParams" class="hiddenlink" target="rightframe"><b>GridLayout.LayoutParams</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.Spec" class="hiddenlink" target="rightframe"><b>GridLayout.Spec</b></A><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#LinearLayoutCompat" class="hiddenlink" target="rightframe"><b>LinearLayoutCompat</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#LinearLayoutCompat.LayoutParams" class="hiddenlink" target="rightframe"><b>LinearLayoutCompat.LayoutParams</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#LinearSnapHelper" class="hiddenlink" target="rightframe"><b>LinearSnapHelper</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ListPopupWindow" class="hiddenlink" target="rightframe"><b>ListPopupWindow</b></A><br>
+<A HREF="pkg_android.support.v7.util.html#ListUpdateCallback" class="hiddenlink" target="rightframe"><b><i>ListUpdateCallback</i></b></A><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.preference.html#MultiSelectListPreferenceDialogFragmentCompat" class="hiddenlink" target="rightframe"><b>MultiSelectListPreferenceDialogFragmentCompat</b></A><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat" class="hiddenlink" target="rightframe"><b>NotificationCompat</b></A><br>
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat.Builder" class="hiddenlink" target="rightframe"><b>NotificationCompat.Builder</b></A><br>
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat.MediaStyle" class="hiddenlink" target="rightframe"><b>NotificationCompat.MediaStyle</b></A><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v4.util.html#PatternsCompat" class="hiddenlink" target="rightframe"><b>PatternsCompat</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu" class="hiddenlink" target="rightframe"><b>PopupMenu</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu.OnDismissListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnDismissListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnMenuItemClickListener</i></b></A><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#RecyclerView.OnFlingListener" class="hiddenlink" target="rightframe"><b>RecyclerView.OnFlingListener</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#RecyclerView.SmoothScroller.ScrollVectorProvider" class="hiddenlink" target="rightframe"><b><i>RecyclerView.SmoothScroller.ScrollVectorProvider</i></b></A><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#SearchView" class="hiddenlink" target="rightframe"><b>SearchView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnCloseListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnCloseListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnQueryTextListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnQueryTextListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnSuggestionListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnSuggestionListener</i></b></A><br>
+<A HREF="pkg_android.support.v4.widget.html#SearchViewCompat.OnCloseListener" class="hiddenlink" target="rightframe"><b><i>SearchViewCompat.OnCloseListener</i></b></A><br>
+<A HREF="pkg_android.support.v4.widget.html#SearchViewCompat.OnQueryTextListener" class="hiddenlink" target="rightframe"><b><i>SearchViewCompat.OnQueryTextListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ShareActionProvider" class="hiddenlink" target="rightframe"><b>ShareActionProvider</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ShareActionProvider.OnShareTargetSelectedListener" class="hiddenlink" target="rightframe"><b><i>ShareActionProvider.OnShareTargetSelectedListener</i></b></A><br>
+<A HREF="pkg_android.support.v4.app.html#SharedElementCallback.OnSharedElementsReadyListener" class="hiddenlink" target="rightframe"><b><i>SharedElementCallback.OnSharedElementsReadyListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SnapHelper" class="hiddenlink" target="rightframe"><b>SnapHelper</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#Space" class="hiddenlink" target="rightframe"><b>Space</b></A><br>
+<A HREF="pkg_android.support.v4.widget.html#SwipeRefreshLayout.OnChildScrollUpCallback" class="hiddenlink" target="rightframe"><b><i>SwipeRefreshLayout.OnChildScrollUpCallback</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SwitchCompat" class="hiddenlink" target="rightframe"><b>SwitchCompat</b></A><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#ThemedSpinnerAdapter" class="hiddenlink" target="rightframe"><b><i>ThemedSpinnerAdapter</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ThemedSpinnerAdapter.Helper" class="hiddenlink" target="rightframe"><b>ThemedSpinnerAdapter.Helper</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#Toolbar" class="hiddenlink" target="rightframe"><b>Toolbar</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.LayoutParams" class="hiddenlink" target="rightframe"><b>Toolbar.LayoutParams</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>Toolbar.OnMenuItemClickListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.SavedState" class="hiddenlink" target="rightframe"><b>Toolbar.SavedState</b></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_all.html b/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_all.html
new file mode 100644
index 0000000..410ac8a
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_all.html
@@ -0,0 +1,528 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Classes</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="classes_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="classes_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html" class="hiddenlink" target="rightframe">AbstractMediaItemPresenter</A><br>
+<A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html" class="hiddenlink" target="rightframe">AbstractMediaItemPresenter.ViewHolder</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html" class="hiddenlink" target="rightframe">AccessibilityEventCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html" class="hiddenlink" target="rightframe">AccessibilityManagerCompat</A><br>
+<A HREF="pkg_android.support.v4.view.accessibility.html#AccessibilityManagerCompat.AccessibilityStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManagerCompat.AccessibilityStateChangeListener</i></b></A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html" class="hiddenlink" target="rightframe">AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat</A><br>
+<A HREF="pkg_android.support.v4.view.accessibility.html#AccessibilityManagerCompat.TouchExplorationStateChangeListener" class="hiddenlink" target="rightframe"><b><i>AccessibilityManagerCompat.TouchExplorationStateChangeListener</i></b></A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.AccessibilityActionCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.CollectionInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.CollectionItemInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.RangeInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeProviderCompat</A><br>
+<A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityServiceInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityWindowInfoCompat</A><br>
+<A HREF="pkg_android.support.v7.app.html#ActionBarActivity" class="hiddenlink" target="rightframe"><b>ActionBarActivity</b></A><br>
+<A HREF="android.support.v7.app.ActionBarDrawerToggle.html" class="hiddenlink" target="rightframe">ActionBarDrawerToggle</A><br>
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView" class="hiddenlink" target="rightframe"><b>ActionMenuView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView.LayoutParams" class="hiddenlink" target="rightframe"><b>ActionMenuView.LayoutParams</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ActionMenuView.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>ActionMenuView.OnMenuItemClickListener</i></b></A><br>
+<A HREF="android.support.v4.app.ActivityCompat.html" class="hiddenlink" target="rightframe">ActivityCompat</A><br>
+<A HREF="android.support.v4.app.ActivityOptionsCompat.html" class="hiddenlink" target="rightframe">ActivityOptionsCompat</A><br>
+<A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html" class="hiddenlink" target="rightframe">AppBarLayout.ScrollingViewBehavior</A><br>
+<A HREF="pkg_android.support.v7.app.html#AppCompatActivity" class="hiddenlink" target="rightframe"><b>AppCompatActivity</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatAutoCompleteTextView" class="hiddenlink" target="rightframe"><b>AppCompatAutoCompleteTextView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatButton" class="hiddenlink" target="rightframe"><b>AppCompatButton</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatCheckBox" class="hiddenlink" target="rightframe"><b>AppCompatCheckBox</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatCheckedTextView" class="hiddenlink" target="rightframe"><b>AppCompatCheckedTextView</b></A><br>
+<A HREF="android.support.v7.app.AppCompatDelegate.html" class="hiddenlink" target="rightframe">AppCompatDelegate</A><br>
+<A HREF="pkg_android.support.v7.app.html#AppCompatDialogFragment" class="hiddenlink" target="rightframe"><b>AppCompatDialogFragment</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatEditText" class="hiddenlink" target="rightframe"><b>AppCompatEditText</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatImageButton" class="hiddenlink" target="rightframe"><b>AppCompatImageButton</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatImageView" class="hiddenlink" target="rightframe"><b>AppCompatImageView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatMultiAutoCompleteTextView" class="hiddenlink" target="rightframe"><b>AppCompatMultiAutoCompleteTextView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatRadioButton" class="hiddenlink" target="rightframe"><b>AppCompatRadioButton</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatRatingBar" class="hiddenlink" target="rightframe"><b>AppCompatRatingBar</b></A><br>
+<A HREF="android.support.v7.content.res.AppCompatResources.html" class="hiddenlink" target="rightframe">AppCompatResources</A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatSeekBar" class="hiddenlink" target="rightframe"><b>AppCompatSeekBar</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatSpinner" class="hiddenlink" target="rightframe"><b>AppCompatSpinner</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#AppCompatTextView" class="hiddenlink" target="rightframe"><b>AppCompatTextView</b></A><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.util.html#BatchingListUpdateCallback" class="hiddenlink" target="rightframe"><b>BatchingListUpdateCallback</b></A><br>
+<A HREF="android.support.design.widget.BottomSheetBehavior.html" class="hiddenlink" target="rightframe">BottomSheetBehavior</A><br>
+<A HREF="android.support.v4.os.BuildCompat.html" class="hiddenlink" target="rightframe">BuildCompat</A><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#CardView" class="hiddenlink" target="rightframe"><b>CardView</b></A><br>
+<A HREF="android.support.design.widget.CollapsingToolbarLayout.html" class="hiddenlink" target="rightframe">CollapsingToolbarLayout</A><br>
+<A HREF="android.support.v4.content.ContextCompat.html" class="hiddenlink" target="rightframe">ContextCompat</A><br>
+<A HREF="android.support.design.widget.CoordinatorLayout.html" class="hiddenlink" target="rightframe">CoordinatorLayout</A><br>
+<A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html" class="hiddenlink" target="rightframe">CoordinatorLayout.Behavior</A><br>
+<A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html" class="hiddenlink" target="rightframe">CoordinatorLayout.LayoutParams</A><br>
+<A HREF="android.support.customtabs.CustomTabsIntent.html" class="hiddenlink" target="rightframe">CustomTabsIntent</A><br>
+<A HREF="android.support.customtabs.CustomTabsIntent.Builder.html" class="hiddenlink" target="rightframe">CustomTabsIntent.Builder</A><br>
+<A HREF="android.support.customtabs.CustomTabsSession.html" class="hiddenlink" target="rightframe">CustomTabsSession</A><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.util.html#DiffUtil" class="hiddenlink" target="rightframe"><b>DiffUtil</b></A><br>
+<A HREF="pkg_android.support.v7.util.html#DiffUtil.Callback" class="hiddenlink" target="rightframe"><b>DiffUtil.Callback</b></A><br>
+<A HREF="pkg_android.support.v7.util.html#DiffUtil.DiffResult" class="hiddenlink" target="rightframe"><b>DiffUtil.DiffResult</b></A><br>
+<A HREF="android.support.v4.graphics.drawable.DrawableCompat.html" class="hiddenlink" target="rightframe">DrawableCompat</A><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.FloatingActionButton.Behavior.html" class="hiddenlink" target="rightframe">FloatingActionButton.Behavior</A><br>
+<A HREF="android.support.v4.app.FragmentController.html" class="hiddenlink" target="rightframe">FragmentController</A><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#GridLayout" class="hiddenlink" target="rightframe"><b>GridLayout</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.Alignment" class="hiddenlink" target="rightframe"><b>GridLayout.Alignment</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.LayoutParams" class="hiddenlink" target="rightframe"><b>GridLayout.LayoutParams</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#GridLayout.Spec" class="hiddenlink" target="rightframe"><b>GridLayout.Spec</b></A><br>
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.KeyEventCompat.html" class="hiddenlink" target="rightframe">KeyEventCompat</A><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.preference.LeanbackSettingsFragment.html" class="hiddenlink" target="rightframe">LeanbackSettingsFragment</A><br>
+<A HREF="pkg_android.support.v7.widget.html#LinearLayoutCompat" class="hiddenlink" target="rightframe"><b>LinearLayoutCompat</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#LinearLayoutCompat.LayoutParams" class="hiddenlink" target="rightframe"><b>LinearLayoutCompat.LayoutParams</b></A><br>
+<A HREF="android.support.v7.widget.LinearLayoutManager.html" class="hiddenlink" target="rightframe">LinearLayoutManager</A><br>
+<A HREF="android.support.v7.widget.LinearSmoothScroller.html" class="hiddenlink" target="rightframe">LinearSmoothScroller</A><br>
+<A HREF="pkg_android.support.v7.widget.html#LinearSnapHelper" class="hiddenlink" target="rightframe"><b>LinearSnapHelper</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ListPopupWindow" class="hiddenlink" target="rightframe"><b>ListPopupWindow</b></A><br>
+<A HREF="pkg_android.support.v7.util.html#ListUpdateCallback" class="hiddenlink" target="rightframe"><b><i>ListUpdateCallback</i></b></A><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html" class="hiddenlink" target="rightframe">MediaBrowserCompat.MediaItem</A><br>
+<A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html" class="hiddenlink" target="rightframe">MediaBrowserServiceCompat.BrowserRoot</A><br>
+<A HREF="android.support.v4.media.session.MediaButtonReceiver.html" class="hiddenlink" target="rightframe">MediaButtonReceiver</A><br>
+<A HREF="android.support.v4.media.MediaDescriptionCompat.html" class="hiddenlink" target="rightframe">MediaDescriptionCompat</A><br>
+<A HREF="android.support.v4.media.MediaMetadataCompat.html" class="hiddenlink" target="rightframe">MediaMetadataCompat</A><br>
+<A HREF="android.support.v4.media.session.MediaSessionCompat.html" class="hiddenlink" target="rightframe">MediaSessionCompat</A><br>
+<A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html" class="hiddenlink" target="rightframe">MediaSessionCompat.QueueItem</A><br>
+<A HREF="android.support.v4.view.MotionEventCompat.html" class="hiddenlink" target="rightframe">MotionEventCompat</A><br>
+<A HREF="pkg_android.support.v7.preference.html#MultiSelectListPreferenceDialogFragmentCompat" class="hiddenlink" target="rightframe"><b>MultiSelectListPreferenceDialogFragmentCompat</b></A><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat" class="hiddenlink" target="rightframe"><b>NotificationCompat</b></A><br>
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat.Builder" class="hiddenlink" target="rightframe"><b>NotificationCompat.Builder</b></A><br>
+<A HREF="pkg_android.support.v7.app.html#NotificationCompat.MediaStyle" class="hiddenlink" target="rightframe"><b>NotificationCompat.MediaStyle</b></A><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.leanback.widget.ObjectAdapter.html" class="hiddenlink" target="rightframe">ObjectAdapter</A><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v7.graphics.Palette.html" class="hiddenlink" target="rightframe">Palette</A><br>
+<A HREF="pkg_android.support.v4.util.html#PatternsCompat" class="hiddenlink" target="rightframe"><b>PatternsCompat</b></A><br>
+<A HREF="android.support.v4.media.session.PlaybackStateCompat.html" class="hiddenlink" target="rightframe">PlaybackStateCompat</A><br>
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu" class="hiddenlink" target="rightframe"><b>PopupMenu</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu.OnDismissListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnDismissListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#PopupMenu.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>PopupMenu.OnMenuItemClickListener</i></b></A><br>
+<A HREF="android.support.v14.preference.PreferenceFragment.html" class="hiddenlink" target="rightframe">PreferenceFragment</A><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v7.widget.RecyclerView.html" class="hiddenlink" target="rightframe">RecyclerView</A><br>
+<A HREF="pkg_android.support.v7.widget.html#RecyclerView.OnFlingListener" class="hiddenlink" target="rightframe"><b>RecyclerView.OnFlingListener</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#RecyclerView.SmoothScroller.ScrollVectorProvider" class="hiddenlink" target="rightframe"><b><i>RecyclerView.SmoothScroller.ScrollVectorProvider</i></b></A><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="pkg_android.support.v7.widget.html#SearchView" class="hiddenlink" target="rightframe"><b>SearchView</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnCloseListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnCloseListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnQueryTextListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnQueryTextListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SearchView.OnSuggestionListener" class="hiddenlink" target="rightframe"><b><i>SearchView.OnSuggestionListener</i></b></A><br>
+<A HREF="android.support.v4.widget.SearchViewCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat</A><br>
+<A HREF="pkg_android.support.v4.widget.html#SearchViewCompat.OnCloseListener" class="hiddenlink" target="rightframe"><b><i>SearchViewCompat.OnCloseListener</i></b></A><br>
+<A HREF="android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat.OnCloseListenerCompat</A><br>
+<A HREF="pkg_android.support.v4.widget.html#SearchViewCompat.OnQueryTextListener" class="hiddenlink" target="rightframe"><b><i>SearchViewCompat.OnQueryTextListener</i></b></A><br>
+<A HREF="android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat.OnQueryTextListenerCompat</A><br>
+<A HREF="android.support.v4.app.ServiceCompat.html" class="hiddenlink" target="rightframe">ServiceCompat</A><br>
+<A HREF="pkg_android.support.v7.widget.html#ShareActionProvider" class="hiddenlink" target="rightframe"><b>ShareActionProvider</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ShareActionProvider.OnShareTargetSelectedListener" class="hiddenlink" target="rightframe"><b><i>ShareActionProvider.OnShareTargetSelectedListener</i></b></A><br>
+<A HREF="android.support.v4.app.SharedElementCallback.html" class="hiddenlink" target="rightframe">SharedElementCallback</A><br>
+<A HREF="pkg_android.support.v4.app.html#SharedElementCallback.OnSharedElementsReadyListener" class="hiddenlink" target="rightframe"><b><i>SharedElementCallback.OnSharedElementsReadyListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SnapHelper" class="hiddenlink" target="rightframe"><b>SnapHelper</b></A><br>
+<A HREF="android.support.v7.util.SortedList.Callback.html" class="hiddenlink" target="rightframe">SortedList.Callback</A><br>
+<A HREF="pkg_android.support.v7.widget.html#Space" class="hiddenlink" target="rightframe"><b>Space</b></A><br>
+<A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html" class="hiddenlink" target="rightframe">StaggeredGridLayoutManager</A><br>
+<A HREF="android.support.v4.widget.SwipeRefreshLayout.html" class="hiddenlink" target="rightframe">SwipeRefreshLayout</A><br>
+<A HREF="pkg_android.support.v4.widget.html#SwipeRefreshLayout.OnChildScrollUpCallback" class="hiddenlink" target="rightframe"><b><i>SwipeRefreshLayout.OnChildScrollUpCallback</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#SwitchCompat" class="hiddenlink" target="rightframe"><b>SwitchCompat</b></A><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.TabLayout.html" class="hiddenlink" target="rightframe">TabLayout</A><br>
+<A HREF="android.support.design.widget.TextInputLayout.html" class="hiddenlink" target="rightframe">TextInputLayout</A><br>
+<A HREF="android.support.v4.widget.TextViewCompat.html" class="hiddenlink" target="rightframe">TextViewCompat</A><br>
+<A HREF="pkg_android.support.v7.widget.html#ThemedSpinnerAdapter" class="hiddenlink" target="rightframe"><b><i>ThemedSpinnerAdapter</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#ThemedSpinnerAdapter.Helper" class="hiddenlink" target="rightframe"><b>ThemedSpinnerAdapter.Helper</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#Toolbar" class="hiddenlink" target="rightframe"><b>Toolbar</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.LayoutParams" class="hiddenlink" target="rightframe"><b>Toolbar.LayoutParams</b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.OnMenuItemClickListener" class="hiddenlink" target="rightframe"><b><i>Toolbar.OnMenuItemClickListener</i></b></A><br>
+<A HREF="pkg_android.support.v7.widget.html#Toolbar.SavedState" class="hiddenlink" target="rightframe"><b>Toolbar.SavedState</b></A><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.ViewCompat.html" class="hiddenlink" target="rightframe">ViewCompat</A><br>
+<A HREF="android.support.v4.view.ViewConfigurationCompat.html" class="hiddenlink" target="rightframe">ViewConfigurationCompat</A><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.WindowInsetsCompat.html" class="hiddenlink" target="rightframe">WindowInsetsCompat</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_changes.html b/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_changes.html
new file mode 100644
index 0000000..1baef5c
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_changes.html
@@ -0,0 +1,394 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="classes_index_all.html" class="staysblack">All Classes</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="classes_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html" class="hiddenlink" target="rightframe">AbstractMediaItemPresenter</A><br>
+<A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html" class="hiddenlink" target="rightframe">AbstractMediaItemPresenter.ViewHolder</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html" class="hiddenlink" target="rightframe">AccessibilityEventCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html" class="hiddenlink" target="rightframe">AccessibilityManagerCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html" class="hiddenlink" target="rightframe">AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.AccessibilityActionCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.CollectionInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.CollectionItemInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeInfoCompat.RangeInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html" class="hiddenlink" target="rightframe">AccessibilityNodeProviderCompat</A><br>
+<A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityServiceInfoCompat</A><br>
+<A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html" class="hiddenlink" target="rightframe">AccessibilityWindowInfoCompat</A><br>
+<A HREF="android.support.v7.app.ActionBarDrawerToggle.html" class="hiddenlink" target="rightframe">ActionBarDrawerToggle</A><br>
+<A HREF="android.support.v4.app.ActivityCompat.html" class="hiddenlink" target="rightframe">ActivityCompat</A><br>
+<A HREF="android.support.v4.app.ActivityOptionsCompat.html" class="hiddenlink" target="rightframe">ActivityOptionsCompat</A><br>
+<A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html" class="hiddenlink" target="rightframe">AppBarLayout.ScrollingViewBehavior</A><br>
+<A HREF="android.support.v7.app.AppCompatDelegate.html" class="hiddenlink" target="rightframe">AppCompatDelegate</A><br>
+<A HREF="android.support.v7.content.res.AppCompatResources.html" class="hiddenlink" target="rightframe">AppCompatResources</A><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.BottomSheetBehavior.html" class="hiddenlink" target="rightframe">BottomSheetBehavior</A><br>
+<A HREF="android.support.v4.os.BuildCompat.html" class="hiddenlink" target="rightframe">BuildCompat</A><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.CollapsingToolbarLayout.html" class="hiddenlink" target="rightframe">CollapsingToolbarLayout</A><br>
+<A HREF="android.support.v4.content.ContextCompat.html" class="hiddenlink" target="rightframe">ContextCompat</A><br>
+<A HREF="android.support.design.widget.CoordinatorLayout.html" class="hiddenlink" target="rightframe">CoordinatorLayout</A><br>
+<A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html" class="hiddenlink" target="rightframe">CoordinatorLayout.Behavior</A><br>
+<A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html" class="hiddenlink" target="rightframe">CoordinatorLayout.LayoutParams</A><br>
+<A HREF="android.support.customtabs.CustomTabsIntent.html" class="hiddenlink" target="rightframe">CustomTabsIntent</A><br>
+<A HREF="android.support.customtabs.CustomTabsIntent.Builder.html" class="hiddenlink" target="rightframe">CustomTabsIntent.Builder</A><br>
+<A HREF="android.support.customtabs.CustomTabsSession.html" class="hiddenlink" target="rightframe">CustomTabsSession</A><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.graphics.drawable.DrawableCompat.html" class="hiddenlink" target="rightframe">DrawableCompat</A><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.FloatingActionButton.Behavior.html" class="hiddenlink" target="rightframe">FloatingActionButton.Behavior</A><br>
+<A HREF="android.support.v4.app.FragmentController.html" class="hiddenlink" target="rightframe">FragmentController</A><br>
+<A NAME="K"></A>
+<br><font size="+2">K</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.KeyEventCompat.html" class="hiddenlink" target="rightframe">KeyEventCompat</A><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.preference.LeanbackSettingsFragment.html" class="hiddenlink" target="rightframe">LeanbackSettingsFragment</A><br>
+<A HREF="android.support.v7.widget.LinearLayoutManager.html" class="hiddenlink" target="rightframe">LinearLayoutManager</A><br>
+<A HREF="android.support.v7.widget.LinearSmoothScroller.html" class="hiddenlink" target="rightframe">LinearSmoothScroller</A><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html" class="hiddenlink" target="rightframe">MediaBrowserCompat.MediaItem</A><br>
+<A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html" class="hiddenlink" target="rightframe">MediaBrowserServiceCompat.BrowserRoot</A><br>
+<A HREF="android.support.v4.media.session.MediaButtonReceiver.html" class="hiddenlink" target="rightframe">MediaButtonReceiver</A><br>
+<A HREF="android.support.v4.media.MediaDescriptionCompat.html" class="hiddenlink" target="rightframe">MediaDescriptionCompat</A><br>
+<A HREF="android.support.v4.media.MediaMetadataCompat.html" class="hiddenlink" target="rightframe">MediaMetadataCompat</A><br>
+<A HREF="android.support.v4.media.session.MediaSessionCompat.html" class="hiddenlink" target="rightframe">MediaSessionCompat</A><br>
+<A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html" class="hiddenlink" target="rightframe">MediaSessionCompat.QueueItem</A><br>
+<A HREF="android.support.v4.view.MotionEventCompat.html" class="hiddenlink" target="rightframe">MotionEventCompat</A><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v17.leanback.widget.ObjectAdapter.html" class="hiddenlink" target="rightframe">ObjectAdapter</A><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v7.graphics.Palette.html" class="hiddenlink" target="rightframe">Palette</A><br>
+<A HREF="android.support.v4.media.session.PlaybackStateCompat.html" class="hiddenlink" target="rightframe">PlaybackStateCompat</A><br>
+<A HREF="android.support.v14.preference.PreferenceFragment.html" class="hiddenlink" target="rightframe">PreferenceFragment</A><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v7.widget.RecyclerView.html" class="hiddenlink" target="rightframe">RecyclerView</A><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.widget.SearchViewCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat</A><br>
+<A HREF="android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat.OnCloseListenerCompat</A><br>
+<A HREF="android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat.html" class="hiddenlink" target="rightframe">SearchViewCompat.OnQueryTextListenerCompat</A><br>
+<A HREF="android.support.v4.app.ServiceCompat.html" class="hiddenlink" target="rightframe">ServiceCompat</A><br>
+<A HREF="android.support.v4.app.SharedElementCallback.html" class="hiddenlink" target="rightframe">SharedElementCallback</A><br>
+<A HREF="android.support.v7.util.SortedList.Callback.html" class="hiddenlink" target="rightframe">SortedList.Callback</A><br>
+<A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html" class="hiddenlink" target="rightframe">StaggeredGridLayoutManager</A><br>
+<A HREF="android.support.v4.widget.SwipeRefreshLayout.html" class="hiddenlink" target="rightframe">SwipeRefreshLayout</A><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#V"><font size="-2">V</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.design.widget.TabLayout.html" class="hiddenlink" target="rightframe">TabLayout</A><br>
+<A HREF="android.support.design.widget.TextInputLayout.html" class="hiddenlink" target="rightframe">TextInputLayout</A><br>
+<A HREF="android.support.v4.widget.TextViewCompat.html" class="hiddenlink" target="rightframe">TextViewCompat</A><br>
+<A NAME="V"></A>
+<br><font size="+2">V</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.ViewCompat.html" class="hiddenlink" target="rightframe">ViewCompat</A><br>
+<A HREF="android.support.v4.view.ViewConfigurationCompat.html" class="hiddenlink" target="rightframe">ViewConfigurationCompat</A><br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#K"><font size="-2">K</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+<a href="#V"><font size="-2">V</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<A HREF="android.support.v4.view.WindowInsetsCompat.html" class="hiddenlink" target="rightframe">WindowInsetsCompat</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_removals.html b/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_removals.html
new file mode 100644
index 0000000..e6da73f
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/classes_index_removals.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Class Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Classes" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="classes_index_all.html" class="staysblack">All Classes</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="classes_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="classes_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_additions.html b/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_additions.html
new file mode 100644
index 0000000..b0c0587
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_additions.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="constructors_index_all.html" class="staysblack">All Constructors</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="constructors_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.WindowInsetsCompat.html#android.support.v4.view.WindowInsetsCompat.ctor_added(android.support.v4.view.WindowInsetsCompat)" class="hiddenlink" target="rightframe"><b>WindowInsetsCompat</b>
+(<code>WindowInsetsCompat</code>)</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_all.html b/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_all.html
new file mode 100644
index 0000000..91568db
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_all.html
@@ -0,0 +1,85 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Constructors</b>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="constructors_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="constructors_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.ActivityCompat.html#android.support.v4.app.ActivityCompat.ctor_changed()" class="hiddenlink" target="rightframe">ActivityCompat
+()</A></nobr> constructor<br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#W"><font size="-2">W</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.content.ContextCompat.html#android.support.v4.content.ContextCompat.ctor_changed()" class="hiddenlink" target="rightframe">ContextCompat
+()</A></nobr> constructor<br>
+<A NAME="W"></A>
+<br><font size="+2">W</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.WindowInsetsCompat.html#android.support.v4.view.WindowInsetsCompat.ctor_added(android.support.v4.view.WindowInsetsCompat)" class="hiddenlink" target="rightframe"><b>WindowInsetsCompat</b>
+(<code>WindowInsetsCompat</code>)</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_changes.html b/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_changes.html
new file mode 100644
index 0000000..b4142ed
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_changes.html
@@ -0,0 +1,75 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="constructors_index_all.html" class="staysblack">All Constructors</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="constructors_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.ActivityCompat.html#android.support.v4.app.ActivityCompat.ctor_changed()" class="hiddenlink" target="rightframe">ActivityCompat
+()</A></nobr> constructor<br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.content.ContextCompat.html#android.support.v4.content.ContextCompat.ctor_changed()" class="hiddenlink" target="rightframe">ContextCompat
+()</A></nobr> constructor<br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_removals.html b/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_removals.html
new file mode 100644
index 0000000..f1a9952
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/constructors_index_removals.html
@@ -0,0 +1,61 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Constructor Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Constructors" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="constructors_index_all.html" class="staysblack">All Constructors</a>
+ <br>
+<font color="#999999">Removals</font>
+ <br>
+<A HREF="constructors_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="constructors_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_additions.html b/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_additions.html
new file mode 100644
index 0000000..8923dbe
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_additions.html
@@ -0,0 +1,267 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="fields_index_all.html" class="staysblack">All Fields</a>
+ <br>
+<A HREF="fields_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="fields_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_COLUMN_INT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_PROGRESS_VALUE</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_ROW_INT" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_ROW_INT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CONTEXT_CLICK" class="hiddenlink" target="rightframe">ACTION_CONTEXT_CLICK</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_DOWN" class="hiddenlink" target="rightframe">ACTION_SCROLL_DOWN</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_LEFT" class="hiddenlink" target="rightframe">ACTION_SCROLL_LEFT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_RIGHT" class="hiddenlink" target="rightframe">ACTION_SCROLL_RIGHT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_TO_POSITION" class="hiddenlink" target="rightframe">ACTION_SCROLL_TO_POSITION</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_UP" class="hiddenlink" target="rightframe">ACTION_SCROLL_UP</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SET_PROGRESS" class="hiddenlink" target="rightframe">ACTION_SET_PROGRESS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SHOW_ON_SCREEN" class="hiddenlink" target="rightframe">ACTION_SHOW_ON_SCREEN</A>
+</nobr><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ALBUMS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_ALBUMS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ARTISTS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_ARTISTS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_GENRES" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_GENRES</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_MIXED" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_MIXED</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_PLAYLISTS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_PLAYLISTS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_TITLES" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_TITLES</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_YEARS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_YEARS</A>
+</nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html#android.support.design.widget.CoordinatorLayout.LayoutParams.dodgeInsetEdges" class="hiddenlink" target="rightframe">dodgeInsetEdges</A>
+</nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.EXTRA_BT_FOLDER_TYPE" class="hiddenlink" target="rightframe">EXTRA_BT_FOLDER_TYPE</A>
+</nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.EXTRA_ENABLE_INSTANT_APPS" class="hiddenlink" target="rightframe">EXTRA_ENABLE_INSTANT_APPS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html#android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.EXTRA_SUGGESTION_KEYWORDS" class="hiddenlink" target="rightframe">EXTRA_SUGGESTION_KEYWORDS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT" class="hiddenlink" target="rightframe">EXTRA_USAGE_TIME_REPORT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT_PACKAGES" class="hiddenlink" target="rightframe">EXTRA_USAGE_TIME_REPORT_PACKAGES</A>
+</nobr><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html#android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.HOST_VIEW_ID" class="hiddenlink" target="rightframe">HOST_VIEW_ID</A>
+</nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html#android.support.design.widget.CoordinatorLayout.LayoutParams.insetEdge" class="hiddenlink" target="rightframe">insetEdge</A>
+</nobr><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.MediaMetadataCompat.html#android.support.v4.media.MediaMetadataCompat.METADATA_KEY_BT_FOLDER_TYPE" class="hiddenlink" target="rightframe">METADATA_KEY_BT_FOLDER_TYPE</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaMetadataCompat.html#android.support.v4.media.MediaMetadataCompat.METADATA_KEY_MEDIA_URI" class="hiddenlink" target="rightframe">METADATA_KEY_MEDIA_URI</A>
+</nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.BottomSheetBehavior.html#android.support.design.widget.BottomSheetBehavior.PEEK_HEIGHT_AUTO" class="hiddenlink" target="rightframe">PEEK_HEIGHT_AUTO</A>
+</nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_INITIAL" class="hiddenlink" target="rightframe">PLAY_STATE_INITIAL</A>
+</nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PAUSED" class="hiddenlink" target="rightframe">PLAY_STATE_PAUSED</A>
+</nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PLAYING" class="hiddenlink" target="rightframe">PLAY_STATE_PLAYING</A>
+</nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.STOP_FOREGROUND_DETACH" class="hiddenlink" target="rightframe">STOP_FOREGROUND_DETACH</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.STOP_FOREGROUND_REMOVE" class="hiddenlink" target="rightframe">STOP_FOREGROUND_REMOVE</A>
+</nobr><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_ASSIST_READING_CONTEXT" class="hiddenlink" target="rightframe">TYPE_ASSIST_READING_CONTEXT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html#android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.TYPE_SPLIT_SCREEN_DIVIDER" class="hiddenlink" target="rightframe">TYPE_SPLIT_SCREEN_DIVIDER</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_VIEW_CONTEXT_CLICKED" class="hiddenlink" target="rightframe">TYPE_VIEW_CONTEXT_CLICKED</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_WINDOWS_CHANGED" class="hiddenlink" target="rightframe">TYPE_WINDOWS_CHANGED</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_all.html b/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_all.html
new file mode 100644
index 0000000..19cebb7
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_all.html
@@ -0,0 +1,299 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Fields</b>
+ <br>
+<A HREF="fields_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="fields_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="fields_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_COLUMN_INT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_PROGRESS_VALUE</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_ROW_INT" class="hiddenlink" target="rightframe">ACTION_ARGUMENT_ROW_INT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CONTEXT_CLICK" class="hiddenlink" target="rightframe">ACTION_CONTEXT_CLICK</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_DOWN" class="hiddenlink" target="rightframe">ACTION_SCROLL_DOWN</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_LEFT" class="hiddenlink" target="rightframe">ACTION_SCROLL_LEFT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_RIGHT" class="hiddenlink" target="rightframe">ACTION_SCROLL_RIGHT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_TO_POSITION" class="hiddenlink" target="rightframe">ACTION_SCROLL_TO_POSITION</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_UP" class="hiddenlink" target="rightframe">ACTION_SCROLL_UP</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SET_PROGRESS" class="hiddenlink" target="rightframe">ACTION_SET_PROGRESS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SHOW_ON_SCREEN" class="hiddenlink" target="rightframe">ACTION_SHOW_ON_SCREEN</A>
+</nobr><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ALBUMS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_ALBUMS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ARTISTS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_ARTISTS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_GENRES" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_GENRES</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_MIXED" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_MIXED</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_PLAYLISTS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_PLAYLISTS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_TITLES" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_TITLES</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_YEARS" class="hiddenlink" target="rightframe">BT_FOLDER_TYPE_YEARS</A>
+</nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html#android.support.design.widget.CoordinatorLayout.LayoutParams.dodgeInsetEdges" class="hiddenlink" target="rightframe">dodgeInsetEdges</A>
+</nobr><br>
+<A NAME="E"></A>
+<br><font size="+2">E</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html#android.support.v4.media.MediaDescriptionCompat.EXTRA_BT_FOLDER_TYPE" class="hiddenlink" target="rightframe">EXTRA_BT_FOLDER_TYPE</A>
+</nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.EXTRA_ENABLE_INSTANT_APPS" class="hiddenlink" target="rightframe">EXTRA_ENABLE_INSTANT_APPS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html#android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.EXTRA_SUGGESTION_KEYWORDS" class="hiddenlink" target="rightframe">EXTRA_SUGGESTION_KEYWORDS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT" class="hiddenlink" target="rightframe">EXTRA_USAGE_TIME_REPORT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT_PACKAGES" class="hiddenlink" target="rightframe">EXTRA_USAGE_TIME_REPORT_PACKAGES</A>
+</nobr><br>
+<A NAME="H"></A>
+<br><font size="+2">H</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html#android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.HOST_VIEW_ID" class="hiddenlink" target="rightframe">HOST_VIEW_ID</A>
+</nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html#android.support.design.widget.CoordinatorLayout.LayoutParams.insetEdge" class="hiddenlink" target="rightframe">insetEdge</A>
+</nobr><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.MediaMetadataCompat.html#android.support.v4.media.MediaMetadataCompat.METADATA_KEY_BT_FOLDER_TYPE" class="hiddenlink" target="rightframe">METADATA_KEY_BT_FOLDER_TYPE</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaMetadataCompat.html#android.support.v4.media.MediaMetadataCompat.METADATA_KEY_MEDIA_URI" class="hiddenlink" target="rightframe">METADATA_KEY_MEDIA_URI</A>
+</nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_ALWAYS" class="hiddenlink" target="rightframe">OVER_SCROLL_ALWAYS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS" class="hiddenlink" target="rightframe">OVER_SCROLL_IF_CONTENT_SCROLLS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_NEVER" class="hiddenlink" target="rightframe">OVER_SCROLL_NEVER</A>
+</nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.BottomSheetBehavior.html#android.support.design.widget.BottomSheetBehavior.PEEK_HEIGHT_AUTO" class="hiddenlink" target="rightframe">PEEK_HEIGHT_AUTO</A>
+</nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_INITIAL" class="hiddenlink" target="rightframe">PLAY_STATE_INITIAL</A>
+</nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PAUSED" class="hiddenlink" target="rightframe">PLAY_STATE_PAUSED</A>
+</nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PLAYING" class="hiddenlink" target="rightframe">PLAY_STATE_PLAYING</A>
+</nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.STOP_FOREGROUND_DETACH" class="hiddenlink" target="rightframe">STOP_FOREGROUND_DETACH</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.STOP_FOREGROUND_REMOVE" class="hiddenlink" target="rightframe">STOP_FOREGROUND_REMOVE</A>
+</nobr><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#E"><font size="-2">E</font></a>
+<a href="#H"><font size="-2">H</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html#android.support.v7.widget.StaggeredGridLayoutManager.TAG" class="hiddenlink" target="rightframe"><strike>TAG</strike></A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_ASSIST_READING_CONTEXT" class="hiddenlink" target="rightframe">TYPE_ASSIST_READING_CONTEXT</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html#android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.TYPE_SPLIT_SCREEN_DIVIDER" class="hiddenlink" target="rightframe">TYPE_SPLIT_SCREEN_DIVIDER</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_VIEW_CONTEXT_CLICKED" class="hiddenlink" target="rightframe">TYPE_VIEW_CONTEXT_CLICKED</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_WINDOWS_CHANGED" class="hiddenlink" target="rightframe">TYPE_WINDOWS_CHANGED</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_changes.html b/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_changes.html
new file mode 100644
index 0000000..b5ab769
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_changes.html
@@ -0,0 +1,71 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="fields_index_all.html" class="staysblack">All Fields</a>
+ <br>
+<A HREF="fields_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="fields_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_ALWAYS" class="hiddenlink" target="rightframe">OVER_SCROLL_ALWAYS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS" class="hiddenlink" target="rightframe">OVER_SCROLL_IF_CONTENT_SCROLLS</A>
+</nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.OVER_SCROLL_NEVER" class="hiddenlink" target="rightframe">OVER_SCROLL_NEVER</A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_removals.html b/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_removals.html
new file mode 100644
index 0000000..09ffac4
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/fields_index_removals.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Field Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Fields" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="fields_index_all.html" class="staysblack">All Fields</a>
+ <br>
+<b>Removals</b>
+ <br>
+<A HREF="fields_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="fields_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html#android.support.v7.widget.StaggeredGridLayoutManager.TAG" class="hiddenlink" target="rightframe"><strike>TAG</strike></A>
+</nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/jdiff_help.html b/docs/html/sdk/support_api_diff/24.2.0/changes/jdiff_help.html
new file mode 100644
index 0000000..ca0931f
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/jdiff_help.html
@@ -0,0 +1,134 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+JDiff Help
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<TABLE summary="Navigation bar" BORDER="0" WIDTH="100%" CELLPADDING="1" CELLSPACING="0">
+<TR>
+<TD COLSPAN=2 BGCOLOR="#EEEEFF" CLASS="NavBarCell1">
+ <TABLE summary="Navigation bar" BORDER="0" CELLPADDING="0" CELLSPACING="3">
+ <TR ALIGN="center" VALIGN="top">
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="../../../../reference/index.html" target="_top"><FONT CLASS="NavBarFont1"><B><code>24.2.0</code></B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="changes-summary.html"><FONT CLASS="NavBarFont1"><B>Overview</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Package</FONT> </TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell1"> <FONT CLASS="NavBarFont1">Class</FONT> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1"> <A HREF="jdiff_statistics.html"><FONT CLASS="NavBarFont1"><B>Statistics</B></FONT></A> </TD>
+ <TD BGCOLOR="#EEEEFF" CLASS="NavBarCell1Rev"> <FONT CLASS="NavBarFont1Rev"><B>Help</B></FONT> </TD>
+ </TR>
+ </TABLE>
+</TD>
+<TD ALIGN="right" VALIGN="top" ROWSPAN=3><EM><b>Generated by<br><a href="http://www.jdiff.org" class="staysblack" target="_top">JDiff</a></b></EM></TD>
+</TR>
+<TR>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell2"><FONT SIZE="-2"></FONT>
+</TD>
+ <TD BGCOLOR="#FFFFFF" CLASS="NavBarCell2"><FONT SIZE="-2">
+ <A HREF="../changes.html" TARGET="_top"><B>FRAMES</B></A>
+ <A HREF="jdiff_help.html" TARGET="_top"><B>NO FRAMES</B></A></FONT></TD>
+</TR>
+</TABLE>
+<HR>
+<!-- End of nav bar -->
+<center>
+<H1>JDiff Documentation</H1>
+</center>
+<BLOCKQUOTE>
+JDiff is a <a href="http://java.sun.com/j2se/javadoc/" target="_top">Javadoc</a> doclet which generates a report of the API differences between two versions of a product. It does not report changes in Javadoc comments, or changes in what a class or method does.
+This help page describes the different parts of the output from JDiff.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+ See the reference page in the <a href="http://www.jdiff.org">source for JDiff</a> for information about how to generate a report like this one.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+The indexes shown in the top-left frame help show each type of change in more detail. The index "All Differences" contains all the differences between the APIs, in alphabetical order.
+These indexes all use the same format:
+<ul>
+<li>Removed packages, classes, constructors, methods and fields are <strike>struck through</strike>.</li>
+<li>Added packages, classes, constructors, methods and fields appear in <b>bold</b>.</li>
+<li>Changed packages, classes, constructors, methods and fields appear in normal text.</li>
+</ul>
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+You can always tell when you are reading a JDiff page, rather than a Javadoc page, by the color of the index bar and the color of the background.
+Links which take you to a Javadoc page are always in a <code>typewriter</code> font.
+Just like Javadoc, all interface names are in <i>italic</i>, and class names are not italicized. Where there are multiple entries in an index with the same name, the heading for them is also in italics, but is not a link.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3><b><code>Javadoc</code></b></H3>
+This is a link to the <a href="../../../../reference/index.html" target="_top">top-level</a> Javadoc page for the new version of the product.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Overview</H3>
+The <a href="changes-summary.html">overview</a> is the top-level summary of what was removed, added and changed between versions.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Package</H3>
+This is a link to the package containing the current changed class or interface.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Class</H3>
+This is highlighted when you are looking at the changed class or interface.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Text Changes</H3>
+This is a link to the top-level index of all documentation changes for the current package or class.
+If it is not present, then there are no documentation changes for the current package or class.
+This link can be removed entirely by not using the <code>-docchanges</code> option.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Statistics</H3>
+This is a link to a page which shows statistics about the changes between the two APIs.
+This link can be removed entirely by not using the <code>-stats</code> option.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Help</H3>
+A link to this Help page for JDiff.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Prev/Next</H3>
+These links take you to the previous and next changed package or class.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H3>Frames/No Frames</H3>
+These links show and hide the HTML frames. All pages are available with or without frames.
+</BLOCKQUOTE>
+<BLOCKQUOTE>
+<H2>Complex Changes</H2>
+There are some complex changes which can occur between versions, for example, when two or more methods with the same name change simultaneously, or when a method or field is moved into or from a superclass.
+In these cases, the change will be seen as a removal and an addition, rather than as a change. Unexpected removals or additions are often part of one of these type of changes.
+</BLOCKQUOTE>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/jdiff_statistics.html b/docs/html/sdk/support_api_diff/24.2.0/changes/jdiff_statistics.html
new file mode 100644
index 0000000..698dbec
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/jdiff_statistics.html
@@ -0,0 +1,596 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+API Change Statistics
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<body class="gc-documentation">
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;xborder-bottom:none;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="../changes.html" target="_top">Top of Report</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<h1>API Change Statistics</h1>
+<p>The overall difference between API Levels 24.1.0 and 24.2.0 is approximately <span style="color:222;font-weight:bold;">8.39%</span>.
+</p>
+<br>
+<a name="numbers"></a>
+<h2>Total of Differences, by Number and Type</h2>
+<p>
+The table below lists the numbers of program elements (packages, classes, constructors, methods, and fields) that were added, changed, or removed. The table includes only the highest-level program elements — that is, if a class with two methods was added, the number of methods added does not include those two methods, but the number of classes added does include that class.
+</p>
+<TABLE summary="Number of differences" WIDTH="100%">
+<TR>
+ <th>Type</th>
+ <TH ALIGN="center"><b>Additions</b></TH>
+ <TH ALIGN="center"><b>Changes</b></TH>
+ <TH ALIGN="center">Removals</TH>
+ <TH ALIGN="center"><b>Total</b></TH>
+</TR>
+<TR>
+ <TD>Packages</TD>
+ <TD ALIGN="right">2</TD>
+ <TD ALIGN="right">22</TD>
+ <TD ALIGN="right">3</TD>
+ <TD ALIGN="right">27</TD>
+</TR>
+<TR>
+ <TD>Classes and <i>Interfaces</i></TD>
+ <TD ALIGN="right">64</TD>
+ <TD ALIGN="right">63</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">127</TD>
+</TR>
+<TR>
+ <TD>Constructors</TD>
+ <TD ALIGN="right">1</TD>
+ <TD ALIGN="right">2</TD>
+ <TD ALIGN="right">0</TD>
+ <TD ALIGN="right">3</TD>
+</TR>
+<TR>
+ <TD>Methods</TD>
+ <TD ALIGN="right">80</TD>
+ <TD ALIGN="right">25</TD>
+ <TD ALIGN="right">7</TD>
+ <TD ALIGN="right">112</TD>
+</TR>
+<TR>
+ <TD>Fields</TD>
+ <TD ALIGN="right">38</TD>
+ <TD ALIGN="right">3</TD>
+ <TD ALIGN="right">1</TD>
+ <TD ALIGN="right">42</TD>
+</TR>
+<TR>
+ <TD style="background-color:#FAFAFA"><b>Total</b></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>185</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>115</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>11</strong></TD>
+ <TD style="background-color:#FAFAFA" ALIGN="right"><strong>311</strong></TD>
+</TR>
+</TABLE>
+<br>
+<a name="packages"></a>
+<h2>Changed Packages, Sorted by Percentage Difference</h2>
+<TABLE summary="Packages sorted by percentage difference" WIDTH="100%">
+<TR>
+ <TH WIDTH="10%">Percentage Difference*</TH>
+ <TH>Package</TH>
+</TR>
+<TR>
+ <TD ALIGN="center">37</TD>
+ <TD><A HREF="pkg_android.support.v7.widget.html">android.support.v7.widget</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">33</TD>
+ <TD><A HREF="pkg_android.support.v7.content.res.html">android.support.v7.content.res</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">32</TD>
+ <TD><A HREF="pkg_android.support.v7.util.html">android.support.v7.util</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">19</TD>
+ <TD><A HREF="pkg_android.support.v4.view.accessibility.html">android.support.v4.view.accessibility</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">12</TD>
+ <TD><A HREF="pkg_android.support.v7.app.html">android.support.v7.app</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="pkg_android.support.v4.widget.html">android.support.v4.widget</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="pkg_android.support.v4.accessibilityservice.html">android.support.v4.accessibilityservice</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="pkg_android.support.customtabs.html">android.support.customtabs</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="pkg_android.support.v4.util.html">android.support.v4.util</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="pkg_android.support.v4.os.html">android.support.v4.os</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="pkg_android.support.v4.media.session.html">android.support.v4.media.session</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="pkg_android.support.v4.app.html">android.support.v4.app</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="pkg_android.support.design.widget.html">android.support.design.widget</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="pkg_android.support.v4.media.html">android.support.v4.media</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.support.v7.preference.html">android.support.v7.preference</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.support.v4.view.html">android.support.v4.view</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="pkg_android.support.v17.preference.html">android.support.v17.preference</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.support.v4.graphics.drawable.html">android.support.v4.graphics.drawable</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.support.v7.graphics.html">android.support.v7.graphics</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.support.v17.leanback.widget.html">android.support.v17.leanback.widget</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.support.v14.preference.html">android.support.v14.preference</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center"><1</TD>
+ <TD><A HREF="pkg_android.support.v4.content.html">android.support.v4.content</A></TD>
+</TR>
+</TABLE>
+<p style="font-size:10px">* See <a href="#calculation">Calculation of Change Percentages</a>, below.</p>
+<br>
+<a name="classes"></a>
+<h2>Changed Classes and <i>Interfaces</i>, Sorted by Percentage Difference</h2>
+<TABLE summary="Classes sorted by percentage difference" WIDTH="100%">
+<TR WIDTH="20%">
+ <TH WIDTH="10%">Percentage<br>Difference*</TH>
+ <TH><b>Class or <i>Interface</i></b></TH>
+</TR>
+<TR>
+ <TD ALIGN="center">60</TD>
+ <TD><A HREF="android.support.v4.app.ServiceCompat.html">
+android.support.v4.app.ServiceCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">38</TD>
+ <TD><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html">
+android.support.design.widget.FloatingActionButton.Behavior</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">33</TD>
+ <TD><A HREF="android.support.v4.app.ActivityOptionsCompat.html">
+android.support.v4.app.ActivityOptionsCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">33</TD>
+ <TD><A HREF="android.support.v4.os.BuildCompat.html">
+android.support.v4.os.BuildCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">33</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html">
+android.support.v4.view.accessibility.AccessibilityManagerCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">33</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html">
+android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">33</TD>
+ <TD><A HREF="android.support.v7.content.res.AppCompatResources.html">
+android.support.v7.content.res.AppCompatResources</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">28</TD>
+ <TD><A HREF="android.support.customtabs.CustomTabsSession.html">
+android.support.customtabs.CustomTabsSession</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">28</TD>
+ <TD><A HREF="android.support.v7.util.SortedList.Callback.html">
+android.support.v7.util.SortedList.Callback</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="android.support.v4.media.session.MediaButtonReceiver.html">
+android.support.v4.media.session.MediaButtonReceiver</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="android.support.v4.view.ViewConfigurationCompat.html">
+android.support.v4.view.ViewConfigurationCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">25</TD>
+ <TD><A HREF="android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat.html">
+android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">23</TD>
+ <TD><A HREF="android.support.v4.media.MediaDescriptionCompat.html">
+android.support.v4.media.MediaDescriptionCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">20</TD>
+ <TD><A HREF="android.support.v4.view.KeyEventCompat.html">
+android.support.v4.view.KeyEventCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">18</TD>
+ <TD><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html">
+android.support.v17.leanback.widget.AbstractMediaItemPresenter</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">18</TD>
+ <TD><A HREF="android.support.design.widget.TextInputLayout.html">
+android.support.design.widget.TextInputLayout</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">17</TD>
+ <TD><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html">
+android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">16</TD>
+ <TD><A HREF="android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat.html">
+android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">15</TD>
+ <TD><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html">
+android.support.v4.media.session.MediaSessionCompat.QueueItem</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">13</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html">
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">12</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html">
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html">
+android.support.v4.view.accessibility.AccessibilityEventCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">11</TD>
+ <TD><A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html">
+android.support.design.widget.AppBarLayout.ScrollingViewBehavior</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">10</TD>
+ <TD><A HREF="android.support.v17.preference.LeanbackSettingsFragment.html">
+android.support.v17.preference.LeanbackSettingsFragment</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">9</TD>
+ <TD><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html">
+android.support.design.widget.CoordinatorLayout.Behavior</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">8</TD>
+ <TD><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html">
+android.support.design.widget.CoordinatorLayout.LayoutParams</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">8</TD>
+ <TD><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html">
+android.support.v4.media.MediaBrowserCompat.MediaItem</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html">
+android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="android.support.v4.widget.TextViewCompat.html">
+android.support.v4.widget.TextViewCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">7</TD>
+ <TD><A HREF="android.support.v4.app.ActivityCompat.html">
+android.support.v4.app.ActivityCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.support.v4.app.SharedElementCallback.html">
+android.support.v4.app.SharedElementCallback</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html">
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html">
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html">
+android.support.v4.view.accessibility.AccessibilityNodeProviderCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.support.v4.widget.SearchViewCompat.html">
+android.support.v4.widget.SearchViewCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">6</TD>
+ <TD><A HREF="android.support.v7.app.ActionBarDrawerToggle.html">
+android.support.v7.app.ActionBarDrawerToggle</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">5</TD>
+ <TD><A HREF="android.support.customtabs.CustomTabsIntent.html">
+android.support.customtabs.CustomTabsIntent</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html">
+android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.support.v4.view.MotionEventCompat.html">
+android.support.v4.view.MotionEventCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.support.v7.graphics.Palette.html">
+android.support.v7.graphics.Palette</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">4</TD>
+ <TD><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html">
+android.support.v7.widget.StaggeredGridLayoutManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.support.v4.media.session.MediaSessionCompat.html">
+android.support.v4.media.session.MediaSessionCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.support.v4.content.ContextCompat.html">
+android.support.v4.content.ContextCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">3</TD>
+ <TD><A HREF="android.support.customtabs.CustomTabsIntent.Builder.html">
+android.support.customtabs.CustomTabsIntent.Builder</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.design.widget.BottomSheetBehavior.html">
+android.support.design.widget.BottomSheetBehavior</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.design.widget.CoordinatorLayout.html">
+android.support.design.widget.CoordinatorLayout</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.v4.graphics.drawable.DrawableCompat.html">
+android.support.v4.graphics.drawable.DrawableCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.v4.view.WindowInsetsCompat.html">
+android.support.v4.view.WindowInsetsCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.v14.preference.PreferenceFragment.html">
+android.support.v14.preference.PreferenceFragment</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html">
+android.support.v4.view.accessibility.AccessibilityWindowInfoCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.v4.view.ViewCompat.html">
+android.support.v4.view.ViewCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.design.widget.CollapsingToolbarLayout.html">
+android.support.design.widget.CollapsingToolbarLayout</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.v17.leanback.widget.ObjectAdapter.html">
+android.support.v17.leanback.widget.ObjectAdapter</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.v4.media.MediaMetadataCompat.html">
+android.support.v4.media.MediaMetadataCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.v7.widget.LinearSmoothScroller.html">
+android.support.v7.widget.LinearSmoothScroller</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">2</TD>
+ <TD><A HREF="android.support.v4.widget.SwipeRefreshLayout.html">
+android.support.v4.widget.SwipeRefreshLayout</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.support.v7.widget.LinearLayoutManager.html">
+android.support.v7.widget.LinearLayoutManager</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html">
+android.support.v4.view.accessibility.AccessibilityNodeInfoCompat</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.support.design.widget.TabLayout.html">
+android.support.design.widget.TabLayout</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.support.v4.app.FragmentController.html">
+android.support.v4.app.FragmentController</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.support.v7.app.AppCompatDelegate.html">
+android.support.v7.app.AppCompatDelegate</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.support.v7.widget.RecyclerView.html">
+android.support.v7.widget.RecyclerView</A></TD>
+</TR>
+<TR>
+ <TD ALIGN="center">1</TD>
+ <TD><A HREF="android.support.v4.media.session.PlaybackStateCompat.html">
+android.support.v4.media.session.PlaybackStateCompat</A></TD>
+</TR>
+</TABLE>
+<p style="font-size:10px">* See <a href="#calculation">Calculation of Change Percentages</a>, below.</p>
+<br>
+<h2 id="calculation">Calculation of Change Percentages</h2>
+<p>
+The percent change statistic reported for all elements in the "to" API Level specification is defined recursively as follows:</p>
+<pre>
+Percentage difference = 100 * (added + removed + 2*changed)
+ -----------------------------------
+ sum of public elements in BOTH APIs
+</pre>
+<p>where <code>added</code> is the number of packages added, <code>removed</code> is the number of packages removed, and <code>changed</code> is the number of packages changed.
+This definition is applied recursively for the classes and their program elements, so the value for a changed package will be less than 1, unless every class in that package has changed.
+The definition ensures that if all packages are removed and all new packages are
+added, the change will be 100%.</p>
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY></HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/jdiff_topleftframe.html b/docs/html/sdk/support_api_diff/24.2.0/changes/jdiff_topleftframe.html
new file mode 100644
index 0000000..36f9836
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/jdiff_topleftframe.html
@@ -0,0 +1,63 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Android API Version Differences
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<table class="jdiffIndex" summary="Links to diff index files" BORDER="0" WIDTH="100%" cellspacing="0" cellpadding="0" style="margin:0">
+<TR>
+ <th class="indexHeader" nowrap>
+ Select a Diffs Index:</th>
+</TR>
+<TR>
+ <TD><FONT CLASS="indexText" size="-2"><A HREF="alldiffs_index_all.html" TARGET="bottomleftframe">All Differences</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="packages_index_all.html" TARGET="bottomleftframe">By Package</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="classes_index_all.html" TARGET="bottomleftframe">By Class</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="constructors_index_all.html" TARGET="bottomleftframe">By Constructor</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="methods_index_all.html" TARGET="bottomleftframe">By Method</A></FONT><br></TD>
+</TR>
+<TR>
+ <TD NOWRAP><FONT CLASS="indexText" size="-2"><A HREF="fields_index_all.html" TARGET="bottomleftframe">By Field</A></FONT><br></TD>
+</TR>
+</TABLE>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_additions.html b/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_additions.html
new file mode 100644
index 0000000..508018e
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_additions.html
@@ -0,0 +1,448 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="methods_index_all.html" class="staysblack">All Methods</a>
+ <br>
+<A HREF="methods_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="methods_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.addTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" class="hiddenlink" target="rightframe"><b>addTouchExplorationStateChangeListener</b>
+(<code>AccessibilityManager, TouchExplorationStateChangeListener</code>)</A></nobr><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>buildMediaButtonPendingIntent</i><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaButtonReceiver.html#android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, android.content.ComponentName, long)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, ComponentName, long</code>)</b> in android.support.v4.media.session.MediaButtonReceiver
+</A></nobr><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaButtonReceiver.html#android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, long)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, long</code>)</b> in android.support.v4.media.session.MediaButtonReceiver
+</A></nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.graphics.drawable.DrawableCompat.html#android.support.v4.graphics.drawable.DrawableCompat.clearColorFilter_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>clearColorFilter</b>
+(<code>Drawable</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TabLayout.html#android.support.design.widget.TabLayout.clearOnTabSelectedListeners_added()" class="hiddenlink" target="rightframe"><b>clearOnTabSelectedListeners</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html#android.support.v7.widget.StaggeredGridLayoutManager.computeScrollVectorForPosition_added(int)" class="hiddenlink" target="rightframe"><b>computeScrollVectorForPosition</b>
+(<code>int</code>)</A></nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.FragmentController.html#android.support.v4.app.FragmentController.findFragmentByWho_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>findFragmentByWho</b>
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html#android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItem_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromMediaItem</b>
+(<code>Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html#android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItemList_added(java.util.List<?>)" class="hiddenlink" target="rightframe"><b>fromMediaItemList</b>
+(<code>List<?></code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.html#android.support.v4.media.session.MediaSessionCompat.fromMediaSession_added(android.content.Context, java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromMediaSession</b>
+(<code>Context, Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItem_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromQueueItem</b>
+(<code>Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItemList_added(java.util.List<?>)" class="hiddenlink" target="rightframe"><b>fromQueueItemList</b>
+(<code>List<?></code>)</A></nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.getAction_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>getAction</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.widget.TextViewCompat.html#android.support.v4.widget.TextViewCompat.getCompoundDrawablesRelative_added(android.widget.TextView)" class="hiddenlink" target="rightframe"><b>getCompoundDrawablesRelative</b>
+(<code>TextView</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.html#android.support.design.widget.CoordinatorLayout.getDependents_added(android.view.View)" class="hiddenlink" target="rightframe"><b>getDependents</b>
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.graphics.Palette.html#android.support.v7.graphics.Palette.getDominantColor_added(int)" class="hiddenlink" target="rightframe"><b>getDominantColor</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.graphics.Palette.html#android.support.v7.graphics.Palette.getDominantSwatch_added()" class="hiddenlink" target="rightframe"><b>getDominantSwatch</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v7.content.res.AppCompatResources.html#android.support.v7.content.res.AppCompatResources.getDrawable_added(android.content.Context, int)" class="hiddenlink" target="rightframe"><b>getDrawable</b>
+(<code>Context, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.app.ActionBarDrawerToggle.html#android.support.v7.app.ActionBarDrawerToggle.getDrawerArrowDrawable_added()" class="hiddenlink" target="rightframe"><b>getDrawerArrowDrawable</b>
+()</A></nobr><br>
+<i>getInsetDodgeRect</i><br>
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, V, Rect</code>)</b> in android.support.design.widget.CoordinatorLayout.Behavior
+</A></nobr><br>
+ <nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, FloatingActionButton, Rect</code>)</b> in android.support.design.widget.FloatingActionButton.Behavior
+</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.getLaunchBounds_added()" class="hiddenlink" target="rightframe"><b>getLaunchBounds</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemNumberViewFlipper_added()" class="hiddenlink" target="rightframe"><b>getMediaItemNumberViewFlipper</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPausedView_added()" class="hiddenlink" target="rightframe"><b>getMediaItemPausedView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPlayingView_added()" class="hiddenlink" target="rightframe"><b>getMediaItemPlayingView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.getMediaPlayState_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>getMediaPlayState</b>
+(<code>Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.getMovementGranularity_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>getMovementGranularity</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.widget.RecyclerView.html#android.support.v7.widget.RecyclerView.getOnFlingListener_added()" class="hiddenlink" target="rightframe"><b>getOnFlingListener</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleContentDescription_added()" class="hiddenlink" target="rightframe"><b>getPasswordVisibilityToggleContentDescription</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleDrawable_added()" class="hiddenlink" target="rightframe"><b>getPasswordVisibilityToggleDrawable</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.getSelectionMode_added()" class="hiddenlink" target="rightframe"><b>getSelectionMode</b>
+()</A></nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.os.BuildCompat.html#android.support.v4.os.BuildCompat.isAtLeastNMR1_added()" class="hiddenlink" target="rightframe"><b>isAtLeastNMR1</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.isAutoHideEnabled_added()" class="hiddenlink" target="rightframe"><b>isAutoHideEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.isContextClickable_added()" class="hiddenlink" target="rightframe"><b>isContextClickable</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.ObjectAdapter.html#android.support.v17.leanback.widget.ObjectAdapter.isImmediateNotifySupported_added()" class="hiddenlink" target="rightframe"><b>isImmediateNotifySupported</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.isImportantForAccessibility_added(android.view.View)" class="hiddenlink" target="rightframe"><b>isImportantForAccessibility</b>
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.isPasswordVisibilityToggleEnabled_added()" class="hiddenlink" target="rightframe"><b>isPasswordVisibilityToggleEnabled</b>
+()</A></nobr><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html#android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.loadDescription_added(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager)" class="hiddenlink" target="rightframe"><b>loadDescription</b>
+(<code>AccessibilityServiceInfo, PackageManager</code>)</A></nobr><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeBasic_added()" class="hiddenlink" target="rightframe"><b>makeBasic</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeClipRevealAnimation_added(android.view.View, int, int, int, int)" class="hiddenlink" target="rightframe"><b>makeClipRevealAnimation</b>
+(<code>View, int, int, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeTaskLaunchBehind_added()" class="hiddenlink" target="rightframe"><b>makeTaskLaunchBehind</b>
+()</A></nobr><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.notifyPlayStateChanged_added()" class="hiddenlink" target="rightframe"><b>notifyPlayStateChanged</b>
+()</A></nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>obtain</i><br>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain_added(int, int, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int, boolean</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat
+</A></nobr><br>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain_added(int, int, int, int, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int, int, int, boolean</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat
+</A></nobr><br>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.obtain_added(int, float, float, float)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, float, float, float</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat
+</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onAttachedToLayoutParams_added(android.support.design.widget.CoordinatorLayout.LayoutParams)" class="hiddenlink" target="rightframe"><b>onAttachedToLayoutParams</b>
+(<code>LayoutParams</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.onBindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" class="hiddenlink" target="rightframe"><b>onBindMediaPlayState</b>
+(<code>ViewHolder</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onChanged_added(int, int, java.lang.Object)" class="hiddenlink" target="rightframe"><b>onChanged</b>
+(<code>int, int, Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onDetachedFromLayoutParams_added()" class="hiddenlink" target="rightframe"><b>onDetachedFromLayoutParams</b>
+()</A></nobr><br>
+<i>onRequestChildRectangleOnScreen</i><br>
+ <nobr><A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html#android.support.design.widget.AppBarLayout.ScrollingViewBehavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, View, Rect, boolean</code>)</b> in android.support.design.widget.AppBarLayout.ScrollingViewBehavior
+</A></nobr><br>
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, V, Rect, boolean</code>)</b> in android.support.design.widget.CoordinatorLayout.Behavior
+</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.SharedElementCallback.html#android.support.v4.app.SharedElementCallback.onSharedElementsArrived_added(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener)" class="hiddenlink" target="rightframe"><b>onSharedElementsArrived</b>
+(<code>List<String>, List<View>, OnSharedElementsReadyListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.app.AppCompatDelegate.html#android.support.v7.app.AppCompatDelegate.onStart_added()" class="hiddenlink" target="rightframe"><b>onStart</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.onUnbindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" class="hiddenlink" target="rightframe"><b>onUnbindMediaPlayState</b>
+(<code>ViewHolder</code>)</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.removeTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" class="hiddenlink" target="rightframe"><b>removeTouchExplorationStateChangeListener</b>
+(<code>AccessibilityManager, TouchExplorationStateChangeListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.requestUsageTimeReport_added(android.app.PendingIntent)" class="hiddenlink" target="rightframe"><b>requestUsageTimeReport</b>
+(<code>PendingIntent</code>)</A></nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.setAction_added(android.view.accessibility.AccessibilityEvent, int)" class="hiddenlink" target="rightframe"><b>setAction</b>
+(<code>AccessibilityEvent, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.setAlwaysUseBrowserUI_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>setAlwaysUseBrowserUI</b>
+(<code>Intent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.setAutoHideEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoHideEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CollapsingToolbarLayout.html#android.support.design.widget.CollapsingToolbarLayout.setCollapsedTitleTextColor_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setCollapsedTitleTextColor</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.setContextClickable_added(boolean)" class="hiddenlink" target="rightframe"><b>setContextClickable</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.app.ActionBarDrawerToggle.html#android.support.v7.app.ActionBarDrawerToggle.setDrawerArrowDrawable_added(android.support.v7.graphics.drawable.DrawerArrowDrawable)" class="hiddenlink" target="rightframe"><b>setDrawerArrowDrawable</b>
+(<code>DrawerArrowDrawable</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CollapsingToolbarLayout.html#android.support.design.widget.CollapsingToolbarLayout.setExpandedTitleTextColor_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setExpandedTitleTextColor</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.Builder.html#android.support.customtabs.CustomTabsIntent.Builder.setInstantAppsEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setInstantAppsEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.setLaunchBounds_added(android.graphics.Rect)" class="hiddenlink" target="rightframe"><b>setLaunchBounds</b>
+(<code>Rect</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.setMovementGranularity_added(android.view.accessibility.AccessibilityEvent, int)" class="hiddenlink" target="rightframe"><b>setMovementGranularity</b>
+(<code>AccessibilityEvent, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.widget.SwipeRefreshLayout.html#android.support.v4.widget.SwipeRefreshLayout.setOnChildScrollUpCallback_added(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback)" class="hiddenlink" target="rightframe"><b>setOnChildScrollUpCallback</b>
+(<code>OnChildScrollUpCallback</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.widget.RecyclerView.html#android.support.v7.widget.RecyclerView.setOnFlingListener_added(android.support.v7.widget.RecyclerView.OnFlingListener)" class="hiddenlink" target="rightframe"><b>setOnFlingListener</b>
+(<code>OnFlingListener</code>)</A></nobr><br>
+<i>setPasswordVisibilityToggleContentDescription</i><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <b>
+(<code>CharSequence</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<i>setPasswordVisibilityToggleDrawable</i><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintList_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleTintList</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintMode_added(android.graphics.PorterDuff.Mode)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleTintMode</b>
+(<code>Mode</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsSession.html#android.support.customtabs.CustomTabsSession.setSecondaryToolbarViews_added(android.widget.RemoteViews, int[], android.app.PendingIntent)" class="hiddenlink" target="rightframe"><b>setSecondaryToolbarViews</b>
+(<code>RemoteViews, int[], PendingIntent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.setSelectedMediaItemNumberView_added(int)" class="hiddenlink" target="rightframe"><b>setSelectedMediaItemNumberView</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.shouldAlwaysUseBrowserUI_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>shouldAlwaysUseBrowserUI</b>
+(<code>Intent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.stopForeground_added(android.app.Service, int)" class="hiddenlink" target="rightframe"><b>stopForeground</b>
+(<code>Service, int</code>)</A></nobr><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.session.PlaybackStateCompat.html#android.support.v4.media.session.PlaybackStateCompat.toKeyCode_added(long)" class="hiddenlink" target="rightframe"><b>toKeyCode</b>
+(<code>long</code>)</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_all.html b/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_all.html
new file mode 100644
index 0000000..a52d5c9
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_all.html
@@ -0,0 +1,579 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Methods</b>
+ <br>
+<A HREF="methods_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="methods_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="methods_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.addAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe">addAccessibilityStateChangeListener
+(<code>AccessibilityManager, AccessibilityStateChangeListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.addTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" class="hiddenlink" target="rightframe"><b>addTouchExplorationStateChangeListener</b>
+(<code>AccessibilityManager, TouchExplorationStateChangeListener</code>)</A></nobr><br>
+<A NAME="B"></A>
+<br><font size="+2">B</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>buildMediaButtonPendingIntent</i><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaButtonReceiver.html#android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, android.content.ComponentName, long)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, ComponentName, long</code>)</b> in android.support.v4.media.session.MediaButtonReceiver
+</A></nobr><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaButtonReceiver.html#android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, long)" class="hiddenlink" target="rightframe">type <b>
+(<code>Context, long</code>)</b> in android.support.v4.media.session.MediaButtonReceiver
+</A></nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.graphics.drawable.DrawableCompat.html#android.support.v4.graphics.drawable.DrawableCompat.clearColorFilter_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe"><b>clearColorFilter</b>
+(<code>Drawable</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TabLayout.html#android.support.design.widget.TabLayout.clearOnTabSelectedListeners_added()" class="hiddenlink" target="rightframe"><b>clearOnTabSelectedListeners</b>
+()</A></nobr><br>
+<i>computeScrollVectorForPosition</i><br>
+ <nobr><A HREF="android.support.v7.widget.LinearSmoothScroller.html#android.support.v7.widget.LinearSmoothScroller.computeScrollVectorForPosition_changed(int)" class="hiddenlink" target="rightframe">type
+(<code>int</code>) in android.support.v7.widget.LinearSmoothScroller
+</A></nobr><br>
+ <nobr><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html#android.support.v7.widget.StaggeredGridLayoutManager.computeScrollVectorForPosition_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.v7.widget.StaggeredGridLayoutManager
+</A></nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.dispatch_changed(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object)" class="hiddenlink" target="rightframe">dispatch
+(<code>KeyEvent, Callback, Object, Object</code>)</A></nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.FragmentController.html#android.support.v4.app.FragmentController.findFragmentByWho_added(java.lang.String)" class="hiddenlink" target="rightframe"><b>findFragmentByWho</b>
+(<code>String</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.findPointerIndex_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">findPointerIndex
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html#android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItem_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromMediaItem</b>
+(<code>Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html#android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItemList_added(java.util.List<?>)" class="hiddenlink" target="rightframe"><b>fromMediaItemList</b>
+(<code>List<?></code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.html#android.support.v4.media.session.MediaSessionCompat.fromMediaSession_added(android.content.Context, java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromMediaSession</b>
+(<code>Context, Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItem_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>fromQueueItem</b>
+(<code>Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItemList_added(java.util.List<?>)" class="hiddenlink" target="rightframe"><b>fromQueueItemList</b>
+(<code>List<?></code>)</A></nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.getAction_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>getAction</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.widget.TextViewCompat.html#android.support.v4.widget.TextViewCompat.getCompoundDrawablesRelative_added(android.widget.TextView)" class="hiddenlink" target="rightframe"><b>getCompoundDrawablesRelative</b>
+(<code>TextView</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.html#android.support.design.widget.CoordinatorLayout.getDependents_added(android.view.View)" class="hiddenlink" target="rightframe"><b>getDependents</b>
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html#android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.getDescription_changed(android.accessibilityservice.AccessibilityServiceInfo)" class="hiddenlink" target="rightframe">getDescription
+(<code>AccessibilityServiceInfo</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.graphics.Palette.html#android.support.v7.graphics.Palette.getDominantColor_added(int)" class="hiddenlink" target="rightframe"><b>getDominantColor</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.graphics.Palette.html#android.support.v7.graphics.Palette.getDominantSwatch_added()" class="hiddenlink" target="rightframe"><b>getDominantSwatch</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v7.content.res.AppCompatResources.html#android.support.v7.content.res.AppCompatResources.getDrawable_added(android.content.Context, int)" class="hiddenlink" target="rightframe"><b>getDrawable</b>
+(<code>Context, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.app.ActionBarDrawerToggle.html#android.support.v7.app.ActionBarDrawerToggle.getDrawerArrowDrawable_added()" class="hiddenlink" target="rightframe"><b>getDrawerArrowDrawable</b>
+()</A></nobr><br>
+<i>getInsetDodgeRect</i><br>
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, V, Rect</code>)</b> in android.support.design.widget.CoordinatorLayout.Behavior
+</A></nobr><br>
+ <nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, FloatingActionButton, Rect</code>)</b> in android.support.design.widget.FloatingActionButton.Behavior
+</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.getKeyDispatcherState_changed(android.view.View)" class="hiddenlink" target="rightframe">getKeyDispatcherState
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.getLaunchBounds_added()" class="hiddenlink" target="rightframe"><b>getLaunchBounds</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemNumberViewFlipper_added()" class="hiddenlink" target="rightframe"><b>getMediaItemNumberViewFlipper</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPausedView_added()" class="hiddenlink" target="rightframe"><b>getMediaItemPausedView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPlayingView_added()" class="hiddenlink" target="rightframe"><b>getMediaItemPlayingView</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.getMediaPlayState_added(java.lang.Object)" class="hiddenlink" target="rightframe"><b>getMediaPlayState</b>
+(<code>Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.getMovementGranularity_added(android.view.accessibility.AccessibilityEvent)" class="hiddenlink" target="rightframe"><b>getMovementGranularity</b>
+(<code>AccessibilityEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.widget.RecyclerView.html#android.support.v7.widget.RecyclerView.getOnFlingListener_added()" class="hiddenlink" target="rightframe"><b>getOnFlingListener</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.getOverScrollMode_changed(android.view.View)" class="hiddenlink" target="rightframe">getOverScrollMode
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleContentDescription_added()" class="hiddenlink" target="rightframe"><b>getPasswordVisibilityToggleContentDescription</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleDrawable_added()" class="hiddenlink" target="rightframe"><b>getPasswordVisibilityToggleDrawable</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getPointerCount_changed(android.view.MotionEvent)" class="hiddenlink" target="rightframe">getPointerCount
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getPointerId_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getPointerId
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityCompat.html#android.support.v4.app.ActivityCompat.getReferrer_changed(android.app.Activity)" class="hiddenlink" target="rightframe">getReferrer
+(<code>Activity</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewConfigurationCompat.html#android.support.v4.view.ViewConfigurationCompat.getScaledPagingTouchSlop_changed(android.view.ViewConfiguration)" class="hiddenlink" target="rightframe">getScaledPagingTouchSlop
+(<code>ViewConfiguration</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.getSelectionMode_added()" class="hiddenlink" target="rightframe"><b>getSelectionMode</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getSource_changed(android.view.MotionEvent)" class="hiddenlink" target="rightframe">getSource
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getX_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getX
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getY_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getY
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.os.BuildCompat.html#android.support.v4.os.BuildCompat.isAtLeastNMR1_added()" class="hiddenlink" target="rightframe"><b>isAtLeastNMR1</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.isAutoHideEnabled_added()" class="hiddenlink" target="rightframe"><b>isAutoHideEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.isContextClickable_added()" class="hiddenlink" target="rightframe"><b>isContextClickable</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.isDirty_changed(android.support.design.widget.CoordinatorLayout, V)" class="hiddenlink" target="rightframe">isDirty
+(<code>CoordinatorLayout, V</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.ObjectAdapter.html#android.support.v17.leanback.widget.ObjectAdapter.isImmediateNotifySupported_added()" class="hiddenlink" target="rightframe"><b>isImmediateNotifySupported</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.isImportantForAccessibility_added(android.view.View)" class="hiddenlink" target="rightframe"><b>isImportantForAccessibility</b>
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.isOpaque_changed(android.view.View)" class="hiddenlink" target="rightframe">isOpaque
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.isPasswordVisibilityToggleEnabled_added()" class="hiddenlink" target="rightframe"><b>isPasswordVisibilityToggleEnabled</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.isTracking_changed(android.view.KeyEvent)" class="hiddenlink" target="rightframe">isTracking
+(<code>KeyEvent</code>)</A></nobr><br>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.layoutDependsOn_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)" class="hiddenlink" target="rightframe"><strike>layoutDependsOn</strike>
+(<code>CoordinatorLayout, FloatingActionButton, View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html#android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.loadDescription_added(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager)" class="hiddenlink" target="rightframe"><b>loadDescription</b>
+(<code>AccessibilityServiceInfo, PackageManager</code>)</A></nobr><br>
+<A NAME="M"></A>
+<br><font size="+2">M</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeBasic_added()" class="hiddenlink" target="rightframe"><b>makeBasic</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeClipRevealAnimation_added(android.view.View, int, int, int, int)" class="hiddenlink" target="rightframe"><b>makeClipRevealAnimation</b>
+(<code>View, int, int, int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.makeTaskLaunchBehind_added()" class="hiddenlink" target="rightframe"><b>makeTaskLaunchBehind</b>
+()</A></nobr><br>
+<A NAME="N"></A>
+<br><font size="+2">N</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.notifyPlayStateChanged_added()" class="hiddenlink" target="rightframe"><b>notifyPlayStateChanged</b>
+()</A></nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>obtain</i><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.html#android.support.v4.media.session.MediaSessionCompat.obtain_changed(android.content.Context, java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Context, Object</code>) in android.support.v4.media.session.MediaSessionCompat
+</A></nobr><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.obtain_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in android.support.v4.media.session.MediaSessionCompat.QueueItem
+</A></nobr><br>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain_added(int, int, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int, boolean</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat
+</A></nobr><br>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain_added(int, int, int, int, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, int, int, int, boolean</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat
+</A></nobr><br>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.obtain_added(int, float, float, float)" class="hiddenlink" target="rightframe">type <b>
+(<code>int, float, float, float</code>)</b> in android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat
+</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.onAccessibilityStateChanged_removed(boolean)" class="hiddenlink" target="rightframe"><strike>onAccessibilityStateChanged</strike>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onAttachedToLayoutParams_added(android.support.design.widget.CoordinatorLayout.LayoutParams)" class="hiddenlink" target="rightframe"><b>onAttachedToLayoutParams</b>
+(<code>LayoutParams</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.onBindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" class="hiddenlink" target="rightframe"><b>onBindMediaPlayState</b>
+(<code>ViewHolder</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onChanged_added(int, int, java.lang.Object)" class="hiddenlink" target="rightframe"><b>onChanged</b>
+(<code>int, int, Object</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.onDependentViewRemoved_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)" class="hiddenlink" target="rightframe"><strike>onDependentViewRemoved</strike>
+(<code>CoordinatorLayout, FloatingActionButton, View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onDetachedFromLayoutParams_added()" class="hiddenlink" target="rightframe"><b>onDetachedFromLayoutParams</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onInserted_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onInserted</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onMoved_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onMoved</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onRemoved_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onRemoved</strike>
+(<code>int, int</code>)</A></nobr><br>
+<i>onRequestChildRectangleOnScreen</i><br>
+ <nobr><A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html#android.support.design.widget.AppBarLayout.ScrollingViewBehavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, View, Rect, boolean</code>)</b> in android.support.design.widget.AppBarLayout.ScrollingViewBehavior
+</A></nobr><br>
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean)" class="hiddenlink" target="rightframe">type <b>
+(<code>CoordinatorLayout, V, Rect, boolean</code>)</b> in android.support.design.widget.CoordinatorLayout.Behavior
+</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.SharedElementCallback.html#android.support.v4.app.SharedElementCallback.onSharedElementsArrived_added(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener)" class="hiddenlink" target="rightframe"><b>onSharedElementsArrived</b>
+(<code>List<String>, List<View>, OnSharedElementsReadyListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.app.AppCompatDelegate.html#android.support.v7.app.AppCompatDelegate.onStart_added()" class="hiddenlink" target="rightframe"><b>onStart</b>
+()</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.onUnbindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)" class="hiddenlink" target="rightframe"><b>onUnbindMediaPlayState</b>
+(<code>ViewHolder</code>)</A></nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v7.widget.LinearLayoutManager.html#android.support.v7.widget.LinearLayoutManager.prepareForDrop_removed(android.view.View, android.view.View, int, int)" class="hiddenlink" target="rightframe"><strike>prepareForDrop</strike>
+(<code>View, View, int, int</code>)</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#S"><font size="-2">S</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.removeAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe">removeAccessibilityStateChangeListener
+(<code>AccessibilityManager, AccessibilityStateChangeListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.removeTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)" class="hiddenlink" target="rightframe"><b>removeTouchExplorationStateChangeListener</b>
+(<code>AccessibilityManager, TouchExplorationStateChangeListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.requestUsageTimeReport_added(android.app.PendingIntent)" class="hiddenlink" target="rightframe"><b>requestUsageTimeReport</b>
+(<code>PendingIntent</code>)</A></nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#T"><font size="-2">T</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.setAction_added(android.view.accessibility.AccessibilityEvent, int)" class="hiddenlink" target="rightframe"><b>setAction</b>
+(<code>AccessibilityEvent, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.setAlwaysUseBrowserUI_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>setAlwaysUseBrowserUI</b>
+(<code>Intent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.setAutoHideEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setAutoHideEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CollapsingToolbarLayout.html#android.support.design.widget.CollapsingToolbarLayout.setCollapsedTitleTextColor_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setCollapsedTitleTextColor</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html#android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.setContextClickable_added(boolean)" class="hiddenlink" target="rightframe"><b>setContextClickable</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.app.ActionBarDrawerToggle.html#android.support.v7.app.ActionBarDrawerToggle.setDrawerArrowDrawable_added(android.support.v7.graphics.drawable.DrawerArrowDrawable)" class="hiddenlink" target="rightframe"><b>setDrawerArrowDrawable</b>
+(<code>DrawerArrowDrawable</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.CollapsingToolbarLayout.html#android.support.design.widget.CollapsingToolbarLayout.setExpandedTitleTextColor_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setExpandedTitleTextColor</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.Builder.html#android.support.customtabs.CustomTabsIntent.Builder.setInstantAppsEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setInstantAppsEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html#android.support.v4.app.ActivityOptionsCompat.setLaunchBounds_added(android.graphics.Rect)" class="hiddenlink" target="rightframe"><b>setLaunchBounds</b>
+(<code>Rect</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html#android.support.v4.view.accessibility.AccessibilityEventCompat.setMovementGranularity_added(android.view.accessibility.AccessibilityEvent, int)" class="hiddenlink" target="rightframe"><b>setMovementGranularity</b>
+(<code>AccessibilityEvent, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.widget.SwipeRefreshLayout.html#android.support.v4.widget.SwipeRefreshLayout.setOnChildScrollUpCallback_added(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback)" class="hiddenlink" target="rightframe"><b>setOnChildScrollUpCallback</b>
+(<code>OnChildScrollUpCallback</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.widget.SearchViewCompat.html#android.support.v4.widget.SearchViewCompat.setOnCloseListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListener)" class="hiddenlink" target="rightframe">setOnCloseListener
+(<code>View, OnCloseListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.widget.RecyclerView.html#android.support.v7.widget.RecyclerView.setOnFlingListener_added(android.support.v7.widget.RecyclerView.OnFlingListener)" class="hiddenlink" target="rightframe"><b>setOnFlingListener</b>
+(<code>OnFlingListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.widget.SearchViewCompat.html#android.support.v4.widget.SearchViewCompat.setOnQueryTextListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListener)" class="hiddenlink" target="rightframe">setOnQueryTextListener
+(<code>View, OnQueryTextListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.setOverScrollMode_changed(android.view.View, int)" class="hiddenlink" target="rightframe">setOverScrollMode
+(<code>View, int</code>)</A></nobr><br>
+<i>setPasswordVisibilityToggleContentDescription</i><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(java.lang.CharSequence)" class="hiddenlink" target="rightframe">type <b>
+(<code>CharSequence</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<i>setPasswordVisibilityToggleDrawable</i><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(android.graphics.drawable.Drawable)" class="hiddenlink" target="rightframe">type <b>
+(<code>Drawable</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(int)" class="hiddenlink" target="rightframe">type <b>
+(<code>int</code>)</b> in android.support.design.widget.TextInputLayout
+</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleEnabled_added(boolean)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleEnabled</b>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintList_added(android.content.res.ColorStateList)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleTintList</b>
+(<code>ColorStateList</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.TextInputLayout.html#android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintMode_added(android.graphics.PorterDuff.Mode)" class="hiddenlink" target="rightframe"><b>setPasswordVisibilityToggleTintMode</b>
+(<code>Mode</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsSession.html#android.support.customtabs.CustomTabsSession.setSecondaryToolbarViews_added(android.widget.RemoteViews, int[], android.app.PendingIntent)" class="hiddenlink" target="rightframe"><b>setSecondaryToolbarViews</b>
+(<code>RemoteViews, int[], PendingIntent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html#android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.setSelectedMediaItemNumberView_added(int)" class="hiddenlink" target="rightframe"><b>setSelectedMediaItemNumberView</b>
+(<code>int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsSession.html#android.support.customtabs.CustomTabsSession.setToolbarItem_changed(int, android.graphics.Bitmap, java.lang.String)" class="hiddenlink" target="rightframe">setToolbarItem
+(<code>int, Bitmap, String</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsIntent.html#android.support.customtabs.CustomTabsIntent.shouldAlwaysUseBrowserUI_added(android.content.Intent)" class="hiddenlink" target="rightframe"><b>shouldAlwaysUseBrowserUI</b>
+(<code>Intent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.startTracking_changed(android.view.KeyEvent)" class="hiddenlink" target="rightframe">startTracking
+(<code>KeyEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ServiceCompat.html#android.support.v4.app.ServiceCompat.stopForeground_added(android.app.Service, int)" class="hiddenlink" target="rightframe"><b>stopForeground</b>
+(<code>Service, int</code>)</A></nobr><br>
+<A NAME="T"></A>
+<br><font size="+2">T</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#B"><font size="-2">B</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#M"><font size="-2">M</font></a>
+<a href="#N"><font size="-2">N</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.media.session.PlaybackStateCompat.html#android.support.v4.media.session.PlaybackStateCompat.toKeyCode_added(long)" class="hiddenlink" target="rightframe"><b>toKeyCode</b>
+(<code>long</code>)</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_changes.html b/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_changes.html
new file mode 100644
index 0000000..5faae42
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_changes.html
@@ -0,0 +1,222 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="methods_index_all.html" class="staysblack">All Methods</a>
+ <br>
+<A HREF="methods_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="methods_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="A"></A>
+<br><font size="+2">A</font>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.addAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe">addAccessibilityStateChangeListener
+(<code>AccessibilityManager, AccessibilityStateChangeListener</code>)</A></nobr><br>
+<A NAME="C"></A>
+<br><font size="+2">C</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v7.widget.LinearSmoothScroller.html#android.support.v7.widget.LinearSmoothScroller.computeScrollVectorForPosition_changed(int)" class="hiddenlink" target="rightframe">computeScrollVectorForPosition
+(<code>int</code>)</A></nobr><br>
+<A NAME="D"></A>
+<br><font size="+2">D</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.dispatch_changed(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object)" class="hiddenlink" target="rightframe">dispatch
+(<code>KeyEvent, Callback, Object, Object</code>)</A></nobr><br>
+<A NAME="F"></A>
+<br><font size="+2">F</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.findPointerIndex_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">findPointerIndex
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<A NAME="G"></A>
+<br><font size="+2">G</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html#android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.getDescription_changed(android.accessibilityservice.AccessibilityServiceInfo)" class="hiddenlink" target="rightframe">getDescription
+(<code>AccessibilityServiceInfo</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.getKeyDispatcherState_changed(android.view.View)" class="hiddenlink" target="rightframe">getKeyDispatcherState
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.getOverScrollMode_changed(android.view.View)" class="hiddenlink" target="rightframe">getOverScrollMode
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getPointerCount_changed(android.view.MotionEvent)" class="hiddenlink" target="rightframe">getPointerCount
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getPointerId_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getPointerId
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.app.ActivityCompat.html#android.support.v4.app.ActivityCompat.getReferrer_changed(android.app.Activity)" class="hiddenlink" target="rightframe">getReferrer
+(<code>Activity</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewConfigurationCompat.html#android.support.v4.view.ViewConfigurationCompat.getScaledPagingTouchSlop_changed(android.view.ViewConfiguration)" class="hiddenlink" target="rightframe">getScaledPagingTouchSlop
+(<code>ViewConfiguration</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getSource_changed(android.view.MotionEvent)" class="hiddenlink" target="rightframe">getSource
+(<code>MotionEvent</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getX_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getX
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.MotionEventCompat.html#android.support.v4.view.MotionEventCompat.getY_changed(android.view.MotionEvent, int)" class="hiddenlink" target="rightframe">getY
+(<code>MotionEvent, int</code>)</A></nobr><br>
+<A NAME="I"></A>
+<br><font size="+2">I</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html#android.support.design.widget.CoordinatorLayout.Behavior.isDirty_changed(android.support.design.widget.CoordinatorLayout, V)" class="hiddenlink" target="rightframe">isDirty
+(<code>CoordinatorLayout, V</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.isOpaque_changed(android.view.View)" class="hiddenlink" target="rightframe">isOpaque
+(<code>View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.isTracking_changed(android.view.KeyEvent)" class="hiddenlink" target="rightframe">isTracking
+(<code>KeyEvent</code>)</A></nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#R"><font size="-2">R</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<i>obtain</i><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.html#android.support.v4.media.session.MediaSessionCompat.obtain_changed(android.content.Context, java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Context, Object</code>) in android.support.v4.media.session.MediaSessionCompat
+</A></nobr><br>
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html#android.support.v4.media.session.MediaSessionCompat.QueueItem.obtain_changed(java.lang.Object)" class="hiddenlink" target="rightframe">type
+(<code>Object</code>) in android.support.v4.media.session.MediaSessionCompat.QueueItem
+</A></nobr><br>
+<A NAME="R"></A>
+<br><font size="+2">R</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#S"><font size="-2">S</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.removeAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)" class="hiddenlink" target="rightframe">removeAccessibilityStateChangeListener
+(<code>AccessibilityManager, AccessibilityStateChangeListener</code>)</A></nobr><br>
+<A NAME="S"></A>
+<br><font size="+2">S</font>
+<a href="#A"><font size="-2">A</font></a>
+<a href="#C"><font size="-2">C</font></a>
+<a href="#D"><font size="-2">D</font></a>
+<a href="#F"><font size="-2">F</font></a>
+<a href="#G"><font size="-2">G</font></a>
+<a href="#I"><font size="-2">I</font></a>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#R"><font size="-2">R</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.widget.SearchViewCompat.html#android.support.v4.widget.SearchViewCompat.setOnCloseListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListener)" class="hiddenlink" target="rightframe">setOnCloseListener
+(<code>View, OnCloseListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.widget.SearchViewCompat.html#android.support.v4.widget.SearchViewCompat.setOnQueryTextListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListener)" class="hiddenlink" target="rightframe">setOnQueryTextListener
+(<code>View, OnQueryTextListener</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.ViewCompat.html#android.support.v4.view.ViewCompat.setOverScrollMode_changed(android.view.View, int)" class="hiddenlink" target="rightframe">setOverScrollMode
+(<code>View, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.customtabs.CustomTabsSession.html#android.support.customtabs.CustomTabsSession.setToolbarItem_changed(int, android.graphics.Bitmap, java.lang.String)" class="hiddenlink" target="rightframe">setToolbarItem
+(<code>int, Bitmap, String</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v4.view.KeyEventCompat.html#android.support.v4.view.KeyEventCompat.startTracking_changed(android.view.KeyEvent)" class="hiddenlink" target="rightframe">startTracking
+(<code>KeyEvent</code>)</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_removals.html b/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_removals.html
new file mode 100644
index 0000000..062ac8f
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/methods_index_removals.html
@@ -0,0 +1,93 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Method Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Methods" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="methods_index_all.html" class="staysblack">All Methods</a>
+ <br>
+<b>Removals</b>
+ <br>
+<A HREF="methods_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="methods_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<A NAME="L"></A>
+<br><font size="+2">L</font>
+<a href="#O"><font size="-2">O</font></a>
+<a href="#P"><font size="-2">P</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.layoutDependsOn_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)" class="hiddenlink" target="rightframe"><strike>layoutDependsOn</strike>
+(<code>CoordinatorLayout, FloatingActionButton, View</code>)</A></nobr><br>
+<A NAME="O"></A>
+<br><font size="+2">O</font>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#P"><font size="-2">P</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html#android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.onAccessibilityStateChanged_removed(boolean)" class="hiddenlink" target="rightframe"><strike>onAccessibilityStateChanged</strike>
+(<code>boolean</code>)</A></nobr><br>
+<nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html#android.support.design.widget.FloatingActionButton.Behavior.onDependentViewRemoved_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)" class="hiddenlink" target="rightframe"><strike>onDependentViewRemoved</strike>
+(<code>CoordinatorLayout, FloatingActionButton, View</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onInserted_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onInserted</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onMoved_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onMoved</strike>
+(<code>int, int</code>)</A></nobr><br>
+<nobr><A HREF="android.support.v7.util.SortedList.Callback.html#android.support.v7.util.SortedList.Callback.onRemoved_removed(int, int)" class="hiddenlink" target="rightframe"><strike>onRemoved</strike>
+(<code>int, int</code>)</A></nobr><br>
+<A NAME="P"></A>
+<br><font size="+2">P</font>
+<a href="#L"><font size="-2">L</font></a>
+<a href="#O"><font size="-2">O</font></a>
+ <a href="#topheader"><font size="-2">TOP</font></a>
+<p><div style="line-height:1.5em;color:black">
+<nobr><A HREF="android.support.v7.widget.LinearLayoutManager.html#android.support.v7.widget.LinearLayoutManager.prepareForDrop_removed(android.view.View, android.view.View, int, int)" class="hiddenlink" target="rightframe"><strike>prepareForDrop</strike>
+(<code>View, View, int, int</code>)</A></nobr><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_additions.html b/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_additions.html
new file mode 100644
index 0000000..2eff0f7
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_additions.html
@@ -0,0 +1,66 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Additions Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="packages_index_all.html" class="staysblack">All Packages</a>
+ <br>
+<A HREF="packages_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<b>Additions</b>
+ <br>
+<A HREF="packages_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="changes-summary.html#android.support.transition" class="hiddenlink" target="rightframe"><b>android.support.transition</b></A><br>
+<A HREF="changes-summary.html#android.support.v4.text.util" class="hiddenlink" target="rightframe"><b>android.support.v4.text.util</b></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_all.html b/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_all.html
new file mode 100644
index 0000000..58e51ed
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_all.html
@@ -0,0 +1,91 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Differences Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<b>Packages</b>
+ <br>
+<A HREF="packages_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="packages_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="packages_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="pkg_android.support.customtabs.html" class="hiddenlink" target="rightframe">android.support.customtabs</A><br>
+<A HREF="pkg_android.support.design.widget.html" class="hiddenlink" target="rightframe">android.support.design.widget</A><br>
+<A HREF="changes-summary.html#android.support.transition" class="hiddenlink" target="rightframe"><b>android.support.transition</b></A><br>
+<A HREF="pkg_android.support.v14.preference.html" class="hiddenlink" target="rightframe">android.support.v14.preference</A><br>
+<A HREF="pkg_android.support.v17.leanback.widget.html" class="hiddenlink" target="rightframe">android.support.v17.leanback.widget</A><br>
+<A HREF="pkg_android.support.v17.preference.html" class="hiddenlink" target="rightframe">android.support.v17.preference</A><br>
+<A HREF="pkg_android.support.v4.accessibilityservice.html" class="hiddenlink" target="rightframe">android.support.v4.accessibilityservice</A><br>
+<A HREF="pkg_android.support.v4.app.html" class="hiddenlink" target="rightframe">android.support.v4.app</A><br>
+<A HREF="pkg_android.support.v4.content.html" class="hiddenlink" target="rightframe">android.support.v4.content</A><br>
+<A HREF="pkg_android.support.v4.graphics.drawable.html" class="hiddenlink" target="rightframe">android.support.v4.graphics.drawable</A><br>
+<A HREF="pkg_android.support.v4.media.html" class="hiddenlink" target="rightframe">android.support.v4.media</A><br>
+<A HREF="pkg_android.support.v4.media.session.html" class="hiddenlink" target="rightframe">android.support.v4.media.session</A><br>
+<A HREF="pkg_android.support.v4.os.html" class="hiddenlink" target="rightframe">android.support.v4.os</A><br>
+<A HREF="changes-summary.html#android.support.v4.text.util" class="hiddenlink" target="rightframe"><b>android.support.v4.text.util</b></A><br>
+<A HREF="pkg_android.support.v4.util.html" class="hiddenlink" target="rightframe">android.support.v4.util</A><br>
+<A HREF="pkg_android.support.v4.view.html" class="hiddenlink" target="rightframe">android.support.v4.view</A><br>
+<A HREF="pkg_android.support.v4.view.accessibility.html" class="hiddenlink" target="rightframe">android.support.v4.view.accessibility</A><br>
+<A HREF="pkg_android.support.v4.widget.html" class="hiddenlink" target="rightframe">android.support.v4.widget</A><br>
+<A HREF="pkg_android.support.v7.app.html" class="hiddenlink" target="rightframe">android.support.v7.app</A><br>
+<A HREF="changes-summary.html#android.support.v7.appcompat" class="hiddenlink" target="rightframe"><strike>android.support.v7.appcompat</strike></A><br>
+<A HREF="pkg_android.support.v7.content.res.html" class="hiddenlink" target="rightframe">android.support.v7.content.res</A><br>
+<A HREF="pkg_android.support.v7.graphics.html" class="hiddenlink" target="rightframe">android.support.v7.graphics</A><br>
+<A HREF="pkg_android.support.v7.preference.html" class="hiddenlink" target="rightframe">android.support.v7.preference</A><br>
+<A HREF="changes-summary.html#android.support.v7.recyclerview" class="hiddenlink" target="rightframe"><strike>android.support.v7.recyclerview</strike></A><br>
+<A HREF="pkg_android.support.v7.util.html" class="hiddenlink" target="rightframe">android.support.v7.util</A><br>
+<A HREF="pkg_android.support.v7.widget.html" class="hiddenlink" target="rightframe">android.support.v7.widget</A><br>
+<A HREF="changes-summary.html#android.support.v8.renderscript" class="hiddenlink" target="rightframe"><strike>android.support.v8.renderscript</strike></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_changes.html b/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_changes.html
new file mode 100644
index 0000000..1d9e428
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_changes.html
@@ -0,0 +1,86 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Changes Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="packages_index_all.html" class="staysblack">All Packages</a>
+ <br>
+<A HREF="packages_index_removals.html" xclass="hiddenlink">Removals</A>
+ <br>
+<A HREF="packages_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<b>Changes</b>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="pkg_android.support.customtabs.html" class="hiddenlink" target="rightframe">android.support.customtabs</A><br>
+<A HREF="pkg_android.support.design.widget.html" class="hiddenlink" target="rightframe">android.support.design.widget</A><br>
+<A HREF="pkg_android.support.v14.preference.html" class="hiddenlink" target="rightframe">android.support.v14.preference</A><br>
+<A HREF="pkg_android.support.v17.leanback.widget.html" class="hiddenlink" target="rightframe">android.support.v17.leanback.widget</A><br>
+<A HREF="pkg_android.support.v17.preference.html" class="hiddenlink" target="rightframe">android.support.v17.preference</A><br>
+<A HREF="pkg_android.support.v4.accessibilityservice.html" class="hiddenlink" target="rightframe">android.support.v4.accessibilityservice</A><br>
+<A HREF="pkg_android.support.v4.app.html" class="hiddenlink" target="rightframe">android.support.v4.app</A><br>
+<A HREF="pkg_android.support.v4.content.html" class="hiddenlink" target="rightframe">android.support.v4.content</A><br>
+<A HREF="pkg_android.support.v4.graphics.drawable.html" class="hiddenlink" target="rightframe">android.support.v4.graphics.drawable</A><br>
+<A HREF="pkg_android.support.v4.media.html" class="hiddenlink" target="rightframe">android.support.v4.media</A><br>
+<A HREF="pkg_android.support.v4.media.session.html" class="hiddenlink" target="rightframe">android.support.v4.media.session</A><br>
+<A HREF="pkg_android.support.v4.os.html" class="hiddenlink" target="rightframe">android.support.v4.os</A><br>
+<A HREF="pkg_android.support.v4.util.html" class="hiddenlink" target="rightframe">android.support.v4.util</A><br>
+<A HREF="pkg_android.support.v4.view.html" class="hiddenlink" target="rightframe">android.support.v4.view</A><br>
+<A HREF="pkg_android.support.v4.view.accessibility.html" class="hiddenlink" target="rightframe">android.support.v4.view.accessibility</A><br>
+<A HREF="pkg_android.support.v4.widget.html" class="hiddenlink" target="rightframe">android.support.v4.widget</A><br>
+<A HREF="pkg_android.support.v7.app.html" class="hiddenlink" target="rightframe">android.support.v7.app</A><br>
+<A HREF="pkg_android.support.v7.content.res.html" class="hiddenlink" target="rightframe">android.support.v7.content.res</A><br>
+<A HREF="pkg_android.support.v7.graphics.html" class="hiddenlink" target="rightframe">android.support.v7.graphics</A><br>
+<A HREF="pkg_android.support.v7.preference.html" class="hiddenlink" target="rightframe">android.support.v7.preference</A><br>
+<A HREF="pkg_android.support.v7.util.html" class="hiddenlink" target="rightframe">android.support.v7.util</A><br>
+<A HREF="pkg_android.support.v7.widget.html" class="hiddenlink" target="rightframe">android.support.v7.widget</A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_removals.html b/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_removals.html
new file mode 100644
index 0000000..d52d40d
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/packages_index_removals.html
@@ -0,0 +1,67 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+Package Removals Index
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY class="gc-documentation" style="padding:12px;">
+<a NAME="topheader"></a>
+<table summary="Index for Packages" width="100%" class="jdiffIndex" border="0" cellspacing="0" cellpadding="0" style="padding-bottom:0;margin-bottom:0;">
+ <tr>
+ <th class="indexHeader">
+ Filter the Index:
+ </th>
+ </tr>
+ <tr>
+ <td class="indexText" style="line-height:1.3em;padding-left:2em;">
+<a href="packages_index_all.html" class="staysblack">All Packages</a>
+ <br>
+<b>Removals</b>
+ <br>
+<A HREF="packages_index_additions.html"xclass="hiddenlink">Additions</A>
+ <br>
+<A HREF="packages_index_changes.html"xclass="hiddenlink">Changes</A>
+ </td>
+ </tr>
+</table>
+<div id="indexTableCaption" style="background-color:#eee;padding:0 4px 0 4px;font-size:11px;margin-bottom:1em;">
+Listed as: <span style="color:#069"><strong>Added</strong></span>, <span style="color:#069"><strike>Removed</strike></span>, <span style="color:#069">Changed</span></font>
+</div>
+<br>
+<div id="indexTableEntries">
+<A NAME="A"></A>
+<A HREF="changes-summary.html#android.support.v7.appcompat" class="hiddenlink" target="rightframe"><strike>android.support.v7.appcompat</strike></A><br>
+<A HREF="changes-summary.html#android.support.v7.recyclerview" class="hiddenlink" target="rightframe"><strike>android.support.v7.recyclerview</strike></A><br>
+<A HREF="changes-summary.html#android.support.v8.renderscript" class="hiddenlink" target="rightframe"><strike>android.support.v8.renderscript</strike></A><br>
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.customtabs.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.customtabs.html
new file mode 100644
index 0000000..5959d63
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.customtabs.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.customtabs
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/customtabs/package-summary.html" target="_top"><font size="+1"><code>android.support.customtabs</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CustomTabsIntent"></A>
+ <nobr><A HREF="android.support.customtabs.CustomTabsIntent.html">CustomTabsIntent</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CustomTabsIntent.Builder"></A>
+ <nobr><A HREF="android.support.customtabs.CustomTabsIntent.Builder.html">CustomTabsIntent.Builder</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CustomTabsSession"></A>
+ <nobr><A HREF="android.support.customtabs.CustomTabsSession.html">CustomTabsSession</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.design.widget.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.design.widget.html
new file mode 100644
index 0000000..510b9bd
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.design.widget.html
@@ -0,0 +1,175 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.design.widget
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/design/widget/package-summary.html" target="_top"><font size="+1"><code>android.support.design.widget</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppBarLayout.ScrollingViewBehavior"></A>
+ <nobr><A HREF="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.html">AppBarLayout.ScrollingViewBehavior</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BottomSheetBehavior"></A>
+ <nobr><A HREF="android.support.design.widget.BottomSheetBehavior.html">BottomSheetBehavior</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CollapsingToolbarLayout"></A>
+ <nobr><A HREF="android.support.design.widget.CollapsingToolbarLayout.html">CollapsingToolbarLayout</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CoordinatorLayout"></A>
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.html">CoordinatorLayout</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CoordinatorLayout.Behavior"></A>
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.Behavior.html">CoordinatorLayout.Behavior</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CoordinatorLayout.LayoutParams"></A>
+ <nobr><A HREF="android.support.design.widget.CoordinatorLayout.LayoutParams.html">CoordinatorLayout.LayoutParams</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="FloatingActionButton.Behavior"></A>
+ <nobr><A HREF="android.support.design.widget.FloatingActionButton.Behavior.html">FloatingActionButton.Behavior</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TabLayout"></A>
+ <nobr><A HREF="android.support.design.widget.TabLayout.html">TabLayout</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TextInputLayout"></A>
+ <nobr><A HREF="android.support.design.widget.TextInputLayout.html">TextInputLayout</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v14.preference.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v14.preference.html
new file mode 100644
index 0000000..84efadc6
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v14.preference.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v14.preference
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v14/preference/package-summary.html" target="_top"><font size="+1"><code>android.support.v14.preference</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PreferenceFragment"></A>
+ <nobr><A HREF="android.support.v14.preference.PreferenceFragment.html">PreferenceFragment</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v17.leanback.widget.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v17.leanback.widget.html
new file mode 100644
index 0000000..4ce1f32
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v17.leanback.widget.html
@@ -0,0 +1,133 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v17.leanback.widget
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v17/leanback/widget/package-summary.html" target="_top"><font size="+1"><code>android.support.v17.leanback.widget</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AbstractMediaItemPresenter"></A>
+ <nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.html">AbstractMediaItemPresenter</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AbstractMediaItemPresenter.ViewHolder"></A>
+ <nobr><A HREF="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.html">AbstractMediaItemPresenter.<br>ViewHolder</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ObjectAdapter"></A>
+ <nobr><A HREF="android.support.v17.leanback.widget.ObjectAdapter.html">ObjectAdapter</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v17.preference.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v17.preference.html
new file mode 100644
index 0000000..ad0aadd
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v17.preference.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v17.preference
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v17/preference/package-summary.html" target="_top"><font size="+1"><code>android.support.v17.preference</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="LeanbackSettingsFragment"></A>
+ <nobr><A HREF="android.support.v17.preference.LeanbackSettingsFragment.html">LeanbackSettingsFragment</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.accessibilityservice.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.accessibilityservice.html
new file mode 100644
index 0000000..e904a76
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.accessibilityservice.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.accessibilityservice
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/accessibilityservice/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.accessibilityservice</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityServiceInfoCompat"></A>
+ <nobr><A HREF="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.html">AccessibilityServiceInfoCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.app.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.app.html
new file mode 100644
index 0000000..f8e4cb1
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.app.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.app
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/app/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.app</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SharedElementCallback.OnSharedElementsReadyListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/app/SharedElementCallback.OnSharedElementsReadyListener.html" target="_top"><code><I>SharedElementCallback.<br>OnSharedElementsReadyListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActivityCompat"></A>
+ <nobr><A HREF="android.support.v4.app.ActivityCompat.html">ActivityCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActivityOptionsCompat"></A>
+ <nobr><A HREF="android.support.v4.app.ActivityOptionsCompat.html">ActivityOptionsCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="FragmentController"></A>
+ <nobr><A HREF="android.support.v4.app.FragmentController.html">FragmentController</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ServiceCompat"></A>
+ <nobr><A HREF="android.support.v4.app.ServiceCompat.html">ServiceCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SharedElementCallback"></A>
+ <nobr><A HREF="android.support.v4.app.SharedElementCallback.html">SharedElementCallback</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.content.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.content.html
new file mode 100644
index 0000000..31aa1da
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.content.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.content
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/content/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.content</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ContextCompat"></A>
+ <nobr><A HREF="android.support.v4.content.ContextCompat.html">ContextCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.graphics.drawable.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.graphics.drawable.html
new file mode 100644
index 0000000..b1efab3
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.graphics.drawable.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.graphics.drawable
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/graphics/drawable/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.graphics.drawable</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="DrawableCompat"></A>
+ <nobr><A HREF="android.support.v4.graphics.drawable.DrawableCompat.html">DrawableCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.media.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.media.html
new file mode 100644
index 0000000..612a1a0
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.media.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/media/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.media</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaBrowserCompat.MediaItem"></A>
+ <nobr><A HREF="android.support.v4.media.MediaBrowserCompat.MediaItem.html">MediaBrowserCompat.MediaItem</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaBrowserServiceCompat.BrowserRoot"></A>
+ <nobr><A HREF="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.html">MediaBrowserServiceCompat.<br>BrowserRoot</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaDescriptionCompat"></A>
+ <nobr><A HREF="android.support.v4.media.MediaDescriptionCompat.html">MediaDescriptionCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaMetadataCompat"></A>
+ <nobr><A HREF="android.support.v4.media.MediaMetadataCompat.html">MediaMetadataCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.media.session.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.media.session.html
new file mode 100644
index 0000000..3e46335
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.media.session.html
@@ -0,0 +1,140 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.media.session
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/media/session/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.media.session</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaButtonReceiver"></A>
+ <nobr><A HREF="android.support.v4.media.session.MediaButtonReceiver.html">MediaButtonReceiver</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaSessionCompat"></A>
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.html">MediaSessionCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MediaSessionCompat.QueueItem"></A>
+ <nobr><A HREF="android.support.v4.media.session.MediaSessionCompat.QueueItem.html">MediaSessionCompat.QueueItem</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PlaybackStateCompat"></A>
+ <nobr><A HREF="android.support.v4.media.session.PlaybackStateCompat.html">PlaybackStateCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.os.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.os.html
new file mode 100644
index 0000000..b250855
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.os.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.os
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/os/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.os</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BuildCompat"></A>
+ <nobr><A HREF="android.support.v4.os.BuildCompat.html">BuildCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.util.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.util.html
new file mode 100644
index 0000000..d34506e
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.util.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.util
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/util/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.util</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PatternsCompat"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/util/PatternsCompat.html" target="_top"><code>PatternsCompat</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.view.accessibility.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.view.accessibility.html
new file mode 100644
index 0000000..a6362fb
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.view.accessibility.html
@@ -0,0 +1,204 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view.accessibility
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/view/accessibility/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.view.accessibility</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityManagerCompat.AccessibilityStateChangeListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.AccessibilityStateChangeListener.html" target="_top"><code><I>AccessibilityManagerCompat.<br>AccessibilityStateChangeListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityManagerCompat.TouchExplorationStateChangeListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.TouchExplorationStateChangeListener.html" target="_top"><code><I>AccessibilityManagerCompat.<br>TouchExplorationStateChangeListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityEventCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityEventCompat.html">AccessibilityEventCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityManagerCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.html">AccessibilityManagerCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.html">AccessibilityManagerCompat.<br>AccessibilityStateChangeListenerCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityNodeInfoCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.html">AccessibilityNodeInfoCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityNodeInfoCompat.AccessibilityActionCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.html">AccessibilityNodeInfoCompat.<br>AccessibilityActionCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityNodeInfoCompat.CollectionInfoCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.html">AccessibilityNodeInfoCompat.<br>CollectionInfoCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityNodeInfoCompat.CollectionItemInfoCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.html">AccessibilityNodeInfoCompat.<br>CollectionItemInfoCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityNodeInfoCompat.RangeInfoCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.html">AccessibilityNodeInfoCompat.<br>RangeInfoCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityNodeProviderCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.html">AccessibilityNodeProviderCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AccessibilityWindowInfoCompat"></A>
+ <nobr><A HREF="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.html">AccessibilityWindowInfoCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.view.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.view.html
new file mode 100644
index 0000000..10b1334
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.view.html
@@ -0,0 +1,147 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.view
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/view/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.view</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="KeyEventCompat"></A>
+ <nobr><A HREF="android.support.v4.view.KeyEventCompat.html">KeyEventCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MotionEventCompat"></A>
+ <nobr><A HREF="android.support.v4.view.MotionEventCompat.html">MotionEventCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ViewCompat"></A>
+ <nobr><A HREF="android.support.v4.view.ViewCompat.html">ViewCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ViewConfigurationCompat"></A>
+ <nobr><A HREF="android.support.v4.view.ViewConfigurationCompat.html">ViewConfigurationCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="WindowInsetsCompat"></A>
+ <nobr><A HREF="android.support.v4.view.WindowInsetsCompat.html">WindowInsetsCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.widget.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.widget.html
new file mode 100644
index 0000000..5ed0f65
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v4.widget.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v4.widget
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v4/widget/package-summary.html" target="_top"><font size="+1"><code>android.support.v4.widget</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchViewCompat.OnCloseListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/widget/SearchViewCompat.OnCloseListener.html" target="_top"><code><I>SearchViewCompat.OnCloseListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchViewCompat.OnQueryTextListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/widget/SearchViewCompat.OnQueryTextListener.html" target="_top"><code><I>SearchViewCompat.OnQueryTextListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SwipeRefreshLayout.OnChildScrollUpCallback"></A>
+ <nobr><A HREF="../../../../reference/android/support/v4/widget/SwipeRefreshLayout.OnChildScrollUpCallback.html" target="_top"><code><I>SwipeRefreshLayout.OnChildScrollUpCallback</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchViewCompat"></A>
+ <nobr><A HREF="android.support.v4.widget.SearchViewCompat.html">SearchViewCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchViewCompat.OnCloseListenerCompat"></A>
+ <nobr><A HREF="android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat.html">SearchViewCompat.OnCloseListenerCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchViewCompat.OnQueryTextListenerCompat"></A>
+ <nobr><A HREF="android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat.html">SearchViewCompat.OnQueryTextListenerCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SwipeRefreshLayout"></A>
+ <nobr><A HREF="android.support.v4.widget.SwipeRefreshLayout.html">SwipeRefreshLayout</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="TextViewCompat"></A>
+ <nobr><A HREF="android.support.v4.widget.TextViewCompat.html">TextViewCompat</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.app.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.app.html
new file mode 100644
index 0000000..8eb58aa
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.app.html
@@ -0,0 +1,176 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.app
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v7/app/package-summary.html" target="_top"><font size="+1"><code>android.support.v7.app</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActionBarActivity"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/app/ActionBarActivity.html" target="_top"><code>ActionBarActivity</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatActivity"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/app/AppCompatActivity.html" target="_top"><code>AppCompatActivity</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatDialogFragment"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/app/AppCompatDialogFragment.html" target="_top"><code>AppCompatDialogFragment</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NotificationCompat"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/app/NotificationCompat.html" target="_top"><code>NotificationCompat</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NotificationCompat.Builder"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/app/NotificationCompat.Builder.html" target="_top"><code>NotificationCompat.Builder</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="NotificationCompat.MediaStyle"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/app/NotificationCompat.MediaStyle.html" target="_top"><code>NotificationCompat.MediaStyle</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActionBarDrawerToggle"></A>
+ <nobr><A HREF="android.support.v7.app.ActionBarDrawerToggle.html">ActionBarDrawerToggle</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatDelegate"></A>
+ <nobr><A HREF="android.support.v7.app.AppCompatDelegate.html">AppCompatDelegate</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.content.res.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.content.res.html
new file mode 100644
index 0000000..90787f7
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.content.res.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.content.res
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v7/content/res/package-summary.html" target="_top"><font size="+1"><code>android.support.v7.content.res</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatResources"></A>
+ <nobr><A HREF="android.support.v7.content.res.AppCompatResources.html">AppCompatResources</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.graphics.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.graphics.html
new file mode 100644
index 0000000..bd9cf24
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.graphics.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.graphics
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v7/graphics/package-summary.html" target="_top"><font size="+1"><code>android.support.v7.graphics</code></font></A>
+</H2>
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Palette"></A>
+ <nobr><A HREF="android.support.v7.graphics.Palette.html">Palette</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.preference.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.preference.html
new file mode 100644
index 0000000..b80e005
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.preference.html
@@ -0,0 +1,119 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.preference
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v7/preference/package-summary.html" target="_top"><font size="+1"><code>android.support.v7.preference</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="MultiSelectListPreferenceDialogFragmentCompat"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/preference/MultiSelectListPreferenceDialogFragmentCompat.html" target="_top"><code>MultiSelectListPreferenceDialogFragmentCompat</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.util.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.util.html
new file mode 100644
index 0000000..365022f
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.util.html
@@ -0,0 +1,162 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.util
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v7/util/package-summary.html" target="_top"><font size="+1"><code>android.support.v7.util</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="BatchingListUpdateCallback"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/util/BatchingListUpdateCallback.html" target="_top"><code>BatchingListUpdateCallback</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="DiffUtil"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/util/DiffUtil.html" target="_top"><code>DiffUtil</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="DiffUtil.Callback"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/util/DiffUtil.Callback.html" target="_top"><code>DiffUtil.Callback</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="DiffUtil.DiffResult"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/util/DiffUtil.DiffResult.html" target="_top"><code>DiffUtil.DiffResult</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ListUpdateCallback"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/util/ListUpdateCallback.html" target="_top"><code><I>ListUpdateCallback</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SortedList.Callback"></A>
+ <nobr><A HREF="android.support.v7.util.SortedList.Callback.html">SortedList.Callback</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.widget.html b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.widget.html
new file mode 100644
index 0000000..e07d5b8
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/changes/pkg_android.support.v7.widget.html
@@ -0,0 +1,463 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
+<HTML style="overflow:auto;">
+<HEAD>
+<meta name="generator" content="JDiff v1.1.0">
+<!-- Generated by the JDiff Javadoc doclet -->
+<!-- (http://www.jdiff.org) -->
+<meta name="description" content="JDiff is a Javadoc doclet which generates an HTML report of all the packages, classes, constructors, methods, and fields which have been removed, added or changed in any way, including their documentation, when two APIs are compared.">
+<meta name="keywords" content="diff, jdiff, javadiff, java diff, java difference, API difference, difference between two APIs, API diff, Javadoc, doclet">
+<TITLE>
+android.support.v7.widget
+</TITLE>
+<link href="../../../../assets/android-developer-docs.css" rel="stylesheet" type="text/css" />
+<link href="../stylesheet-jdiff.css" rel="stylesheet" type="text/css" />
+<noscript>
+<style type="text/css">
+body{overflow:auto;}
+#body-content{position:relative; top:0;}
+#doc-content{overflow:visible;border-left:3px solid #666;}
+#side-nav{padding:0;}
+#side-nav .toggle-list ul {display:block;}
+#resize-packages-nav{border-bottom:3px solid #666;}
+</style>
+</noscript>
+<style type="text/css">
+</style>
+</HEAD>
+<BODY>
+<!-- Start of nav bar -->
+<a name="top"></a>
+<div id="header" style="margin-bottom:0;padding-bottom:0;">
+<div id="headerLeft">
+<a href="../../../../index.html" tabindex="-1" target="_top"><img src="../../../../assets/images/bg_logo.png" alt="Android Developers" /></a>
+</div>
+ <div id="headerRight">
+ <div id="headerLinks">
+<!-- <img src="/assets/images/icon_world.jpg" alt="" /> -->
+<span class="text">
+<!-- <a href="#">English</a> | -->
+<nobr><a href="http://developer.android.com" target="_top">Android Developers</a> | <a href="http://www.android.com" target="_top">Android.com</a></nobr>
+</span>
+</div>
+ <div class="and-diff-id" style="margin-top:6px;margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td colspan="2" class="diffspechead">API Diff Specification</td>
+ </tr>
+ <tr>
+ <td class="diffspec" style="padding-top:.25em">To Level:</td>
+ <td class="diffvaluenew" style="padding-top:.25em">24.2.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">From Level:</td>
+ <td class="diffvalueold">24.1.0</td>
+ </tr>
+ <tr>
+ <td class="diffspec">Generated</td>
+ <td class="diffvalue">2016.08.16 14:03</td>
+ </tr>
+ </table>
+ </div><!-- End and-diff-id -->
+ <div class="and-diff-id" style="margin-right:8px;">
+ <table class="diffspectable">
+ <tr>
+ <td class="diffspec" colspan="2"><a href="jdiff_statistics.html">Statistics</a>
+ </tr>
+ </table>
+ </div> <!-- End and-diff-id -->
+ </div> <!-- End headerRight -->
+ </div> <!-- End header -->
+<div id="body-content" xstyle="padding:12px;padding-right:18px;">
+<div id="doc-content" style="position:relative;">
+<div id="mainBodyFluid">
+<H2>
+Package <A HREF="../../../../reference/android/support/v7/widget/package-summary.html" target="_top"><font size="+1"><code>android.support.v7.widget</code></font></A>
+</H2>
+<p>
+<a NAME="Added"></a>
+<TABLE summary="Added Classes and Interfaces" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Added Classes and Interfaces</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActionMenuView"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/ActionMenuView.html" target="_top"><code>ActionMenuView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActionMenuView.LayoutParams"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/ActionMenuView.LayoutParams.html" target="_top"><code>ActionMenuView.LayoutParams</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ActionMenuView.OnMenuItemClickListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/ActionMenuView.OnMenuItemClickListener.html" target="_top"><code><I>ActionMenuView.OnMenuItemClickListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatAutoCompleteTextView"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatAutoCompleteTextView.html" target="_top"><code>AppCompatAutoCompleteTextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatButton"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatButton.html" target="_top"><code>AppCompatButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatCheckBox"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatCheckBox.html" target="_top"><code>AppCompatCheckBox</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatCheckedTextView"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatCheckedTextView.html" target="_top"><code>AppCompatCheckedTextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatEditText"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatEditText.html" target="_top"><code>AppCompatEditText</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatImageButton"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatImageButton.html" target="_top"><code>AppCompatImageButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatImageView"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatImageView.html" target="_top"><code>AppCompatImageView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatMultiAutoCompleteTextView"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatMultiAutoCompleteTextView.html" target="_top"><code>AppCompatMultiAutoCompleteTextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatRadioButton"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatRadioButton.html" target="_top"><code>AppCompatRadioButton</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatRatingBar"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatRatingBar.html" target="_top"><code>AppCompatRatingBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatSeekBar"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatSeekBar.html" target="_top"><code>AppCompatSeekBar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatSpinner"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatSpinner.html" target="_top"><code>AppCompatSpinner</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="AppCompatTextView"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/AppCompatTextView.html" target="_top"><code>AppCompatTextView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="CardView"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/CardView.html" target="_top"><code>CardView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GridLayout"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/GridLayout.html" target="_top"><code>GridLayout</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GridLayout.Alignment"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/GridLayout.Alignment.html" target="_top"><code>GridLayout.Alignment</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GridLayout.LayoutParams"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/GridLayout.LayoutParams.html" target="_top"><code>GridLayout.LayoutParams</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="GridLayout.Spec"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/GridLayout.Spec.html" target="_top"><code>GridLayout.Spec</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="LinearLayoutCompat"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/LinearLayoutCompat.html" target="_top"><code>LinearLayoutCompat</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="LinearLayoutCompat.LayoutParams"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/LinearLayoutCompat.LayoutParams.html" target="_top"><code>LinearLayoutCompat.LayoutParams</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="LinearSnapHelper"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/LinearSnapHelper.html" target="_top"><code>LinearSnapHelper</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ListPopupWindow"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/ListPopupWindow.html" target="_top"><code>ListPopupWindow</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PopupMenu"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/PopupMenu.html" target="_top"><code>PopupMenu</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PopupMenu.OnDismissListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/PopupMenu.OnDismissListener.html" target="_top"><code><I>PopupMenu.OnDismissListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="PopupMenu.OnMenuItemClickListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/PopupMenu.OnMenuItemClickListener.html" target="_top"><code><I>PopupMenu.OnMenuItemClickListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RecyclerView.OnFlingListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/RecyclerView.OnFlingListener.html" target="_top"><code>RecyclerView.OnFlingListener</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RecyclerView.SmoothScroller.ScrollVectorProvider"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/RecyclerView.SmoothScroller.ScrollVectorProvider.html" target="_top"><code><I>RecyclerView.SmoothScroller.<br>ScrollVectorProvider</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchView"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/SearchView.html" target="_top"><code>SearchView</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchView.OnCloseListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/SearchView.OnCloseListener.html" target="_top"><code><I>SearchView.OnCloseListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchView.OnQueryTextListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/SearchView.OnQueryTextListener.html" target="_top"><code><I>SearchView.OnQueryTextListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SearchView.OnSuggestionListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/SearchView.OnSuggestionListener.html" target="_top"><code><I>SearchView.OnSuggestionListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ShareActionProvider"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/ShareActionProvider.html" target="_top"><code>ShareActionProvider</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ShareActionProvider.OnShareTargetSelectedListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/ShareActionProvider.OnShareTargetSelectedListener.html" target="_top"><code><I>ShareActionProvider.OnShareTargetSelectedListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SnapHelper"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/SnapHelper.html" target="_top"><code>SnapHelper</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Space"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/Space.html" target="_top"><code>Space</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="SwitchCompat"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/SwitchCompat.html" target="_top"><code>SwitchCompat</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ThemedSpinnerAdapter"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/ThemedSpinnerAdapter.html" target="_top"><code><I>ThemedSpinnerAdapter</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="ThemedSpinnerAdapter.Helper"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/ThemedSpinnerAdapter.Helper.html" target="_top"><code>ThemedSpinnerAdapter.Helper</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Toolbar"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/Toolbar.html" target="_top"><code>Toolbar</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Toolbar.LayoutParams"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/Toolbar.LayoutParams.html" target="_top"><code>Toolbar.LayoutParams</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Toolbar.OnMenuItemClickListener"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/Toolbar.OnMenuItemClickListener.html" target="_top"><code><I>Toolbar.OnMenuItemClickListener</I></code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="Toolbar.SavedState"></A>
+ <nobr><A HREF="../../../../reference/android/support/v7/widget/Toolbar.SavedState.html" target="_top"><code>Toolbar.SavedState</code></A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+<p>
+<a NAME="Changed"></a>
+<TABLE summary="Changed Classes" WIDTH="100%">
+<TR>
+ <TH VALIGN="TOP" COLSPAN=2>Changed Classes</FONT></TD>
+</TH>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="LinearLayoutManager"></A>
+ <nobr><A HREF="android.support.v7.widget.LinearLayoutManager.html">LinearLayoutManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="LinearSmoothScroller"></A>
+ <nobr><A HREF="android.support.v7.widget.LinearSmoothScroller.html">LinearSmoothScroller</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="RecyclerView"></A>
+ <nobr><A HREF="android.support.v7.widget.RecyclerView.html">RecyclerView</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+<TR BGCOLOR="#FFFFFF" CLASS="TableRowColor">
+ <TD VALIGN="TOP" WIDTH="25%">
+ <A NAME="StaggeredGridLayoutManager"></A>
+ <nobr><A HREF="android.support.v7.widget.StaggeredGridLayoutManager.html">StaggeredGridLayoutManager</A></nobr>
+ </TD>
+ <TD> </TD>
+</TR>
+</TABLE>
+
+ </div>
+ <div id="footer">
+ <div id="copyright">
+ Except as noted, this content is licensed under
+ <a href="http://creativecommons.org/licenses/by/2.5/"> Creative Commons Attribution 2.5</a>.
+ For details and restrictions, see the <a href="/license.html">Content License</a>.
+ </div>
+ <div id="footerlinks">
+ <p>
+ <a href="http://www.android.com/terms.html">Site Terms of Service</a> -
+ <a href="http://www.android.com/privacy.html">Privacy Policy</a> -
+ <a href="http://www.android.com/branding.html">Brand Guidelines</a>
+ </p>
+ </div>
+ </div> <!-- end footer -->
+ </div><!-- end doc-content -->
+ </div> <!-- end body-content -->
+<script src="http://www.google-analytics.com/ga.js" type="text/javascript">
+</script>
+<script type="text/javascript">
+ try {
+ var pageTracker = _gat._getTracker("UA-5831155-1");
+ pageTracker._setAllowAnchor(true);
+ pageTracker._initData();
+ pageTracker._trackPageview();
+ } catch(e) {}
+</script>
+</BODY>
+</HTML>
diff --git a/docs/html/sdk/support_api_diff/24.2.0/missingSinces.txt b/docs/html/sdk/support_api_diff/24.2.0/missingSinces.txt
new file mode 100644
index 0000000..9514985
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/missingSinces.txt
@@ -0,0 +1,183 @@
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener Interface
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener Interface
+NO DOC BLOCK: android.support.v7.app.ActionBarActivity Class
+NO DOC BLOCK: android.support.v7.widget.ActionMenuView Class
+NO DOC BLOCK: android.support.v7.widget.ActionMenuView.LayoutParams Class
+NO DOC BLOCK: android.support.v7.widget.ActionMenuView.OnMenuItemClickListener Interface
+NO DOC BLOCK: android.support.v7.app.AppCompatActivity Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatAutoCompleteTextView Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatButton Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatCheckBox Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatCheckedTextView Class
+NO DOC BLOCK: android.support.v7.app.AppCompatDialogFragment Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatEditText Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatImageButton Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatImageView Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatMultiAutoCompleteTextView Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatRadioButton Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatRatingBar Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatSeekBar Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatSpinner Class
+NO DOC BLOCK: android.support.v7.widget.AppCompatTextView Class
+NO DOC BLOCK: android.support.v7.util.BatchingListUpdateCallback Class
+NO DOC BLOCK: android.support.v7.widget.CardView Class
+NO DOC BLOCK: android.support.v7.util.DiffUtil Class
+NO DOC BLOCK: android.support.v7.util.DiffUtil.Callback Class
+NO DOC BLOCK: android.support.v7.util.DiffUtil.DiffResult Class
+NO DOC BLOCK: android.support.v7.widget.GridLayout Class
+NO DOC BLOCK: android.support.v7.widget.GridLayout.Alignment Class
+NO DOC BLOCK: android.support.v7.widget.GridLayout.LayoutParams Class
+NO DOC BLOCK: android.support.v7.widget.GridLayout.Spec Class
+NO DOC BLOCK: android.support.v7.widget.LinearLayoutCompat Class
+NO DOC BLOCK: android.support.v7.widget.LinearLayoutCompat.LayoutParams Class
+NO DOC BLOCK: android.support.v7.widget.LinearSnapHelper Class
+NO DOC BLOCK: android.support.v7.widget.ListPopupWindow Class
+NO DOC BLOCK: android.support.v7.util.ListUpdateCallback Interface
+NO DOC BLOCK: android.support.v7.preference.MultiSelectListPreferenceDialogFragmentCompat Class
+NO DOC BLOCK: android.support.v7.app.NotificationCompat Class
+NO DOC BLOCK: android.support.v7.app.NotificationCompat.Builder Class
+NO DOC BLOCK: android.support.v7.app.NotificationCompat.MediaStyle Class
+NO DOC BLOCK: android.support.v4.util.PatternsCompat Class
+NO DOC BLOCK: android.support.v7.widget.PopupMenu Class
+NO DOC BLOCK: android.support.v7.widget.PopupMenu.OnDismissListener Interface
+NO DOC BLOCK: android.support.v7.widget.PopupMenu.OnMenuItemClickListener Interface
+NO DOC BLOCK: android.support.v7.widget.RecyclerView.OnFlingListener Class
+NO DOC BLOCK: android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider Interface
+NO DOC BLOCK: android.support.v7.widget.SearchView Class
+NO DOC BLOCK: android.support.v7.widget.SearchView.OnCloseListener Interface
+NO DOC BLOCK: android.support.v7.widget.SearchView.OnQueryTextListener Interface
+NO DOC BLOCK: android.support.v7.widget.SearchView.OnSuggestionListener Interface
+NO DOC BLOCK: android.support.v4.widget.SearchViewCompat.OnCloseListener Interface
+NO DOC BLOCK: android.support.v4.widget.SearchViewCompat.OnQueryTextListener Interface
+NO DOC BLOCK: android.support.v7.widget.ShareActionProvider Class
+NO DOC BLOCK: android.support.v7.widget.ShareActionProvider.OnShareTargetSelectedListener Interface
+NO DOC BLOCK: android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener Interface
+NO DOC BLOCK: android.support.v7.widget.SnapHelper Class
+NO DOC BLOCK: android.support.v7.widget.Space Class
+NO DOC BLOCK: android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback Interface
+NO DOC BLOCK: android.support.v7.widget.SwitchCompat Class
+NO DOC BLOCK: android.support.v7.widget.ThemedSpinnerAdapter Interface
+NO DOC BLOCK: android.support.v7.widget.ThemedSpinnerAdapter.Helper Class
+NO DOC BLOCK: android.support.v7.widget.Toolbar Class
+NO DOC BLOCK: android.support.v7.widget.Toolbar.LayoutParams Class
+NO DOC BLOCK: android.support.v7.widget.Toolbar.OnMenuItemClickListener Interface
+NO DOC BLOCK: android.support.v7.widget.Toolbar.SavedState Class
+NO DOC BLOCK: android.support.v4.view.WindowInsetsCompat Constructor (android.support.v4.view.WindowInsetsCompat)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityManagerCompat Method addTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)
+NO DOC BLOCK: android.support.v4.media.session.MediaButtonReceiver Method buildMediaButtonPendingIntent(android.content.Context, android.content.ComponentName, long)
+NO DOC BLOCK: android.support.v4.media.session.MediaButtonReceiver Method buildMediaButtonPendingIntent(android.content.Context, long)
+NO DOC BLOCK: android.support.v4.graphics.drawable.DrawableCompat Method clearColorFilter(android.graphics.drawable.Drawable)
+NO DOC BLOCK: android.support.design.widget.TabLayout Method clearOnTabSelectedListeners()
+NO DOC BLOCK: android.support.v7.widget.StaggeredGridLayoutManager Method computeScrollVectorForPosition(int)
+NO DOC BLOCK: android.support.v4.app.FragmentController Method findFragmentByWho(java.lang.String)
+NO DOC BLOCK: android.support.v4.media.MediaBrowserCompat.MediaItem Method fromMediaItem(java.lang.Object)
+NO DOC BLOCK: android.support.v4.media.MediaBrowserCompat.MediaItem Method fromMediaItemList(java.util.List<?>)
+NO DOC BLOCK: android.support.v4.media.session.MediaSessionCompat Method fromMediaSession(android.content.Context, java.lang.Object)
+NO DOC BLOCK: android.support.v4.media.session.MediaSessionCompat.QueueItem Method fromQueueItem(java.lang.Object)
+NO DOC BLOCK: android.support.v4.media.session.MediaSessionCompat.QueueItem Method fromQueueItemList(java.util.List<?>)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityEventCompat Method getAction(android.view.accessibility.AccessibilityEvent)
+NO DOC BLOCK: android.support.v4.widget.TextViewCompat Method getCompoundDrawablesRelative(android.widget.TextView)
+NO DOC BLOCK: android.support.design.widget.CoordinatorLayout Method getDependents(android.view.View)
+NO DOC BLOCK: android.support.v7.graphics.Palette Method getDominantColor(int)
+NO DOC BLOCK: android.support.v7.graphics.Palette Method getDominantSwatch()
+NO DOC BLOCK: android.support.v7.content.res.AppCompatResources Method getDrawable(android.content.Context, int)
+NO DOC BLOCK: android.support.v7.app.ActionBarDrawerToggle Method getDrawerArrowDrawable()
+NO DOC BLOCK: android.support.design.widget.CoordinatorLayout.Behavior Method getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect)
+NO DOC BLOCK: android.support.design.widget.FloatingActionButton.Behavior Method getInsetDodgeRect(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect)
+NO DOC BLOCK: android.support.v4.app.ActivityOptionsCompat Method getLaunchBounds()
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder Method getMediaItemNumberViewFlipper()
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder Method getMediaItemPausedView()
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder Method getMediaItemPlayingView()
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter Method getMediaPlayState(java.lang.Object)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityEventCompat Method getMovementGranularity(android.view.accessibility.AccessibilityEvent)
+NO DOC BLOCK: android.support.v7.widget.RecyclerView Method getOnFlingListener()
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method getPasswordVisibilityToggleContentDescription()
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method getPasswordVisibilityToggleDrawable()
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat Method getSelectionMode()
+NO DOC BLOCK: android.support.v4.os.BuildCompat Method isAtLeastNMR1()
+NO DOC BLOCK: android.support.design.widget.FloatingActionButton.Behavior Method isAutoHideEnabled()
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat Method isContextClickable()
+NO DOC BLOCK: android.support.v17.leanback.widget.ObjectAdapter Method isImmediateNotifySupported()
+NO DOC BLOCK: android.support.v4.view.ViewCompat Method isImportantForAccessibility(android.view.View)
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method isPasswordVisibilityToggleEnabled()
+NO DOC BLOCK: android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat Method loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager)
+NO DOC BLOCK: android.support.v4.app.ActivityOptionsCompat Method makeBasic()
+NO DOC BLOCK: android.support.v4.app.ActivityOptionsCompat Method makeClipRevealAnimation(android.view.View, int, int, int, int)
+NO DOC BLOCK: android.support.v4.app.ActivityOptionsCompat Method makeTaskLaunchBehind()
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder Method notifyPlayStateChanged()
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat Method obtain(int, int, boolean)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat Method obtain(int, int, int, int, boolean)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat Method obtain(int, float, float, float)
+NO DOC BLOCK: android.support.design.widget.CoordinatorLayout.Behavior Method onAttachedToLayoutParams(android.support.design.widget.CoordinatorLayout.LayoutParams)
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter Method onBindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)
+NO DOC BLOCK: android.support.v7.util.SortedList.Callback Method onChanged(int, int, java.lang.Object)
+NO DOC BLOCK: android.support.design.widget.CoordinatorLayout.Behavior Method onDetachedFromLayoutParams()
+NO DOC BLOCK: android.support.design.widget.AppBarLayout.ScrollingViewBehavior Method onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean)
+NO DOC BLOCK: android.support.design.widget.CoordinatorLayout.Behavior Method onRequestChildRectangleOnScreen(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean)
+NO DOC BLOCK: android.support.v4.app.SharedElementCallback Method onSharedElementsArrived(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener)
+NO DOC BLOCK: android.support.v7.app.AppCompatDelegate Method onStart()
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter Method onUnbindMediaPlayState(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityManagerCompat Method removeTouchExplorationStateChangeListener(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)
+NO DOC BLOCK: android.support.v4.app.ActivityOptionsCompat Method requestUsageTimeReport(android.app.PendingIntent)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityEventCompat Method setAction(android.view.accessibility.AccessibilityEvent, int)
+NO DOC BLOCK: android.support.customtabs.CustomTabsIntent Method setAlwaysUseBrowserUI(android.content.Intent)
+NO DOC BLOCK: android.support.design.widget.FloatingActionButton.Behavior Method setAutoHideEnabled(boolean)
+NO DOC BLOCK: android.support.design.widget.CollapsingToolbarLayout Method setCollapsedTitleTextColor(android.content.res.ColorStateList)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat Method setContextClickable(boolean)
+NO DOC BLOCK: android.support.v7.app.ActionBarDrawerToggle Method setDrawerArrowDrawable(android.support.v7.graphics.drawable.DrawerArrowDrawable)
+NO DOC BLOCK: android.support.design.widget.CollapsingToolbarLayout Method setExpandedTitleTextColor(android.content.res.ColorStateList)
+NO DOC BLOCK: android.support.customtabs.CustomTabsIntent.Builder Method setInstantAppsEnabled(boolean)
+NO DOC BLOCK: android.support.v4.app.ActivityOptionsCompat Method setLaunchBounds(android.graphics.Rect)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityEventCompat Method setMovementGranularity(android.view.accessibility.AccessibilityEvent, int)
+NO DOC BLOCK: android.support.v4.widget.SwipeRefreshLayout Method setOnChildScrollUpCallback(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback)
+NO DOC BLOCK: android.support.v7.widget.RecyclerView Method setOnFlingListener(android.support.v7.widget.RecyclerView.OnFlingListener)
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method setPasswordVisibilityToggleContentDescription(int)
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method setPasswordVisibilityToggleContentDescription(java.lang.CharSequence)
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method setPasswordVisibilityToggleDrawable(android.graphics.drawable.Drawable)
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method setPasswordVisibilityToggleDrawable(int)
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method setPasswordVisibilityToggleEnabled(boolean)
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method setPasswordVisibilityToggleTintList(android.content.res.ColorStateList)
+NO DOC BLOCK: android.support.design.widget.TextInputLayout Method setPasswordVisibilityToggleTintMode(android.graphics.PorterDuff.Mode)
+NO DOC BLOCK: android.support.customtabs.CustomTabsSession Method setSecondaryToolbarViews(android.widget.RemoteViews, int[], android.app.PendingIntent)
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder Method setSelectedMediaItemNumberView(int)
+NO DOC BLOCK: android.support.customtabs.CustomTabsIntent Method shouldAlwaysUseBrowserUI(android.content.Intent)
+NO DOC BLOCK: android.support.v4.app.ServiceCompat Method stopForeground(android.app.Service, int)
+NO DOC BLOCK: android.support.v4.media.session.PlaybackStateCompat Method toKeyCode(long)
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat Field ACTION_ARGUMENT_COLUMN_INT
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat Field ACTION_ARGUMENT_PROGRESS_VALUE
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat Field ACTION_ARGUMENT_ROW_INT
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat Field ACTION_CONTEXT_CLICK
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat Field ACTION_SCROLL_DOWN
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat Field ACTION_SCROLL_LEFT
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat Field ACTION_SCROLL_RIGHT
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat Field ACTION_SCROLL_TO_POSITION
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat Field ACTION_SCROLL_UP
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat Field ACTION_SET_PROGRESS
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat Field ACTION_SHOW_ON_SCREEN
+NO DOC BLOCK: android.support.v4.media.MediaDescriptionCompat Field BT_FOLDER_TYPE_ALBUMS
+NO DOC BLOCK: android.support.v4.media.MediaDescriptionCompat Field BT_FOLDER_TYPE_ARTISTS
+NO DOC BLOCK: android.support.v4.media.MediaDescriptionCompat Field BT_FOLDER_TYPE_GENRES
+NO DOC BLOCK: android.support.v4.media.MediaDescriptionCompat Field BT_FOLDER_TYPE_MIXED
+NO DOC BLOCK: android.support.v4.media.MediaDescriptionCompat Field BT_FOLDER_TYPE_PLAYLISTS
+NO DOC BLOCK: android.support.v4.media.MediaDescriptionCompat Field BT_FOLDER_TYPE_TITLES
+NO DOC BLOCK: android.support.v4.media.MediaDescriptionCompat Field BT_FOLDER_TYPE_YEARS
+NO DOC BLOCK: android.support.design.widget.CoordinatorLayout.LayoutParams Field dodgeInsetEdges
+NO DOC BLOCK: android.support.v4.media.MediaDescriptionCompat Field EXTRA_BT_FOLDER_TYPE
+NO DOC BLOCK: android.support.customtabs.CustomTabsIntent Field EXTRA_ENABLE_INSTANT_APPS
+NO DOC BLOCK: android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot Field EXTRA_SUGGESTION_KEYWORDS
+NO DOC BLOCK: android.support.v4.app.ActivityOptionsCompat Field EXTRA_USAGE_TIME_REPORT
+NO DOC BLOCK: android.support.v4.app.ActivityOptionsCompat Field EXTRA_USAGE_TIME_REPORT_PACKAGES
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityNodeProviderCompat Field HOST_VIEW_ID
+NO DOC BLOCK: android.support.design.widget.CoordinatorLayout.LayoutParams Field insetEdge
+NO DOC BLOCK: android.support.v4.media.MediaMetadataCompat Field METADATA_KEY_BT_FOLDER_TYPE
+NO DOC BLOCK: android.support.v4.media.MediaMetadataCompat Field METADATA_KEY_MEDIA_URI
+NO DOC BLOCK: android.support.design.widget.BottomSheetBehavior Field PEEK_HEIGHT_AUTO
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter Field PLAY_STATE_INITIAL
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter Field PLAY_STATE_PAUSED
+NO DOC BLOCK: android.support.v17.leanback.widget.AbstractMediaItemPresenter Field PLAY_STATE_PLAYING
+NO DOC BLOCK: android.support.v4.app.ServiceCompat Field STOP_FOREGROUND_DETACH
+NO DOC BLOCK: android.support.v4.app.ServiceCompat Field STOP_FOREGROUND_REMOVE
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityEventCompat Field TYPE_ASSIST_READING_CONTEXT
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityWindowInfoCompat Field TYPE_SPLIT_SCREEN_DIVIDER
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityEventCompat Field TYPE_VIEW_CONTEXT_CLICKED
+NO DOC BLOCK: android.support.v4.view.accessibility.AccessibilityEventCompat Field TYPE_WINDOWS_CHANGED
diff --git a/docs/html/sdk/support_api_diff/24.2.0/stylesheet-jdiff.css b/docs/html/sdk/support_api_diff/24.2.0/stylesheet-jdiff.css
new file mode 100644
index 0000000..edafaa3
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/stylesheet-jdiff.css
@@ -0,0 +1,44 @@
+
+/* (http://www.jdiff.org) */
+
+div.and-diff-id {border: 1px solid #eee;position:relative;float:right;clear:both;padding:0px;}
+table.diffspectable {border:1px;padding:0px;margin:0px;}
+.diffspechead {background-color:#eee;}
+.diffspectable tr {border:0px;padding:0px;}
+.diffspectable td {background-color:eee;border:0px;font-size:90%;font-weight:normal;padding:0px;padding-left:1px;padding-right:1px;text-align:center;color:777;}
+td.diffvalueold {color:orange;background-color:white;border:0px;font-size:80%;font-style:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}
+td.diffvaluenew {color:green;background-color:white;border:0px;font-size:80%;font-weight:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}
+td.diffvalue {color:444;background-color:white;border:0px;font-size:80%;font-weight:normal;text-align:left;padding:0px;padding-left:1px;padding-right:1px;line-height:.95em;}
+td.diffspec {background-color:white;border:0px;font-size:80%;font-weight:normal;padding:1px;color:444;text-align:right;padding-right:.5em;line-height:.95em;}
+tt {font-size:11pt;font-family:monospace;}
+.indexHeader {
+ font-size:96%;
+ line-height:.8em;}
+.jdiffIndex td {
+ font-size:96%;
+ xline-height:.8em;
+ padding:2px;
+ padding-left:1em;}
+.indexText {
+ font-size:100%;
+ padding-left:1em;}
+#indexTableCaption {
+ font-size:96%;
+ margin-top:.25em;
+ margin-bottom:0;
+ }
+.hiddenlink {
+ font-size:96%;
+ line-height:.8em;
+ text-decoration:none;}
+a {
+ text-decoration:none;}
+a:hover {
+ text-decoration:underline;}
+.indexBox {
+ border: 1px solid red;
+ margin:1em 0 0 0;}
+.letterIndexHead {
+ font-size: 1.5em;font-weight:9;
+ margin:0 0 0em 0;
+ border: 1px solid red;}
diff --git a/docs/html/sdk/support_api_diff/24.2.0/user_comments_for_24.1.0_to_24.2.0.xml b/docs/html/sdk/support_api_diff/24.2.0/user_comments_for_24.1.0_to_24.2.0.xml
new file mode 100644
index 0000000..5a1bfc6
--- /dev/null
+++ b/docs/html/sdk/support_api_diff/24.2.0/user_comments_for_24.1.0_to_24.2.0.xml
@@ -0,0 +1,1897 @@
+<?xml version="1.0" encoding="iso-8859-1" standalone="no"?>
+<comments
+ xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'
+ xsi:noNamespaceSchemaLocation='comments.xsd'
+ name="24.1.0_to_24.2.0"
+ jdversion="1.1.0">
+
+<!-- Use this file to enter an API change description. For example, when you remove a class,
+ you can enter a comment for that class that points developers to the replacement class.
+ You can also provide a change summary for modified API, to give an overview of the changes
+ why they were made, workarounds, etc. -->
+
+<!-- When the API diffs report is generated, the comments in this file get added to the tables of
+ removed, added, and modified packages, classes, methods, and fields. This file does not ship
+ with the final report. -->
+
+<!-- The id attribute in an identifier element identifies the change as noted in the report.
+ An id has the form package[.class[.[ctor|method|field].signature]], where [] indicates optional
+ text. A comment element can have multiple identifier elements, which will will cause the same
+ text to appear at each place in the report, but will be converted to separate comments when the
+ comments file is used. -->
+
+<!-- HTML tags in the text field will appear in the report. You also need to close p HTML elements,
+ used for paragraphs - see the top-level documentation. -->
+
+<!-- You can include standard javadoc links in your change descriptions. You can use the @first command
+ to cause jdiff to include the first line of the API documentation. You also need to close p HTML
+ elements, used for paragraphs - see the top-level documentation. -->
+
+<comment>
+ <identifier id="android.support.customtabs"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.customtabs.CustomTabsIntent"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.customtabs.CustomTabsIntent.Builder"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.customtabs.CustomTabsIntent.Builder.setInstantAppsEnabled_added(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.customtabs.CustomTabsIntent.EXTRA_ENABLE_INSTANT_APPS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.customtabs.CustomTabsIntent.setAlwaysUseBrowserUI_added(android.content.Intent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.customtabs.CustomTabsIntent.shouldAlwaysUseBrowserUI_added(android.content.Intent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.customtabs.CustomTabsSession"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.customtabs.CustomTabsSession.setSecondaryToolbarViews_added(android.widget.RemoteViews, int[], android.app.PendingIntent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.customtabs.CustomTabsSession.setToolbarItem_changed(int, android.graphics.Bitmap, java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.AppBarLayout.ScrollingViewBehavior"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.AppBarLayout.ScrollingViewBehavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, android.view.View, android.graphics.Rect, boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.BottomSheetBehavior"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.BottomSheetBehavior.PEEK_HEIGHT_AUTO"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CollapsingToolbarLayout"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CollapsingToolbarLayout.setCollapsedTitleTextColor_added(android.content.res.ColorStateList)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CollapsingToolbarLayout.setExpandedTitleTextColor_added(android.content.res.ColorStateList)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.Behavior"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.Behavior.isDirty_changed(android.support.design.widget.CoordinatorLayout, V)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.Behavior.onAttachedToLayoutParams_added(android.support.design.widget.CoordinatorLayout.LayoutParams)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.Behavior.onDetachedFromLayoutParams_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.Behavior.onRequestChildRectangleOnScreen_added(android.support.design.widget.CoordinatorLayout, V, android.graphics.Rect, boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.LayoutParams"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.LayoutParams.dodgeInsetEdges"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.LayoutParams.insetEdge"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.CoordinatorLayout.getDependents_added(android.view.View)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.FloatingActionButton.Behavior"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.FloatingActionButton.Behavior.getInsetDodgeRect_added(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.graphics.Rect)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.FloatingActionButton.Behavior.isAutoHideEnabled_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.FloatingActionButton.Behavior.layoutDependsOn_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.FloatingActionButton.Behavior.onDependentViewRemoved_removed(android.support.design.widget.CoordinatorLayout, android.support.design.widget.FloatingActionButton, android.view.View)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.FloatingActionButton.Behavior.setAutoHideEnabled_added(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TabLayout"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TabLayout.clearOnTabSelectedListeners_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleContentDescription_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.getPasswordVisibilityToggleDrawable_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.isPasswordVisibilityToggleEnabled_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleContentDescription_added(java.lang.CharSequence)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(android.graphics.drawable.Drawable)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleDrawable_added(int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleEnabled_added(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintList_added(android.content.res.ColorStateList)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.design.widget.TextInputLayout.setPasswordVisibilityToggleTintMode_added(android.graphics.PorterDuff.Mode)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.transition"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v14.preference"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v14.preference.PreferenceFragment"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_INITIAL"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PAUSED"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.PLAY_STATE_PLAYING"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemNumberViewFlipper_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPausedView_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.getMediaItemPlayingView_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.notifyPlayStateChanged_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder.setSelectedMediaItemNumberView_added(int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.getMediaPlayState_added(java.lang.Object)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.onBindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.AbstractMediaItemPresenter.onUnbindMediaPlayState_added(android.support.v17.leanback.widget.AbstractMediaItemPresenter.ViewHolder)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.ObjectAdapter"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.leanback.widget.ObjectAdapter.isImmediateNotifySupported_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.preference"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v17.preference.LeanbackSettingsFragment"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.accessibilityservice"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.getDescription_changed(android.accessibilityservice.AccessibilityServiceInfo)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat.loadDescription_added(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityCompat.ctor_changed()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityCompat.getReferrer_changed(android.app.Activity)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityOptionsCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityOptionsCompat.EXTRA_USAGE_TIME_REPORT_PACKAGES"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityOptionsCompat.getLaunchBounds_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityOptionsCompat.makeBasic_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityOptionsCompat.makeClipRevealAnimation_added(android.view.View, int, int, int, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityOptionsCompat.makeTaskLaunchBehind_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityOptionsCompat.requestUsageTimeReport_added(android.app.PendingIntent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ActivityOptionsCompat.setLaunchBounds_added(android.graphics.Rect)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.FragmentController"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.FragmentController.findFragmentByWho_added(java.lang.String)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ServiceCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ServiceCompat.STOP_FOREGROUND_DETACH"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ServiceCompat.STOP_FOREGROUND_REMOVE"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.ServiceCompat.stopForeground_added(android.app.Service, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.SharedElementCallback"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.app.SharedElementCallback.onSharedElementsArrived_added(java.util.List<java.lang.String>, java.util.List<android.view.View>, android.support.v4.app.SharedElementCallback.OnSharedElementsReadyListener)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.content"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.content.ContextCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.content.ContextCompat.ctor_changed()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.graphics.drawable"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.graphics.drawable.DrawableCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.graphics.drawable.DrawableCompat.clearColorFilter_added(android.graphics.drawable.Drawable)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaBrowserCompat.MediaItem"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItemList_added(java.util.List<?>)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaBrowserCompat.MediaItem.fromMediaItem_added(java.lang.Object)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaBrowserServiceCompat.BrowserRoot.EXTRA_SUGGESTION_KEYWORDS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaDescriptionCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ALBUMS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_ARTISTS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_GENRES"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_MIXED"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_PLAYLISTS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_TITLES"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaDescriptionCompat.BT_FOLDER_TYPE_YEARS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaDescriptionCompat.EXTRA_BT_FOLDER_TYPE"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaMetadataCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaMetadataCompat.METADATA_KEY_BT_FOLDER_TYPE"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.MediaMetadataCompat.METADATA_KEY_MEDIA_URI"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaButtonReceiver"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, android.content.ComponentName, long)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaButtonReceiver.buildMediaButtonPendingIntent_added(android.content.Context, long)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaSessionCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaSessionCompat.QueueItem"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItemList_added(java.util.List<?>)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaSessionCompat.QueueItem.fromQueueItem_added(java.lang.Object)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaSessionCompat.QueueItem.obtain_changed(java.lang.Object)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaSessionCompat.fromMediaSession_added(android.content.Context, java.lang.Object)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.MediaSessionCompat.obtain_changed(android.content.Context, java.lang.Object)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.PlaybackStateCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.media.session.PlaybackStateCompat.toKeyCode_added(long)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.os"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.os.BuildCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.os.BuildCompat.isAtLeastNMR1_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.text.util"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.util"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.util.PatternsCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.KeyEventCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.KeyEventCompat.dispatch_changed(android.view.KeyEvent, android.view.KeyEvent.Callback, java.lang.Object, java.lang.Object)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.KeyEventCompat.getKeyDispatcherState_changed(android.view.View)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.KeyEventCompat.isTracking_changed(android.view.KeyEvent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.KeyEventCompat.startTracking_changed(android.view.KeyEvent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.MotionEventCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.MotionEventCompat.findPointerIndex_changed(android.view.MotionEvent, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.MotionEventCompat.getPointerCount_changed(android.view.MotionEvent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.MotionEventCompat.getPointerId_changed(android.view.MotionEvent, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.MotionEventCompat.getSource_changed(android.view.MotionEvent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.MotionEventCompat.getX_changed(android.view.MotionEvent, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.MotionEventCompat.getY_changed(android.view.MotionEvent, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewCompat.OVER_SCROLL_ALWAYS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewCompat.OVER_SCROLL_IF_CONTENT_SCROLLS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewCompat.OVER_SCROLL_NEVER"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewCompat.getOverScrollMode_changed(android.view.View)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewCompat.isImportantForAccessibility_added(android.view.View)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewCompat.isOpaque_changed(android.view.View)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewCompat.setOverScrollMode_changed(android.view.View, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewConfigurationCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.ViewConfigurationCompat.getScaledPagingTouchSlop_changed(android.view.ViewConfiguration)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.WindowInsetsCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.WindowInsetsCompat.ctor_added(android.support.v4.view.WindowInsetsCompat)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityEventCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_ASSIST_READING_CONTEXT"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_VIEW_CONTEXT_CLICKED"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityEventCompat.TYPE_WINDOWS_CHANGED"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityEventCompat.getAction_added(android.view.accessibility.AccessibilityEvent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityEventCompat.getMovementGranularity_added(android.view.accessibility.AccessibilityEvent)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityEventCompat.setAction_added(android.view.accessibility.AccessibilityEvent, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityEventCompat.setMovementGranularity_added(android.view.accessibility.AccessibilityEvent, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityManagerCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat.onAccessibilityStateChanged_removed(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityManagerCompat.addAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityManagerCompat.addTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityManagerCompat.removeAccessibilityStateChangeListener_changed(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListener)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityManagerCompat.removeTouchExplorationStateChangeListener_added(android.view.accessibility.AccessibilityManager, android.support.v4.view.accessibility.AccessibilityManagerCompat.TouchExplorationStateChangeListener)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_COLUMN_INT"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_PROGRESS_VALUE"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.ACTION_ARGUMENT_ROW_INT"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CONTEXT_CLICK"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_DOWN"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_LEFT"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_RIGHT"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_TO_POSITION"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SCROLL_UP"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SET_PROGRESS"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_SHOW_ON_SCREEN"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.getSelectionMode_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionInfoCompat.obtain_added(int, int, boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.CollectionItemInfoCompat.obtain_added(int, int, int, int, boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.RangeInfoCompat.obtain_added(int, float, float, float)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.isContextClickable_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.setContextClickable_added(boolean)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityNodeProviderCompat.HOST_VIEW_ID"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.view.accessibility.AccessibilityWindowInfoCompat.TYPE_SPLIT_SCREEN_DIVIDER"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SearchViewCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SearchViewCompat.OnCloseListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SearchViewCompat.OnQueryTextListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SearchViewCompat.setOnCloseListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnCloseListener)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SearchViewCompat.setOnQueryTextListener_changed(android.view.View, android.support.v4.widget.SearchViewCompat.OnQueryTextListener)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SwipeRefreshLayout"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.SwipeRefreshLayout.setOnChildScrollUpCallback_added(android.support.v4.widget.SwipeRefreshLayout.OnChildScrollUpCallback)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.TextViewCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v4.widget.TextViewCompat.getCompoundDrawablesRelative_added(android.widget.TextView)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.ActionBarActivity"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.ActionBarDrawerToggle"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.ActionBarDrawerToggle.getDrawerArrowDrawable_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.ActionBarDrawerToggle.setDrawerArrowDrawable_added(android.support.v7.graphics.drawable.DrawerArrowDrawable)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.AppCompatActivity"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.AppCompatDelegate"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.AppCompatDelegate.onStart_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.AppCompatDialogFragment"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.NotificationCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.NotificationCompat.Builder"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.app.NotificationCompat.MediaStyle"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.appcompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.content.res"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.content.res.AppCompatResources"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.content.res.AppCompatResources.getDrawable_added(android.content.Context, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.graphics"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.graphics.Palette"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.graphics.Palette.getDominantColor_added(int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.graphics.Palette.getDominantSwatch_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.preference"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.preference.MultiSelectListPreferenceDialogFragmentCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.recyclerview"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.BatchingListUpdateCallback"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.DiffUtil"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.DiffUtil.Callback"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.DiffUtil.DiffResult"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.ListUpdateCallback"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.SortedList.Callback"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.SortedList.Callback.onChanged_added(int, int, java.lang.Object)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.SortedList.Callback.onInserted_removed(int, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.SortedList.Callback.onMoved_removed(int, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.util.SortedList.Callback.onRemoved_removed(int, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.ActionMenuView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.ActionMenuView.LayoutParams"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.ActionMenuView.OnMenuItemClickListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatAutoCompleteTextView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatButton"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatCheckBox"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatCheckedTextView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatEditText"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatImageButton"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatImageView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatMultiAutoCompleteTextView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatRadioButton"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatRatingBar"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatSeekBar"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatSpinner"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.AppCompatTextView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.CardView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.GridLayout"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.GridLayout.Alignment"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.GridLayout.LayoutParams"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.GridLayout.Spec"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.LinearLayoutCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.LinearLayoutCompat.LayoutParams"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.LinearLayoutManager"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.LinearLayoutManager.prepareForDrop_removed(android.view.View, android.view.View, int, int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.LinearSmoothScroller"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.LinearSmoothScroller.computeScrollVectorForPosition_changed(int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.LinearSnapHelper"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.ListPopupWindow"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.PopupMenu"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.PopupMenu.OnDismissListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.PopupMenu.OnMenuItemClickListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.RecyclerView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.RecyclerView.OnFlingListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.RecyclerView.SmoothScroller.ScrollVectorProvider"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.RecyclerView.getOnFlingListener_added()"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.RecyclerView.setOnFlingListener_added(android.support.v7.widget.RecyclerView.OnFlingListener)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.SearchView"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.SearchView.OnCloseListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.SearchView.OnQueryTextListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.SearchView.OnSuggestionListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.ShareActionProvider"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.ShareActionProvider.OnShareTargetSelectedListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.SnapHelper"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.Space"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.StaggeredGridLayoutManager"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.StaggeredGridLayoutManager.TAG"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.StaggeredGridLayoutManager.computeScrollVectorForPosition_added(int)"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.SwitchCompat"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.ThemedSpinnerAdapter"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.ThemedSpinnerAdapter.Helper"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.Toolbar"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.Toolbar.LayoutParams"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.Toolbar.OnMenuItemClickListener"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v7.widget.Toolbar.SavedState"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+<comment>
+ <identifier id="android.support.v8.renderscript"/>
+ <text>
+ InsertCommentsHere
+ </text>
+</comment>
+
+</comments>
diff --git a/docs/html/topic/libraries/support-library/features.jd b/docs/html/topic/libraries/support-library/features.jd
index 0f63bf6..614392e 100755
--- a/docs/html/topic/libraries/support-library/features.jd
+++ b/docs/html/topic/libraries/support-library/features.jd
@@ -7,7 +7,15 @@
<h2>In this document</h2>
<ol>
- <li><a href="#v4">v4 Support Library</a></li>
+ <li><a href="#v4">v4 Support Libraries</a>
+ <ol>
+ <li><a href="#v4-compat">v4 compat library</a></li>
+ <li><a href="#v4-core-utils">v4 core-utils library</a></li>
+ <li><a href="#v4-core-ui">v4 core-ui library</a></li>
+ <li><a href="#v4-media-compat">v4 media-compat library</a></li>
+ <li><a href="#v4-fragment">v4 fragment library</a></li>
+ </ol>
+ </li>
<li><a href="#multidex">Multidex Support Library</a></li>
<li><a href="#v7">v7 Support Libraries</a>
<ol>
@@ -63,94 +71,115 @@
include the library in your application.</p>
-<h2 id="v4">v4 Support Library</h2>
-
-<p>This library is designed to be used with Android 1.6 (API level 4) and higher. It includes the
- largest set of APIs compared to the other libraries, including support for application components,
- user interface features, accessibility, data handling, network connectivity, and programming
- utilities. Here are a few of the key classes included in the v4 library:</p>
-
-<ul>
- <li>App Components
- <ul>
- <li>{@link android.support.v4.app.Fragment}
- - Adds support for encapsulation of user interface and functionality
- with Fragments, enabling
- applications to provide layouts that adjust between small and
- large-screen devices.
- </li>
-
- <li>{@link android.support.v4.app.NotificationCompat} - Adds support for rich notification
- features.</li>
- <li>{@link android.support.v4.content.LocalBroadcastManager} - Allows applications to easily
- register for and receive intents within a single application without broadcasting them
- globally.</li>
- </ul>
- </li>
- <li>User Interface
- <ul>
- <li>{@link android.support.v4.view.ViewPager} - Adds a
- {@link android.view.ViewGroup} that manages the layout for the
- child views, which the user can swipe between.</li>
- <li>{@link android.support.v4.view.PagerTitleStrip}
- - Adds a non-interactive title strip, that can be added as a child of
- {@link android.support.v4.view.ViewPager}.</li>
- <li>{@link android.support.v4.view.PagerTabStrip} - Adds a
- navigation widget for switching between paged views, that can also be used with
- {@link android.support.v4.view.ViewPager}.</li>
- <li>{@link android.support.v4.widget.DrawerLayout} - Adds
- support 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>{@link android.support.v4.widget.SlidingPaneLayout}
- - Adds widget for creating linked summary and detail views that
- appropriately adapt to various screen sizes.</li>
- </ul>
- </li>
- <li>Accessibility
- <ul>
- <li>{@link android.support.v4.widget.ExploreByTouchHelper}
- - Adds a helper class for implementing accessibility support for custom views.</li>
- <li>{@link android.support.v4.view.accessibility.AccessibilityEventCompat} - Adds support for
- {@link android.view.accessibility.AccessibilityEvent}. For more information about implementing
- accessibility, see <a href="{@docRoot}guide/topics/ui/accessibility/index.html"
- >Accessibility</a>.</li>
-
- <li>{@link android.support.v4.view.accessibility.AccessibilityNodeInfoCompat} - Adds support
- for {@link android.view.accessibility.AccessibilityNodeInfo}.</li>
- <li>{@link android.support.v4.view.accessibility.AccessibilityNodeProviderCompat} - Adds
- support for {@link android.view.accessibility.AccessibilityNodeProvider}.</li>
- <li>{@link android.support.v4.view.AccessibilityDelegateCompat} - Adds support for
- {@link android.view.View.AccessibilityDelegate}.</li>
- </ul>
- </li>
- <li>Content
- <ul>
- <li>{@link android.support.v4.content.Loader} - Adds support for asynchronous loading of data.
- The library also provides concrete implementations of this class, including
- {@link android.support.v4.content.CursorLoader} and
- {@link android.support.v4.content.AsyncTaskLoader}.</li>
- <li>{@link android.support.v4.content.FileProvider} - Adds support for sharing of private
- files between applications.</li>
- </ul>
- </li>
-</ul>
+<h2 id="v4">v4 Support Libraries</h2>
<p>
- There are many other APIs included in this library. For complete, detailed information about the
- v4 Support Library APIs, see the {@link android.support.v4.app android.support.v4} package in the
- API reference.
+ These libraries are designed to be used with Android 2.3 (API level 9) and
+ higher. They include the largest set of APIs compared to the other libraries,
+ including support for application components, user interface features,
+ accessibility, data handling, network connectivity, and programming
+ utilities.
</p>
-<p class="caution"><strong>Caution:</strong> Using dynamic dependencies, especially for higher version
-numbers, can cause unexpected version updates and regression incompatibilities.</p>
+<p>
+ For complete, detailed information about the classes and methods provided by
+ the v4 support libraries, see the {@link android.support.v4.app
+ android.support.v4} package in the API reference.
+</p>
+
+
+<p class="note">
+ <strong>Note:</strong> Prior to Support Library revision 24.2.0, there was a
+ single v4 support library. That library was divided into multiple modules to
+ improve efficiency. For backwards compatibility, if you list
+ <code>support-v4</code> in your Gradle script, your APK will include all of
+ the v4 modules. However, to reduce APK size, we recommend that you just list
+ the specific modules your app needs.
+</p>
+
+<h3 id="v4-compat">v4 compat library</h3>
+
+<p>
+ Provides compatibility wrappers for a number of framework APIs, such as
+ <code>Context.obtainDrawable()</code> and
+ <code>View.performAccessibilityAction()</code>.
+</p>
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:support-v4:24.1.1
+com.android.support:support-compat:24.2.0
</pre>
+<h3 id="v4-core-utils">v4 core-utils library</h3>
+<p>
+ Provides a number of utility classes, such as {@link
+ android.support.v4.content.AsyncTaskLoader} and {@link
+ android.support.v4.content.PermissionChecker}.
+</p>
+
+<p>
+ The Gradle build script dependency identifier for this library is as follows:
+</p>
+
+<pre>
+com.android.support:support-core-utils:24.2.0
+</pre>
+
+<h3 id="v4-core-ui">v4 core-ui library</h3>
+
+<p>
+ Implements a variety of UI-related components, such as {@link
+ android.support.v4.view.ViewPager}, {@link
+ android.support.v4.widget.NestedScrollView}, and {@link
+ android.support.v4.widget.ExploreByTouchHelper}.
+</p>
+
+<p>
+ The Gradle build script dependency identifier for this library is as follows:
+</p>
+
+<pre>
+com.android.support:support-core-ui:24.2.0
+</pre>
+
+<h3 id="v4-media-compat">v4 media-compat library</h3>
+
+<p>
+ Backports portions of the <a href=
+ "/reference/android/media/package-summary.html">media</a> framework,
+ including {@link android.media.browse.MediaBrowser} and {@link
+ android.media.session.MediaSession}.
+</p>
+
+<p>
+ The Gradle build script dependency identifier for this library is as follows:
+</p>
+
+<pre>
+com.android.support:support-media-compat:24.2.0
+</pre>
+
+<h3 id="v4-fragment">v4 fragment library</h3>
+
+<p>
+ Adds support for encapsulation of user interface and functionality with
+ <a href=
+ "/guide/components/fragments.html">fragments</a>,
+ enabling applications to provide layouts that adjust between small and
+ large-screen devices. This module has dependencies on <a href=
+ "#v4-compat">compat</a>, <a href="#v4-core-utils">core-utils</a>, <a href=
+ "#v4-core-ui">core-ui</a>, and <a href="#v4-media-compat">media-compat</a>.
+</p>
+
+<p>
+ The Gradle build script dependency identifier for this library is as follows:
+</p>
+
+<pre>
+com.android.support:support-fragment:24.2.0
+</pre>
<h2 id="multidex">Multidex Support Library</h2>
@@ -173,7 +202,7 @@
<h2 id="v7">v7 Support Libraries</h2>
-<p>There are several libraries designed to be used with Android 2.1 (API level 7) and higher.
+<p>There are several libraries designed to be used with Android 2.3 (API level 9) and higher.
These libraries provide specific feature sets and can be included in your application
independently from each other.</p>
@@ -216,7 +245,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:appcompat-v7:24.1.1
+com.android.support:appcompat-v7:24.2.0
</pre>
@@ -231,7 +260,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:cardview-v7:24.1.1
+com.android.support:cardview-v7:24.2.0
</pre>
@@ -247,7 +276,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:gridlayout-v7:24.1.1
+com.android.support:gridlayout-v7:24.2.0
</pre>
@@ -270,7 +299,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:mediarouter-v7:24.1.1
+com.android.support:mediarouter-v7:24.2.0
</pre>
<p class="caution">The v7 mediarouter library APIs introduced in Support Library
@@ -290,7 +319,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:palette-v7:24.1.1
+com.android.support:palette-v7:24.2.0
</pre>
@@ -306,7 +335,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:recyclerview-v7:24.1.1
+com.android.support:recyclerview-v7:24.2.0
</pre>
@@ -329,18 +358,18 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:preference-v7:24.1.1
+com.android.support:preference-v7:24.2.0
</pre>
<h2 id="v8">v8 Support Library</h2>
-<p>This library is designed to be used with Android 2.2 (API level 8) and higher.
+<p>This library is designed to be used with Android 2.3 (API level 9) and higher.
This library provides specific feature sets and can be included in your application
independently from other libraries.</p>
<h3 id="v8-renderscript">v8 renderscript library</h3>
-<p>This library is designed to be used with Android (API level 8) and higher. It adds support for
+<p>This library is designed to be used with Android 2.3 (API level 9) and higher. It adds support for
the <a href="{@docRoot}guide/topics/renderscript/compute.html">RenderScript</a> computation
framework. These APIs are included in the {@link android.support.v8.renderscript} package. You
should be aware that the steps for including these APIs in your application is <em>very
@@ -380,7 +409,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:support-v13:24.1.1
+com.android.support:support-v13:24.2.0
</pre>
@@ -406,7 +435,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:preference-v14:24.1.1
+com.android.support:preference-v14:24.2.0
</pre>
@@ -429,7 +458,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:preference-leanback-v17:24.1.1
+com.android.support:preference-leanback-v17:24.2.0
</pre>
@@ -465,7 +494,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:leanback-v17:24.1.1
+com.android.support:leanback-v17:24.2.0
</pre>
@@ -480,7 +509,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:support-annotations:24.1.1
+com.android.support:support-annotations:24.2.0
</pre>
@@ -498,7 +527,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:design:24.1.1
+com.android.support:design:24.2.0
</pre>
@@ -519,7 +548,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:customtabs:24.1.1
+com.android.support:customtabs:24.2.0
</pre>
@@ -543,7 +572,7 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:percent:24.1.1
+com.android.support:percent:24.2.0
</pre>
@@ -566,5 +595,5 @@
<p>The Gradle build script dependency identifier for this library is as follows:</p>
<pre>
-com.android.support:recommendation:24.1.1
+com.android.support:recommendation:24.2.0
</pre>
diff --git a/docs/html/topic/libraries/support-library/revisions.jd b/docs/html/topic/libraries/support-library/revisions.jd
index 3b25fb0..4b743d5 100644
--- a/docs/html/topic/libraries/support-library/revisions.jd
+++ b/docs/html/topic/libraries/support-library/revisions.jd
@@ -6,9 +6,341 @@
<p>This page provides details about the Support Library package releases.</p>
<div class="toggle-content opened">
- <p id="rev24-1-1">
+ <p id="rev24-2-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 24.2.0</a>
+ <em>(August 2016)</em>
+ </p>
+
+ <div class="toggle-content-toggleme">
+
+<p>Release 24.2.0 contains the following changes:</p>
+
+<ul>
+ <li><a href="#24-2-0-v4-refactor">v4 Support Library split</a></li>
+ <li><a href="#24-2-0-api-updates">API updates</a></li>
+ <li><a href="#24-2-0-behavior">Behavior changes</a></li>
+ <li><a href="#24-2-0-deprecations">Deprecations</a></li>
+ <li><a href="#24-2-0-bugfixes">Bug fixes</a></li>
+</ul>
+
+<p class="note"><strong>Note:</strong> Release 24.2.0 removes support for
+ Android 2.2 (API level 8) and lower. Classes and methods that exist only to
+ serve those system versions are now marked as deprecated and should no longer
+ be used. These deprecated classes and methods may be removed in a future
+ release.
+</p>
+
+<h3 id="24-2-0-v4-refactor">v4 Support Library split</h3>
+
+<p>With this release, the <a href="features.html#v4">v4 Support Library</a> has
+ been split into several smaller modules:</p>
+
+<dl>
+ <dt>
+ <code>support-compat</code>
+ </dt>
+
+ <dd>
+ Provides compatibility wrappers for new framework APIs, such as
+ <code>Context.getDrawable()</code> and
+ <code>View.performAccessibilityAction()</code>.
+ </dd>
+
+ <dt>
+ <code>support-core-utils</code>
+ </dt>
+
+ <dd>
+ Provides a number of utility classes, such as {@link
+ android.support.v4.content.AsyncTaskLoader} and {@link
+ android.support.v4.content.PermissionChecker}.
+ </dd>
+
+ <dt>
+ <code>support-core-ui</code>
+ </dt>
+
+ <dd>
+ Implements a variety of UI-related components, such as {@link
+ android.support.v4.view.ViewPager}, {@link
+ android.support.v4.widget.NestedScrollView}, and {@link
+ android.support.v4.widget.ExploreByTouchHelper}.
+ </dd>
+
+ <dt>
+ <code>support-media-compat</code>
+ </dt>
+
+ <dd>
+ Backports portions of the <a href=
+ "/reference/android/media/package-summary.html">media</a> framework,
+ including {@link android.media.browse.MediaBrowser} and {@link
+ android.media.session.MediaSession}.
+ </dd>
+
+ <dt>
+ <code>support-fragment</code>
+ </dt>
+
+ <dd>
+ Backports the <a href=
+ "/guide/components/fragments.html">fragment</a>
+ framework. This module has dependencies on <code>support-compat</code>,
+ <code>support-core-utils</code>, <code>support-core-ui</code>, and
+ <code>support-media-compat</code>.
+ </dd>
+</dl>
+
+<p>For backwards compatibility, if you list <code>support-v4</code> in your
+Gradle script, your APK will include all of these modules. However, to reduce
+APK size, we recommend that you just list the specific modules your app needs.
+</p>
+
+<h3 id="24-2-0-api-updates">API updates</h3>
+
+<ul>
+ <li>Clients using <a href="features.html#custom-tabs">Custom Tabs</a> can
+ control whether Instant Apps should open. (Note that Instant Apps are not yet
+ generally available.) To enable or disable Instant Apps, call <a href=
+ "/reference/android/support/customtabs/CustomTabsIntent.Builder.html#setInstantAppsEnabled(boolean)">
+ <code>CustomTabsIntent.Builder.setInstantAppsEnabled()</code></a> or
+ specify <a href=
+ "/reference/android/support/customtabs/CustomTabsIntent.html#EXTRA_ENABLE_INSTANT_APPS">
+ <code>EXTRA_ENABLE_INSTANT_APPS</code></a>. By default, Custom Tabs will
+ default to enabling Instant Apps, when that feature becomes available.
+ </li>
+
+ <li>{@link android.support.design.widget.TextInputLayout} adds support for
+ the <a href=
+ "https://material.google.com/components/text-fields.html#text-fields-password-input">
+ password visibility toggle</a> from the material design specification.
+ </li>
+
+ <li>The new <a href=
+ "/reference/android/support/transition/package-summary.html"
+ ><code>android.support.transition</code></a>
+ package backports the <a href=
+ "/training/transitions/index.html">Transitions</a> framework to API levels 14
+ and higher. For more information, see the <a href=
+ "/reference/android/support/transition/package-summary.html"
+ ><code>android.support.transition</code></a> reference.
+ </li>
+
+ <li>The <a href="features.html#custom-tabs">Custom Tabs support library</a>
+ adds support for using {@link android.widget.RemoteViews} in the secondary
+ toolbar. The existing {@link
+ android.support.customtabs.CustomTabsSession#setToolbarItem setToolbarItem()}
+ method is now deprecated.
+ </li>
+
+ <li>{@link android.support.v7.content.res.AppCompatResources} adds the
+ ability to load a <code><vector></code> (on API level 9 and higher) or
+ <code><animated-vector></code> (on API level 11 and higher) from a
+ resource ID, by using the new <a href=
+ "/reference/android/support/v7/content/res/AppCompatResources.html#getDrawable(android.content.Context,%20int)"
+ ><code>getDrawable()</code></a> method.
+ </li>
+
+ <li>{@link android.support.design.widget.CoordinatorLayout} now supports
+ defining inset views, and specifying that other views should dodge the inset
+ views. This allows apps to replicate behavior patterns similar to the way
+ {@link android.support.design.widget.FloatingActionButton} moves out of the
+ way of a {@link android.support.design.widget.Snackbar}, but for any
+ arbitrary view children. For more information, see the <a href=
+ "/reference/android/support/design/widget/CoordinatorLayout.LayoutParams.html#insetEdge">
+ <code>LayoutParams.insetEdge</code></a> and <a href=
+ "/reference/android/support/design/widget/CoordinatorLayout.LayoutParams.html#dodgeInsetEdges">
+ <code>LayoutParams.dodgeInsetEdges</code></a> reference documentation.
+ </li>
+
+ <li>The new <a href="/reference/android/support/v7/util/DiffUtil.html"><code>
+ DiffUtil</code></a> class can calculate the difference between two
+ collections, and can dispatch a list of update operations that are suitable
+ to be consumed by a {@link android.support.v7.widget.RecyclerView.Adapter}.
+ </li>
+
+ <li>
+ <a href=
+ "/reference/android/support/v7/widget/RecyclerView.OnFlingListener.html"><code>
+ RecyclerView.OnFlingListener</code></a> has been added to support custom
+ behavior in response to flings. The <a href=
+ "/reference/android/support/v7/widget/SnapHelper.html"><code>SnapHelper</code></a>
+ class provides an implementation specifically for snapping child views, and
+ the <a href=
+ "/reference/android/support/v7/widget/LinearSnapHelper.html"><code>LinearSnapHelper</code></a>
+ class extends this implementation to provide center-aligned snapping
+ behavior similar to {@link android.support.v4.view.ViewPager}.
+ </li>
+
+ <li>The Custom Tabs library now allows clients to request the standard
+ browser UI, rather than custom tabs UI, by calling <a href=
+ "/reference/android/support/customtabs/CustomTabsIntent.html#setAlwaysUseBrowserUI(android.content.Intent)">
+ <code>CustomTabsIntent.setAlwaysUseBrowserUI()</code></a>. This behavior is
+ useful in cases where the browser defaults to custom tabs UI but the user
+ has expressed a preference for the standard browser UI.
+ </li>
+
+</ul>
+
+<h3 id="24-2-0-behavior">Behavior changes</h3>
+
+<ul>
+ <li>If you use the appcompat library's day/night functionality, the system
+ now automatically recreates your activity whenever the day/night mode changes
+ (either because of the time of day, or because of a call to {@link
+ android.support.v7.app.AppCompatDelegate#setLocalNightMode
+ AppCompatDelegate.setLocalNightMode()}).
+ </li>
+
+ <li>{@link android.support.design.widget.Snackbar} now draws behind the
+ navigation bar if the status bar is translucent.
+ </li>
+
+</ul>
+
+<h4>MediaRouter library</h4>
+
+<p>
+ Bluetooth devices are no longer listed as media routes. Routing audio to
+ Bluetooth devices is now solely controlled at the Android system level.
+</p>
+
+
+<h3 id="24-2-0-deprecations">Deprecations</h3>
+
+<p>Deprecated classes and methods are subject to removal in a future release. You should migrate away from these APIs as soon as possible.</p>
+
+<ul>
+ <li>Several methods on the following classes were only required for API 8 and
+ lower, and should no longer be used. Instead, use the framework
+ implementations.
+ <ul>
+ <li>{@link android.support.v4.view.KeyEventCompat}: Replace with {@link
+ android.view.KeyEvent}
+ </li>
+
+ <li>{@link android.support.v4.view.MotionEventCompat}: Use {@link
+ android.view.MotionEvent}
+ </li>
+
+ <li>{@link android.support.v4.view.ViewCompat}: Use {@link
+ android.view.View}
+ </li>
+
+ <li>{@link android.support.v4.view.ViewConfigurationCompat}: Use {@link
+ android.view.ViewConfiguration}
+ </li>
+ </ul>
+ </li>
+
+ <li>
+ {@link android.support.v4.accessibilityservice.AccessibilityServiceInfoCompat#getDescription
+ AccessibilityServiceInfoCompat.getDescription()}
+ has been deprecated in favor of
+ <a href="/reference/android/support/v4/accessibilityservice/AccessibilityServiceInfoCompat.html#loadDescription(android.accessibilityservice.AccessibilityServiceInfo, android.content.pm.PackageManager)"><code>loadDescription()</code></a>
+ which returns a correctly localized description.
+ </li>
+
+ <li>You should not instantiate the <code>ActivityCompat</code> class
+ directly. The non-static <code>getReferrer(Activity)</code> method will be
+ made static in an upcoming release.
+ </li>
+
+ <li>{@link android.support.design.widget.CoordinatorLayout.Behavior#isDirty
+ CoordinatorLayout.Behavior.isDirty()} has been deprecated and is no longer
+ called by {@link android.support.design.widget.CoordinatorLayout}. Any
+ implementations, as well as any calls to this method, should be removed.
+ </li>
+
+ <li>{@link android.support.v4.media.session.MediaSessionCompat#obtain
+ MediaSessionCompat.obtain()} has been deprecated and replaced with the more
+ appropriately-named method
+ <a href="/reference/android/support/v4/media/session/MediaSessionCompat.html#fromMediaSession"><code>fromMediaSession()</code></a>.
+ </li>
+
+ <li>{@link
+ android.support.v4.media.session.MediaSessionCompat.QueueItem#obtain
+ MediaSessionCompat.QueueItem.obtain()} has been deprecated and replaced with
+ the more appropriately-named method
+ <a href="/reference/android/support/v4/media/session/MediaSessionCompat.QueueItem.html#fromQueueItem"><code>fromQueueItem()</code></a>.
+ </li>
+
+ <li>Several abstract classes have been deprecated and replaced with
+ interfaces that more closely reflect their framework equivalents.
+ <ul>
+ <li>{@link
+ android.support.v4.view.accessibility.AccessibilityManagerCompat.AccessibilityStateChangeListenerCompat}
+ has been replaced by the <a href=
+ "/reference/android/support/v4/view/accessibility/AccessibilityManagerCompat.AccessibilityStateChangeListener.html">
+ <code>AccessibilityManagerCompat.AccessibilityStateChangeListener</code></a>
+ interface.
+ </li>
+
+ <li>{@link
+ android.support.v4.widget.SearchViewCompat.OnCloseListenerCompat} has
+ been replaced by the <a
+ href="/reference/android/support/v4/widget/SearchViewCompat.OnCloseListener.html"
+ ><code>SearchViewCompat.OnCloseListener</code></a> interface.
+ </li>
+
+ <li>{@link
+ android.support.v4.widget.SearchViewCompat.OnQueryTextListenerCompat }
+ has been replaced by the <a
+ href="/reference/android/support/v4/widget/SearchViewCompat.OnQueryTextListener.html"
+ ><code>SearchViewCompat.OnQueryTextListener</code></a>
+ interface.
+ </li>
+ </ul>
+ </li>
+
+ <li>{@link android.support.customtabs.CustomTabsSession#setToolbarItem
+ CustomTabsSession.setToolbarItem()} has been deprecated and replaced by the
+ RemoteViews-based <a href=
+ "/reference/android/support/customtabs/CustomTabsSession.html#setSecondaryToolbarViews">
+ <code>setSecondaryToolbarViews()</code></a>.
+ </li>
+</ul>
+
+<h3 id="24-2-0-bugfixes">Bug fixes</h3>
+
+<p>The following known issues have been fixed with release 24.2.0:</p>
+
+<ul>
+ <li>Ensure <code>SwipeRefreshLayout</code> indicator is shown when
+ <code>setRefreshing(true)</code> is called before the first measurement pass
+ (<a href="https://code.google.com/p/android/issues/detail?id=77712">AOSP
+ issue 77712</a>)
+ </li>
+
+ <li>Prevent <code>TabLayout</code> from flickering when changing pages
+ (<a href="https://code.google.com/p/android/issues/detail?id=180454">AOSP
+ issue 180454</a>)
+ </li>
+
+ <li>Avoid <code>ClassNotFoundException</code> when unmarshalling
+ <code>SavedState</code> on API level 11 and lower (<a href=
+ "https://code.google.com/p/android/issues/detail?id=196430">AOSP issue
+ 196430</a>)
+ </li>
+</ul>
+
+<p>
+ A complete list of public bug fixes is available on the <a href=
+ "https://code.google.com/p/android/issues/list?can=1&q=Component%3DSupport-Libraries+Target%3DSupport-24.2.0">
+ AOSP Issue Tracker</a>.
+</p>
+
+ </div>
+</div>
+
+<!-- end of collapsible section: 24.2.0 -->
+
+<div class="toggle-content closed">
+ <p id="rev24-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 24.1.1</a>
<em>(July 2016)</em>
</p>
@@ -76,7 +408,7 @@
<ul>
<li>TabLayout.setCustomView(null) results in NullPointerException
(<a href="https://code.google.com/p/android/issues/detail?id=214753">AOSP
- issue</a>)
+ issue 214753</a>)
</li>
<li>TabLayout incorrectly highlights custom tabs (<a href=
diff --git a/docs/html/topic/libraries/support-library/setup.jd b/docs/html/topic/libraries/support-library/setup.jd
index 0cb9389..adb263c 100755
--- a/docs/html/topic/libraries/support-library/setup.jd
+++ b/docs/html/topic/libraries/support-library/setup.jd
@@ -85,17 +85,24 @@
<li>Make sure you have downloaded the <strong>Android Support Repository</strong>
using the <a href="#download">SDK Manager</a>.</li>
<li>Open the {@code build.gradle} file for your application.</li>
- <li>Add the support library to the {@code dependencies} section. For example, to add the v4
- support library, add the following lines:
+ <li>Add the support library to the {@code dependencies} section. For
+ example, to add the v4 core-utils library, add the following lines:
<pre>
dependencies {
...
- <b>compile "com.android.support:support-v4:24.1.1"</b>
+ <b>compile "com.android.support:support-core-utils:24.2.0"</b>
}
</pre>
</li>
</ol>
+<p class="caution">
+ <strong>Caution:</strong> Using dynamic dependencies (for example,
+ <code>palette-v7:23.0.+</code>) can cause unexpected version updates and
+ regression incompatibilities. We recommend that you explicitly specify a
+ library version (for example, <code>palette-v7:24.2.0</code>).
+</p>
+
<h2 id="using-apis">Using Support Library APIs</h2>
<p>Support Library classes that provide support for existing framework APIs typically have the
@@ -141,12 +148,12 @@
<pre>
<uses-sdk
- android:minSdkVersion="<b>7</b>"
- android:targetSdkVersion="17" />
+ android:minSdkVersion="<b>14</b>"
+ android:targetSdkVersion="23" />
</pre>
<p>The manifest setting tells Google Play that your application can be installed on devices with Android
- 2.1 (API level 7) and higher. </p>
+ 4.0 (API level 14) and higher. </p>
<p>If you are using Gradle build files, the <code>minSdkVersion</code> setting in the build file
overrides the manifest settings. </p>
@@ -158,7 +165,7 @@
...
defaultConfig {
- minSdkVersion 8
+ minSdkVersion 16
...
}
...
@@ -166,13 +173,15 @@
</pre>
<p>In this case, the build file setting tells Google Play that the default build variant of your
- application can be installed on devices with Android 2.2 (API level 8) and higher. For more
+ application can be installed on devices with Android 4.1 (API level 16) and higher. For more
information about build variants, see
<a href="{@docRoot}studio/build/index.html">Build System Overview</a>. </p>
<p class="note">
- <strong>Note:</strong> If you are including the v4 support and v7 appcompat libraries in your
- application, you should specify a minimum SDK version of <code>"7"</code> (and not
- <code>"4"</code>). The highest support library level you include in your application determines
- the lowest API version in which it can operate.
+ <strong>Note:</strong> If you are including several support libraries, the
+ minimum SDK version must be the <em>highest</em> version required by any of
+ the specified libraries. For example, if your app includes both the <a href=
+ "features.html#v14-preference">v14 Preference Support library</a> and the
+ <a href="features.html#v17-leanback">v17 Leanback library</a>, your minimum
+ SDK version must be 17 or higher.
</p>
diff --git a/docs/html/training/basics/data-storage/databases.jd b/docs/html/training/basics/data-storage/databases.jd
index f42bf65..0cd0ce1 100644
--- a/docs/html/training/basics/data-storage/databases.jd
+++ b/docs/html/training/basics/data-storage/databases.jd
@@ -75,16 +75,14 @@
<pre>
public final class FeedReaderContract {
// To prevent someone from accidentally instantiating the contract class,
- // give it an empty constructor.
- public FeedReaderContract() {}
+ // make the constructor private.
+ private FeedReaderContract() {}
/* Inner class that defines the table contents */
- public static abstract class FeedEntry implements BaseColumns {
+ public static class FeedEntry implements BaseColumns {
public static final String TABLE_NAME = "entry";
- public static final String COLUMN_NAME_ENTRY_ID = "entryid";
public static final String COLUMN_NAME_TITLE = "title";
public static final String COLUMN_NAME_SUBTITLE = "subtitle";
- ...
}
}
</pre>
@@ -103,10 +101,8 @@
private static final String SQL_CREATE_ENTRIES =
"CREATE TABLE " + FeedEntry.TABLE_NAME + " (" +
FeedEntry._ID + " INTEGER PRIMARY KEY," +
- FeedEntry.COLUMN_NAME_ENTRY_ID + TEXT_TYPE + COMMA_SEP +
FeedEntry.COLUMN_NAME_TITLE + TEXT_TYPE + COMMA_SEP +
- ... // Any other options for the CREATE command
- " )";
+ FeedEntry.COLUMN_NAME_SUBTITLE + TEXT_TYPE + " )";
private static final String SQL_DELETE_ENTRIES =
"DROP TABLE IF EXISTS " + FeedEntry.TABLE_NAME;
@@ -189,23 +185,22 @@
// Create a new map of values, where column names are the keys
ContentValues values = new ContentValues();
-values.put(FeedEntry.COLUMN_NAME_ENTRY_ID, id);
values.put(FeedEntry.COLUMN_NAME_TITLE, title);
-values.put(FeedEntry.COLUMN_NAME_CONTENT, content);
+values.put(FeedEntry.COLUMN_NAME_SUBTITLE, subtitle);
// Insert the new row, returning the primary key value of the new row
-long newRowId;
-newRowId = db.insert(
- FeedEntry.TABLE_NAME,
- FeedEntry.COLUMN_NAME_NULLABLE,
- values);
+long newRowId = db.insert(FeedEntry.TABLE_NAME, null, values);
</pre>
<p>The first argument for {@link android.database.sqlite.SQLiteDatabase#insert insert()}
-is simply the table name. The second argument provides
-the name of a column in which the framework can insert NULL in the event that the
-{@link android.content.ContentValues} is empty (if you instead set this to {@code "null"},
-then the framework will not insert a row when there are no values).</p>
+is simply the table name. </p>
+
+<p>The second argument tells the framework what to do in the event that the
+{@link android.content.ContentValues} is empty (i.e., you did not
+{@link android.content.ContentValues#put put} any values).
+If you specify the name of a column, the framework inserts a row and sets
+the value of that column to null. If you specify <code>null</code>, like in this
+code sample, the framework does not insert a row when there are no values.</p>
@@ -227,16 +222,19 @@
String[] projection = {
FeedEntry._ID,
FeedEntry.COLUMN_NAME_TITLE,
- FeedEntry.COLUMN_NAME_UPDATED,
- ...
+ FeedEntry.COLUMN_NAME_SUBTITLE
};
+// Filter results WHERE "title" = 'My Title'
+String selection = FeedEntry.COLUMN_NAME_TITLE + " = ?";
+String[] selectionArgs = { "My Title" };
+
// How you want the results sorted in the resulting Cursor
String sortOrder =
- FeedEntry.COLUMN_NAME_UPDATED + " DESC";
+ FeedEntry.COLUMN_NAME_SUBTITLE + " DESC";
Cursor c = db.query(
- FeedEntry.TABLE_NAME, // The table to query
+ FeedEntry.TABLE_NAME, // The table to query
projection, // The columns to return
selection, // The columns for the WHERE clause
selectionArgs, // The values for the WHERE clause
@@ -280,11 +278,11 @@
<pre>
// Define 'where' part of query.
-String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
+String selection = FeedEntry.COLUMN_NAME_TITLE + " LIKE ?";
// Specify arguments in placeholder order.
-String[] selectionArgs = { String.valueOf(rowId) };
+String[] selectionArgs = { "MyTitle" };
// Issue SQL statement.
-db.delete(table_name, selection, selectionArgs);
+db.delete(FeedEntry.TABLE_NAME, selection, selectionArgs);
</pre>
@@ -305,9 +303,9 @@
ContentValues values = new ContentValues();
values.put(FeedEntry.COLUMN_NAME_TITLE, title);
-// Which row to update, based on the ID
-String selection = FeedEntry.COLUMN_NAME_ENTRY_ID + " LIKE ?";
-String[] selectionArgs = { String.valueOf(rowId) };
+// Which row to update, based on the title
+String selection = FeedEntry.COLUMN_NAME_TITLE + " LIKE ?";
+String[] selectionArgs = { "MyTitle" };
int count = db.update(
FeedReaderDbHelper.FeedEntry.TABLE_NAME,
diff --git a/docs/html/training/basics/firstapp/building-ui.jd b/docs/html/training/basics/firstapp/building-ui.jd
index a680c73..6f321e9 100644
--- a/docs/html/training/basics/firstapp/building-ui.jd
+++ b/docs/html/training/basics/firstapp/building-ui.jd
@@ -71,17 +71,17 @@
<h2 id="LinearLayout">Create a Linear Layout</h2>
<ol>
- <li>From the <code>res/layout/</code> directory, open the
- <code>activity_main.xml</code> file.
+ <li>In Android Studio's <b>Project</b> window, open <b>app > res >
+ layout > activity_main.xml</b>.
<p>This XML file defines the layout of your activity. It contains the
default "Hello World" text view.</p>
</li>
<li>When you open a layout file, you’re first shown the design editor in the
<a href="/studio/write/layout-editor.html">Layout Editor</a>. For this lesson,
- you work directly with the XML, so click the <b>Text</b> tab to switch to
- the text editor.
+ you work directly with the XML, so click the <b>Text</b> tab at the bottom
+ of the window to switch to the text editor.
</li>
- <li>Replace the contents of the file with the following XML:
+ <li>Delete everything and insert the following XML:
<pre><?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
@@ -138,6 +138,9 @@
</LinearLayout>
</pre>
+<p>Don't worry about the error that appears for
+<code>@string/edit_message</code>; you'll fix that soon.</p>
+
<p>Here is a description of the attributes in the
{@link android.widget.EditText <EditText>} you added:</p>
@@ -157,7 +160,7 @@
<p>A resource object is a unique integer name that's associated with an app resource,
such as a bitmap, layout file, or string.</p>
<p>Every resource has a
-corresponding resource object defined in your project's {@code gen/R.java} file. You can use the
+corresponding resource object defined in your project's {@code R.java} file. You can use the
object names in the {@code R} class to refer to your resources, such as when you need to specify a
string value for the <a
href="{@docRoot}reference/android/widget/TextView.html#attr_android:hint">{@code android:hint}</a>
@@ -174,7 +177,7 @@
<p>The plus sign (<code>+</code>) before the resource type is needed only when you're defining a
resource ID for the first time. When you compile the app,
the SDK tools use the ID name to create a new resource ID in
-your project's {@code gen/R.java} file that refers to the {@link
+your project's {@code R.java} file that refers to the {@link
android.widget.EditText} element. With the resource ID declared once this way,
other references to the ID do not
need the plus sign. Using the plus sign is necessary only when specifying a new resource ID and not
@@ -211,10 +214,10 @@
<h2 id="Strings">Add String Resources</h2>
<p>By default, your Android project includes a string resource file at
-<code>res/values/strings.xml</code>. Here, you'll add two new strings.</p>
+<b>res > values > strings.xml</b>. Here, you'll add two new strings.</p>
<ol>
-<li>From the <code>res/values/</code> directory, open <code>strings.xml</code>.</li>
+<li>From the <b>Project</b> window, open <b>res > values > strings.xml</b>.</li>
<li>Add two strings so that your file looks like this:
<pre><?xml version="1.0" encoding="utf-8"?>
<resources>
@@ -340,15 +343,12 @@
<h2>Run Your App</h2>
-<p>This layout is applied by the default {@link android.app.Activity} class
-that the SDK tools generated when you created the project.</p>
-
-<p>To run the app and see the results,
- click <strong>Run 'app'</strong>
+<p>To see how the app now looks on your device or emulator,
+ click <strong>Run</strong>
<img src="{@docRoot}images/tools/as-run.png"
style="vertical-align:baseline;margin:0; max-height:1em" /> in the
toolbar.</p>
-<p>Continue to the <a href="starting-activity.html">next
-lesson</a> to learn how to respond to button presses, read content
-from the text field, start another activity, and more.</p>
\ No newline at end of file
+<p>To add app behaviors such as responding to a button and starting
+another activity, continue to the <a href="starting-activity.html">next
+lesson</a>.</p>
\ No newline at end of file
diff --git a/docs/html/training/basics/firstapp/creating-project.jd b/docs/html/training/basics/firstapp/creating-project.jd
index cad32bf..60be5f6 100644
--- a/docs/html/training/basics/firstapp/creating-project.jd
+++ b/docs/html/training/basics/firstapp/creating-project.jd
@@ -31,129 +31,71 @@
<ol>
<li>In Android Studio, create a new project:
<ul>
- <li>If you don't have a project opened, in the <strong>Welcome</strong> screen, click <strong>
- New Project</strong>.</li>
- <li>If you have a project opened, from the <strong>File</strong> menu, select <strong>New
- Project</strong>. The <em>Create New Project</em> screen appears.</li>
+ <li>If you don't have a project opened, in the <strong>Welcome to Android Studio</strong> window, click <strong>
+ Start a new Android Studio project</strong>.</li>
+ <li>If you have a project opened, select <strong>File > New Project</strong>.</li>
</ul>
</li>
- <li>Fill out the fields on the screen. For <strong>Application Name</strong>
- use "My First App". For <strong>Company Domain</strong>, use "example.com".
- For the other fields, use the default values and click <strong>Next</strong>
- <p>Here's a brief explanation of each field:</p>
+ <li>In the <b>New Project</b> screen, enter the following values:</p>
<ul>
- <li><strong>Application Name</strong> is the app name that appears to users.</li>
- <li><strong>Company domain</strong> provides a qualifier that will be appended to the package
- name; Android Studio will remember this qualifier for each new project you create.</li>
- <li><strong>Package name</strong> is the fully qualified name for the project (following the
- same rules as those for naming packages in the Java programming language). Your package name
- must be unique across all packages installed on the Android system. You can <strong>
- Edit</strong> this value independently from the application name or the company
- domain.</li>
- <li><strong>Project location</strong> is the directory on your system that holds the project
- files.</li>
+ <li><strong>Application Name</strong>: "My First App" </li>
+ <li><strong>Company Domain</strong>: "example.com"</li>
</ul>
+ <p>Android Studio fills in the package name and project location for you,
+ but you can edit these if you'd like.
</li>
- <li>Under <strong>Target Android Devices</strong>, accept the default values
- and click <strong>Next</strong>.
- <p>The Minimum Required SDK is the earliest version of Android that your app supports,
- indicated using the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">
+ <li>Click <b>Next</b>.</li>
+ <li>In the <b>Target Android Devices</b> screen, keep the default values and
+ click <b>Next</b>.
+ <p>The <b>Minimum Required SDK</b> is the earliest version of Android that your app supports,
+ which is indicated by the <a href="{@docRoot}guide/topics/manifest/uses-sdk-element.html#ApiLevels">
API level</a>. To support as many devices as possible, you should set this to the lowest
version available that allows your app to provide its core feature set. If any feature of your
- app is possible only on newer versions of Android and it's not critical to the app's core
- feature set, you can enable the feature only when running on the versions that support it (as
- discussed in <a href="{@docRoot}training/basics/supporting-devices/platforms.html">
+ app is possible only on newer versions of Android and it's not critical to the core
+ feature set, enable that feature only when running on the versions that support it (see
+ <a href="{@docRoot}training/basics/supporting-devices/platforms.html">
Supporting Different Platform Versions</a>).</p>
</li>
- <li>Under <strong>Add an Activity to Mobile</strong>, select <strong>Empty
+ <li>In the <strong>Add an Activity to Mobile</strong> screen, select <strong>Empty
Activity</strong> and click <strong>Next</strong>.
</li>
- <div class="sidebox-wrapper">
- <div class="sidebox">
- <h3>Activities</h3>
- <p>An activity is one of the distinguishing features of the Android framework. Activities
- provide the user with access to your app, and there may be many activities. An application
- will usually have a main activity for when the user launches the application, another
- activity for when she selects some content to view, for example, and other activities for
- when she performs other tasks within the app. See <a href="{@docRoot}guide/components/activities.html">
- Activities</a> for more information.</p>
- </div>
- </div>
-
- <li>Under <strong>Customize the Activity</strong>, accept the default values
+ <li>In the <strong>Customize the Activity</strong> screen, keep the default values
and click <strong>Finish</strong>.
</ol>
-<p>Your Android project is now a basic "Hello World" app that contains some default files. Take a
-moment to review the most important of these:</p>
+<p>After some processing, Android Studio opens and displays a "Hello World" app
+with default files. You will add functionality to some of
+these files in the following lessons.</p>
+
+<p>Now take a moment to review the most important files. First, be sure that
+the <b>Project</b> window is open (select <b>View > Tool Windows > Project</b>)
+and the <b>Android</b> view is selected from the drop-down list at the top.
+You can then see the following files:</p>
<dl>
- <dt><code>app/src/main/java/com.example.myfirstapp/MainActivity.java</code></dt>
+ <dt><b>app > java > com.example.myfirstapp > MainActivity.java</b></dt>
<dd>This file appears in Android Studio after the New Project wizard finishes.
It contains the class definition for the activity you created earlier. When you build
and run the app, the {@link android.app.Activity} starts and loads the
layout file that says "Hello World!"</dd>
- <dt><code>app/src/main/res/layout/activity_main.xml</code></dt>
+ <dt><b>app > res > layout > activity_main.xml</b></dt>
<dd>This XML file defines the layout of the activity. It contains a {@code TextView}
element with the text "Hello world!".</dd>
- <dt><code>app/src/main/AndroidManifest.xml</code></dt>
+ <dt><b>app > manifests > AndroidManifest.xml</b></dt>
<dd>The <a href="{@docRoot}guide/topics/manifest/manifest-intro.html">manifest file</a> describes
the fundamental characteristics of the app and defines each of its components. You'll revisit
this file as you follow these lessons and add more components to your app.</dd>
- <dt><code>app/build.gradle</code></dt>
+
+ <dt><b>Gradle Scripts > build.gradle</b></dt>
<dd>Android Studio uses Gradle to compile and build your app. There is a <code>build.gradle</code>
file for each module of your project, as well as a <code>build.gradle</code> file for the entire
- project. Usually, you're only interested in the <code>build.gradle</code> file for the module,
- in this case the <code>app</code> or application module. This is where your app's build dependencies
- are set, including the <code>defaultConfig</code> settings:
- <ul>
- <li><code>compiledSdkVersion</code> is the platform version against which you will compile
- your app. By default, this is set to the latest version of Android available in your SDK.
- By default, this is set to the latest version of Android SDK installed on your
- development machine.
- You can still build your app to support older versions, but setting this to the latest
- version allows you to enable new features and optimize your app for a great user experience
- on the latest devices.</li>
- <li><code>applicationId</code> is the fully qualified package name for your application that
- you specified in the New Project wizard.</li>
- <li><code>minSdkVersion</code> is the Minimum SDK version you specified during the New Project
- wizard. This is the earliest version of the Android SDK that your app supports.</li>
- <li><code>targetSdkVersion</code> indicates the highest version of Android with which you have
- tested your application. As new versions of Android become available, you should
- test your app on the new version and update this value to match the latest API level and
- thereby take advantage of new platform features. For more information, read
- <a href="{@docRoot}training/basics/supporting-devices/platforms.html">Supporting Different
- Platform Versions</a>.</li>
- </ul>
- <p>See <a href="{@docRoot}studio/build/index.html">Building Your Project with Gradle</a>
- for more information about Gradle.</p></dd>
-</dl>
-
-<p>Note also the <code>/res</code> subdirectories that contain the
-<a href="{@docRoot}guide/topics/resources/overview.html">resources</a> for your application:</p>
-<dl>
- <dt><code>drawable<em>-<density></em>/</code></dt>
- <dd>Directories for <a href="{@docRoot}guide/topics/resources/drawable-resource.html">
- drawable resources</a>, other than launcher icons, designed
- for various <a href="{@docRoot}training/multiscreen/screendensities.html">densities</a>.
-</dd>
- <dt><code>layout/</code></dt>
- <dd>Directory for files that define your app's user interface like {@code activity_main.xml},
- discussed above, which describes a basic layout for the {@code MainActivity}
- class.</dd>
- <dt><code>menu/</code></dt>
- <dd>Directory for files that define your app's menu items.</dd>
- <dt><code>mipmap/</code></dt>
- <dd>Launcher icons reside in the {@code mipmap/} folder rather than the
- {@code drawable/} folders. This folder contains the {@code ic_launcher.png} image
- that appears when you run the default app.</dd>
- <dt><code>values/</code></dt>
- <dd>Directory for other XML files that contain a collection of resources, such as
- string and color definitions.</dd>
+ project. Usually, you're only interested in the <code>build.gradle</code> file for the module.
+ in this case the <code>app</code> or application module. For more information about this file,
+ see <a href="{@docRoot}studio/build/index.html">Building Your Project with Gradle</a>.</dd>
</dl>
<p>
diff --git a/docs/html/training/basics/firstapp/running-app.jd b/docs/html/training/basics/firstapp/running-app.jd
index e809871..085849f 100755
--- a/docs/html/training/basics/firstapp/running-app.jd
+++ b/docs/html/training/basics/firstapp/running-app.jd
@@ -3,9 +3,7 @@
parent.link=index.html
trainingnavtop=true
-
page.tags=emulator
-helpoutsWidget=true
@jd:body
@@ -18,7 +16,7 @@
<ol>
<li><a href="#RealDevice">Run on a Real Device</a></li>
- <li><a href="#Emulator">Run on the Emulator</a></li>
+ <li><a href="#Emulator">Run on an Emulator</a></li>
</ol>
<h2>You should also read</h2>
@@ -34,8 +32,10 @@
<p>In the <a href="creating-project.html">previous lesson</a>, you created an
- Android project. The project contains a default app that displays
- "Hello World". In this lesson, you will run the app on a device or emulator.</p>
+Android project that displays "Hello World." You can now run the app on a real
+device or on an emulator. If you don't have a real device available, skip to
+<a href="#Emulator">Run on an Emulator</a>.</p>
+
<h2 id="RealDevice">Run on a Real Device</h2>
@@ -68,7 +68,7 @@
<p>Android Studio installs the app on your connected device and starts it.</p>
-<h2 id="Emulator">Run on the Emulator</h2>
+<h2 id="Emulator">Run on an Emulator</h2>
<p>Before you run your app on an emulator, you need to create an
<a href="{@docRoot}tools/devices/index.html">Android Virtual Device</a> (AVD)
@@ -82,12 +82,14 @@
<strong>Tools > Android > AVD Manager</strong>, or by clicking
the AVD Manager icon <img src="{@docRoot}images/tools/avd-manager-studio.png"
style="vertical-align:bottom;margin:0;height:19px"> in the toolbar.</li>
- <li>On the AVD Manager main screen, click <strong>Create Virtual Device</strong>.</li>
- <li>In the Select Hardware page, select a phone device, such as Nexus 6,
- then click <strong>Next</strong>.
+ <li>In the <b>Your Virtual Devices</b> screen, click <strong>Create Virtual Device</strong>.</li>
+ <li>In the <b>Select Hardware</b> screen, select a phone device, such as Nexus 6,
+ and then click <strong>Next</strong>.
</li>
- <li>In the Select Image page, choose the desired system image for the AVD and
+ <li>In the <b>System Image</b> screen, choose the desired system image for the AVD and
click <strong>Next</strong>.
+ <p>If you don't have a particular system image installed,
+ you can get it by clicking the <b>download</b> link.</p>
</li>
<li>Verify the configuration settings (for your first AVD, leave all the
settings as they are), and then click <strong>Finish</strong>.
diff --git a/docs/html/training/basics/firstapp/starting-activity.jd b/docs/html/training/basics/firstapp/starting-activity.jd
index ebf42cb..4385d13 100644
--- a/docs/html/training/basics/firstapp/starting-activity.jd
+++ b/docs/html/training/basics/firstapp/starting-activity.jd
@@ -38,7 +38,7 @@
<h2 id="RespondToButton">Respond to the Send Button</h2>
<ol>
- <li>In the file <code>res/layout/activity_main.xml</code>, add the
+ <li>In the file <b>res > layout > activity_main.xml</b>, add the
<a href="{@docRoot}reference/android/view/View.html#attr_android:onClick">{@code android:onClick}</a>
attribute to the {@link android.widget.Button <Button>} element as
shown below:
@@ -52,7 +52,7 @@
method in your activity whenever a user clicks on the button.</p>
</li>
- <li>In the file <code>java/com.example.myfirstapp/MainActivity.java</code>,
+ <li>In the file <b>java > com.example.myfirstapp > MainActivity.java</b>,
add the <code>sendMessage()</code> method stub as shown below:
<pre>public class MainActivity extends AppCompatActivity {
@@ -85,7 +85,9 @@
<p>Next, you’ll fill in this method to read the contents of the text field and deliver that text to
another activity.</p>
+
<h2 id="BuildIntent">Build an Intent</h2>
+
<p>An {@link android.content.Intent} is an object that provides runtime binding
between separate components (such as two activities). The
{@link android.content.Intent} represents an app’s "intent to do something."
@@ -113,13 +115,22 @@
}
}</pre>
-<p class="note"><strong>Note: </strong>Android Studio will display
- <code>Cannot resolve symbol</code> errors because the code references classes
- like {@link android.content.Intent} and {@link android.widget.EditText}
- that have not been imported. To import these classes, you can either 1)
- use Android Studio's "import class" functionality by pressing Alt + Enter
- (Option + Return on Mac) or 2) manually add import statements at the top of
- the file.</p>
+<p>Android Studio will display <b>Cannot
+resolve symbol</b> errors because this code references classes that are not
+imported. You can solve some of these with Android Studio's "import class"
+functionality by pressing Alt + Enter (or Option + Return on Mac).
+Your imports should end up as the following:</p>
+<pre>
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.View;
+import android.widget.EditText;
+</pre>
+
+<p>An error remains for <code>DisplayMessageActivity</code>, but that's okay;
+you'll fix that in the next section.
+
<p>There’s a lot going on in <code>sendMessage()</code>, so let’s explain
what's going on.</p>
@@ -150,6 +161,7 @@
method starts an instance of the <code>DisplayMessageActivity</code> specified
by the {@link android.content.Intent}. Now you need to create the class.</p>
+
<h2 id="CreateActivity">Create the Second Activity</h2>
<ol>
@@ -169,7 +181,8 @@
<li>Creates the corresponding layout file <code>activity_display_message.xml</code>
</li>
<li>Adds the required
- <a href="{@docRoot}guide/topics/manifest/activity-element.html"><activity></a>
+ <a href="{@docRoot}guide/topics/manifest/activity-element.html"
+ ><code><activity></code></a>
element in <code>AndroidManifest.xml</code>.
</ul>
@@ -199,7 +212,16 @@
layout.addView(textView);
}</pre>
</li>
- <li>Press Alt + Enter (option + return on Mac) to import missing classes.</li>
+ <li>Press Alt + Enter (or Option + Return on Mac) to import missing classes.
+ Your imports should end up as the following:
+<pre>
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.ViewGroup;
+import android.widget.TextView;
+</pre>
+</li>
</ol>
<p>There’s a lot going on here, so let’s explain:</p>
diff --git a/docs/html/training/implementing-navigation/nav-drawer.jd b/docs/html/training/implementing-navigation/nav-drawer.jd
index d359a47..abc79b6 100644
--- a/docs/html/training/implementing-navigation/nav-drawer.jd
+++ b/docs/html/training/implementing-navigation/nav-drawer.jd
@@ -173,7 +173,7 @@
<pre>
private class DrawerItemClickListener implements ListView.OnItemClickListener {
@Override
- public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
+ public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
selectItem(position);
}
}
diff --git a/docs/html/training/multiple-threads/define-runnable.jd b/docs/html/training/multiple-threads/define-runnable.jd
index 40853d3..84c7bdf 100644
--- a/docs/html/training/multiple-threads/define-runnable.jd
+++ b/docs/html/training/multiple-threads/define-runnable.jd
@@ -23,11 +23,10 @@
<div class="download-box">
<a href="{@docRoot}shareables/training/ThreadSample.zip" class="button">Download the sample</a>
<p class="filename">ThreadSample.zip</p>
-</div>
-</div>
+</div> <!-- download-box -->
-</div>
-</div>
+</div> <!-- tb -->
+</div> <!-- tb-wrapper -->
<p>
This lesson shows you how to implement a {@link java.lang.Runnable} class, which runs the code
diff --git a/docs/html/training/notify-user/navigation.jd b/docs/html/training/notify-user/navigation.jd
index 65f8d48b..d0ec1cd 100644
--- a/docs/html/training/notify-user/navigation.jd
+++ b/docs/html/training/notify-user/navigation.jd
@@ -205,7 +205,7 @@
notifyIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK |
Intent.FLAG_ACTIVITY_CLEAR_TASK);
// Creates the PendingIntent
-PendingIntent notifyIntent =
+PendingIntent pendingIntent =
PendingIntent.getActivity(
this,
0,
@@ -214,7 +214,7 @@
);
// Puts the PendingIntent into the notification builder
-builder.setContentIntent(notifyIntent);
+builder.setContentIntent(pendingIntent);
// Notifications are issued by sending them to the
// NotificationManager system service.
NotificationManager mNotificationManager =
diff --git a/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd b/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
index 00622ee..8fc4dca 100644
--- a/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
+++ b/docs/html/training/testing/unit-testing/instrumented-unit-tests.jd
@@ -95,6 +95,19 @@
}
</pre>
+<div class="caution">
+<p><strong>Caution:</strong> If your build configuration includes a
+<code>compile</code> dependency for the <code>support-annotations</code>
+library <b>and</b> an <code>androidTestCompile</code> dependency for the
+<code>espresso-core</code> library, your build might fail due to a dependency
+conflict. To resolve, update your dependency for <code>espresso-core</code>
+as follows:</p>
+<pre>
+androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
+ exclude group: 'com.android.support', module: 'support-annotations'
+})
+</pre>
+</div>
<p>
To use JUnit 4 test classes, make sure to specify <a href=
diff --git a/docs/html/training/transitions/index.jd b/docs/html/training/transitions/index.jd
index 53faa01..b8f99c8 100644
--- a/docs/html/training/transitions/index.jd
+++ b/docs/html/training/transitions/index.jd
@@ -48,11 +48,9 @@
animations.</p>
<p class="note"><strong>Note:</strong> For Android versions earlier than 4.4.2 (API level 19)
-but greater than or equal to Android 4.0 (API level 14), use the <code>animateLayoutChanges</code>
-attribute to animate layouts. To learn more, see
-<a href="{@docRoot}guide/topics/graphics/prop-animation.html">Property Animation</a> and
-<a href="{@docRoot}training/animation/layout.html">Animating Layout Changes</a>.</p>
-
+but greater than or equal to Android 4.0 (API level 14), use the Android Support
+Library's <a href="/reference/android/support/transitions/package-summary.html"
+><code>android.support.transition</code></a> package.</p>
<h2>Lessons</h2>
diff --git a/docs/html/tv/index.jd b/docs/html/tv/index.jd
index 7c958c0..6ecc1ea 100644
--- a/docs/html/tv/index.jd
+++ b/docs/html/tv/index.jd
@@ -13,7 +13,7 @@
<style>
.fullpage>#footer,
-#jd-content>.content-footer.wrap {
+#body-content>.content-footer.wrap {
display:none;
}
</style>
diff --git a/docs/html/wear/index.jd b/docs/html/wear/index.jd
index f5e9e87..f9bdef5 100644
--- a/docs/html/wear/index.jd
+++ b/docs/html/wear/index.jd
@@ -9,7 +9,7 @@
<style>
.fullpage>#footer,
-#jd-content>.content-footer.wrap {
+#body-content>.content-footer.wrap {
display:none;
}
</style>
diff --git a/docs/html/wear/preview/index.jd b/docs/html/wear/preview/index.jd
index 4b3c1f2..6292577 100644
--- a/docs/html/wear/preview/index.jd
+++ b/docs/html/wear/preview/index.jd
@@ -7,16 +7,6 @@
footer.hide=1
@jd:body
-<script>
- $(document).ready(function() {
- if (useUpdatedTemplates) {
- $("#useUpdatedTemplates").css("display","block");
- } else {
- $("#useOldTemplates").css("display","block");
- }
- })
-</script>
-
<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;">
@@ -55,7 +45,7 @@
</div>
</section>
-<div id="useUpdatedTemplates" style="display:none" class="dac-section dac-slim dac-gray dac-expand">
+<div class="dac-section dac-slim dac-gray dac-expand">
<div class="wrap dac-offset-parent">
<a class="dac-fab dac-scroll-button" data-scroll-button href="#build-apps">
<i class="dac-sprite dac-arrow-down-gray"></i>
@@ -77,22 +67,6 @@
</div><!-- end .wrap -->
</div><!-- end .dac-actions -->
-<div id="useOldTemplates" style="display:none;color:black" class="actions-bar dac-expand dac-invert">
- <div class="wrap dac-offset-parent">
-
- <div class="actions">
- <div><a href="{@docRoot}wear/preview/bug">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Report an issue
- </a></div>
- <div><a href="http://g.co/androidweardev">
- <span class="dac-sprite dac-auto-chevron-large"></span>
- Join developer community
- </a></div>
- </div><!-- end .actions -->
- </div><!-- end .wrap -->
-</div>
-
<section class="dac-section dac-light"><div class="wrap">
<h1 class="dac-section-title">Resources</h1>
<div class="dac-section-subtitle">
diff --git a/docs/html/work/guide.jd b/docs/html/work/guide.jd
index 30b895b..b2be949 100644
--- a/docs/html/work/guide.jd
+++ b/docs/html/work/guide.jd
@@ -412,6 +412,17 @@
</li>
</ol>
+<p class="caution"><b>Caution</b>: When running your app with Instant Run in
+Android Studio, attempting to open your app with a Work profile or secondary
+profile will crash your app. To use your app with the Work profile, we
+recommend you create a new <a href="/studio/run/rundebugconfig.html">run
+configuration</a> that includes the <code>--user <var>user_id</var></code> flag,
+specifying the Work profile user ID. You can find the user ID by executing
+<code>adb shell pm list users</code> from command line. For more information,
+see the <a href="/studio/run/index.html#ir-work-profile">Instant Run
+documentation</a>.</p>
+
+
<h3>Provision a device owner</h3>
<p>
diff --git a/graphics/java/android/graphics/SurfaceTexture.java b/graphics/java/android/graphics/SurfaceTexture.java
index 5c54324..c386108 100644
--- a/graphics/java/android/graphics/SurfaceTexture.java
+++ b/graphics/java/android/graphics/SurfaceTexture.java
@@ -77,6 +77,8 @@
private long mProducer;
private long mFrameAvailableListener;
+ private boolean mIsSingleBuffered;
+
/**
* Callback interface for being notified that a new stream frame is available.
*/
@@ -130,6 +132,7 @@
*/
public SurfaceTexture(int texName, boolean singleBufferMode) {
mCreatorLooper = Looper.myLooper();
+ mIsSingleBuffered = singleBufferMode;
nativeInit(false, texName, singleBufferMode, new WeakReference<SurfaceTexture>(this));
}
@@ -157,6 +160,7 @@
*/
public SurfaceTexture(boolean singleBufferMode) {
mCreatorLooper = Looper.myLooper();
+ mIsSingleBuffered = singleBufferMode;
nativeInit(true, 0, singleBufferMode, new WeakReference<SurfaceTexture>(this));
}
@@ -378,6 +382,14 @@
}
}
+ /**
+ * Returns true if the SurfaceTexture is single-buffered
+ * @hide
+ */
+ public boolean isSingleBuffered() {
+ return mIsSingleBuffered;
+ }
+
private native void nativeInit(boolean isDetached, int texName,
boolean singleBufferMode, WeakReference<SurfaceTexture> weakSelf)
throws Surface.OutOfResourcesException;
diff --git a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
index c6a45c1..0f305f3 100644
--- a/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/AnimatedVectorDrawable.java
@@ -144,6 +144,55 @@
* android:valueType="pathType"/>
* </set>
* </pre></li>
+ * <p>
+ * Since AAPT tool is now supporting a new format which can bundle several related XML files into
+ * one, we can merge the previous example into one XML file, like this:
+ * </p>
+ * <pre>
+ * <animated-vector xmlns:android="http://schemas.android.com/apk/res/android" >
+ * <aapt:attr name="android:drawable">
+ * <vector
+ * android:height="64dp"
+ * android:width="64dp"
+ * android:viewportHeight="600"
+ * android:viewportWidth="600" >
+ * <group
+ * android:name="rotationGroup"
+ * android:pivotX="300.0"
+ * android:pivotY="300.0"
+ * android:rotation="45.0" >
+ * <path
+ * android:name="v"
+ * android:fillColor="#000000"
+ * android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
+ * </group>
+ * </vector>
+ * </aapt:attr>
+ *
+ * <target android:name="rotationGroup"> *
+ * <aapt:attr name="android:animation">
+ * <objectAnimator
+ * android:duration="6000"
+ * android:propertyName="rotation"
+ * android:valueFrom="0"
+ * android:valueTo="360" />
+ * </aapt:attr>
+ * </target>
+ *
+ * <target android:name="v" >
+ * <aapt:attr name="android:animation">
+ * <set>
+ * <objectAnimator
+ * android:duration="3000"
+ * android:propertyName="pathData"
+ * android:valueFrom="M300,70 l 0,-70 70,70 0,0 -70,70z"
+ * android:valueTo="M300,70 l 0,-70 70,0 0,140 -70,0 z"
+ * android:valueType="pathType"/>
+ * </set>
+ * </aapt:attr>
+ * </target>
+ * </animated-vector>
+ * </pre>
*
* @attr ref android.R.styleable#AnimatedVectorDrawable_drawable
* @attr ref android.R.styleable#AnimatedVectorDrawableTarget_name
@@ -244,10 +293,7 @@
// to UI thread animation for AVD.
if (!mAnimatorSet.isRunning() &&
((VectorDrawableAnimatorRT) mAnimatorSet).mPendingAnimationActions.size() > 0) {
- VectorDrawableAnimatorRT oldAnim = (VectorDrawableAnimatorRT) mAnimatorSet;
- mAnimatorSet = new VectorDrawableAnimatorUI(this);
- mAnimatorSet.init(mAnimatorSetFromXml);
- oldAnim.transferPendingActions(mAnimatorSet);
+ fallbackOntoUI();
}
}
mAnimatorSet.onDraw(canvas);
@@ -490,10 +536,22 @@
throw new UnsupportedOperationException("Cannot force Animated Vector Drawable to" +
" run on UI thread when the animation has started on RenderThread.");
}
+ fallbackOntoUI();
+ }
+ }
+
+ private void fallbackOntoUI() {
+ if (mAnimatorSet instanceof VectorDrawableAnimatorRT) {
+ VectorDrawableAnimatorRT oldAnim = (VectorDrawableAnimatorRT) mAnimatorSet;
mAnimatorSet = new VectorDrawableAnimatorUI(this);
if (mAnimatorSetFromXml != null) {
mAnimatorSet.init(mAnimatorSetFromXml);
}
+ // Transfer the listener from RT animator to UI animator
+ if (oldAnim.mListener != null) {
+ mAnimatorSet.setListener(oldAnim.mListener);
+ }
+ oldAnim.transferPendingActions(mAnimatorSet);
}
}
diff --git a/graphics/java/android/graphics/drawable/Drawable.java b/graphics/java/android/graphics/drawable/Drawable.java
index 7f3a437..3aca867 100644
--- a/graphics/java/android/graphics/drawable/Drawable.java
+++ b/graphics/java/android/graphics/drawable/Drawable.java
@@ -1422,9 +1422,10 @@
/**
* Obtains styled attributes from the theme, if available, or unstyled
* resources if the theme is null.
+ * @hide
*/
- static @NonNull TypedArray obtainAttributes(@NonNull Resources res, @Nullable Theme theme,
- @NonNull AttributeSet set, @NonNull int[] attrs) {
+ protected static @NonNull TypedArray obtainAttributes(@NonNull Resources res,
+ @Nullable Theme theme, @NonNull AttributeSet set, @NonNull int[] attrs) {
if (theme == null) {
return res.obtainAttributes(set, attrs);
}
diff --git a/graphics/java/android/graphics/drawable/DrawableContainer.java b/graphics/java/android/graphics/drawable/DrawableContainer.java
index cc7f5c7..c7a3c75 100644
--- a/graphics/java/android/graphics/drawable/DrawableContainer.java
+++ b/graphics/java/android/graphics/drawable/DrawableContainer.java
@@ -27,8 +27,8 @@
import android.graphics.Insets;
import android.graphics.Outline;
import android.graphics.PixelFormat;
-import android.graphics.Rect;
import android.graphics.PorterDuff.Mode;
+import android.graphics.Rect;
import android.os.SystemClock;
import android.util.DisplayMetrics;
import android.util.LayoutDirection;
@@ -601,8 +601,9 @@
* during inflation.
*
* @param res the resources used to inflate density-dependent values
+ * @hide
*/
- final void updateDensity(Resources res) {
+ protected final void updateDensity(Resources res) {
mDrawableContainerState.updateDensity(res);
}
@@ -711,7 +712,10 @@
boolean mHasTintList;
boolean mHasTintMode;
- DrawableContainerState(DrawableContainerState orig, DrawableContainer owner,
+ /**
+ * @hide
+ */
+ protected DrawableContainerState(DrawableContainerState orig, DrawableContainer owner,
Resources res) {
mOwner = owner;
mSourceRes = res != null ? res : (orig != null ? orig.mSourceRes : null);
diff --git a/graphics/java/android/graphics/drawable/GradientDrawable.java b/graphics/java/android/graphics/drawable/GradientDrawable.java
index 3dbd2a9..8c633b0 100644
--- a/graphics/java/android/graphics/drawable/GradientDrawable.java
+++ b/graphics/java/android/graphics/drawable/GradientDrawable.java
@@ -475,16 +475,17 @@
}
/**
- * Sets the center location in pixels of the gradient. The radius is
- * honored only when the gradient type is set to {@link #RADIAL_GRADIENT}
- * or {@link #SWEEP_GRADIENT}.
+ * Sets the position of the center of the gradient as a fraction of the
+ * width and height.
+ * <p>
+ * The default value is (0.5, 0.5).
* <p>
* <strong>Note</strong>: changing this property will affect all instances
* of a drawable loaded from a resource. It is recommended to invoke
* {@link #mutate()} before changing this property.
*
- * @param x the x coordinate of the gradient's center in pixels
- * @param y the y coordinate of the gradient's center in pixels
+ * @param x the X-position of the center of the gradient
+ * @param y the Y-position of the center of the gradient
*
* @see #mutate()
* @see #setGradientType(int)
@@ -498,9 +499,10 @@
}
/**
- * Returns the center X location of this gradient in pixels.
+ * Returns the X-position of the center of the gradient as a fraction of
+ * the width.
*
- * @return the center X location of this gradient in pixels
+ * @return the X-position of the center of the gradient
* @see #setGradientCenter(float, float)
*/
public float getGradientCenterX() {
@@ -508,9 +510,10 @@
}
/**
- * Returns the center Y location of this gradient in pixels.
+ * Returns the Y-position of the center of this gradient as a fraction of
+ * the height.
*
- * @return the center Y location of this gradient in pixels
+ * @return the Y-position of the center of the gradient
* @see #setGradientCenter(float, float)
*/
public float getGradientCenterY() {
@@ -554,19 +557,43 @@
}
/**
- * Sets whether or not this drawable will honor its {@code level} property.
+ * Sets whether this drawable's {@code level} property will be used to
+ * scale the gradient. If a gradient is not used, this property has no
+ * effect.
* <p>
- * <strong>Note</strong>: changing this property will affect all instances
+ * Scaling behavior varies based on gradient type:
+ * <ul>
+ * <li>{@link #LINEAR_GRADIENT} adjusts the ending position along the
+ * gradient's axis of orientation (see {@link #getOrientation()})
+ * <li>{@link #RADIAL_GRADIENT} adjusts the outer radius
+ * <li>{@link #SWEEP_GRADIENT} adjusts the ending angle
+ * <ul>
+ * <p>
+ * The default value for this property is {@code false}.
+ * <p>
+ * <strong>Note</strong>: This property corresponds to the
+ * {@code android:useLevel} attribute on the inner {@code <gradient>}
+ * tag, NOT the {@code android:useLevel} attribute on the outer
+ * {@code <shape>} tag. For example,
+ * <pre>{@code
+ * <shape ...>
+ * <gradient
+ * ...
+ * android:useLevel="true" />
+ * </shape>
+ * }</pre><p>
+ * <strong>Note</strong>: Changing this property will affect all instances
* of a drawable loaded from a resource. It is recommended to invoke
* {@link #mutate()} before changing this property.
*
- * @param useLevel {@code true} if this drawable should honor its level,
- * {@code false} otherwise
+ * @param useLevel {@code true} if the gradient should be scaled based on
+ * level, {@code false} otherwise
*
* @see #mutate()
* @see #setLevel(int)
* @see #getLevel()
* @see #getUseLevel()
+ * @attr ref android.R.styleable#GradientDrawableGradient_useLevel
*/
public void setUseLevel(boolean useLevel) {
mGradientState.mUseLevel = useLevel;
@@ -575,12 +602,13 @@
}
/**
- * Returns whether or not this drawable will honor its {@code level}
- * property.
+ * Returns whether this drawable's {@code level} property will be used to
+ * scale the gradient.
*
- * @return {@code true} if this drawable should honor its level,
+ * @return {@code true} if the gradient should be scaled based on level,
* {@code false} otherwise
* @see #setUseLevel(boolean)
+ * @attr ref android.R.styleable#GradientDrawableGradient_useLevel
*/
public boolean getUseLevel() {
return mGradientState.mUseLevel;
diff --git a/graphics/java/android/graphics/drawable/LayerDrawable.java b/graphics/java/android/graphics/drawable/LayerDrawable.java
index 1864206..c30c4c2 100644
--- a/graphics/java/android/graphics/drawable/LayerDrawable.java
+++ b/graphics/java/android/graphics/drawable/LayerDrawable.java
@@ -269,7 +269,8 @@
// If the layer doesn't have a drawable or unresolved theme
// attribute for a drawable, attempt to parse one from the child
- // element.
+ // element. If multiple child elements exist, we'll only use the
+ // first one.
if (layer.mDrawable == null && (layer.mThemeAttrs == null ||
layer.mThemeAttrs[R.styleable.LayerDrawableItem_drawable] == 0)) {
while ((type = parser.next()) == XmlPullParser.TEXT) {
@@ -279,13 +280,12 @@
+ ": <item> tag requires a 'drawable' attribute or "
+ "child tag defining a drawable");
}
- layer.mDrawable = Drawable.createFromXmlInner(r, parser, attrs, theme);
- }
- if (layer.mDrawable != null) {
+ // We found a child drawable. Take ownership.
+ layer.mDrawable = Drawable.createFromXmlInner(r, parser, attrs, theme);
+ layer.mDrawable.setCallback(this);
state.mChildrenChangingConfigurations |=
layer.mDrawable.getChangingConfigurations();
- layer.mDrawable.setCallback(this);
}
addLayer(layer);
@@ -387,7 +387,19 @@
final Drawable dr = a.getDrawable(R.styleable.LayerDrawableItem_drawable);
if (dr != null) {
+ if (layer.mDrawable != null) {
+ // It's possible that a drawable was already set, in which case
+ // we should clear the callback. We may have also integrated the
+ // drawable's changing configurations, but we don't have enough
+ // information to revert that change.
+ layer.mDrawable.setCallback(null);
+ }
+
+ // Take ownership of the new drawable.
layer.mDrawable = dr;
+ layer.mDrawable.setCallback(this);
+ state.mChildrenChangingConfigurations |=
+ layer.mDrawable.getChangingConfigurations();
}
}
diff --git a/graphics/java/android/graphics/drawable/VectorDrawable.java b/graphics/java/android/graphics/drawable/VectorDrawable.java
index dc1d18f..9ff6965 100644
--- a/graphics/java/android/graphics/drawable/VectorDrawable.java
+++ b/graphics/java/android/graphics/drawable/VectorDrawable.java
@@ -27,9 +27,9 @@
import android.graphics.ColorFilter;
import android.graphics.Insets;
import android.graphics.PixelFormat;
+import android.graphics.PorterDuff.Mode;
import android.graphics.PorterDuffColorFilter;
import android.graphics.Rect;
-import android.graphics.PorterDuff.Mode;
import android.graphics.Shader;
import android.util.ArrayMap;
import android.util.AttributeSet;
@@ -140,12 +140,16 @@
* in the SVG's path data. This is defined in the viewport space.</dd>
* <dt><code>android:fillColor</code></dt>
* <dd>Specifies the color used to fill the path. May be a color or, for SDK 24+, a color state list
- * or a gradient color. If this property is animated, any value set by the animation will
- * override the original value. No path fill is drawn if this property is not specified.</dd>
+ * or a gradient color (See {@link android.R.styleable#GradientColor}
+ * and {@link android.R.styleable#GradientColorItem}).
+ * If this property is animated, any value set by the animation will override the original value.
+ * No path fill is drawn if this property is not specified.</dd>
* <dt><code>android:strokeColor</code></dt>
* <dd>Specifies the color used to draw the path outline. May be a color or, for SDK 24+, a color
- * state list or a gradient color. If this property is animated, any value set by the animation will
- * override the original value. No path outline is drawn if this property is not specified.</dd>
+ * state list or a gradient color (See {@link android.R.styleable#GradientColor}
+ * and {@link android.R.styleable#GradientColorItem}).
+ * If this property is animated, any value set by the animation will override the original value.
+ * No path outline is drawn if this property is not specified.</dd>
* <dt><code>android:strokeWidth</code></dt>
* <dd>The width a path stroke.</dd>
* <dt><code>android:strokeAlpha</code></dt>
@@ -166,8 +170,9 @@
* <dt><code>android:strokeMiterLimit</code></dt>
* <dd>Sets the Miter limit for a stroked path.</dd>
* <dt><code>android:fillType</code></dt>
- * <dd>Sets the fillType for a path. It is the same as SVG's "fill-rule" properties.
- * For more details, see https://www.w3.org/TR/SVG/painting.html#FillRuleProperty</dd>
+ * <dd>Sets the fillType for a path. The types can be either "evenOdd" or "nonZero". They behave the
+ * same as SVG's "fill-rule" properties. For more details, see
+ * <a href="https://www.w3.org/TR/SVG/painting.html#FillRuleProperty">FillRuleProperty</a></dd>
* </dl></dd>
* </dl>
*
@@ -201,7 +206,26 @@
* android:pathData="M300,70 l 0,-70 70,70 0,0 -70,70z" />
* </group>
* </vector>
- * </pre></li>
+ * </pre>
+ * </li>
+ * <li>And here is an example of linear gradient color, which is supported in SDK 24+.
+ * See more details in {@link android.R.styleable#GradientColor} and
+ * {@link android.R.styleable#GradientColorItem}.
+ * <pre>
+ * <gradient xmlns:android="http://schemas.android.com/apk/res/android"
+ * android:angle="90"
+ * android:startColor="?android:attr/colorPrimary"
+ * android:endColor="?android:attr/colorControlActivated"
+ * android:centerColor="#f00"
+ * android:startX="0"
+ * android:startY="0"
+ * android:endX="100"
+ * android:endY="100"
+ * android:type="linear">
+ * </gradient>
+ * </pre>
+ * </li>
+ *
*/
public class VectorDrawable extends Drawable {
diff --git a/graphics/java/android/graphics/pdf/PdfEditor.java b/graphics/java/android/graphics/pdf/PdfEditor.java
index 2b70b6a..cd1f8de 100644
--- a/graphics/java/android/graphics/pdf/PdfEditor.java
+++ b/graphics/java/android/graphics/pdf/PdfEditor.java
@@ -79,8 +79,12 @@
}
mInput = input;
- mNativeDocument = nativeOpen(mInput.getFd(), size);
- mPageCount = nativeGetPageCount(mNativeDocument);
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ mNativeDocument = nativeOpen(mInput.getFd(), size);
+ mPageCount = nativeGetPageCount(mNativeDocument);
+ }
+
mCloseGuard.open("close");
}
@@ -102,7 +106,10 @@
public void removePage(int pageIndex) {
throwIfClosed();
throwIfPageNotInDocument(pageIndex);
- mPageCount = nativeRemovePage(mNativeDocument, pageIndex);
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ mPageCount = nativeRemovePage(mNativeDocument, pageIndex);
+ }
}
/**
@@ -125,11 +132,16 @@
if (clip == null) {
Point size = new Point();
getPageSize(pageIndex, size);
- nativeSetTransformAndClip(mNativeDocument, pageIndex, transform.native_instance,
- 0, 0, size.x, size.y);
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ nativeSetTransformAndClip(mNativeDocument, pageIndex, transform.native_instance,
+ 0, 0, size.x, size.y);
+ }
} else {
- nativeSetTransformAndClip(mNativeDocument, pageIndex, transform.native_instance,
- clip.left, clip.top, clip.right, clip.bottom);
+ synchronized (PdfRenderer.sPdfiumLock) {
+ nativeSetTransformAndClip(mNativeDocument, pageIndex, transform.native_instance,
+ clip.left, clip.top, clip.right, clip.bottom);
+ }
}
}
@@ -143,7 +155,10 @@
throwIfClosed();
throwIfOutSizeNull(outSize);
throwIfPageNotInDocument(pageIndex);
- nativeGetPageSize(mNativeDocument, pageIndex, outSize);
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ nativeGetPageSize(mNativeDocument, pageIndex, outSize);
+ }
}
/**
@@ -156,7 +171,10 @@
throwIfClosed();
throwIfOutMediaBoxNull(outMediaBox);
throwIfPageNotInDocument(pageIndex);
- return nativeGetPageMediaBox(mNativeDocument, pageIndex, outMediaBox);
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ return nativeGetPageMediaBox(mNativeDocument, pageIndex, outMediaBox);
+ }
}
/**
@@ -169,7 +187,10 @@
throwIfClosed();
throwIfMediaBoxNull(mediaBox);
throwIfPageNotInDocument(pageIndex);
- nativeSetPageMediaBox(mNativeDocument, pageIndex, mediaBox);
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ nativeSetPageMediaBox(mNativeDocument, pageIndex, mediaBox);
+ }
}
/**
@@ -182,7 +203,10 @@
throwIfClosed();
throwIfOutCropBoxNull(outCropBox);
throwIfPageNotInDocument(pageIndex);
- return nativeGetPageCropBox(mNativeDocument, pageIndex, outCropBox);
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ return nativeGetPageCropBox(mNativeDocument, pageIndex, outCropBox);
+ }
}
/**
@@ -195,7 +219,10 @@
throwIfClosed();
throwIfCropBoxNull(cropBox);
throwIfPageNotInDocument(pageIndex);
- nativeSetPageCropBox(mNativeDocument, pageIndex, cropBox);
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ nativeSetPageCropBox(mNativeDocument, pageIndex, cropBox);
+ }
}
/**
@@ -205,7 +232,10 @@
*/
public boolean shouldScaleForPrinting() {
throwIfClosed();
- return nativeScaleForPrinting(mNativeDocument);
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ return nativeScaleForPrinting(mNativeDocument);
+ }
}
/**
@@ -219,7 +249,10 @@
public void write(ParcelFileDescriptor output) throws IOException {
try {
throwIfClosed();
- nativeWrite(mNativeDocument, output.getFd());
+
+ synchronized (PdfRenderer.sPdfiumLock) {
+ nativeWrite(mNativeDocument, output.getFd());
+ }
} finally {
IoUtils.closeQuietly(output);
}
@@ -247,7 +280,9 @@
}
private void doClose() {
- nativeClose(mNativeDocument);
+ synchronized (PdfRenderer.sPdfiumLock) {
+ nativeClose(mNativeDocument);
+ }
IoUtils.closeQuietly(mInput);
mInput = null;
mCloseGuard.close();
diff --git a/graphics/java/android/graphics/pdf/PdfRenderer.java b/graphics/java/android/graphics/pdf/PdfRenderer.java
index 520ebe5..cfc1309 100644
--- a/graphics/java/android/graphics/pdf/PdfRenderer.java
+++ b/graphics/java/android/graphics/pdf/PdfRenderer.java
@@ -99,6 +99,12 @@
* @see #close()
*/
public final class PdfRenderer implements AutoCloseable {
+ /**
+ * Any call the native pdfium code has to be single threaded as the library does not support
+ * parallel use.
+ */
+ final static Object sPdfiumLock = new Object();
+
private final CloseGuard mCloseGuard = CloseGuard.get();
private final Point mTempPoint = new Point();
@@ -154,8 +160,12 @@
}
mInput = input;
- mNativeDocument = nativeCreate(mInput.getFd(), size);
- mPageCount = nativeGetPageCount(mNativeDocument);
+
+ synchronized (sPdfiumLock) {
+ mNativeDocument = nativeCreate(mInput.getFd(), size);
+ mPageCount = nativeGetPageCount(mNativeDocument);
+ }
+
mCloseGuard.open("close");
}
@@ -189,7 +199,10 @@
*/
public boolean shouldScaleForPrinting() {
throwIfClosed();
- return nativeScaleForPrinting(mNativeDocument);
+
+ synchronized (sPdfiumLock) {
+ return nativeScaleForPrinting(mNativeDocument);
+ }
}
/**
@@ -224,7 +237,9 @@
if (mCurrentPage != null) {
mCurrentPage.close();
}
- nativeClose(mNativeDocument);
+ synchronized (sPdfiumLock) {
+ nativeClose(mNativeDocument);
+ }
try {
mInput.close();
} catch (IOException ioe) {
@@ -277,7 +292,9 @@
private Page(int index) {
Point size = mTempPoint;
- mNativePage = nativeOpenPageAndGetSize(mNativeDocument, index, size);
+ synchronized (sPdfiumLock) {
+ mNativePage = nativeOpenPageAndGetSize(mNativeDocument, index, size);
+ }
mIndex = index;
mWidth = size.x;
mHeight = size.y;
@@ -384,8 +401,10 @@
final long transformPtr = (transform != null) ? transform.native_instance : 0;
- nativeRenderPage(mNativeDocument, mNativePage, destination, contentLeft,
- contentTop, contentRight, contentBottom, transformPtr, renderMode);
+ synchronized (sPdfiumLock) {
+ nativeRenderPage(mNativeDocument, mNativePage, destination, contentLeft,
+ contentTop, contentRight, contentBottom, transformPtr, renderMode);
+ }
}
/**
@@ -412,7 +431,9 @@
}
private void doClose() {
- nativeClosePage(mNativePage);
+ synchronized (sPdfiumLock) {
+ nativeClosePage(mNativePage);
+ }
mNativePage = 0;
mCloseGuard.close();
mCurrentPage = null;
diff --git a/keystore/java/android/security/KeyChain.java b/keystore/java/android/security/KeyChain.java
index cce58c2..a96ca39 100644
--- a/keystore/java/android/security/KeyChain.java
+++ b/keystore/java/android/security/KeyChain.java
@@ -20,6 +20,7 @@
import android.annotation.WorkerThread;
import android.app.Activity;
import android.app.PendingIntent;
+import android.app.Service;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
@@ -356,6 +357,9 @@
*
* <p> This method may block while waiting for a connection to another process, and must never
* be called from the main thread.
+ * <p> As {@link Activity} and {@link Service} contexts are short-lived and can be destroyed
+ * at any time from the main thread, it is safer to rely on a long-lived context such as one
+ * returned from {@link Context#getApplicationContext()}.
*
* @param alias The alias of the desired private key, typically returned via
* {@link KeyChainAliasCallback#alias}.
@@ -368,7 +372,7 @@
if (alias == null) {
throw new NullPointerException("alias == null");
}
- KeyChainConnection keyChainConnection = bind(context);
+ KeyChainConnection keyChainConnection = bind(context.getApplicationContext());
try {
final IKeyChainService keyChainService = keyChainConnection.getService();
final String keyId = keyChainService.requestPrivateKey(alias);
@@ -400,6 +404,9 @@
*
* <p> This method may block while waiting for a connection to another process, and must never
* be called from the main thread.
+ * <p> As {@link Activity} and {@link Service} contexts are short-lived and can be destroyed
+ * at any time from the main thread, it is safer to rely on a long-lived context such as one
+ * returned from {@link Context#getApplicationContext()}.
*
* @param alias The alias of the desired certificate chain, typically
* returned via {@link KeyChainAliasCallback#alias}.
@@ -412,7 +419,7 @@
if (alias == null) {
throw new NullPointerException("alias == null");
}
- KeyChainConnection keyChainConnection = bind(context);
+ KeyChainConnection keyChainConnection = bind(context.getApplicationContext());
try {
IKeyChainService keyChainService = keyChainConnection.getService();
diff --git a/libs/hwui/Readback.cpp b/libs/hwui/Readback.cpp
index 55f823d..0ab247d 100644
--- a/libs/hwui/Readback.cpp
+++ b/libs/hwui/Readback.cpp
@@ -136,7 +136,7 @@
EGL_NATIVE_BUFFER_ANDROID, clientBuffer, attrs);
if (sourceImage == EGL_NO_IMAGE_KHR) {
- ALOGW("Error creating image (%#x)", eglGetError());
+ ALOGW("eglCreateImageKHR failed (%#x)", eglGetError());
return CopyResult::UnknownError;
}
GLuint sourceTexId;
@@ -147,7 +147,8 @@
GLenum status = GL_NO_ERROR;
while ((status = glGetError()) != GL_NO_ERROR) {
- ALOGW("Error creating image (%#x)", status);
+ ALOGW("glEGLImageTargetTexture2DOES failed (%#x)", status);
+ eglDestroyImageKHR(display, sourceImage);
return CopyResult::UnknownError;
}
@@ -183,6 +184,13 @@
caches.textureState().deleteTexture(texture);
renderState.deleteFramebuffer(fbo);
+ sourceTexture.deleteTexture();
+ // All we're flushing & finishing is the deletion of the texture since
+ // copyTextureInto already did a major flush & finish as an implicit
+ // part of glReadPixels, so this shouldn't pose any major stalls.
+ glFinish();
+ eglDestroyImageKHR(display, sourceImage);
+
GL_CHECKPOINT(MODERATE);
return CopyResult::Success;
diff --git a/libs/hwui/renderthread/CanvasContext.cpp b/libs/hwui/renderthread/CanvasContext.cpp
index dcaec42..70b9a43 100644
--- a/libs/hwui/renderthread/CanvasContext.cpp
+++ b/libs/hwui/renderthread/CanvasContext.cpp
@@ -633,6 +633,9 @@
prepareTree(info, frameInfo, systemTime(CLOCK_MONOTONIC), node);
if (info.out.canDrawThisFrame) {
draw();
+ } else {
+ // wait on fences so tasks don't overlap next frame
+ waitOnFences();
}
}
diff --git a/libs/hwui/renderthread/CanvasContext.h b/libs/hwui/renderthread/CanvasContext.h
index 3eef29b..e182175 100644
--- a/libs/hwui/renderthread/CanvasContext.h
+++ b/libs/hwui/renderthread/CanvasContext.h
@@ -168,6 +168,8 @@
ANDROID_API int64_t getFrameNumber();
+ void waitOnFences();
+
private:
friend class RegisterFrameCallbackTask;
// TODO: Replace with something better for layer & other GL object
@@ -178,8 +180,6 @@
void freePrefetchedLayers(TreeObserver* observer);
- void waitOnFences();
-
bool isSwapChainStuffed();
EGLint mLastFrameWidth = 0;
diff --git a/libs/hwui/renderthread/DrawFrameTask.cpp b/libs/hwui/renderthread/DrawFrameTask.cpp
index c9c07b3..e3b6dc6 100644
--- a/libs/hwui/renderthread/DrawFrameTask.cpp
+++ b/libs/hwui/renderthread/DrawFrameTask.cpp
@@ -104,6 +104,9 @@
if (CC_LIKELY(canDrawThisFrame)) {
context->draw();
+ } else {
+ // wait on fences so tasks don't overlap next frame
+ context->waitOnFences();
}
if (!canUnblockUiThread) {
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index f19a262..33c1c3f 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -3289,7 +3289,10 @@
/**
* Used as a key for {@link #getProperty} to request the native or optimal output sample rate
- * for this device's primary output stream, in decimal Hz.
+ * for this device's low latency output stream, in decimal Hz. Latency-sensitive apps
+ * should use this value as a default, and offer the user the option to override it.
+ * The low latency output stream is typically either the device's primary output stream,
+ * or another output stream with smaller buffers.
*/
// FIXME Deprecate
public static final String PROPERTY_OUTPUT_SAMPLE_RATE =
@@ -3297,7 +3300,10 @@
/**
* Used as a key for {@link #getProperty} to request the native or optimal output buffer size
- * for this device's primary output stream, in decimal PCM frames.
+ * for this device's low latency output stream, in decimal PCM frames. Latency-sensitive apps
+ * should use this value as a minimum, and offer the user the option to override it.
+ * The low latency output stream is typically either the device's primary output stream,
+ * or another output stream with smaller buffers.
*/
// FIXME Deprecate
public static final String PROPERTY_OUTPUT_FRAMES_PER_BUFFER =
diff --git a/media/java/android/media/ExifInterface.java b/media/java/android/media/ExifInterface.java
index 4848630b..56af57a 100644
--- a/media/java/android/media/ExifInterface.java
+++ b/media/java/android/media/ExifInterface.java
@@ -679,14 +679,14 @@
if (value instanceof long[]) {
long[] array = (long[]) value;
if (array.length == 1) {
- return (double) array[0];
+ return array[0];
}
throw new NumberFormatException("There are more than one component");
}
if (value instanceof int[]) {
int[] array = (int[]) value;
if (array.length == 1) {
- return (double) array[0];
+ return array[0];
}
throw new NumberFormatException("There are more than one component");
}
@@ -1083,6 +1083,7 @@
private int mThumbnailOffset;
private int mThumbnailLength;
private byte[] mThumbnailBytes;
+ private boolean mIsSupportedFile;
// Pattern to check non zero timestamp
private static final Pattern sNonZeroTimePattern = Pattern.compile(".*[1-9].*");
@@ -1472,9 +1473,11 @@
// Process JPEG input stream
getJpegAttributes(in);
+ mIsSupportedFile = true;
} catch (IOException e) {
// Ignore exceptions in order to keep the compatibility with the old versions of
// ExifInterface.
+ mIsSupportedFile = false;
Log.w(TAG, "Invalid image: ExifInterface got an unsupported image format file"
+ "(ExifInterface supports JPEG and some RAW image formats only) "
+ "or a corrupted JPEG file to ExifInterface.", e);
@@ -1553,9 +1556,9 @@
* and make a single call rather than multiple calls for each attribute.
*/
public void saveAttributes() throws IOException {
- if (mIsRaw) {
+ if (!mIsSupportedFile || mIsRaw) {
throw new UnsupportedOperationException(
- "ExifInterface does not support saving attributes on RAW formats.");
+ "ExifInterface only supports saving attributes on JPEG formats.");
}
if (mIsInputStream || (mSeekableFileDescriptor == null && mFilename == null)) {
throw new UnsupportedOperationException(
@@ -2352,7 +2355,7 @@
for (int i = 0; i < EXIF_TAGS.length; ++i) {
int sum = 0;
for (Map.Entry entry : (Set<Map.Entry>) mAttributes[i].entrySet()) {
- final ExifAttribute exifAttribute = (ExifAttribute) ((Map.Entry) entry).getValue();
+ final ExifAttribute exifAttribute = (ExifAttribute) entry.getValue();
final int size = exifAttribute.size();
if (size > 4) {
sum += size;
diff --git a/media/java/android/media/MediaScannerConnection.java b/media/java/android/media/MediaScannerConnection.java
index d714672..471fa2c 100644
--- a/media/java/android/media/MediaScannerConnection.java
+++ b/media/java/android/media/MediaScannerConnection.java
@@ -133,6 +133,10 @@
}
try {
mContext.unbindService(this);
+ if (mClient instanceof ClientProxy) {
+ mClient = null;
+ }
+ mService = null;
} catch (IllegalArgumentException ex) {
if (false) {
Log.v(TAG, "disconnect failed: " + ex);
@@ -205,6 +209,7 @@
void scanNextPath() {
if (mNextPath >= mPaths.length) {
mConnection.disconnect();
+ mConnection = null;
return;
}
String mimeType = mMimeTypes != null ? mMimeTypes[mNextPath] : null;
diff --git a/media/java/android/media/audiofx/AudioEffect.java b/media/java/android/media/audiofx/AudioEffect.java
index b94a7e6..7dbca3b 100644
--- a/media/java/android/media/audiofx/AudioEffect.java
+++ b/media/java/android/media/audiofx/AudioEffect.java
@@ -53,7 +53,7 @@
* than the priority used by the current effect engine owner, the control will be transfered to the
* new object. Otherwise control will remain with the previous object. In this case, the new
* application will be notified of changes in effect engine state or control ownership by the
- * appropiate listener.
+ * appropriate listener.
*/
public class AudioEffect {
diff --git a/obex/javax/obex/ClientOperation.java b/obex/javax/obex/ClientOperation.java
index 883c8c6..b65598c 100644
--- a/obex/javax/obex/ClientOperation.java
+++ b/obex/javax/obex/ClientOperation.java
@@ -207,7 +207,6 @@
* object
*/
public synchronized int getResponseCode() throws IOException {
- //avoid dup validateConnection
if ((mReplyHeader.responseCode == -1)
|| (mReplyHeader.responseCode == ResponseCodes.OBEX_HTTP_CONTINUE)) {
validateConnection();
@@ -423,8 +422,9 @@
private void validateConnection() throws IOException {
ensureOpen();
- // to sure only one privateInput object exist.
- if (mPrivateInput == null) {
+ // Make sure that a response has been recieved from remote
+ // before continuing
+ if (mPrivateInput == null || mReplyHeader.responseCode == -1) {
startProcessing();
}
}
diff --git a/packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml b/packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml
index 20173b0..24cbfbd 100644
--- a/packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml
+++ b/packages/CaptivePortalLogin/res/values-bn-rBD/strings.xml
@@ -4,7 +4,7 @@
<string name="app_name" msgid="5934709770924185752">"CaptivePortalLogin"</string>
<string name="action_use_network" msgid="6076184727448466030">"যেভাবে আছে সেভাবেই এই নেটওয়ার্ক ব্যবহার করুন"</string>
<string name="action_do_not_use_network" msgid="4577366536956516683">"এই নেটওয়ার্ক ব্যবহার করবেন না"</string>
- <string name="action_bar_label" msgid="917235635415966620">"নেটওয়ার্কে প্রবেশ করুন করুন"</string>
+ <string name="action_bar_label" msgid="917235635415966620">"নেটওয়ার্কে প্রবেশ করুন"</string>
<string name="ssl_error_warning" msgid="6653188881418638872">"আপনি যে নেটওয়ার্কে যোগ দেওয়ার চেষ্টা করছেন তাতে নিরাপত্তার সমস্যা আছে।"</string>
<string name="ssl_error_example" msgid="647898534624078900">"উদাহরণস্বরূপ, লগইন পৃষ্ঠাটি প্রদর্শিত প্রতিষ্ঠানের অন্তর্গত নাও হতে পারে৷"</string>
<string name="ssl_error_continue" msgid="6492718244923937110">"যাই হোক না কেন ব্রাউজারের মাধ্যমে অবিরত রাখুন"</string>
diff --git a/packages/DocumentsUI/src/com/android/documentsui/Events.java b/packages/DocumentsUI/src/com/android/documentsui/Events.java
index 14d4e2d..02a9127 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/Events.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/Events.java
@@ -53,7 +53,8 @@
*/
public static boolean isTouchType(int toolType) {
return toolType == MotionEvent.TOOL_TYPE_FINGER
- || toolType == MotionEvent.TOOL_TYPE_STYLUS;
+ || toolType == MotionEvent.TOOL_TYPE_STYLUS
+ || toolType == MotionEvent.TOOL_TYPE_UNKNOWN;
}
/**
diff --git a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
index b82f8dd..7186339 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/FilesActivity.java
@@ -341,8 +341,18 @@
// Fall back to traditional VIEW action...
intent = new Intent(Intent.ACTION_VIEW);
- intent.setFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.setData(doc.derivedUri);
+ intent.setDataAndType(doc.derivedUri, doc.mimeType);
+
+ // Downloads has traditionally added the WRITE permission
+ // in the TrampolineActivity. Since this behavior is long
+ // established, we set the same permission for non-managed files
+ // This ensures consistent behavior between the Downloads root
+ // and other roots.
+ int flags = Intent.FLAG_GRANT_READ_URI_PERMISSION;
+ if (doc.isWriteSupported()) {
+ flags |= Intent.FLAG_GRANT_WRITE_URI_PERMISSION;
+ }
+ intent.setFlags(flags);
if (DEBUG && intent.getClipData() != null) {
Log.d(TAG, "Starting intent w/ clip data: " + intent.getClipData());
diff --git a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
index b7c0a9c..8a6723f 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/dirlist/DirectoryFragment.java
@@ -53,10 +53,13 @@
import android.support.annotation.Nullable;
import android.support.design.widget.Snackbar;
import android.support.v13.view.DragStartHelper;
+import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat;
+import android.support.v4.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat;
import android.support.v7.widget.GridLayoutManager;
import android.support.v7.widget.GridLayoutManager.SpanSizeLookup;
import android.support.v7.widget.RecyclerView;
import android.support.v7.widget.RecyclerView.OnItemTouchListener;
+import android.support.v7.widget.RecyclerView.Recycler;
import android.support.v7.widget.RecyclerView.RecyclerListener;
import android.support.v7.widget.RecyclerView.ViewHolder;
import android.text.BidiFormatter;
@@ -243,7 +246,40 @@
mRecView.setAdapter(mAdapter);
- mLayout = new GridLayoutManager(getContext(), mColumnCount);
+ // Switch Access Accessibility API needs an {@link AccessibilityDelegate} to know the proper
+ // route when user selects an UI element. It usually guesses this if the element has an
+ // {@link OnClickListener}, but since we do not have one for itemView, we will need to
+ // manually route it to the right behavior. RecyclerView has its own AccessibilityDelegate,
+ // and routes it to its LayoutManager; so we must override the LayoutManager's accessibility
+ // methods to route clicks correctly.
+ mLayout = new GridLayoutManager(getContext(), mColumnCount) {
+ @Override
+ public void onInitializeAccessibilityNodeInfoForItem(
+ RecyclerView.Recycler recycler, RecyclerView.State state,
+ View host, AccessibilityNodeInfoCompat info) {
+ super.onInitializeAccessibilityNodeInfoForItem(recycler, state, host, info);
+ info.addAction(AccessibilityActionCompat.ACTION_CLICK);
+ }
+
+ @Override
+ public boolean performAccessibilityActionForItem(
+ RecyclerView.Recycler recycler, RecyclerView.State state, View view,
+ int action, Bundle args) {
+ // We are only handling click events; route all other to default implementation
+ if (action == AccessibilityNodeInfoCompat.ACTION_CLICK) {
+ RecyclerView.ViewHolder vh = mRecView.getChildViewHolder(view);
+ if (vh instanceof DocumentHolder) {
+ DocumentHolder dh = (DocumentHolder) vh;
+ if (dh.mEventListener != null) {
+ dh.mEventListener.onActivate(dh);
+ return true;
+ }
+ }
+ }
+ return super.performAccessibilityActionForItem(recycler, state, view, action,
+ args);
+ }
+ };
SpanSizeLookup lookup = mAdapter.createSpanSizeLookup();
if (lookup != null) {
mLayout.setSpanSizeLookup(lookup);
@@ -717,63 +753,57 @@
private void openDocuments(final Selection selected) {
Metrics.logUserAction(getContext(), Metrics.USER_ACTION_OPEN);
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(List<DocumentInfo> docs) {
- // TODO: Implement support in Files activity for opening multiple docs.
- BaseActivity.get(DirectoryFragment.this).onDocumentsPicked(docs);
- }
- }.execute(selected);
+ // Model must be accessed in UI thread, since underlying cursor is not threadsafe.
+ List<DocumentInfo> docs = mModel.getDocuments(selected);
+ // TODO: Implement support in Files activity for opening multiple docs.
+ BaseActivity.get(DirectoryFragment.this).onDocumentsPicked(docs);
}
private void shareDocuments(final Selection selected) {
Metrics.logUserAction(getContext(), Metrics.USER_ACTION_SHARE);
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(List<DocumentInfo> docs) {
- Intent intent;
+ // Model must be accessed in UI thread, since underlying cursor is not threadsafe.
+ List<DocumentInfo> docs = mModel.getDocuments(selected);
+ Intent intent;
- // Filter out directories and virtual files - those can't be shared.
- List<DocumentInfo> docsForSend = new ArrayList<>();
- for (DocumentInfo doc: docs) {
- if (!doc.isDirectory() && !doc.isVirtualDocument()) {
- docsForSend.add(doc);
- }
- }
-
- if (docsForSend.size() == 1) {
- final DocumentInfo doc = docsForSend.get(0);
-
- intent = new Intent(Intent.ACTION_SEND);
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
- intent.setType(doc.mimeType);
- intent.putExtra(Intent.EXTRA_STREAM, doc.derivedUri);
-
- } else if (docsForSend.size() > 1) {
- intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
- intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
- intent.addCategory(Intent.CATEGORY_DEFAULT);
-
- final ArrayList<String> mimeTypes = new ArrayList<>();
- final ArrayList<Uri> uris = new ArrayList<>();
- for (DocumentInfo doc : docsForSend) {
- mimeTypes.add(doc.mimeType);
- uris.add(doc.derivedUri);
- }
-
- intent.setType(findCommonMimeType(mimeTypes));
- intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
-
- } else {
- return;
- }
-
- intent = Intent.createChooser(intent, getActivity().getText(R.string.share_via));
- startActivity(intent);
+ // Filter out directories and virtual files - those can't be shared.
+ List<DocumentInfo> docsForSend = new ArrayList<>();
+ for (DocumentInfo doc: docs) {
+ if (!doc.isDirectory() && !doc.isVirtualDocument()) {
+ docsForSend.add(doc);
}
- }.execute(selected);
+ }
+
+ if (docsForSend.size() == 1) {
+ final DocumentInfo doc = docsForSend.get(0);
+
+ intent = new Intent(Intent.ACTION_SEND);
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ intent.setType(doc.mimeType);
+ intent.putExtra(Intent.EXTRA_STREAM, doc.derivedUri);
+
+ } else if (docsForSend.size() > 1) {
+ intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
+ intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+
+ final ArrayList<String> mimeTypes = new ArrayList<>();
+ final ArrayList<Uri> uris = new ArrayList<>();
+ for (DocumentInfo doc : docsForSend) {
+ mimeTypes.add(doc.mimeType);
+ uris.add(doc.derivedUri);
+ }
+
+ intent.setType(findCommonMimeType(mimeTypes));
+ intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris);
+
+ } else {
+ return;
+ }
+
+ intent = Intent.createChooser(intent, getActivity().getText(R.string.share_via));
+ startActivity(intent);
}
private String generateDeleteMessage(final List<DocumentInfo> docs) {
@@ -819,52 +849,51 @@
assert(!selected.isEmpty());
final DocumentInfo srcParent = getDisplayState().stack.peek();
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(final List<DocumentInfo> docs) {
- TextView message =
- (TextView) mInflater.inflate(R.layout.dialog_delete_confirmation, null);
- message.setText(generateDeleteMessage(docs));
+ // Model must be accessed in UI thread, since underlying cursor is not threadsafe.
+ List<DocumentInfo> docs = mModel.getDocuments(selected);
- // This "insta-hides" files that are being deleted, because
- // the delete operation may be not execute immediately (it
- // may be queued up on the FileOperationService.)
- // To hide the files locally, we call the hide method on the adapter
- // ...which a live object...cannot be parceled.
- // For that reason, for now, we implement this dialog NOT
- // as a fragment (which can survive rotation and have its own state),
- // but as a simple runtime dialog. So rotating a device with an
- // active delete dialog...results in that dialog disappearing.
- // We can do better, but don't have cycles for it now.
- new AlertDialog.Builder(getActivity())
- .setView(message)
- .setPositiveButton(
- android.R.string.yes,
- new DialogInterface.OnClickListener() {
- public void onClick(DialogInterface dialog, int id) {
- // Finish selection mode first which clears selection so we
- // don't end up trying to deselect deleted documents.
- // This is done here, rather in the onActionItemClicked
- // so we can avoid de-selecting items in the case where
- // the user cancels the delete.
- if (mActionMode != null) {
- mActionMode.finish();
- } else {
- Log.w(TAG, "Action mode is null before deleting documents.");
- }
- // Hide the files in the UI...since the operation
- // might be queued up on FileOperationService.
- // We're walking a line here.
- mAdapter.hide(selected.getAll());
- FileOperations.delete(
- getActivity(), docs, srcParent, getDisplayState().stack);
- }
- })
- .setNegativeButton(android.R.string.no, null)
- .show();
- }
- }.execute(selected);
+ TextView message =
+ (TextView) mInflater.inflate(R.layout.dialog_delete_confirmation, null);
+ message.setText(generateDeleteMessage(docs));
+
+ // This "insta-hides" files that are being deleted, because
+ // the delete operation may be not execute immediately (it
+ // may be queued up on the FileOperationService.)
+ // To hide the files locally, we call the hide method on the adapter
+ // ...which a live object...cannot be parceled.
+ // For that reason, for now, we implement this dialog NOT
+ // as a fragment (which can survive rotation and have its own state),
+ // but as a simple runtime dialog. So rotating a device with an
+ // active delete dialog...results in that dialog disappearing.
+ // We can do better, but don't have cycles for it now.
+ new AlertDialog.Builder(getActivity())
+ .setView(message)
+ .setPositiveButton(
+ android.R.string.yes,
+ new DialogInterface.OnClickListener() {
+ @Override
+ public void onClick(DialogInterface dialog, int id) {
+ // Finish selection mode first which clears selection so we
+ // don't end up trying to deselect deleted documents.
+ // This is done here, rather in the onActionItemClicked
+ // so we can avoid de-selecting items in the case where
+ // the user cancels the delete.
+ if (mActionMode != null) {
+ mActionMode.finish();
+ } else {
+ Log.w(TAG, "Action mode is null before deleting documents.");
+ }
+ // Hide the files in the UI...since the operation
+ // might be queued up on FileOperationService.
+ // We're walking a line here.
+ mAdapter.hide(selected.getAll());
+ FileOperations.delete(
+ getActivity(), docs, srcParent, getDisplayState().stack);
+ }
+ })
+ .setNegativeButton(android.R.string.no, null)
+ .show();
}
private void transferDocuments(final Selection selected, final @OpType int mode) {
@@ -898,25 +927,21 @@
? R.string.menu_move : R.string.menu_copy;
intent.putExtra(DocumentsContract.EXTRA_PROMPT, getResources().getString(drawerTitleId));
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(List<DocumentInfo> docs) {
- // TODO: Can this move to Fragment bundle state?
- getDisplayState().selectedDocumentsForCopy = docs;
+ // Model must be accessed in UI thread, since underlying cursor is not threadsafe.
+ List<DocumentInfo> docs = mModel.getDocuments(selected);
+ // TODO: Can this move to Fragment bundle state?
+ getDisplayState().selectedDocumentsForCopy = docs;
- // Determine if there is a directory in the set of documents
- // to be copied? Why? Directory creation isn't supported by some roots
- // (like Downloads). This informs DocumentsActivity (the "picker")
- // to restrict available roots to just those with support.
- intent.putExtra(Shared.EXTRA_DIRECTORY_COPY, hasDirectory(docs));
- intent.putExtra(FileOperationService.EXTRA_OPERATION, mode);
+ // Determine if there is a directory in the set of documents
+ // to be copied? Why? Directory creation isn't supported by some roots
+ // (like Downloads). This informs DocumentsActivity (the "picker")
+ // to restrict available roots to just those with support.
+ intent.putExtra(Shared.EXTRA_DIRECTORY_COPY, hasDirectory(docs));
+ intent.putExtra(FileOperationService.EXTRA_OPERATION, mode);
- // This just identifies the type of request...we'll check it
- // when we reveive a response.
- startActivityForResult(intent, REQUEST_COPY_DESTINATION);
- }
-
- }.execute(selected);
+ // This just identifies the type of request...we'll check it
+ // when we reveive a response.
+ startActivityForResult(intent, REQUEST_COPY_DESTINATION);
}
private static boolean hasDirectory(List<DocumentInfo> docs) {
@@ -935,12 +960,9 @@
// Rename option is only available in menu when 1 document selected
assert(selected.size() == 1);
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(List<DocumentInfo> docs) {
- RenameDocumentFragment.show(getFragmentManager(), docs.get(0));
- }
- }.execute(selected);
+ // Model must be accessed in UI thread, since underlying cursor is not threadsafe.
+ List<DocumentInfo> docs = mModel.getDocuments(selected);
+ RenameDocumentFragment.show(getFragmentManager(), docs.get(0));
}
@Override
@@ -1099,19 +1121,17 @@
}
}
- void copySelectionToClipboard(Selection selection) {
- assert(!selection.isEmpty());
- new GetDocumentsTask() {
- @Override
- void onDocumentsReady(List<DocumentInfo> docs) {
- mClipper.clipDocuments(docs);
- Activity activity = getActivity();
- Snackbars.makeSnackbar(activity,
- activity.getResources().getQuantityString(
- R.plurals.clipboard_files_clipped, docs.size(), docs.size()),
- Snackbar.LENGTH_SHORT).show();
- }
- }.execute(selection);
+ void copySelectionToClipboard(Selection selected) {
+ assert(!selected.isEmpty());
+
+ // Model must be accessed in UI thread, since underlying cursor is not threadsafe.
+ List<DocumentInfo> docs = mModel.getDocuments(selected);
+ mClipper.clipDocuments(docs);
+ Activity activity = getActivity();
+ Snackbars.makeSnackbar(activity,
+ activity.getResources().getQuantityString(
+ R.plurals.clipboard_files_clipped, docs.size(), docs.size()),
+ Snackbar.LENGTH_SHORT).show();
}
public void pasteFromClipboard() {
@@ -1420,25 +1440,6 @@
mShadowView.draw(canvas);
}
}
- /**
- * Abstract task providing support for loading documents *off*
- * the main thread. And if it isn't obvious, creating a list
- * of documents (especially large lists) can be pretty expensive.
- */
- private abstract class GetDocumentsTask
- extends AsyncTask<Selection, Void, List<DocumentInfo>> {
- @Override
- protected final List<DocumentInfo> doInBackground(Selection... selected) {
- return mModel.getDocuments(selected[0]);
- }
-
- @Override
- protected final void onPostExecute(List<DocumentInfo> docs) {
- onDocumentsReady(docs);
- }
-
- abstract void onDocumentsReady(List<DocumentInfo> docs);
- }
@Override
public boolean isSelected(String modelId) {
diff --git a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
index 3a86a51..63f66de 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/model/DocumentInfo.java
@@ -235,6 +235,10 @@
return (flags & Document.FLAG_DIR_PREFERS_GRID) != 0;
}
+ public boolean isWriteSupported() {
+ return (flags & Document.FLAG_SUPPORTS_WRITE) != 0;
+ }
+
public boolean isDeleteSupported() {
return (flags & Document.FLAG_SUPPORTS_DELETE) != 0;
}
diff --git a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java
index 1118171..1de3bbc 100644
--- a/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java
+++ b/packages/DocumentsUI/src/com/android/documentsui/services/MoveJob.java
@@ -117,7 +117,9 @@
byteCopyDocument(src, dest);
// Remove the source document.
- deleteDocument(src, srcParent);
+ if(!isCanceled()) {
+ deleteDocument(src, srcParent);
+ }
}
@Override
diff --git a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
index 78b9927..7fe0d2f 100644
--- a/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
+++ b/packages/ExternalStorageProvider/src/com/android/externalstorage/ExternalStorageProvider.java
@@ -566,6 +566,7 @@
throws FileNotFoundException {
final MatrixCursor result = new MatrixCursor(resolveDocumentProjection(projection));
+ query = query.toLowerCase();
final File parent;
synchronized (mRootsLock) {
parent = mRoots.get(rootId).path;
diff --git a/packages/Keyguard/res/values-af/strings.xml b/packages/Keyguard/res/values-af/strings.xml
index 568d82a..a338165 100644
--- a/packages/Keyguard/res/values-af/strings.xml
+++ b/packages/Keyguard/res/values-af/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kaart is gesluit."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kaart is PUK-geslote."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ontsluit tans SIM-kaart…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Patroon ontsluit."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN ontsluit."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Wagwoord ontsluit."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Patroonarea."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Sleep-area."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-area"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM-PIN-area"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM-PUK-area"</string>
diff --git a/packages/Keyguard/res/values-am/strings.xml b/packages/Keyguard/res/values-am/strings.xml
index 68e9ff3..67fdc32 100644
--- a/packages/Keyguard/res/values-am/strings.xml
+++ b/packages/Keyguard/res/values-am/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ሲም ካርድ ተዘግቷል።"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ሲም ካርድ በፒዩኬ ተዘግቷል።"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ሲም ካርዱን በመክፈት ላይ…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"በስርዓተ-ጥለት መክፈት።"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"በፒን መክፈት።"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"በይለፍ ቃል መክፈት።"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"የስርዓተ-ጥለት አካባቢ።"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"የማንሸራተቻ አካባቢ።"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"የፒን አካባቢ"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"የሲም ፒን አካባቢ"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"የሲም PUK አካባቢ"</string>
diff --git a/packages/Keyguard/res/values-ar/strings.xml b/packages/Keyguard/res/values-ar/strings.xml
index 09b78e4..8438699 100644
--- a/packages/Keyguard/res/values-ar/strings.xml
+++ b/packages/Keyguard/res/values-ar/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"شريحة SIM مؤمّنة."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"شريحة SIM مؤمّنة بكود PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"جارٍ إلغاء تأمين شريحة SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"إلغاء القفل باستخدام النقش."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"إلغاء القفل باستخدام رمز PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"إلغاء القفل باستخدام كلمة المرور."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"منطقة النقش."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"منطقة التمرير."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"منطقة رقم التعريف الشخصي"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"منطقة رقم التعريف الشخصي لبطاقة SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"منطقة PUK لبطاقة SIM"</string>
diff --git a/packages/Keyguard/res/values-az-rAZ/strings.xml b/packages/Keyguard/res/values-az-rAZ/strings.xml
index a8a1155..c7a8091 100644
--- a/packages/Keyguard/res/values-az-rAZ/strings.xml
+++ b/packages/Keyguard/res/values-az-rAZ/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kart kilidlənib."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SİM kart PUK ilə kilidlənib."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SİM kartın kilidi açılır..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Kild açma modeli."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin kilid açması."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Şifrə kilidi."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Model sahəsi."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Sürüşdürmə sahəsi."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN sahəsi"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN sahəsi"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK sahəsi"</string>
diff --git a/packages/Keyguard/res/values-b+sr+Latn/strings.xml b/packages/Keyguard/res/values-b+sr+Latn/strings.xml
index 22dc059..570f4bc 100644
--- a/packages/Keyguard/res/values-b+sr+Latn/strings.xml
+++ b/packages/Keyguard/res/values-b+sr+Latn/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kartica je zaključana."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kartica je zaključana PUK kodom."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Otključavanje SIM kartice…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Otključavanje šablonom."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Otključavanje PIN-om."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Otključavanje lozinkom."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Oblast šablona."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Oblast prevlačenja."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Oblast za PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Oblast za PIN za SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Oblast za PUK za SIM"</string>
diff --git a/packages/Keyguard/res/values-be-rBY/strings.xml b/packages/Keyguard/res/values-be-rBY/strings.xml
index ca6a476..f357961 100644
--- a/packages/Keyguard/res/values-be-rBY/strings.xml
+++ b/packages/Keyguard/res/values-be-rBY/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карта заблакiраваная."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-карта заблакiравана PUK-кодам."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Разблакiраванне SIM-карты..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Узор разблакiроўкі."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-код разблакiроўкі."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Пароль разблакiроўкі."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Вобласць узора."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Вобласць слайда."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Поле для PIN-кода"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Поле для PIN-кода SIM-карты"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Поле для PUK-кода SIM-карты"</string>
diff --git a/packages/Keyguard/res/values-bg/strings.xml b/packages/Keyguard/res/values-bg/strings.xml
index 7eb2dbd..988e97f 100644
--- a/packages/Keyguard/res/values-bg/strings.xml
+++ b/packages/Keyguard/res/values-bg/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM картата е заключена."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картата е заключена с PUK код."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM картата се отключва…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Отключване с фигура."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Отключване с ПИН код."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Отключване с парола."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Област на фигурата."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Област на плъзгане."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Област за ПИН кода"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Област за ПИН кода на SIM картата"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Област за PUK кода на SIM картата"</string>
diff --git a/packages/Keyguard/res/values-bn-rBD/strings.xml b/packages/Keyguard/res/values-bn-rBD/strings.xml
index 7a33e21..1a2a8dd 100644
--- a/packages/Keyguard/res/values-bn-rBD/strings.xml
+++ b/packages/Keyguard/res/values-bn-rBD/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"সিম কার্ড লক করা আছে৷"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"সিম কার্ডটি PUK কোড দিয়ে লক করা আছে৷"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"সিম কার্ড আনলক করা হচ্ছে…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"প্যাটার্ন দিয়ে আনলক৷"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"পিন দিয়ে আনলক৷"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"পাসওয়ার্ড দিয়ে আনলক৷"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"প্যাটার্ন এলাকা৷"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"স্লাইড করার এলাকা৷"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"পিন অঞ্চল"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM পিন অঞ্চল"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK অঞ্চল"</string>
diff --git a/packages/Keyguard/res/values-bs-rBA/strings.xml b/packages/Keyguard/res/values-bs-rBA/strings.xml
index be73580..b8ff2a9 100644
--- a/packages/Keyguard/res/values-bs-rBA/strings.xml
+++ b/packages/Keyguard/res/values-bs-rBA/strings.xml
@@ -46,15 +46,10 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kartica je zaključana."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kartica je zaključana PUK kodom."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Otključavanje SIM kartice…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Otključavanje uzorkom."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Otključavanje pinom."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Otključavanje lozinkom."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Uzorak oblasti."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Oblast za pomjeranje klizača."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Prostor za PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Prostor za SIM PIN"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Prostor za SIM PUK"</string>
- <string name="keyguard_accessibility_next_alarm" msgid="7269583073750518672">"Naredni alarm je podešen za <xliff:g id="ALARM">%1$s</xliff:g>"</string>
+ <string name="keyguard_accessibility_next_alarm" msgid="7269583073750518672">"Sljedeći alarm je podešen za <xliff:g id="ALARM">%1$s</xliff:g>"</string>
<string name="keyboardview_keycode_delete" msgid="3337914833206635744">"Izbriši"</string>
<string name="keyboardview_keycode_enter" msgid="2985864015076059467">"Potvrdi"</string>
<string name="kg_forgot_pattern_button_text" msgid="8852021467868220608">"Zaboravili ste uzorak?"</string>
diff --git a/packages/Keyguard/res/values-ca/strings.xml b/packages/Keyguard/res/values-ca/strings.xml
index b542866..9207e0e 100644
--- a/packages/Keyguard/res/values-ca/strings.xml
+++ b/packages/Keyguard/res/values-ca/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La targeta SIM està bloquejada."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La targeta SIM està bloquejada pel PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"S\'està desbloquejant la targeta SIM..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueig mitjançant patró"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueig mitjançant PIN"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueig mitjançant contrasenya"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Àrea de patró"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Àrea per lliscar el dit"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Zona del PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Zona del PIN de la SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Zona del PUK de la SIM"</string>
diff --git a/packages/Keyguard/res/values-cs/strings.xml b/packages/Keyguard/res/values-cs/strings.xml
index b310323..aa7115d 100644
--- a/packages/Keyguard/res/values-cs/strings.xml
+++ b/packages/Keyguard/res/values-cs/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM karta je zablokována."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karta je zablokována pomocí kódu PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Odblokování SIM karty…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odemknutí gestem."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odemknutí kódem PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odemknutí heslem."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Oblast pro zadání bezpečnostního gesta."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Oblast pro přejetí prstem."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Oblast kódu PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Oblast kódu PIN SIM karty"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Oblast kódu PUK SIM karty"</string>
diff --git a/packages/Keyguard/res/values-da/strings.xml b/packages/Keyguard/res/values-da/strings.xml
index b46b536..ebea6ee 100644
--- a/packages/Keyguard/res/values-da/strings.xml
+++ b/packages/Keyguard/res/values-da/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kortet er låst."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kort er låst med PUK-koden."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kortet låses op…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Lås op med mønster."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Lås op med pinkode."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Lås op med adgangskode."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mønsterområde."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Strygeområde."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Område for pinkoden"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Område for pinkoden til simkortet"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Område for PUK-koden til simkortet"</string>
diff --git a/packages/Keyguard/res/values-de/strings.xml b/packages/Keyguard/res/values-de/strings.xml
index ae731c3..a519ce8 100644
--- a/packages/Keyguard/res/values-de/strings.xml
+++ b/packages/Keyguard/res/values-de/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-Karte ist gesperrt."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-Karte ist gesperrt. PUK-Eingabe erforderlich."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-Karte wird entsperrt…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Entsperrung mit Muster"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Entsperrung mit PIN"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Entsperrung mit Passwort"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Bereich für Muster"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Bereich für Fingerbewegung"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-Bereich"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM-PIN-Bereich"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM-PUK-Bereich"</string>
diff --git a/packages/Keyguard/res/values-el/strings.xml b/packages/Keyguard/res/values-el/strings.xml
index c54a7fc..d969266 100644
--- a/packages/Keyguard/res/values-el/strings.xml
+++ b/packages/Keyguard/res/values-el/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Η κάρτα SIM είναι κλειδωμένη."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Η κάρτα SIM είναι κλειδωμένη με κωδικό PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ξεκλείδωμα κάρτας SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ξεκλείδωμα μοτίβου."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ξεκλείδωμα κωδικού ασφαλείας"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Ξεκλείδωμα κωδικού πρόσβασης."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Περιοχή μοτίβου."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Περιοχή ολίσθησης"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Περιοχή PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Περιοχή PIN SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Περιοχή PUK SIM"</string>
diff --git a/packages/Keyguard/res/values-en-rAU/strings.xml b/packages/Keyguard/res/values-en-rAU/strings.xml
index e885166..9ecd979 100644
--- a/packages/Keyguard/res/values-en-rAU/strings.xml
+++ b/packages/Keyguard/res/values-en-rAU/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM card is locked."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM card is PUK-locked."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Unlocking SIM card…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Slide area."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN area"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN area"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK area"</string>
diff --git a/packages/Keyguard/res/values-en-rGB/strings.xml b/packages/Keyguard/res/values-en-rGB/strings.xml
index e885166..9ecd979 100644
--- a/packages/Keyguard/res/values-en-rGB/strings.xml
+++ b/packages/Keyguard/res/values-en-rGB/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM card is locked."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM card is PUK-locked."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Unlocking SIM card…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Slide area."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN area"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN area"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK area"</string>
diff --git a/packages/Keyguard/res/values-en-rIN/strings.xml b/packages/Keyguard/res/values-en-rIN/strings.xml
index e885166..9ecd979 100644
--- a/packages/Keyguard/res/values-en-rIN/strings.xml
+++ b/packages/Keyguard/res/values-en-rIN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM card is locked."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM card is PUK-locked."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Unlocking SIM card…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pattern unlock."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin unlock."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Password unlock."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Pattern area."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Slide area."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN area"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN area"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK area"</string>
diff --git a/packages/Keyguard/res/values-es-rUS/strings.xml b/packages/Keyguard/res/values-es-rUS/strings.xml
index df0db2d..61f5c0d 100644
--- a/packages/Keyguard/res/values-es-rUS/strings.xml
+++ b/packages/Keyguard/res/values-es-rUS/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La tarjeta SIM está bloqueada."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La tarjeta SIM está bloqueada por código PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando tarjeta SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueo por patrón"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueo por PIN"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueo por contraseña"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área de patrón"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Área de deslizamiento"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Área de PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Área de PIN de SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Área de PUK de SIM"</string>
diff --git a/packages/Keyguard/res/values-es/strings.xml b/packages/Keyguard/res/values-es/strings.xml
index 6061b78..3ef737c 100644
--- a/packages/Keyguard/res/values-es/strings.xml
+++ b/packages/Keyguard/res/values-es/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La tarjeta SIM está bloqueada."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La tarjeta SIM está bloqueada con el código PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando tarjeta SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueo por patrón"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueo por PIN"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueo por contraseña"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área de patrón"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Área para deslizar"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Área de PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Área de PIN de SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Área de PUK de SIM"</string>
diff --git a/packages/Keyguard/res/values-et-rEE/strings.xml b/packages/Keyguard/res/values-et-rEE/strings.xml
index 78ae3ca..47b6332 100644
--- a/packages/Keyguard/res/values-et-rEE/strings.xml
+++ b/packages/Keyguard/res/values-et-rEE/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kaart on lukus."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kaart on PUK-lukus."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kaardi avamine ..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mustriga avamine."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-koodiga avamine."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parooliga avamine."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mustri ala."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Lohistamisala."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-koodi ala"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM-kaardi PIN-koodi ala"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM-kaardi PUK-koodi ala"</string>
diff --git a/packages/Keyguard/res/values-eu-rES/strings.xml b/packages/Keyguard/res/values-eu-rES/strings.xml
index 7855b16..5f4abce 100644
--- a/packages/Keyguard/res/values-eu-rES/strings.xml
+++ b/packages/Keyguard/res/values-eu-rES/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM txartela blokeatuta dago."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM txartela PUK bidez blokeatuta dago."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM txartela desblokeatzen…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ereduaren bidez desblokeatzea."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN kodearen bidez desblokeatzea."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Pasahitzaren bidez desblokeatzea."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Eredua marrazteko eremua."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Hatza lerratzeko eremua."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN kodearen eremua"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM txartelaren PIN kodearen eremua"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM txartelaren PUK kodearen eremua"</string>
diff --git a/packages/Keyguard/res/values-fa/strings.xml b/packages/Keyguard/res/values-fa/strings.xml
index 39fd460..40952e2 100644
--- a/packages/Keyguard/res/values-fa/strings.xml
+++ b/packages/Keyguard/res/values-fa/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"سیم کارت قفل شد."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"سیم کارت با PUK قفل شده است."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"درحال بازگشایی قفل سیم کارت..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"باز کردن قفل با الگو."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"باز کردن قفل با پین."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"باز کردن قفل با گذرواژه."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ناحیه الگو."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ناحیه کشیدن انگشت روی صفحه."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"قسمت پین"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"قسمت پین سیمکارت"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"قسمت PUK سیمکارت"</string>
diff --git a/packages/Keyguard/res/values-fi/strings.xml b/packages/Keyguard/res/values-fi/strings.xml
index 7a0c00f..a1b96ca 100644
--- a/packages/Keyguard/res/values-fi/strings.xml
+++ b/packages/Keyguard/res/values-fi/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kortti on lukittu."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortti on PUK-lukittu."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-kortin lukitusta poistetaan…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Lukituksen poisto salasanalla."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Lukituksen poisto PIN-koodilla."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Lukituksen poisto salasanalla."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kuvioalue."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Liu\'utusalue."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-koodin alue"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM-kortin PIN-koodin alue"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM-kortin PUK-koodin alue"</string>
diff --git a/packages/Keyguard/res/values-fr-rCA/strings.xml b/packages/Keyguard/res/values-fr-rCA/strings.xml
index 9bc2456..d920415 100644
--- a/packages/Keyguard/res/values-fr-rCA/strings.xml
+++ b/packages/Keyguard/res/values-fr-rCA/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La carte SIM est verrouillée."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La carte SIM est verrouillée par clé PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Déverrouillage de la carte SIM en cours…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Déverrouillage par schéma"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Déverrouillage par NIP"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Déverrouillage par mot de passe"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zone du schéma"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Zone où faire glisser votre doigt sur l\'écran"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Zone du NIP"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Zone du NIP de la carte SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Zone du code PUK de la carte SIM"</string>
diff --git a/packages/Keyguard/res/values-fr/strings.xml b/packages/Keyguard/res/values-fr/strings.xml
index ecb2575..8615b99 100644
--- a/packages/Keyguard/res/values-fr/strings.xml
+++ b/packages/Keyguard/res/values-fr/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La carte SIM est verrouillée."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La carte SIM est verrouillée par clé PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Déverrouillage de la carte SIM en cours…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Déverrouillage par schéma"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Déverrouillage par code PIN"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Déverrouillage par mot de passe"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zone du schéma"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Zone où faire glisser votre doigt sur l\'écran"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Champ du code PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Champ du code PIN de la carte SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Champ du code PUK de la carte SIM"</string>
diff --git a/packages/Keyguard/res/values-gl-rES/strings.xml b/packages/Keyguard/res/values-gl-rES/strings.xml
index 382dd7b..a894fc5 100644
--- a/packages/Keyguard/res/values-gl-rES/strings.xml
+++ b/packages/Keyguard/res/values-gl-rES/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"A tarxeta SIM está bloqueada."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"A tarxeta SIM está bloqueada mediante un PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando tarxeta SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueo mediante padrón"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueo mediante PIN"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueo mediante contrasinal"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zona do padrón"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Zona para pasar o dedo"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Área do PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Área do PIN da tarxeta SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Área do PUK da tarxeta SIM"</string>
diff --git a/packages/Keyguard/res/values-gu-rIN/strings.xml b/packages/Keyguard/res/values-gu-rIN/strings.xml
index eddd1a1..d288b3f 100644
--- a/packages/Keyguard/res/values-gu-rIN/strings.xml
+++ b/packages/Keyguard/res/values-gu-rIN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM કાર્ડ લૉક કરેલ છે."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM કાર્ડ, PUK-લૉક કરેલ છે."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM કાર્ડ અનલૉક કરી રહ્યાં છે…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"પેટર્ન અનલૉક."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"પિન અનલૉક."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"પાસવર્ડ અનલૉક કરો."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"પેટર્ન ક્ષેત્ર."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"સ્લાઇડ ક્ષેત્ર."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN ક્ષેત્ર"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN ક્ષેત્ર"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK ક્ષેત્ર"</string>
diff --git a/packages/Keyguard/res/values-hi/strings.xml b/packages/Keyguard/res/values-hi/strings.xml
index 8069c5e..bf36312 100644
--- a/packages/Keyguard/res/values-hi/strings.xml
+++ b/packages/Keyguard/res/values-hi/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"सिम कार्ड लॉक है."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"सिम कार्ड PUK द्वारा लॉक किया हुआ है."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"सिम कार्ड अनलॉक हो रहा है…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"आकार अनलॉक."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"पिन अनलॉक."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलॉक."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"आकार क्षेत्र."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"स्लाइड क्षेत्र."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"पिन क्षेत्र"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"सिम पिन क्षेत्र"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"सिम पिइउके क्षेत्र"</string>
diff --git a/packages/Keyguard/res/values-hr/strings.xml b/packages/Keyguard/res/values-hr/strings.xml
index 044786d..169bc57 100644
--- a/packages/Keyguard/res/values-hr/strings.xml
+++ b/packages/Keyguard/res/values-hr/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kartica je zaključana."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kartica zaključana je PUK-om."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Otključavanje SIM kartice…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Uzorak za otključavanje."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Otključavanje PIN-om."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Otključavanje zaporkom."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Područje uzorka."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Područje klizanja."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Područje PIN-a"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Područje PIN-a za SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Područje PUK-a za SIM"</string>
diff --git a/packages/Keyguard/res/values-hu/strings.xml b/packages/Keyguard/res/values-hu/strings.xml
index e54a89f..bc3bf4e 100644
--- a/packages/Keyguard/res/values-hu/strings.xml
+++ b/packages/Keyguard/res/values-hu/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"A SIM kártya le van zárva."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"A SIM kártya le van zárva a PUK kóddal."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM kártya feloldása..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Feloldás mintával"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Feloldás PIN kóddal"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Feloldás jelszóval"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mintaterület"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Csúsztatási terület"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-kód területe"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN-kód területe"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK kód területe"</string>
diff --git a/packages/Keyguard/res/values-hy-rAM/strings.xml b/packages/Keyguard/res/values-hy-rAM/strings.xml
index 6758a2e..4aacf8f 100644
--- a/packages/Keyguard/res/values-hy-rAM/strings.xml
+++ b/packages/Keyguard/res/values-hy-rAM/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM քարտը կողպված է:"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM քարտը PUK-ով կողպված է:"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM քարտը ապակողպվում է..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Սխեմայով ապակողպում:"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin-ն ապակողպված է:"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Գաղտնաբառի ապակողպում:"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Սխեմայի տարածք:"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Սահեցման տարածք:"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN կոդի տարածք"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM քարտի PIN կոդի տարածք"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM քարտի PUK կոդի տարածք"</string>
diff --git a/packages/Keyguard/res/values-in/strings.xml b/packages/Keyguard/res/values-in/strings.xml
index 6f8e7f1..dda63a8 100644
--- a/packages/Keyguard/res/values-in/strings.xml
+++ b/packages/Keyguard/res/values-in/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Kartu SIM terkunci."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kartu SIM terkunci PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Membuka kartu SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Buka kunci dengan pola."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Buka kunci dengan PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Buka kunci dengan sandi."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Area pola."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Area geser."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Bidang PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Bidang PIN SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Bidang PUK SIM"</string>
diff --git a/packages/Keyguard/res/values-is-rIS/strings.xml b/packages/Keyguard/res/values-is-rIS/strings.xml
index 279ffcf..278e031 100644
--- a/packages/Keyguard/res/values-is-rIS/strings.xml
+++ b/packages/Keyguard/res/values-is-rIS/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kortið er læst."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortið er PUK-læst."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Tekur SIM-kort úr lás…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Opnun með mynstri."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Opnun með PIN-númeri."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Opnun með aðgangsorði."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Svæði mynsturs."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Stroksvæði."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-svæði"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"PIN-svæði SIM-korts"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"PUK-svæði SIM-korts"</string>
diff --git a/packages/Keyguard/res/values-it/strings.xml b/packages/Keyguard/res/values-it/strings.xml
index 728974d..98bcae4 100644
--- a/packages/Keyguard/res/values-it/strings.xml
+++ b/packages/Keyguard/res/values-it/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"La SIM è bloccata."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"La SIM è bloccata tramite PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Sblocco scheda SIM..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Sblocco con sequenza."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Sblocco con PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Sblocco con password."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Area sequenza."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Area di scorrimento."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Area PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Area PIN SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Area PUK SIM"</string>
diff --git a/packages/Keyguard/res/values-iw/strings.xml b/packages/Keyguard/res/values-iw/strings.xml
index 47d0728..8d1ada3 100644
--- a/packages/Keyguard/res/values-iw/strings.xml
+++ b/packages/Keyguard/res/values-iw/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"כרטיס ה-SIM נעול."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"כרטיס SIM נעול באמצעות PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"מבטל נעילה של כרטיס SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ביטול נעילה באמצעות ציור קו."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ביטול נעילה באמצעות מספר PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ביטול נעילה באמצעות סיסמה."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"אזור ציור קו."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"אזור הסטה."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"אזור עבור קוד PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"אזור עבור קוד PIN של SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"אזור עבור קוד PUK של SIM"</string>
diff --git a/packages/Keyguard/res/values-ja/strings.xml b/packages/Keyguard/res/values-ja/strings.xml
index d30355f..c4b4c98 100644
--- a/packages/Keyguard/res/values-ja/strings.xml
+++ b/packages/Keyguard/res/values-ja/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIMカードはロックされています。"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIMカードはPUKでロックされています。"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIMカードをロック解除しています…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"パターンロックを解除します。"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PINロックを解除します。"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"パスワードロックを解除します。"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"パターンエリアです。"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"スライドエリアです。"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PINエリア"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PINエリア"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUKエリア"</string>
diff --git a/packages/Keyguard/res/values-ka-rGE/strings.xml b/packages/Keyguard/res/values-ka-rGE/strings.xml
index a398e00..658194ff 100644
--- a/packages/Keyguard/res/values-ka-rGE/strings.xml
+++ b/packages/Keyguard/res/values-ka-rGE/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM ბარათი დაბლოკილია."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM ბარათი დაბლოკილია PUK კოდით."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"მიმდინარეობს SIM ბარათის განბლოკვა…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"განბლოკვა ნიმუშით."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"განბლოკვა Pin-ით."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"პაროლის განბლოკვა"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ნიმუშების სივრცე."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"გადასრიალების სივრცე."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-ის არე"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM-ის PIN-ის არე"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM-ის PUK-ის არე"</string>
diff --git a/packages/Keyguard/res/values-kk-rKZ/strings.xml b/packages/Keyguard/res/values-kk-rKZ/strings.xml
index be261fb..2eb3948 100644
--- a/packages/Keyguard/res/values-kk-rKZ/strings.xml
+++ b/packages/Keyguard/res/values-kk-rKZ/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM картасы бекітулі."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картасының PUK коды бекітілген."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM картасының бекітпесін ашуда…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Кескін арқылы ашу."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin арқылы ашу."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Құпия сөз арқылы ашу."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Кескін арқылы ашу аймағы."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Сырғыту аймағы."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN аумағы"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN аумағы"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK аумағы"</string>
diff --git a/packages/Keyguard/res/values-km-rKH/strings.xml b/packages/Keyguard/res/values-km-rKH/strings.xml
index 4d3f6e8..fce46c7 100644
--- a/packages/Keyguard/res/values-km-rKH/strings.xml
+++ b/packages/Keyguard/res/values-km-rKH/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ស៊ីមកាតជាប់សោ។"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ស៊ីមកាតជាប់កូដ PUK ។"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"កំពុងដោះសោស៊ីមកាត..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"លំនាំដោះសោ។"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"កូដ PIN ដោះសោ។"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ពាក្យសម្ងាត់ដោះសោ។"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ផ្ទៃលំនាំ។"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ផ្ទៃរុញ។"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"ប្រអប់លេខសម្ងាត់"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"ប្រអប់លេខសម្ងាត់ស៊ីម"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"ប្រអប់ PUK ស៊ីម"</string>
diff --git a/packages/Keyguard/res/values-kn-rIN/strings.xml b/packages/Keyguard/res/values-kn-rIN/strings.xml
index 5691a63..7bac9c6 100644
--- a/packages/Keyguard/res/values-kn-rIN/strings.xml
+++ b/packages/Keyguard/res/values-kn-rIN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ಸಿಮ್ ಕಾರ್ಡ್ ಲಾಕ್ ಮಾಡಲಾಗಿದೆ."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ಸಿಮ್ ಕಾರ್ಡ್ ಅನ್ನು PUK-ಲಾಕ್ ಮಾಡಲಾಗಿದೆ."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ಸಿಮ್ ಕಾರ್ಡ್ ಅನ್ಲಾಕ್ ಮಾಡಲಾಗುತ್ತಿದೆ…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ಪ್ಯಾಟರ್ನ್ ಅನ್ಲಾಕ್."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ಪಿನ್ ಅನ್ಲಾಕ್."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ಪಾಸ್ವರ್ಡ್ ಅನ್ಲಾಕ್."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ಪ್ಯಾಟರ್ನ್ ಪ್ರದೇಶ."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ಸ್ಲೈಡ್ ಪ್ರದೇಶ."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"ಪಿನ್ ಪ್ರದೇಶ"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"ಸಿಮ್ ಪಿನ್ ಪ್ರದೇಶ"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"ಸಿಮ್ PUK ಪ್ರದೇಶ"</string>
diff --git a/packages/Keyguard/res/values-ko/strings.xml b/packages/Keyguard/res/values-ko/strings.xml
index 2eeef2b..5d40d4d 100644
--- a/packages/Keyguard/res/values-ko/strings.xml
+++ b/packages/Keyguard/res/values-ko/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM 카드가 잠겨 있습니다."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 카드가 PUK 잠김 상태입니다."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM 카드 잠금해제 중..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"패턴을 사용하여 잠금해제합니다."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"핀을 사용하여 잠금해제합니다."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"비밀번호를 사용하여 잠금해제합니다."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"패턴을 그리는 부분입니다."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"슬라이드하는 부분입니다."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN 영역"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN 영역"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK 영역"</string>
diff --git a/packages/Keyguard/res/values-ky-rKG/strings.xml b/packages/Keyguard/res/values-ky-rKG/strings.xml
index d42b1fa..a485528 100644
--- a/packages/Keyguard/res/values-ky-rKG/strings.xml
+++ b/packages/Keyguard/res/values-ky-rKG/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карта бөгөттөлгөн."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-карта PUK-бөгөттө."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM-карта бөгөттөн чыгарылууда…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Үлгү менен ачуу."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Пин код менен ачуу."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Сырсөз менен ачуу."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Үлгү аймагы."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Жылмыштыруу аймагы."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN аймагы"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN аймагы"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK аймагы"</string>
diff --git a/packages/Keyguard/res/values-lo-rLA/strings.xml b/packages/Keyguard/res/values-lo-rLA/strings.xml
index 8e7c813..29a1b56 100644
--- a/packages/Keyguard/res/values-lo-rLA/strings.xml
+++ b/packages/Keyguard/res/values-lo-rLA/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ຊິມກາດຖືກລັອກ."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ຊິມກາດຖືກລັອກດ້ວຍລະຫັດ PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ກຳລັງປົດລັອກຊິມກາດ..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ປົດລັອກດ້ວຍຮູບແບບ."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ປົດລັອກດ້ວຍ PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ການປົດລັອກດ້ວຍລະຫັດຜ່ານ."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ພື້ນທີ່ຮູບແບບ."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ເລື່ອນພື້ນທີ່."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"ພື້ນທີ່ PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"ພື້ນທີ່ PIN ຂອງ SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"ພື້ນທີ່ PUK ຂອງ SIM"</string>
diff --git a/packages/Keyguard/res/values-lt/strings.xml b/packages/Keyguard/res/values-lt/strings.xml
index 653c089..fd41efc 100644
--- a/packages/Keyguard/res/values-lt/strings.xml
+++ b/packages/Keyguard/res/values-lt/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kortelė užrakinta."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kortelė užrakinta PUK kodu."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Atrakinama SIM kortelė…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Atrakinimas pagal piešinį."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Atrakinimas įvedus PIN kodą."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Atrakinimas įvedus slaptažodį."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Atrakinimo pagal piešinį sritis."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Slydimo sritis."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN kodo sritis"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM kortelės PIN kodo sritis"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM kortelės PUK kodo sritis"</string>
diff --git a/packages/Keyguard/res/values-lv/strings.xml b/packages/Keyguard/res/values-lv/strings.xml
index 449659e..f801d64 100644
--- a/packages/Keyguard/res/values-lv/strings.xml
+++ b/packages/Keyguard/res/values-lv/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM karte ir bloķēta."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karte ir bloķēta ar PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Notiek SIM kartes atbloķēšana..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Autorizācija ar kombināciju."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Autorizācija ar PIN kodu."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Autorizācija ar paroli."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kombinācijas ievades apgabals."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Apgabals, kur vilkt ar pirkstu."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN apgabals"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN apgabals"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK apgabals"</string>
diff --git a/packages/Keyguard/res/values-mk-rMK/strings.xml b/packages/Keyguard/res/values-mk-rMK/strings.xml
index a6ee921..9d833f0 100644
--- a/packages/Keyguard/res/values-mk-rMK/strings.xml
+++ b/packages/Keyguard/res/values-mk-rMK/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"СИМ картичката е заклучена."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"СИМ картичката е заклучена со ПУК."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"СИМ картичката се отклучува..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Отклучување со шема."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Отклучување со пин."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Отклучување со лозинка."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Област за шема."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Област за лизгање."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Поле за PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Поле за PIN на СИМ"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Поле за ПУК на СИМ"</string>
diff --git a/packages/Keyguard/res/values-ml-rIN/strings.xml b/packages/Keyguard/res/values-ml-rIN/strings.xml
index fa39ae1..5d93cf0 100644
--- a/packages/Keyguard/res/values-ml-rIN/strings.xml
+++ b/packages/Keyguard/res/values-ml-rIN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"സിം കാർഡ് ലോക്കുചെയ്തു."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"സിം കാർഡ് PUK-ലോക്ക് ചെയ്തതാണ്."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"സിം കാർഡ് അൺലോക്കുചെയ്യുന്നു…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"പാറ്റേൺ അൺലോക്ക്."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"പിൻ അൺലോക്ക്."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"പാസ്വേഡ് അൺലോക്ക്."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"പാറ്റേൺ ഏരിയ."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"സ്ലൈഡ് ഏരിയ."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN ഏരിയ"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN ഏരിയ"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK ഏരിയ"</string>
diff --git a/packages/Keyguard/res/values-mn-rMN/strings.xml b/packages/Keyguard/res/values-mn-rMN/strings.xml
index fae0328..8641e31 100644
--- a/packages/Keyguard/res/values-mn-rMN/strings.xml
+++ b/packages/Keyguard/res/values-mn-rMN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM карт түгжигдсэн."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картны PUK-түгжигдсэн."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM картны түгжээг гаргаж байна…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Тайлах хээ."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Тайлах пин."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Тайлах нууц үг."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Хээний хэсэг."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Гулсуулах хэсэг."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN талбар"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN талбар"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK талбар"</string>
diff --git a/packages/Keyguard/res/values-mr-rIN/strings.xml b/packages/Keyguard/res/values-mr-rIN/strings.xml
index 57a95be..8bcaad6 100644
--- a/packages/Keyguard/res/values-mr-rIN/strings.xml
+++ b/packages/Keyguard/res/values-mr-rIN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"सिम कार्ड लॉक झाले आहे."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"सिम कार्ड PUK-लॉक केलेले आहे."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"सिम कार्ड अनलॉक करत आहे…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"नमुना अनलॉक."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"पिन अनलॉक."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"संकेतशब्द अनलॉक."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"नमुना क्षेत्र."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"स्लाइड क्षेत्र."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"पिन क्षेत्र"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"सिम पिन क्षेत्र"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"सिम PUK क्षेत्र"</string>
diff --git a/packages/Keyguard/res/values-ms-rMY/strings.xml b/packages/Keyguard/res/values-ms-rMY/strings.xml
index 803d40a..b7b093f 100644
--- a/packages/Keyguard/res/values-ms-rMY/strings.xml
+++ b/packages/Keyguard/res/values-ms-rMY/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Kad SIM dikunci."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kad SIM dikunci dengan PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Membuka kunci kad SIM..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Buka kunci corak."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Buka kunci pin."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Buka kunci kata laluan."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Kawasan corak."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Kawasan luncur."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Kawasan PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Kawasan PIN SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Kawasan PUK SIM"</string>
diff --git a/packages/Keyguard/res/values-my-rMM/strings.xml b/packages/Keyguard/res/values-my-rMM/strings.xml
index fd800e4..7a7664e 100644
--- a/packages/Keyguard/res/values-my-rMM/strings.xml
+++ b/packages/Keyguard/res/values-my-rMM/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ဆင်းမ်ကဒ် သော့ကျနေပါသည်"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ဆင်းမ်ကဒ် ရဲ့ ပင်နံပါတ် ပြန်ဖွင့်သည့် ကုဒ် သော့ကျနေပါသည်"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"ဆင်းမ်ကဒ် ကို သော့ဖွင့်နေပါသည်"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ပုံစံဖြင့် သော့ဖွင့်ခြင်း"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"ပင်နံပါတ်ဖြင့် သော့ဖွင့်ခြင်း"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"စကားဝှက်ဖြင့် သော့ဖွင့်ခြင်း"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ပုံစံနေရာ"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ဘေးတိုက်ပွတ်ဆွဲရန် နေရာ"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN နေရာ"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN နေရာ"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK နေရာ"</string>
diff --git a/packages/Keyguard/res/values-nb/strings.xml b/packages/Keyguard/res/values-nb/strings.xml
index 1bdf444..e0035da 100644
--- a/packages/Keyguard/res/values-nb/strings.xml
+++ b/packages/Keyguard/res/values-nb/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kortet er låst."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortet er PUK-låst."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Låser opp SIM-kortet ..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mønsteropplåsning."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-opplåsning."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Passordopplåsning."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Mønsterområde."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Dra-felt."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-området"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"PIN-området for SIM-kortet"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"PUK-området for SIM-kortet"</string>
diff --git a/packages/Keyguard/res/values-ne-rNP/strings.xml b/packages/Keyguard/res/values-ne-rNP/strings.xml
index 2cf863d..47f5432 100644
--- a/packages/Keyguard/res/values-ne-rNP/strings.xml
+++ b/packages/Keyguard/res/values-ne-rNP/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM कार्ड लक गरियो।"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM कार्ड PUK-लक छ।"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM कार्ड अनलक हुँदै…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ढाँचा अनलक।"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin अनलक"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"पासवर्ड अनलक।"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ढाँचा क्षेत्र।"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"स्लाइड क्षेत्र।"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"पीन क्षेत्र"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM पिन क्षेत्र"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM पुक क्षेत्र"</string>
diff --git a/packages/Keyguard/res/values-nl/strings.xml b/packages/Keyguard/res/values-nl/strings.xml
index a33165d..c44381e 100644
--- a/packages/Keyguard/res/values-nl/strings.xml
+++ b/packages/Keyguard/res/values-nl/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Simkaart is vergrendeld."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Simkaart is vergrendeld met PUK-code."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Simkaart ontgrendelen…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ontgrendeling via patroon."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ontgrendeling via pincode."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Ontgrendeling via wachtwoord."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Tekengebied voor patroon."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Schuifgebied."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Gebied voor pincode"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Gebied voor sim-pincode"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Gebied voor sim-pukcode"</string>
diff --git a/packages/Keyguard/res/values-pa-rIN/strings.xml b/packages/Keyguard/res/values-pa-rIN/strings.xml
index 8cf86a0..16ca29c 100644
--- a/packages/Keyguard/res/values-pa-rIN/strings.xml
+++ b/packages/Keyguard/res/values-pa-rIN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM ਕਾਰਡ ਲੌਕ ਕੀਤਾ ਹੋਇਆ ਹੈ।"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM ਕਾਰਡ PUK-ਲੌਕਡ ਹੈ।"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM ਕਾਰਡ ਅਨਲੌਕ ਕਰ ਰਿਹਾ ਹੈ…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"ਪੈਟਰਨ ਅਨਲੌਕ।"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin ਅਨਲੌਕ।"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"ਪਾਸਵਰਡ ਅਨਲੌਕ।"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"ਪੈਟਰਨ ਖੇਤਰ।"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ਖੇਤਰ ਸਲਾਈਡ ਕਰੋ।"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN ਖੇਤਰ"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN ਖੇਤਰ"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK ਖੇਤਰ"</string>
diff --git a/packages/Keyguard/res/values-pl/strings.xml b/packages/Keyguard/res/values-pl/strings.xml
index ee20850..f0980da 100644
--- a/packages/Keyguard/res/values-pl/strings.xml
+++ b/packages/Keyguard/res/values-pl/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Karta SIM jest zablokowana."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Karta SIM jest zablokowana za pomocą kodu PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Odblokowuję kartę SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odblokowanie wzorem."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odblokowanie kodem PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odblokowanie hasłem."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Obszar wzoru."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Obszar przesuwania."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Miejsce na PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Miejsce na PIN do karty SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Miejsce na PUK do karty SIM"</string>
diff --git a/packages/Keyguard/res/values-pt-rBR/strings.xml b/packages/Keyguard/res/values-pt-rBR/strings.xml
index d7215c1..2663337 100644
--- a/packages/Keyguard/res/values-pt-rBR/strings.xml
+++ b/packages/Keyguard/res/values-pt-rBR/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"O cartão SIM está bloqueado."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"O cartão SIM está bloqueado pelo PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando o cartão SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueio com padrão."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueio com PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueio com senha."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área do padrão."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Área de deslize."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Área do PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Área do PIN SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Área do PUK SIM"</string>
diff --git a/packages/Keyguard/res/values-pt-rPT/strings.xml b/packages/Keyguard/res/values-pt-rPT/strings.xml
index f0b2bbc..e417e07 100644
--- a/packages/Keyguard/res/values-pt-rPT/strings.xml
+++ b/packages/Keyguard/res/values-pt-rPT/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"O cartão SIM está bloqueado."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"O cartão SIM está bloqueado por PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"A desbloquear o cartão SIM..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueio através de sequência."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueio através de PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueio através de palavra-passe."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área da sequência."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Área de deslize."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Área do PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Área do PIN do SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Área do PUK do SIM"</string>
diff --git a/packages/Keyguard/res/values-pt/strings.xml b/packages/Keyguard/res/values-pt/strings.xml
index d7215c1..2663337 100644
--- a/packages/Keyguard/res/values-pt/strings.xml
+++ b/packages/Keyguard/res/values-pt/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"O cartão SIM está bloqueado."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"O cartão SIM está bloqueado pelo PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Desbloqueando o cartão SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desbloqueio com padrão."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Desbloqueio com PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Desbloqueio com senha."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Área do padrão."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Área de deslize."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Área do PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Área do PIN SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Área do PUK SIM"</string>
diff --git a/packages/Keyguard/res/values-ro/strings.xml b/packages/Keyguard/res/values-ro/strings.xml
index ea5380c..09a066a 100644
--- a/packages/Keyguard/res/values-ro/strings.xml
+++ b/packages/Keyguard/res/values-ro/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Cardul SIM este blocat."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Cardul SIM este blocat cu codul PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Se deblochează cardul SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Deblocare cu model."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Deblocare cu PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Deblocare cu parolă."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zonă model."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Zonă glisare."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Zona codului PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Zona codului PIN al cardului SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Zona codului PUK al cardului SIM"</string>
@@ -61,7 +56,7 @@
<string name="kg_wrong_pattern" msgid="1850806070801358830">"Model greșit"</string>
<string name="kg_wrong_password" msgid="2333281762128113157">"Parolă greșită"</string>
<string name="kg_wrong_pin" msgid="1131306510833563801">"Cod PIN greșit"</string>
- <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Încercați din nou peste <xliff:g id="NUMBER">%d</xliff:g> (de) secunde."</string>
+ <string name="kg_too_many_failed_attempts_countdown" msgid="6358110221603297548">"Încercați din nou peste <xliff:g id="NUMBER">%d</xliff:g> secunde."</string>
<string name="kg_pattern_instructions" msgid="398978611683075868">"Desenați modelul"</string>
<string name="kg_sim_pin_instructions" msgid="2319508550934557331">"Introduceți codul PIN al cardului SIM"</string>
<string name="kg_sim_pin_instructions_multi" msgid="7818515973197201434">"Introduceți codul PIN al cardului SIM pentru „<xliff:g id="CARRIER">%1$s</xliff:g>”"</string>
@@ -77,9 +72,9 @@
<string name="kg_invalid_puk" msgid="3638289409676051243">"Reintroduceți codul PUK corect. Încercările repetate vor dezactiva definitiv cardul SIM."</string>
<string name="kg_invalid_confirm_pin_hint" product="default" msgid="7003469261464593516">"Codurile PIN nu coincid"</string>
<string name="kg_login_too_many_attempts" msgid="6486842094005698475">"Prea multe încercări de desenare a modelului"</string>
- <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Ați introdus incorect codul PIN de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori.\n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> (de) secunde."</string>
- <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Ați introdus incorect parola de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> (de) secunde."</string>
- <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> (de) secunde."</string>
+ <string name="kg_too_many_failed_pin_attempts_dialog_message" msgid="8276745642049502550">"Ați introdus incorect codul PIN de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori.\n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> secunde."</string>
+ <string name="kg_too_many_failed_password_attempts_dialog_message" msgid="7813713389422226531">"Ați introdus incorect parola de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> secunde."</string>
+ <string name="kg_too_many_failed_pattern_attempts_dialog_message" msgid="74089475965050805">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. \n\nÎncercați din nou peste <xliff:g id="NUMBER_1">%2$d</xliff:g> secunde."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="tablet" msgid="8774056606869646621">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a tabletei. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, această tabletă va fi resetată, iar toate datele acesteia vor fi șterse."</string>
<string name="kg_failed_attempts_almost_at_wipe" product="default" msgid="1843331751334128428">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, acest telefon va fi resetat, iar toate datele acestuia vor fi șterse."</string>
<string name="kg_failed_attempts_now_wiping" product="tablet" msgid="258925501999698032">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a tabletei. Această tabletă va fi resetată, iar toate datele acesteia vor fi șterse."</string>
@@ -92,8 +87,8 @@
<string name="kg_failed_attempts_almost_at_erase_profile" product="default" msgid="6853071165802933545">"Ați efectuat <xliff:g id="NUMBER_0">%1$d</xliff:g> încercări incorecte de deblocare a telefonului. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, profilul de serviciu va fi eliminat, iar toate datele profilului vor fi șterse."</string>
<string name="kg_failed_attempts_now_erasing_profile" product="tablet" msgid="4686386497449912146">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a tabletei. Profilul de serviciu va fi eliminat, iar toate datele profilului vor fi șterse."</string>
<string name="kg_failed_attempts_now_erasing_profile" product="default" msgid="4951507352869831265">"Ați efectuat <xliff:g id="NUMBER">%d</xliff:g> încercări incorecte de deblocare a telefonului. Profilul de serviciu va fi eliminat, iar toate datele profilului vor fi șterse."</string>
- <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați tableta cu ajutorul unui cont de e-mail.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string>
- <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați telefonul cu ajutorul unui cont de e-mail.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> (de) secunde."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="tablet" msgid="3253575572118914370">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați tableta cu ajutorul unui cont de e-mail.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> secunde."</string>
+ <string name="kg_failed_attempts_almost_at_login" product="default" msgid="1437638152015574839">"Ați desenat incorect modelul pentru deblocare de <xliff:g id="NUMBER_0">%1$d</xliff:g> ori. După încă <xliff:g id="NUMBER_1">%2$d</xliff:g> încercări nereușite, vi se va solicita să deblocați telefonul cu ajutorul unui cont de e-mail.\n\n Încercați din nou peste <xliff:g id="NUMBER_2">%3$d</xliff:g> secunde."</string>
<string name="kg_password_wrong_pin_code_pukked" msgid="30531039455764924">"Codul PIN pentru cardul SIM este incorect. Contactați operatorul pentru a vă debloca dispozitivul."</string>
<plurals name="kg_password_wrong_pin_code" formatted="false" msgid="6721575017538162249">
<item quantity="few">Codul PIN pentru cardul SIM este incorect. V-au mai rămas <xliff:g id="NUMBER_1">%d</xliff:g> încercări.</item>
diff --git a/packages/Keyguard/res/values-ru/strings.xml b/packages/Keyguard/res/values-ru/strings.xml
index 264e42c..7466c66 100644
--- a/packages/Keyguard/res/values-ru/strings.xml
+++ b/packages/Keyguard/res/values-ru/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карта заблокирована"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Для разблокировки SIM-карты требуется PUK-код."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Разблокировка SIM-карты…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Графический ключ"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN-код"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Пароль"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Область ввода графического ключа"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Область слайдера"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-код"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"PIN-код SIM-карты"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"PUK-код SIM-карты"</string>
diff --git a/packages/Keyguard/res/values-si-rLK/strings.xml b/packages/Keyguard/res/values-si-rLK/strings.xml
index 607e8ac..5f96e8c 100644
--- a/packages/Keyguard/res/values-si-rLK/strings.xml
+++ b/packages/Keyguard/res/values-si-rLK/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM පත අගුළු දමා ඇත."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM පත PUK අගුළු ලා ඇත."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM පත අගුළු හරිමින්..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"රටා අගුළු ඇරීම."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN අගුළු ඇරීම."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"මුරපද අගුළු ඇරීම."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"රටා ප්රදේශය."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"සර්පණ ප්රදේශය."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN කොටස"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN කොටස"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK කොටස"</string>
diff --git a/packages/Keyguard/res/values-sk/strings.xml b/packages/Keyguard/res/values-sk/strings.xml
index 4cbfd51..82a4f1d4 100644
--- a/packages/Keyguard/res/values-sk/strings.xml
+++ b/packages/Keyguard/res/values-sk/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM karta je uzamknutá."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karta je uzamknutá pomocou kódu PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Prebieha odomykanie SIM karty..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odomknutie vzorom."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odomknutie kódom PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odomknutie heslom."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Oblasť na zadanie bezpečnostného vzoru."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Oblasť na prejdenie prstom."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Oblasť kódu PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Oblasť kódu PIN SIM karty"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Oblasť kódu PUK SIM karty"</string>
diff --git a/packages/Keyguard/res/values-sl/strings.xml b/packages/Keyguard/res/values-sl/strings.xml
index 91083f5..9100bd3 100644
--- a/packages/Keyguard/res/values-sl/strings.xml
+++ b/packages/Keyguard/res/values-sl/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Kartica SIM je zaklenjena."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Kartica SIM je zaklenjena s kodo PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Odklepanje kartice SIM …"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Odklepanje z vzorcem."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Odklepanje s kodo PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Odklepanje z geslom."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Območje vzorca."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Območje podrsanja."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Območje za kodo PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Območje za kodo PIN za SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Območje za kodo PUK za SIM"</string>
diff --git a/packages/Keyguard/res/values-sq-rAL/strings.xml b/packages/Keyguard/res/values-sq-rAL/strings.xml
index 7f4becb..31d31b7 100644
--- a/packages/Keyguard/res/values-sq-rAL/strings.xml
+++ b/packages/Keyguard/res/values-sq-rAL/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Karta SIM është e kyçur."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Karta SIM është e kyçur me PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Po shkyç kartën SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Shkyçje me motiv."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Shkyçje me PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Shkyçja e fjalëkalimit."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Zona e motivit."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Zonën e rrëshqitjes."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Zona PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Zona PIN e kartës SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Zona e PUK-ut të kartës SIM"</string>
diff --git a/packages/Keyguard/res/values-sr/strings.xml b/packages/Keyguard/res/values-sr/strings.xml
index 62614a6..840cae7 100644
--- a/packages/Keyguard/res/values-sr/strings.xml
+++ b/packages/Keyguard/res/values-sr/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM картица је закључана."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM картица је закључана PUK кодом."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Откључавање SIM картице…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Откључавање шаблоном."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Откључавање PIN-ом."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Откључавање лозинком."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Област шаблона."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Област превлачења."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Област за PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Област за PIN за SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Област за PUK за SIM"</string>
diff --git a/packages/Keyguard/res/values-sv/strings.xml b/packages/Keyguard/res/values-sv/strings.xml
index 378f047..527c8e6 100644
--- a/packages/Keyguard/res/values-sv/strings.xml
+++ b/packages/Keyguard/res/values-sv/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-kortet är låst."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-kortet är PUK-låst."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Låser upp SIM-kort …"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Lås upp med grafiskt lösenord."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Lås upp med PIN-kod."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Lås upp med lösenord."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Fält för grafiskt lösenord."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Fält med dragreglage."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Pinkodsområde"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Pinkodsområde för SIM-kort"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"PUK-kodsområde för SIM-kort"</string>
diff --git a/packages/Keyguard/res/values-sw/strings.xml b/packages/Keyguard/res/values-sw/strings.xml
index b570e9f..c2e7ac9 100644
--- a/packages/Keyguard/res/values-sw/strings.xml
+++ b/packages/Keyguard/res/values-sw/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kadi imefungwa."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kadi imefungwa na PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Inafungua SIM kadi..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Kufungua kwa ruwaza."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Kufungua kwa PIN."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Kufungua kwa nenosiri."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Eneo la ruwaza."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Eneo la slaidi."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Eneo la PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Eneo la PIN ya SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Eneo la PUK ya SIM"</string>
diff --git a/packages/Keyguard/res/values-ta-rIN/strings.xml b/packages/Keyguard/res/values-ta-rIN/strings.xml
index 2e3f588..c80ddce 100644
--- a/packages/Keyguard/res/values-ta-rIN/strings.xml
+++ b/packages/Keyguard/res/values-ta-rIN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"சிம் கார்டு பூட்டப்பட்டுள்ளது."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"சிம் கார்டு PUK ஆல் பூட்டப்பட்டது."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"சிம் கார்டின் தடையைநீக்குகிறது..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"வடிவம் மூலம் திறத்தல்."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin மூலம் திறத்தல்."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"கடவுச்சொல் மூலம் திறத்தல்."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"வடிவப் பகுதி."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"ஸ்லைடு பகுதி."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN பகுதி"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"சிம் PIN பகுதி"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"சிம் PUK பகுதி"</string>
diff --git a/packages/Keyguard/res/values-te-rIN/strings.xml b/packages/Keyguard/res/values-te-rIN/strings.xml
index 6c521aa..a72a85b 100644
--- a/packages/Keyguard/res/values-te-rIN/strings.xml
+++ b/packages/Keyguard/res/values-te-rIN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"సిమ్ కార్డు లాక్ చేయబడింది."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"సిమ్ కార్డు PUK లాక్ చేయబడింది."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"సిమ్ కార్డును అన్లాక్ చేస్తోంది…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"నమూనా అన్లాక్."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"పిన్ అన్లాక్."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"పాస్వర్డ్ అన్లాక్."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"నమూనా ప్రాంతం."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"స్లయిడ్ ప్రాంతం."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN ప్రాంతం"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN ప్రాంతం"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK ప్రాంతం"</string>
diff --git a/packages/Keyguard/res/values-th/strings.xml b/packages/Keyguard/res/values-th/strings.xml
index 1799fe8..e094d35 100644
--- a/packages/Keyguard/res/values-th/strings.xml
+++ b/packages/Keyguard/res/values-th/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"ซิมการ์ดถูกล็อก"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"ซิมการ์ดถูกล็อกด้วย PUK"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"กำลังปลดล็อกซิมการ์ด…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"การปลดล็อกด้วยรูปแบบ"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"การปลดล็อกด้วย PIN"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"การปลดล็อกด้วยรหัสผ่าน"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"พื้นที่สำหรับรูปแบบ"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"พื้นที่สำหรับการเลื่อน"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"พื้นที่ PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"พื้นที่ PIN ของซิม"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"พื้นที่ PUK ของซิม"</string>
diff --git a/packages/Keyguard/res/values-tl/strings.xml b/packages/Keyguard/res/values-tl/strings.xml
index 39cad72..73492e2 100644
--- a/packages/Keyguard/res/values-tl/strings.xml
+++ b/packages/Keyguard/res/values-tl/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Naka-lock ang SIM card."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Naka-lock ang SIM card gamit ang PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ina-unlock ang SIM card…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Pag-unlock ng pattern."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pag-unlock ng pin."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Pag-unlock ng password."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Bahagi ng pattern."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Bahagi ng slide."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Lugar ng PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Lugar ng PIN ng SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Lugar ng PUK ng SIM"</string>
diff --git a/packages/Keyguard/res/values-tr/strings.xml b/packages/Keyguard/res/values-tr/strings.xml
index ffcbd12..3ef0705 100644
--- a/packages/Keyguard/res/values-tr/strings.xml
+++ b/packages/Keyguard/res/values-tr/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM kart kilitli."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM kart PUK kilidi devrede."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM kart kilidi açılıyor…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Desenle kilit açma."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin koduyla kilit açma."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Şifreyle kilit açma."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Desen alanı."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Kaydırma alanı."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN alanı"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN alanı"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK alanı"</string>
diff --git a/packages/Keyguard/res/values-uk/strings.xml b/packages/Keyguard/res/values-uk/strings.xml
index be19281..a508689 100644
--- a/packages/Keyguard/res/values-uk/strings.xml
+++ b/packages/Keyguard/res/values-uk/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM-карту заблоковано."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM-карту заблоковано PUK-кодом."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Розблокування SIM-карти…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Розблокування ключем."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Розблокування PIN-кодом."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Розблокування паролем."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Область ключа."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Область повзунка."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-код"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"PIN-код SIM-карти"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"PUK-код SIM-карти"</string>
diff --git a/packages/Keyguard/res/values-ur-rPK/strings.xml b/packages/Keyguard/res/values-ur-rPK/strings.xml
index 63f4e85..1070d58 100644
--- a/packages/Keyguard/res/values-ur-rPK/strings.xml
+++ b/packages/Keyguard/res/values-ur-rPK/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM کارڈ مقفل ہے۔"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM کارڈ PUK-مقفل ہے۔"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM کارڈ غیر مقفل کیا جا رہا ہے…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"پیٹرن کے ذریعے غیر مقفل کریں۔"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"پن کے ذریعے غیر مقفل کریں۔"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"پاس ورڈ کے ذریعہ غیر مقفل کریں۔"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"پیٹرن کا علاقہ۔"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"سلائیڈ کرنے کا علاقہ۔"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN کا علاقہ"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN کا علاقہ"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK کا علاقہ"</string>
diff --git a/packages/Keyguard/res/values-uz-rUZ/strings.xml b/packages/Keyguard/res/values-uz-rUZ/strings.xml
index ad71a56..a9df331 100644
--- a/packages/Keyguard/res/values-uz-rUZ/strings.xml
+++ b/packages/Keyguard/res/values-uz-rUZ/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM karta qulflangan."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM karta PUK kod bilan qulflangan."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"SIM karta qulfi ochilmoqda…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Grafik kalit bilan ochish."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Pin qulfini ochish."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Parolli qulfni ochish."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Grafik kalit chiziladigan hudud."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Maydonni silang"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN-kod maydoni"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM karta PIN kodi maydoni"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM karta PUK kodi maydoni"</string>
diff --git a/packages/Keyguard/res/values-vi/strings.xml b/packages/Keyguard/res/values-vi/strings.xml
index ad3da9f..c6d2bd8 100644
--- a/packages/Keyguard/res/values-vi/strings.xml
+++ b/packages/Keyguard/res/values-vi/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Thẻ SIM đã bị khóa."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Thẻ SIM đã bị khóa PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Đang mở khóa thẻ SIM…"</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Mở khóa bằng hình."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Mở khóa bằng mã pin."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Mở khóa bằng mật khẩu."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Khu vực hình."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Khu vực trượt."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Khu vực mã PIN"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Khu vực mã PIN của SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Khu vực PUK của SIM"</string>
diff --git a/packages/Keyguard/res/values-zh-rCN/strings.xml b/packages/Keyguard/res/values-zh-rCN/strings.xml
index 274d9e6..0723ab1 100644
--- a/packages/Keyguard/res/values-zh-rCN/strings.xml
+++ b/packages/Keyguard/res/values-zh-rCN/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM卡已被锁定。"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM卡已被PUK码锁定。"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"正在解锁SIM卡..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"图案解锁。"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN码解锁。"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"密码解锁。"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"图案区域。"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"滑动区域。"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN 码区域"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM 卡 PIN 码区域"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM 卡 PUK 码区域"</string>
diff --git a/packages/Keyguard/res/values-zh-rHK/strings.xml b/packages/Keyguard/res/values-zh-rHK/strings.xml
index 7d51154..5b1903b 100644
--- a/packages/Keyguard/res/values-zh-rHK/strings.xml
+++ b/packages/Keyguard/res/values-zh-rHK/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM 卡處於鎖定狀態。"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 卡處於 PUK 鎖定狀態。"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"正在解開上鎖的 SIM 卡..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"圖案解鎖。"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN 解鎖。"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"密碼解鎖。"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"圖案區域。"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"滑動區域。"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN 區域"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM PIN 區域"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM PUK 區域"</string>
diff --git a/packages/Keyguard/res/values-zh-rTW/strings.xml b/packages/Keyguard/res/values-zh-rTW/strings.xml
index 50895f3..388f8e1 100644
--- a/packages/Keyguard/res/values-zh-rTW/strings.xml
+++ b/packages/Keyguard/res/values-zh-rTW/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"SIM 卡處於鎖定狀態。"</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"SIM 卡處於 PUK 鎖定狀態"</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"正在解除 SIM 卡鎖定..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"圖案解鎖。"</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"PIN 解鎖。"</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"密碼解鎖。"</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"圖案區域。"</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"滑動區域。"</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"PIN 區"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"SIM 卡 PIN 區"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"SIM 卡 PUK 區"</string>
diff --git a/packages/Keyguard/res/values-zu/strings.xml b/packages/Keyguard/res/values-zu/strings.xml
index c5f2a85..a9b6263 100644
--- a/packages/Keyguard/res/values-zu/strings.xml
+++ b/packages/Keyguard/res/values-zu/strings.xml
@@ -46,11 +46,6 @@
<string name="keyguard_sim_locked_message" msgid="6875773413306380902">"Ikhadi le-SIM likhiyiwe."</string>
<string name="keyguard_sim_puk_locked_message" msgid="3747232467471801633">"Ikhadi le-SIM likhiywe nge-PUK."</string>
<string name="keyguard_sim_unlock_progress_dialog_message" msgid="7975221805033614426">"Ivula ikhadi le-SIM..."</string>
- <string name="keyguard_accessibility_pattern_unlock" msgid="1490840706075246612">"Ukuvula ngephethini."</string>
- <string name="keyguard_accessibility_pin_unlock" msgid="2469687111784035046">"Ukuvula ngephinikhodi."</string>
- <string name="keyguard_accessibility_password_unlock" msgid="7675777623912155089">"Ukuvula ngephasiwedi."</string>
- <string name="keyguard_accessibility_pattern_area" msgid="7679891324509597904">"Indawo yephethini."</string>
- <string name="keyguard_accessibility_slide_area" msgid="6736064494019979544">"Indawo yokushelelisa."</string>
<string name="keyguard_accessibility_pin_area" msgid="7903959476607833485">"Indawo yephinikhodi"</string>
<string name="keyguard_accessibility_sim_pin_area" msgid="3887780775111719336">"Indawo yephinikhodi ye-SIM"</string>
<string name="keyguard_accessibility_sim_puk_area" msgid="1880823406954996207">"Indawo ye-SIM PUK"</string>
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
index 4f5152a..285b1ae 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPINView.java
@@ -16,12 +16,8 @@
package com.android.keyguard;
-import android.animation.Animator;
-import android.animation.ObjectAnimator;
import android.content.Context;
import android.util.AttributeSet;
-import android.view.RenderNode;
-import android.view.RenderNodeAnimator;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.AnimationUtils;
@@ -144,9 +140,10 @@
setTranslationY(0);
AppearAnimationUtils.startTranslationYAnimation(this, 0 /* delay */, 280 /* duration */,
mDisappearYTranslation, mDisappearAnimationUtils.getInterpolator());
- DisappearAnimationUtils disappearAnimationUtils = mKeyguardUpdateMonitor.isUserUnlocked()
- ? mDisappearAnimationUtils
- : mDisappearAnimationUtilsLocked;
+ DisappearAnimationUtils disappearAnimationUtils = mKeyguardUpdateMonitor
+ .needsSlowUnlockTransition()
+ ? mDisappearAnimationUtilsLocked
+ : mDisappearAnimationUtils;
disappearAnimationUtils.startAnimation2d(mViews,
new Runnable() {
@Override
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
index b75f529..ddccc14 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPasswordView.java
@@ -42,16 +42,21 @@
* Displays an alphanumeric (latin-1) key entry for the user to enter
* an unlock password
*/
-
public class KeyguardPasswordView extends KeyguardAbsKeyInputView
implements KeyguardSecurityView, OnEditorActionListener, TextWatcher {
private final boolean mShowImeAtScreenOn;
private final int mDisappearYTranslation;
+ // A delay constant to be used in a workaround for the situation where InputMethodManagerService
+ // is not switched to the new user yet.
+ // TODO: Remove this by ensuring such a race condition never happens.
+ private static final int DELAY_MILLIS_TO_REEVALUATE_IME_SWITCH_ICON = 500; // 500ms
+
InputMethodManager mImm;
private TextView mPasswordEntry;
private TextViewInputDisabler mPasswordEntryDisabler;
+ private View mSwitchImeButton;
private Interpolator mLinearOutSlowInInterpolator;
private Interpolator mFastOutLinearInInterpolator;
@@ -141,12 +146,31 @@
mPasswordEntry.requestFocus();
}
+ private void updateSwitchImeButton() {
+ // If there's more than one IME, enable the IME switcher button
+ final boolean wasVisible = mSwitchImeButton.getVisibility() == View.VISIBLE;
+ final boolean shouldBeVisible = hasMultipleEnabledIMEsOrSubtypes(mImm, false);
+ if (wasVisible != shouldBeVisible) {
+ mSwitchImeButton.setVisibility(shouldBeVisible ? View.VISIBLE : View.GONE);
+ }
+
+ // TODO: Check if we still need this hack.
+ // If no icon is visible, reset the start margin on the password field so the text is
+ // still centered.
+ if (mSwitchImeButton.getVisibility() != View.VISIBLE) {
+ android.view.ViewGroup.LayoutParams params = mPasswordEntry.getLayoutParams();
+ if (params instanceof MarginLayoutParams) {
+ final MarginLayoutParams mlp = (MarginLayoutParams) params;
+ mlp.setMarginStart(0);
+ mPasswordEntry.setLayoutParams(params);
+ }
+ }
+ }
+
@Override
protected void onFinishInflate() {
super.onFinishInflate();
- boolean imeOrDeleteButtonVisible = false;
-
mImm = (InputMethodManager) getContext().getSystemService(
Context.INPUT_METHOD_SERVICE);
@@ -171,31 +195,29 @@
mPasswordEntry.requestFocus();
- // If there's more than one IME, enable the IME switcher button
- View switchImeButton = findViewById(R.id.switch_ime_button);
- if (switchImeButton != null && hasMultipleEnabledIMEsOrSubtypes(mImm, false)) {
- 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.
- mImm.showInputMethodPicker(false /* showAuxiliarySubtypes */);
- }
- });
- }
-
- // If no icon is visible, reset the start margin on the password field so the text is
- // still centered.
- if (!imeOrDeleteButtonVisible) {
- android.view.ViewGroup.LayoutParams params = mPasswordEntry.getLayoutParams();
- if (params instanceof MarginLayoutParams) {
- final MarginLayoutParams mlp = (MarginLayoutParams) params;
- mlp.setMarginStart(0);
- mPasswordEntry.setLayoutParams(params);
+ mSwitchImeButton = findViewById(R.id.switch_ime_button);
+ mSwitchImeButton.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.
+ mImm.showInputMethodPicker(false /* showAuxiliarySubtypes */);
}
- }
+ });
+
+ // If there's more than one IME, enable the IME switcher button
+ updateSwitchImeButton();
+
+ // When we the current user is switching, InputMethodManagerService sometimes has not
+ // switched internal state yet here. As a quick workaround, we check the keyboard state
+ // again.
+ // TODO: Remove this workaround by ensuring such a race condition never happens.
+ postDelayed(new Runnable() {
+ @Override
+ public void run() {
+ updateSwitchImeButton();
+ }
+ }, DELAY_MILLIS_TO_REEVALUATE_IME_SWITCH_ICON);
}
@Override
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
index 84b90c4..506f77d 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardPatternView.java
@@ -408,9 +408,9 @@
@Override
public boolean startDisappearAnimation(final Runnable finishRunnable) {
- float durationMultiplier = mKeyguardUpdateMonitor.isUserUnlocked()
- ? 1f
- : DISAPPEAR_MULTIPLIER_LOCKED;
+ float durationMultiplier = mKeyguardUpdateMonitor.needsSlowUnlockTransition()
+ ? DISAPPEAR_MULTIPLIER_LOCKED
+ : 1f;
mLockPatternView.clearPattern();
enableClipping(false);
setTranslationY(0);
@@ -419,9 +419,10 @@
-mDisappearAnimationUtils.getStartTranslation(),
mDisappearAnimationUtils.getInterpolator());
- DisappearAnimationUtils disappearAnimationUtils = mKeyguardUpdateMonitor.isUserUnlocked()
- ? mDisappearAnimationUtils
- : mDisappearAnimationUtilsLocked;
+ DisappearAnimationUtils disappearAnimationUtils = mKeyguardUpdateMonitor
+ .needsSlowUnlockTransition()
+ ? mDisappearAnimationUtilsLocked
+ : mDisappearAnimationUtils;
disappearAnimationUtils.startAnimation2d(mLockPatternView.getCellStates(),
() -> {
enableClipping(true);
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
index 0a86291..e169c0d 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitor.java
@@ -34,9 +34,12 @@
import android.app.admin.DevicePolicyManager;
import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
+import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
import android.database.ContentObserver;
import android.graphics.Bitmap;
import android.hardware.fingerprint.FingerprintManager;
@@ -159,6 +162,9 @@
private static final int DEFAULT_CHARGING_VOLTAGE_MICRO_VOLT = 5000000;
+ private static final ComponentName FALLBACK_HOME_COMPONENT = new ComponentName(
+ "com.android.settings", "com.android.settings.FallbackHome");
+
private static KeyguardUpdateMonitor sInstance;
private final Context mContext;
@@ -177,7 +183,8 @@
private boolean mGoingToSleep;
private boolean mBouncer;
private boolean mBootCompleted;
- private boolean mUserUnlocked;
+ private boolean mNeedsSlowUnlockTransition;
+ private boolean mHasLockscreenWallpaper;
// Device provisioning state
private boolean mDeviceProvisioned;
@@ -571,8 +578,8 @@
&& !hasFingerprintUnlockTimedOut(sCurrentUser);
}
- public boolean isUserUnlocked() {
- return mUserUnlocked;
+ public boolean needsSlowUnlockTransition() {
+ return mNeedsSlowUnlockTransition;
}
public StrongAuthTracker getStrongAuthTracker() {
@@ -1173,6 +1180,30 @@
}
/**
+ * Update the state whether Keyguard currently has a lockscreen wallpaper.
+ *
+ * @param hasLockscreenWallpaper Whether Keyguard has a lockscreen wallpaper.
+ */
+ public void setHasLockscreenWallpaper(boolean hasLockscreenWallpaper) {
+ if (hasLockscreenWallpaper != mHasLockscreenWallpaper) {
+ mHasLockscreenWallpaper = hasLockscreenWallpaper;
+ for (int i = mCallbacks.size() - 1; i >= 0; i--) {
+ KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get();
+ if (cb != null) {
+ cb.onHasLockscreenWallpaperChanged(hasLockscreenWallpaper);
+ }
+ }
+ }
+ }
+
+ /**
+ * @return Whether Keyguard has a lockscreen wallpaper.
+ */
+ public boolean hasLockscreenWallpaper() {
+ return mHasLockscreenWallpaper;
+ }
+
+ /**
* Handle {@link #MSG_DPM_STATE_CHANGED}
*/
protected void handleDevicePolicyManagerStateChanged() {
@@ -1419,7 +1450,18 @@
private void handleKeyguardReset() {
if (DEBUG) Log.d(TAG, "handleKeyguardReset");
updateFingerprintListeningState();
- mUserUnlocked = mUserManager.isUserUnlocked(getCurrentUser());
+ mNeedsSlowUnlockTransition = resolveNeedsSlowUnlockTransition();
+ }
+
+ private boolean resolveNeedsSlowUnlockTransition() {
+ if (mUserManager.isUserUnlocked(getCurrentUser())) {
+ return false;
+ }
+ Intent homeIntent = new Intent(Intent.ACTION_MAIN)
+ .addCategory(Intent.CATEGORY_HOME);
+ ResolveInfo resolveInfo = mContext.getPackageManager().resolveActivity(homeIntent,
+ 0 /* flags */);
+ return FALLBACK_HOME_COMPONENT.equals(resolveInfo.getComponentInfo().getComponentName());
}
/**
diff --git a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
index bd6c51c..4a2d356 100644
--- a/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
+++ b/packages/Keyguard/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java
@@ -240,4 +240,9 @@
* has changed.
*/
public void onStrongAuthStateChanged(int userId) { }
+
+ /**
+ * Called when the state whether we have a lockscreen wallpaper has changed.
+ */
+ public void onHasLockscreenWallpaperChanged(boolean hasLockscreenWallpaper) { }
}
diff --git a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDatabase.java b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDatabase.java
index cce619e..4950af3 100644
--- a/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDatabase.java
+++ b/packages/MtpDocumentsProvider/src/com/android/mtp/MtpDatabase.java
@@ -873,7 +873,7 @@
}
private static int getRootFlags(int[] operationsSupported) {
- int rootFlag = Root.FLAG_SUPPORTS_IS_CHILD;
+ int rootFlag = Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_LOCAL_ONLY;
if (MtpDeviceRecord.isWritingSupported(operationsSupported)) {
rootFlag |= Root.FLAG_SUPPORTS_CREATE;
}
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java
index 404047b..8c13c81 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDatabaseTest.java
@@ -128,7 +128,7 @@
cursor.moveToNext();
assertEquals(1, getInt(cursor, Root.COLUMN_ROOT_ID));
assertEquals(
- Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_SUPPORTS_CREATE,
+ Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_LOCAL_ONLY,
getInt(cursor, Root.COLUMN_FLAGS));
assertEquals(R.drawable.ic_root_mtp, getInt(cursor, Root.COLUMN_ICON));
assertEquals("Device Storage", getString(cursor, Root.COLUMN_TITLE));
diff --git a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
index 9ed15c8..d19b460 100644
--- a/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
+++ b/packages/MtpDocumentsProvider/tests/src/com/android/mtp/MtpDocumentsProviderTest.java
@@ -210,7 +210,11 @@
assertEquals(2, cursor.getCount());
cursor.moveToNext();
assertEquals("1", cursor.getString(0));
- assertEquals(Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_SUPPORTS_CREATE, cursor.getInt(1));
+ assertEquals(
+ Root.FLAG_SUPPORTS_IS_CHILD |
+ Root.FLAG_SUPPORTS_CREATE |
+ Root.FLAG_LOCAL_ONLY,
+ cursor.getInt(1));
assertEquals(R.drawable.ic_root_mtp, cursor.getInt(2));
assertEquals("Device A Storage A", cursor.getString(3));
assertEquals("1", cursor.getString(4));
@@ -225,7 +229,8 @@
cursor.moveToNext();
cursor.moveToNext();
assertEquals("2", cursor.getString(0));
- assertEquals(Root.FLAG_SUPPORTS_IS_CHILD, cursor.getInt(1));
+ assertEquals(
+ Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_LOCAL_ONLY, cursor.getInt(1));
assertEquals(R.drawable.ic_root_mtp, cursor.getInt(2));
assertEquals("Device B Storage B", cursor.getString(3));
assertEquals("2", cursor.getString(4));
@@ -271,7 +276,9 @@
cursor.moveToNext();
assertEquals("1", cursor.getString(0));
- assertEquals(Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_SUPPORTS_CREATE, cursor.getInt(1));
+ assertEquals(
+ Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_LOCAL_ONLY,
+ cursor.getInt(1));
assertEquals(R.drawable.ic_root_mtp, cursor.getInt(2));
assertEquals("Device A", cursor.getString(3));
assertEquals("1", cursor.getString(4));
@@ -279,7 +286,9 @@
cursor.moveToNext();
assertEquals("2", cursor.getString(0));
- assertEquals(Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_SUPPORTS_CREATE, cursor.getInt(1));
+ assertEquals(
+ Root.FLAG_SUPPORTS_IS_CHILD | Root.FLAG_SUPPORTS_CREATE | Root.FLAG_LOCAL_ONLY,
+ cursor.getInt(1));
assertEquals(R.drawable.ic_root_mtp, cursor.getInt(2));
assertEquals("Device B Storage B", cursor.getString(3));
assertEquals("2", cursor.getString(4));
diff --git a/packages/PrintSpooler/res/layout/print_activity.xml b/packages/PrintSpooler/res/layout/print_activity.xml
index 2db6fb0..31a776c 100644
--- a/packages/PrintSpooler/res/layout/print_activity.xml
+++ b/packages/PrintSpooler/res/layout/print_activity.xml
@@ -16,7 +16,6 @@
<com.android.printspooler.widget.PrintContentView
xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:printspooler="http://schemas.android.com/apk/res/com.android.printspooler"
android:id="@+id/options_content"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
@@ -28,12 +27,14 @@
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:paddingStart="8dip"
+ android:layout_marginEnd="16dp"
android:elevation="@dimen/preview_controls_elevation"
android:background="?android:attr/colorPrimary">
<Spinner
android:id="@+id/destination_spinner"
- android:layout_width="@dimen/preview_destination_spinner_width"
+ android:layout_width="wrap_content"
+ android:minWidth="@dimen/preview_destination_spinner_width"
android:layout_height="wrap_content"
android:layout_marginTop="4dip"
android:dropDownWidth="wrap_content"
diff --git a/packages/PrintSpooler/res/layout/printer_dropdown_item.xml b/packages/PrintSpooler/res/layout/printer_dropdown_item.xml
index 103c157..0d8a90a 100644
--- a/packages/PrintSpooler/res/layout/printer_dropdown_item.xml
+++ b/packages/PrintSpooler/res/layout/printer_dropdown_item.xml
@@ -16,7 +16,8 @@
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
- android:layout_height="?android:attr/listPreferredItemHeightSmall"
+ android:layout_height="wrap_content"
+ android:minHeight="?android:attr/listPreferredItemHeightSmall"
style="?android:attr/spinnerItemStyle"
android:orientation="horizontal"
android:gravity="start|center_vertical">
diff --git a/packages/SettingsLib/res/values-bs-rBA/strings.xml b/packages/SettingsLib/res/values-bs-rBA/strings.xml
index 40a3630..a11bf32 100644
--- a/packages/SettingsLib/res/values-bs-rBA/strings.xml
+++ b/packages/SettingsLib/res/values-bs-rBA/strings.xml
@@ -146,9 +146,9 @@
<string name="vpn_settings_not_available" msgid="956841430176985598">"VPN postavke nisu dostupne za ovog korisnika"</string>
<string name="tethering_settings_not_available" msgid="6765770438438291012">"Postavke za privezivanje nisu dostupne za ovog korisnika"</string>
<string name="apn_settings_not_available" msgid="7873729032165324000">"Postavke za naziv pristupne tačke nisu dostupne za ovog korisnika"</string>
- <string name="enable_adb" msgid="7982306934419797485">"Otklanjanje grešaka putem uređaja spojenog na USB"</string>
+ <string name="enable_adb" msgid="7982306934419797485">"USB otklanjanje grešaka"</string>
<string name="enable_adb_summary" msgid="4881186971746056635">"Način rada za uklanjanje grešaka kada je povezan USB"</string>
- <string name="clear_adb_keys" msgid="4038889221503122743">"Ukini odobrenja otklanjanja grešaka putem uređaja spojenog na USB"</string>
+ <string name="clear_adb_keys" msgid="4038889221503122743">"Ukini odobrenja otklanjanja grešaka USB-om"</string>
<string name="bugreport_in_power" msgid="7923901846375587241">"Prečica za izvještaj o greškama"</string>
<string name="bugreport_in_power_summary" msgid="1778455732762984579">"Prikaži tipku za prijavu grešaka u izborniku za potrošnju energije"</string>
<string name="keep_screen_on" msgid="1146389631208760344">"Ostani aktivan"</string>
@@ -185,9 +185,9 @@
<string name="allow_mock_location_summary" msgid="317615105156345626">"Dozvoli lažne lokacije"</string>
<string name="debug_view_attributes" msgid="6485448367803310384">"Omogući pregled atributa prikaza"</string>
<string name="mobile_data_always_on_summary" msgid="8149773901431697910">"Uvijek drži mobilne podatke aktivnim, čak i kada je Wi-Fi je aktivan (za brzo prebacivanje između mreža)."</string>
- <string name="adb_warning_title" msgid="6234463310896563253">"Omogućiti otklanjanje grešaka putem uređaja spojenog na USB?"</string>
- <string name="adb_warning_message" msgid="7316799925425402244">"Otklanjanje grešaka putem uređaja spojenog na USB je namijenjeno samo u svrhe razvoja aplikacija. Koristite ga za kopiranje podataka između računara i uređaja, instaliranje aplikacija na uređaj bez obavještenja te čitanje podataka iz zapisnika."</string>
- <string name="adb_keys_warning_message" msgid="5659849457135841625">"Opozvati pristup otklanjanju grešaka putem uređaja spojenog na USB za sve računare koje ste prethodno ovlastili?"</string>
+ <string name="adb_warning_title" msgid="6234463310896563253">"Omogućiti USB otklanjanje grešaka?"</string>
+ <string name="adb_warning_message" msgid="7316799925425402244">"USB otklanjanje grešaka je namijenjeno samo u svrhe razvoja aplikacija. Koristite ga za kopiranje podataka između računara i uređaja, instaliranje aplikacija na uređaj bez obavještenja te čitanje podataka iz zapisnika."</string>
+ <string name="adb_keys_warning_message" msgid="5659849457135841625">"Opozvati pristup otklanjanju grešaka USB-om za sve računare koje ste prethodno ovlastili?"</string>
<string name="dev_settings_warning_title" msgid="7244607768088540165">"Dopustiti postavke za razvoj?"</string>
<string name="dev_settings_warning_message" msgid="2298337781139097964">"Ove postavke su namijenjene samo za svrhe razvoja. Mogu izazvati pogrešno ponašanje uređaja i aplikacija na njemu."</string>
<string name="verify_apps_over_usb_title" msgid="4177086489869041953">"Verifikuj aplikacije putem USB-a"</string>
diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml
index 99850a5..fb7180a 100644
--- a/packages/SettingsLib/res/values-ca/strings.xml
+++ b/packages/SettingsLib/res/values-ca/strings.xml
@@ -111,7 +111,7 @@
<string name="tts_play_example_summary" msgid="8029071615047894486">"Reprodueix una breu demostració de síntesi de veu"</string>
<string name="tts_install_data_title" msgid="4264378440508149986">"Instal·la dades de veu"</string>
<string name="tts_install_data_summary" msgid="5742135732511822589">"Instal·la les dades de veu necessàries per a la síntesi de veu"</string>
- <string name="tts_engine_security_warning" msgid="8786238102020223650">"Pot ser que aquest motor de síntesi de la parla pugui recopilar tot el text que es dirà en veu alta, incloses les dades personals, com ara les contrasenyes i els números de les targetes de crèdit. Ve del motor <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Vols activar l\'ús d\'aquest motor de síntesi de la parla?"</string>
+ <string name="tts_engine_security_warning" msgid="8786238102020223650">"Pot ser que aquest motor de síntesi de la parla pugui recopilar tot el text que es dirà en veu alta, incloses les dades personals, com ara les contrasenyes i els números de les targetes de crèdit. Ve del motor <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g>. Voleu activar l\'ús d\'aquest motor de síntesi de la parla?"</string>
<string name="tts_engine_network_required" msgid="1190837151485314743">"Aquest idioma requereix una connexió de xarxa activa per a la sortida de síntesi de veu."</string>
<string name="tts_default_sample_string" msgid="4040835213373086322">"Això és un exemple de síntesi de veu"</string>
<string name="tts_status_title" msgid="7268566550242584413">"Estat de l\'idioma predeterminat"</string>
diff --git a/packages/SettingsLib/res/values-kn-rIN/strings.xml b/packages/SettingsLib/res/values-kn-rIN/strings.xml
index 643875f..8578810d 100644
--- a/packages/SettingsLib/res/values-kn-rIN/strings.xml
+++ b/packages/SettingsLib/res/values-kn-rIN/strings.xml
@@ -340,5 +340,5 @@
<string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"ಸ್ವಲ್ಪ ದೊಡ್ಡ"</string>
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"ದೊಡ್ಡ"</string>
<string name="screen_zoom_summary_custom" msgid="5611979864124160447">"ಕಸ್ಟಮ್ (<xliff:g id="DENSITYDPI">%d</xliff:g>)"</string>
- <string name="help_feedback_label" msgid="6815040660801785649">"ಸಹಾಯ ಮತ್ತು ಪ್ರತಿಕ್ರಿಯೆ"</string>
+ <string name="help_feedback_label" msgid="6815040660801785649">"ಸಹಾಯ & ಪ್ರತಿಕ್ರಿಯೆ"</string>
</resources>
diff --git a/packages/SettingsLib/res/values/config.xml b/packages/SettingsLib/res/values/config.xml
index 299a5b7..0cf4a41 100755
--- a/packages/SettingsLib/res/values/config.xml
+++ b/packages/SettingsLib/res/values/config.xml
@@ -19,4 +19,22 @@
<resources>
<!-- Configuration for automotive -->
<bool name="enable_pbap_pce_profile">false</bool>
+
+ <!-- Default data warning level in mb -->
+ <integer name="default_data_warning_level_mb">2048</integer>
+
+ <!-- Whether to send a custom package name with the PSD. translatable="false"-->
+ <bool name="config_sendPackageName">true</bool>
+
+ <!-- Name for the set of keys associating package names -->
+ <string name="config_helpPackageNameKey" translatable="false"></string>
+
+ <!-- Name for the set of values of package names -->
+ <string name="config_helpPackageNameValue" translatable="false"></string>
+
+ <!-- Intent key for the package name keys -->
+ <string name="config_helpIntentExtraKey" translatable="false"></string>
+
+ <!-- Intent key for package name values -->
+ <string name="config_helpIntentNameKey" translatable="false"></string>
</resources>
diff --git a/packages/SettingsLib/res/values/strings.xml b/packages/SettingsLib/res/values/strings.xml
index 7d42211..682af8b 100644
--- a/packages/SettingsLib/res/values/strings.xml
+++ b/packages/SettingsLib/res/values/strings.xml
@@ -863,4 +863,7 @@
<!-- Label for Help and feedback menu item -->
<string name="help_feedback_label">Help & feedback</string>
+ <!-- Content description for drawer menu button [CHAR_LIMIT=30]-->
+ <string name="content_description_menu_button">Menu</string>
+
</resources>
diff --git a/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java b/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java
index 21116b8..381f903 100644
--- a/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/HelpUtils.java
@@ -23,6 +23,7 @@
import android.content.Intent;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
+import android.content.res.Resources;
import android.content.res.Resources.Theme;
import android.content.res.TypedArray;
import android.net.Uri;
@@ -33,6 +34,8 @@
import android.view.Menu;
import android.view.MenuItem;
import android.view.MenuItem.OnMenuItemClickListener;
+import com.android.internal.logging.MetricsLogger;
+import com.android.internal.logging.MetricsProto.MetricsEvent;
import java.net.URISyntaxException;
import java.util.Locale;
@@ -111,6 +114,9 @@
helpMenuItem.setOnMenuItemClickListener(new OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
+ MetricsLogger.action(activity,
+ MetricsEvent.ACTION_SETTING_HELP_AND_FEEDBACK,
+ intent.getStringExtra(EXTRA_CONTEXT));
try {
activity.startActivityForResult(intent, 0);
} catch (ActivityNotFoundException exc) {
@@ -140,7 +146,7 @@
try {
Intent intent = Intent.parseUri(helpUriString,
Intent.URI_ANDROID_APP_SCHEME | Intent.URI_INTENT_SCHEME);
- addIntentParameters(context, intent, backupContext);
+ addIntentParameters(context, intent, backupContext, true /* sendPackageName */);
ComponentName component = intent.resolveActivity(context.getPackageManager());
if (component != null) {
return intent;
@@ -164,11 +170,28 @@
return intent;
}
- public static void addIntentParameters(Context context, Intent intent, String backupContext) {
+ public static void addIntentParameters(Context context, Intent intent, String backupContext,
+ boolean sendPackageName) {
if (!intent.hasExtra(EXTRA_CONTEXT)) {
// Insert some context if none exists.
intent.putExtra(EXTRA_CONTEXT, backupContext);
}
+
+ Resources resources = context.getResources();
+ boolean includePackageName = resources.getBoolean(R.bool.config_sendPackageName);
+
+ if (sendPackageName && includePackageName) {
+ String[] packageNameKey =
+ {resources.getString(R.string.config_helpPackageNameKey)};
+ String[] packageNameValue =
+ {resources.getString(R.string.config_helpPackageNameValue)};
+ String intentExtraKey =
+ resources.getString(R.string.config_helpIntentExtraKey);
+ String intentNameKey =
+ resources.getString(R.string.config_helpIntentNameKey);
+ intent.putExtra(intentExtraKey, packageNameKey);
+ intent.putExtra(intentNameKey, packageNameValue);
+ }
intent.putExtra(EXTRA_THEME, 1 /* Light, dark action bar */);
TypedArray array = context.obtainStyledAttributes(new int[]{android.R.attr.colorPrimary});
intent.putExtra(EXTRA_PRIMARY_COLOR, array.getColor(0, 0));
diff --git a/packages/SettingsLib/src/com/android/settingslib/SuggestionParser.java b/packages/SettingsLib/src/com/android/settingslib/SuggestionParser.java
index 741b0ea..21786c9 100644
--- a/packages/SettingsLib/src/com/android/settingslib/SuggestionParser.java
+++ b/packages/SettingsLib/src/com/android/settingslib/SuggestionParser.java
@@ -28,7 +28,6 @@
import android.provider.Settings;
import android.accounts.Account;
import android.accounts.AccountManager;
-import android.content.ContentValues;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.view.InflateException;
@@ -176,6 +175,9 @@
} catch (PackageManager.NameNotFoundException e) {
Log.w(TAG, "Cannot find resources for " + suggestion.intent.getComponent());
return false;
+ } catch (Resources.NotFoundException e) {
+ Log.w(TAG, "Cannot find resources for " + suggestion.intent.getComponent(), e);
+ return false;
}
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java b/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java
index a99e668..af8fd4c 100644
--- a/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java
+++ b/packages/SettingsLib/src/com/android/settingslib/display/DisplayDensityUtils.java
@@ -23,6 +23,7 @@
import android.hardware.display.DisplayManager;
import android.os.AsyncTask;
import android.os.RemoteException;
+import android.os.UserHandle;
import android.util.DisplayMetrics;
import android.util.Log;
import android.util.MathUtils;
@@ -207,39 +208,41 @@
/**
* Asynchronously applies display density changes to the specified display.
+ * <p>
+ * The change will be applied to the user specified by the value of
+ * {@link UserHandle#myUserId()} at the time the method is called.
*
* @param displayId the identifier of the display to modify
*/
public static void clearForcedDisplayDensity(final int displayId) {
- AsyncTask.execute(new Runnable() {
- @Override
- public void run() {
- try {
- final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
- wm.clearForcedDisplayDensity(displayId);
- } catch (RemoteException exc) {
- Log.w(LOG_TAG, "Unable to clear forced display density setting");
- }
+ final int userId = UserHandle.myUserId();
+ AsyncTask.execute(() -> {
+ try {
+ final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
+ wm.clearForcedDisplayDensityForUser(displayId, userId);
+ } catch (RemoteException exc) {
+ Log.w(LOG_TAG, "Unable to clear forced display density setting");
}
});
}
/**
* Asynchronously applies display density changes to the specified display.
+ * <p>
+ * The change will be applied to the user specified by the value of
+ * {@link UserHandle#myUserId()} at the time the method is called.
*
* @param displayId the identifier of the display to modify
* @param density the density to force for the specified display
*/
public static void setForcedDisplayDensity(final int displayId, final int density) {
- AsyncTask.execute(new Runnable() {
- @Override
- public void run() {
- try {
- final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
- wm.setForcedDisplayDensity(displayId, density);
- } catch (RemoteException exc) {
- Log.w(LOG_TAG, "Unable to save forced display density setting");
- }
+ final int userId = UserHandle.myUserId();
+ AsyncTask.execute(() -> {
+ try {
+ final IWindowManager wm = WindowManagerGlobal.getWindowManagerService();
+ wm.setForcedDisplayDensityForUser(displayId, density, userId);
+ } catch (RemoteException exc) {
+ Log.w(LOG_TAG, "Unable to save forced display density setting");
}
});
}
diff --git a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
index 6658c14..458672a 100644
--- a/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
+++ b/packages/SettingsLib/src/com/android/settingslib/drawer/SettingsDrawerActivity.java
@@ -28,6 +28,8 @@
import android.content.res.TypedArray;
import android.os.AsyncTask;
import android.os.Bundle;
+import android.os.UserHandle;
+import android.os.UserManager;
import android.provider.Settings;
import android.support.v4.widget.DrawerLayout;
import android.util.ArraySet;
@@ -73,6 +75,7 @@
private FrameLayout mContentHeaderContainer;
private DrawerLayout mDrawerLayout;
private boolean mShowingMenu;
+ private UserManager mUserManager;
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
@@ -110,6 +113,8 @@
onTileClicked(mDrawerAdapter.getTile(position));
};
});
+
+ mUserManager = UserManager.get(this);
if (DEBUG_TIMING) Log.d(TAG, "onCreate took " + (System.currentTimeMillis() - startTime)
+ " ms");
}
@@ -226,6 +231,7 @@
public void showMenuIcon() {
mShowingMenu = true;
getActionBar().setHomeAsUpIndicator(R.drawable.ic_menu);
+ getActionBar().setHomeActionContentDescription(R.string.content_description_menu_button);
getActionBar().setDisplayHomeAsUpEnabled(true);
}
@@ -256,6 +262,7 @@
return true;
}
try {
+ updateUserHandlesIfNeeded(tile);
int numUserHandles = tile.userHandle.size();
if (numUserHandles > 1) {
ProfileSelectDialog.show(getFragmentManager(), tile);
@@ -277,6 +284,19 @@
return true;
}
+ private void updateUserHandlesIfNeeded(Tile tile) {
+ List<UserHandle> userHandles = tile.userHandle;
+
+ for (int i = userHandles.size()-1; i >= 0; i--) {
+ if (mUserManager.getUserInfo(userHandles.get(i).getIdentifier()) == null) {
+ if (DEBUG_TIMING) {
+ Log.d(TAG, "Delete the user: " + userHandles.get(i).getIdentifier());
+ }
+ userHandles.remove(i);
+ }
+ }
+ }
+
protected void onTileClicked(Tile tile) {
if (openTile(tile)) {
finish();
diff --git a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
index e53dd2f..994ea88 100644
--- a/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
+++ b/packages/SettingsLib/src/com/android/settingslib/net/DataUsageController.java
@@ -32,6 +32,8 @@
import android.text.format.Time;
import android.util.Log;
+import com.android.settingslib.R;
+
import java.util.Date;
import java.util.Locale;
@@ -41,12 +43,12 @@
import static android.telephony.TelephonyManager.SIM_STATE_READY;
import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
+import static android.net.TrafficStats.MB_IN_BYTES;
public class DataUsageController {
+
private static final String TAG = "DataUsageController";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
-
- public static final long DEFAULT_WARNING_LEVEL = 2L * 1024 * 1024 * 1024;
private static final int FIELDS = FIELD_RX_BYTES | FIELD_TX_BYTES;
private static final StringBuilder PERIOD_BUILDER = new StringBuilder(50);
private static final java.util.Formatter PERIOD_FORMATTER = new java.util.Formatter(
@@ -75,6 +77,14 @@
mNetworkController = networkController;
}
+ /**
+ * Returns the default warning level in bytes.
+ */
+ public long getDefaultWarningLevel() {
+ return MB_IN_BYTES
+ * mContext.getResources().getInteger(R.integer.default_data_warning_level_mb);
+ }
+
private INetworkStatsSession getSession() {
if (mSession == null) {
try {
@@ -169,7 +179,7 @@
usage.limitLevel = policy.limitBytes > 0 ? policy.limitBytes : 0;
usage.warningLevel = policy.warningBytes > 0 ? policy.warningBytes : 0;
} else {
- usage.warningLevel = DEFAULT_WARNING_LEVEL;
+ usage.warningLevel = getDefaultWarningLevel();
}
if (usage != null && mNetworkController != null) {
usage.carrier = mNetworkController.getMobileDataNetworkName();
diff --git a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java
index 284827b..aae9cf6 100644
--- a/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java
+++ b/packages/SettingsLib/src/com/android/settingslib/wifi/AccessPointPreference.java
@@ -29,7 +29,6 @@
import android.util.AttributeSet;
import android.util.SparseArray;
import android.widget.TextView;
-
import com.android.settingslib.R;
public class AccessPointPreference extends Preference {
@@ -44,13 +43,14 @@
private final StateListDrawable mWifiSld;
private final int mBadgePadding;
private final UserBadgeCache mBadgeCache;
-
private TextView mTitleView;
+
private boolean mForSavedNetworks = false;
private AccessPoint mAccessPoint;
private Drawable mBadge;
private int mLevel;
private CharSequence mContentDescription;
+ private int mDefaultIconResId;
static final int[] WIFI_CONNECTION_STRENGTH = {
R.string.accessibility_wifi_one_bar,
@@ -85,6 +85,24 @@
refresh();
}
+ public AccessPointPreference(AccessPoint accessPoint, Context context, UserBadgeCache cache,
+ int iconResId, boolean forSavedNetworks) {
+ super(context);
+ mBadgeCache = cache;
+ mAccessPoint = accessPoint;
+ mForSavedNetworks = forSavedNetworks;
+ mAccessPoint.setTag(this);
+ mLevel = -1;
+ mDefaultIconResId = iconResId;
+
+ mWifiSld = (StateListDrawable) context.getTheme()
+ .obtainStyledAttributes(wifi_signal_attributes).getDrawable(0);
+
+ // Distance from the end of the title at which this AP's user badge should sit.
+ mBadgePadding = context.getResources()
+ .getDimensionPixelSize(R.dimen.wifi_preference_badge_padding);
+ }
+
public AccessPoint getAccessPoint() {
return mAccessPoint;
}
@@ -112,7 +130,7 @@
protected void updateIcon(int level, Context context) {
if (level == -1) {
- setIcon(null);
+ safeSetDefaultIcon();
} else {
if (getIcon() == null) {
// To avoid a drawing race condition, we first set the state (SECURE/NONE) and then
@@ -124,16 +142,24 @@
? STATE_SECURED
: STATE_NONE);
Drawable drawable = mWifiSld.getCurrent();
- if (!mForSavedNetworks) {
+ if (!mForSavedNetworks && drawable != null) {
setIcon(drawable);
- } else {
- setIcon(null);
+ return;
}
}
+ safeSetDefaultIcon();
}
}
}
+ private void safeSetDefaultIcon() {
+ if (mDefaultIconResId != 0) {
+ setIcon(mDefaultIconResId);
+ } else {
+ setIcon(null);
+ }
+ }
+
protected void updateBadge(Context context) {
WifiConfiguration config = mAccessPoint.getConfig();
if (config != null) {
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index f7e9541..fad102f 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -155,6 +155,9 @@
<!-- Default for Settings.Secure.LONG_PRESS_TIMEOUT_MILLIS -->
<integer name="def_long_press_timeout_millis">400</integer>
+ <!-- Default for Settings.Secure.MULTI_PRESS_TIMEOUT -->
+ <integer name="def_multi_press_timeout_millis">300</integer>
+
<!-- Default for Settings.Secure.SHOW_IME_WITH_HARD_KEYBOARD -->
<bool name="def_show_ime_with_hard_keyboard">false</bool>
diff --git a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
index 0f7fe6f..e66e963 100644
--- a/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
+++ b/packages/SettingsProvider/src/com/android/providers/settings/SettingsProvider.java
@@ -114,7 +114,7 @@
public class SettingsProvider extends ContentProvider {
private static final boolean DEBUG = false;
- private static final boolean DROP_DATABASE_ON_MIGRATION = !Build.IS_DEBUGGABLE;
+ private static final boolean DROP_DATABASE_ON_MIGRATION = true;
private static final String LOG_TAG = "SettingsProvider";
@@ -2102,7 +2102,7 @@
}
private final class UpgradeController {
- private static final int SETTINGS_VERSION = 130;
+ private static final int SETTINGS_VERSION = 131;
private final int mUserId;
@@ -2142,6 +2142,12 @@
// Now upgrade should work fine.
onUpgradeLocked(mUserId, oldVersion, newVersion);
+
+ // Make a note what happened, so we don't wonder why data was lost
+ String reason = "Settings rebuilt! Current version: "
+ + curVersion + " while expected: " + newVersion;
+ getGlobalSettingsLocked().insertSettingLocked(
+ Settings.Global.DATABASE_DOWNGRADE_REASON, reason, "android");
}
// Set the global settings version if owner.
@@ -2410,8 +2416,24 @@
currentVersion = 130;
}
+ if (currentVersion == 130) {
+ // Initialize new multi-press timeout to default value
+ final SettingsState systemSecureSettings = getSecureSettingsLocked(userId);
+ final String oldValue = systemSecureSettings.getSettingLocked(
+ Settings.Secure.MULTI_PRESS_TIMEOUT).getValue();
+ if (TextUtils.equals(null, oldValue)) {
+ systemSecureSettings.insertSettingLocked(
+ Settings.Secure.MULTI_PRESS_TIMEOUT,
+ String.valueOf(getContext().getResources().getInteger(
+ R.integer.def_multi_press_timeout_millis)),
+ SettingsState.SYSTEM_PACKAGE_NAME);
+ }
+
+ currentVersion = 131;
+ }
+
if (currentVersion != newVersion) {
- Slog.w("SettingsProvider", "warning: upgrading settings database to version "
+ Slog.wtf("SettingsProvider", "warning: upgrading settings database to version "
+ newVersion + " left it at "
+ currentVersion + " instead; this is probably a bug", new Throwable());
if (DEBUG) {
diff --git a/packages/Shell/Android.mk b/packages/Shell/Android.mk
index 73a0449..81ab2ff 100644
--- a/packages/Shell/Android.mk
+++ b/packages/Shell/Android.mk
@@ -12,6 +12,8 @@
LOCAL_CERTIFICATE := platform
LOCAL_PRIVILEGED_MODULE := true
+LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.shell.*
+
include $(BUILD_PACKAGE)
include $(LOCAL_PATH)/tests/Android.mk
diff --git a/packages/Shell/src/com/android/shell/BugreportStorageProvider.java b/packages/Shell/src/com/android/shell/BugreportStorageProvider.java
index 8b07599..9fd80d3 100644
--- a/packages/Shell/src/com/android/shell/BugreportStorageProvider.java
+++ b/packages/Shell/src/com/android/shell/BugreportStorageProvider.java
@@ -132,6 +132,7 @@
if (!getFileForDocId(documentId).delete()) {
throw new FileNotFoundException("Failed to delete: " + documentId);
}
+ getContext().getContentResolver().notifyChange(getNotificationUri(), null);
}
// This is used by BugreportProgressService so that the notification uri shared by
diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml
index bdb103a..de25115 100644
--- a/packages/SystemUI/AndroidManifest.xml
+++ b/packages/SystemUI/AndroidManifest.xml
@@ -150,9 +150,6 @@
<!-- DevicePolicyManager get user restrictions -->
<uses-permission android:name="android.permission.MANAGE_PROFILE_AND_DEVICE_OWNERS" />
- <!-- Needed for passing extras with intent ACTION_SHOW_ADMIN_SUPPORT_DETAILS -->
- <uses-permission android:name="android.permission.MANAGE_DEVICE_ADMINS" />
-
<!-- TV picture-in-picture -->
<uses-permission android:name="android.permission.RECEIVE_MEDIA_RESOURCE_USAGE" />
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_carmode.png
index 6242084..95e5778 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_carmode.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_carmode.png
index 1b37a47..6421146 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_carmode.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_back_ime_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_carmode.png
index 9e05758..151d5fe 100644
--- a/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_carmode.png
+++ b/packages/SystemUI/res/drawable-hdpi/ic_sysbar_home_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_carmode.png
index 2fcfdde..b954aa7 100644
--- a/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_carmode.png
+++ b/packages/SystemUI/res/drawable-ldrtl-hdpi/ic_sysbar_back_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_carmode.png
index 48708a5..61d5db6 100644
--- a/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_carmode.png
+++ b/packages/SystemUI/res/drawable-ldrtl-mdpi/ic_sysbar_back_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_carmode.png
index 3d73184..7b98c1f 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_carmode.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xhdpi/ic_sysbar_back_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_sysbar_back_carmode.png
index 786935d..aad1320 100644
--- a/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_sysbar_back_carmode.png
+++ b/packages/SystemUI/res/drawable-ldrtl-xxhdpi/ic_sysbar_back_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_carmode.png
index e4bd4bc..754b2d9 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_carmode.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_carmode.png
index 94ccf79..873ed7f 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_carmode.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_back_ime_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_carmode.png
index 980bbbc..7696d87 100644
--- a/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_carmode.png
+++ b/packages/SystemUI/res/drawable-mdpi/ic_sysbar_home_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-nodpi/play.xml b/packages/SystemUI/res/drawable-nodpi/play.xml
index 747e60b..7720230 100644
--- a/packages/SystemUI/res/drawable-nodpi/play.xml
+++ b/packages/SystemUI/res/drawable-nodpi/play.xml
@@ -21,7 +21,4 @@
<path
android:fillColor="#FF000000"
android:pathData="M8.0,5.0l0.0,14.0l11.0,-7.0z"/>
- <path
- android:pathData="M0 0h24v24H0z"
- android:fillColor="#00000000"/>
</vector>
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_carmode.png
index 201be3b..c98f55e 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_carmode.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_carmode.png
index 2770d62..187a566 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_carmode.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_back_ime_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_carmode.png
index 8ac6493..c66f8be 100644
--- a/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_carmode.png
+++ b/packages/SystemUI/res/drawable-xhdpi/ic_sysbar_home_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_carmode.png
index 8e3678b..3a3a119 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_carmode.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_ime_carmode.png
index 6c7cb058..7198c82 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_ime_carmode.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_back_ime_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_home_carmode.png
index ea2b108..b1fc02e 100644
--- a/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_home_carmode.png
+++ b/packages/SystemUI/res/drawable-xxhdpi/ic_sysbar_home_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_carmode.png b/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_carmode.png
index 3e11023..c06bfda 100644
--- a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_carmode.png
+++ b/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_ime_carmode.png b/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_ime_carmode.png
index fe8213d..a8c76bf 100644
--- a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_ime_carmode.png
+++ b/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_back_ime_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_home_carmode.png b/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_home_carmode.png
index c117efd..b798e3d 100644
--- a/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_home_carmode.png
+++ b/packages/SystemUI/res/drawable-xxxhdpi/ic_sysbar_home_carmode.png
Binary files differ
diff --git a/packages/SystemUI/res/drawable/car_ic_arrow.xml b/packages/SystemUI/res/drawable/car_ic_arrow.xml
index 9d292cc..2c5ad27 100644
--- a/packages/SystemUI/res/drawable/car_ic_arrow.xml
+++ b/packages/SystemUI/res/drawable/car_ic_arrow.xml
@@ -21,7 +21,4 @@
<path
android:fillColor="#FFFFFFFF"
android:pathData="M14.0,20.0l10.0,10.0 10.0,-10.0z"/>
- <path
- android:pathData="M0 0h48v48H0z"
- android:fillColor="#00000000"/>
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_fullscreen_white_24dp.xml b/packages/SystemUI/res/drawable/ic_fullscreen_white_24dp.xml
index 7ddb40c..314a25a 100644
--- a/packages/SystemUI/res/drawable/ic_fullscreen_white_24dp.xml
+++ b/packages/SystemUI/res/drawable/ic_fullscreen_white_24dp.xml
@@ -18,9 +18,6 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
-
- <path
- android:pathData="M0 0h24v24H0z" />
<path
android:fillColor="#FFFFFF"
android:pathData="M7 14H5v5h5v-2H7v-3zm-2-4h2V7h3V5H5v5zm12 7h-3v2h5v-5h-2v3zM14 5v2h3v3h2V5h-5z" />
diff --git a/packages/SystemUI/res/drawable/ic_ksh_key_backspace.xml b/packages/SystemUI/res/drawable/ic_ksh_key_backspace.xml
index 6519673..1183203 100644
--- a/packages/SystemUI/res/drawable/ic_ksh_key_backspace.xml
+++ b/packages/SystemUI/res/drawable/ic_ksh_key_backspace.xml
@@ -19,7 +19,6 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
- <path android:pathData="M0 0h24v24H0z" />
<path android:fillColor="@color/ksh_key_item_color"
android:pathData="M22 3H7c-.69 0-1.23 .35 -1.59 .88 L0 12l5.41 8.11c.36 .53 .9 .89
1.59 .89 h15c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-3 12.59L17.59 17 14 13.41 10.41 17 9 15.59
diff --git a/packages/SystemUI/res/drawable/ic_ksh_key_enter.xml b/packages/SystemUI/res/drawable/ic_ksh_key_enter.xml
index 599f350..66b1307 100644
--- a/packages/SystemUI/res/drawable/ic_ksh_key_enter.xml
+++ b/packages/SystemUI/res/drawable/ic_ksh_key_enter.xml
@@ -19,7 +19,6 @@
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24">
- <path android:pathData="M0 0h24v24H0z" />
<path android:fillColor="@color/ksh_key_item_color"
android:pathData="M19 7v4H5.83l3.58-3.59L8 6l-6 6 6 6 1.41-1.41L5.83 13H21V7z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_ksh_key_left.xml b/packages/SystemUI/res/drawable/ic_ksh_key_left.xml
index 038187e8..57d0423e9c 100644
--- a/packages/SystemUI/res/drawable/ic_ksh_key_left.xml
+++ b/packages/SystemUI/res/drawable/ic_ksh_key_left.xml
@@ -21,5 +21,4 @@
android:viewportHeight="24">
<path android:fillColor="@color/ksh_key_item_color"
android:pathData="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z" />
- <path android:pathData="M0 0h24v24H0z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_ksh_key_meta.xml b/packages/SystemUI/res/drawable/ic_ksh_key_meta.xml
index 1e2195e..be8fe8c 100644
--- a/packages/SystemUI/res/drawable/ic_ksh_key_meta.xml
+++ b/packages/SystemUI/res/drawable/ic_ksh_key_meta.xml
@@ -24,5 +24,4 @@
3 9.5 5.91 16 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27 .28 v.79l5 4.99L20.49
19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5
14z" />
- <path android:pathData="M0 0h24v24H0z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_ksh_key_right.xml b/packages/SystemUI/res/drawable/ic_ksh_key_right.xml
index f2d7315..720d4e4 100644
--- a/packages/SystemUI/res/drawable/ic_ksh_key_right.xml
+++ b/packages/SystemUI/res/drawable/ic_ksh_key_right.xml
@@ -21,5 +21,4 @@
android:viewportHeight="24">
<path android:fillColor="@color/ksh_key_item_color"
android:pathData="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z" />
- <path android:pathData="M0 0h24v24H0z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_ksh_key_up.xml b/packages/SystemUI/res/drawable/ic_ksh_key_up.xml
index 36a83b1..350c994 100644
--- a/packages/SystemUI/res/drawable/ic_ksh_key_up.xml
+++ b/packages/SystemUI/res/drawable/ic_ksh_key_up.xml
@@ -21,5 +21,4 @@
android:viewportHeight="24">
<path android:fillColor="@color/ksh_key_item_color"
android:pathData="M7.41 15.41L12 10.83l4.59 4.58L18 14l-6-6-6 6z" />
- <path android:pathData="M0 0h24v24H0z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_pause_white_24dp.xml b/packages/SystemUI/res/drawable/ic_pause_white_24dp.xml
index d9a4f7b..5b65f10 100644
--- a/packages/SystemUI/res/drawable/ic_pause_white_24dp.xml
+++ b/packages/SystemUI/res/drawable/ic_pause_white_24dp.xml
@@ -22,6 +22,4 @@
<path
android:fillColor="#FFFFFF"
android:pathData="M6 19h4V5H6v14zm8-14v14h4V5h-4z" />
- <path
- android:pathData="M0 0h24v24H0z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_play_arrow_white_24dp.xml b/packages/SystemUI/res/drawable/ic_play_arrow_white_24dp.xml
index b8fa99e..ddc9e8d 100644
--- a/packages/SystemUI/res/drawable/ic_play_arrow_white_24dp.xml
+++ b/packages/SystemUI/res/drawable/ic_play_arrow_white_24dp.xml
@@ -22,6 +22,4 @@
<path
android:fillColor="#FFFFFF"
android:pathData="M8 5v14l11-7z" />
- <path
- android:pathData="M0 0h24v24H0z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/ic_qs_wifi_disconnected.xml b/packages/SystemUI/res/drawable/ic_qs_wifi_disconnected.xml
index 4d2a35e..2dcdb71 100644
--- a/packages/SystemUI/res/drawable/ic_qs_wifi_disconnected.xml
+++ b/packages/SystemUI/res/drawable/ic_qs_wifi_disconnected.xml
@@ -19,9 +19,6 @@
android:viewportWidth="26.0"
android:viewportHeight="24.0">
<path
- android:pathData="M0 0h26v24H0z"
- android:fillColor="#00000000"/>
- <path
android:fillColor="#FFFFFFFF"
android:pathData="M21.0,8.5
c0.85,0.0 1.6,0.23 2.3,0.62l2.24,-2.79
diff --git a/packages/SystemUI/res/drawable/ic_send.xml b/packages/SystemUI/res/drawable/ic_send.xml
index 6ce3672..7cac2a4 100644
--- a/packages/SystemUI/res/drawable/ic_send.xml
+++ b/packages/SystemUI/res/drawable/ic_send.xml
@@ -22,7 +22,4 @@
<path
android:fillColor="#FF000000"
android:pathData="M4.02,42.0L46.0,24.0 4.02,6.0 4.0,20.0l30.0,4.0 -30.0,4.0z"/>
- <path
- android:pathData="M0 0h48v48H0z"
- android:fillColor="#00000000"/>
</vector>
diff --git a/packages/SystemUI/res/layout/remote_input.xml b/packages/SystemUI/res/layout/remote_input.xml
index 0c8cc9b..73f26e2 100644
--- a/packages/SystemUI/res/layout/remote_input.xml
+++ b/packages/SystemUI/res/layout/remote_input.xml
@@ -42,8 +42,7 @@
android:singleLine="true"
android:ellipsize="start"
android:inputType="textShortMessage|textAutoCorrect|textCapSentences"
- android:textIsSelectable="true"
- android:imeOptions="actionNone|flagNoExtractUi" />
+ android:imeOptions="actionNone|flagNoExtractUi|flagNoFullscreen" />
<FrameLayout
android:layout_width="wrap_content"
diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml
index 546698c..c871837 100644
--- a/packages/SystemUI/res/values-af/strings.xml
+++ b/packages/SystemUI/res/values-af/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Toestel kan gemonitor word"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiel kan gemonitor word"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Netwerk kan dalk gemonitor word"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Netwerk kan dalk gemonitor word"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Toestelmonitering"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profielmonitering"</string>
<string name="monitoring_title" msgid="169206259253048106">"Netwerkmonitering"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Jy is gekoppel aan <xliff:g id="APPLICATION">%1$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur. Dit is gekoppel aan <xliff:g id="APPLICATION">%2$s</xliff:g>, wat jou werknetwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nKontak jou administrateur vir meer inligting."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Jou werkprofiel word deur <xliff:g id="ORGANIZATION">%1$s</xliff:g> bestuur. Dit is gekoppel aan <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, wat jou werknetwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nJy is ook gekoppel aan <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, wat jou persoonlike netwerkaktiwiteit kan monitor."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Jou toestel word bestuur deur <xliff:g id="ORGANIZATION">%1$s</xliff:g>\n\nJou administrateur kan instelings, korporatiewe toegang, programme, data wat met jou toestel geassosieer word en jou toestel se ligginginligting monitor en bestuur.\n\nJy is gekoppel aan <xliff:g id="APPLICATION">%2$s</xliff:g>, wat jou netwerkaktiwiteit, insluitend e-posse, programme en webwerwe, kan monitor.\n\nVir meer inligting, kontak jou administrateur."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Wys horlosiesekondes op die statusbalk. Sal batterylewe dalk beïnvloed."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Herrangskik Kitsinstellings"</string>
<string name="show_brightness" msgid="6613930842805942519">"Wys helderheid in Kitsinstellings"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktiveer die verdeling van die skerm deur op te swiep"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktiveer gebaar om skerm te verdeel deur van die Oorsig-knoppie af op te swiep"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimenteel"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Skakel Bluetooth aan?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Jy moet Bluetooth aanskakel om jou sleutelbord aan jou tablet te koppel."</string>
diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml
index bd4afe1..a060cdc 100644
--- a/packages/SystemUI/res/values-am/strings.xml
+++ b/packages/SystemUI/res/values-am/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"አውታረ መረብ ክትትል የሚደረግበት ሊሆን ይችላል"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"እርስዎ ኢሜይሎችን፣ መተግበሪያዎችን እና ድር ጣቢያዎችንም ጨምሮ የግል የአውታረ መረብ እንቅስቃሴዎን ከሚከታተለው ከ<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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"የሰዓት ሰከንዶችን በሁኔታ አሞሌ ውስጥ አሳይ። በባትሪ ዕድሜ ላይ ተጽዕኖ ሊኖርው ይችል ይሆናል።"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ፈጣን ቅንብሮችን ዳግም ያደራጁ"</string>
<string name="show_brightness" msgid="6613930842805942519">"በፈጣን ቅንብሮች ውስጥ ብሩህነትን አሳይ"</string>
- <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">"ብሉቱዝ ይብራ?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"የቁልፍ ሰሌዳዎን ከእርስዎ ጡባዊ ጋር ለማገናኘት በመጀመሪያ ብሉቱዝን ማብራት አለብዎት።"</string>
diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml
index eca668e..1dfe411 100644
--- a/packages/SystemUI/res/values-ar/strings.xml
+++ b/packages/SystemUI/res/values-ar/strings.xml
@@ -412,6 +412,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"قد تكون الشبكة خاضعة للمراقبة"</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>
@@ -424,6 +425,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"شبكة ظاهرية خاصة"</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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"أنت متصل بـ <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>
@@ -500,8 +502,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"عرض ثواني الساعة في شريط الحالة. قد يؤثر ذلك في عمر البطارية."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"إعادة ترتيب الإعدادات السريعة"</string>
<string name="show_brightness" msgid="6613930842805942519">"عرض السطوع في الإعدادات السريعة"</string>
- <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">"تشغيل البلوتوث؟"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"لتوصيل لوحة المفاتيح بالجهاز اللوحي، يلزمك تشغيل بلوتوث أولاً."</string>
diff --git a/packages/SystemUI/res/values-az-rAZ/strings.xml b/packages/SystemUI/res/values-az-rAZ/strings.xml
index 3d9cc4a..8973b86 100644
--- a/packages/SystemUI/res/values-az-rAZ/strings.xml
+++ b/packages/SystemUI/res/values-az-rAZ/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Cihaz nəzarət altında ola bilər"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil izlənə bilər"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Şəbəkə nəzərdən keçirilə bilər"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Şəbəkə nəzərdən keçirilə bilər"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Cihaza nəzarət"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profil izlənməsi"</string>
<string name="monitoring_title" msgid="169206259253048106">"Şəbəkə monitorinqi"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN (Virtual Şəxsi Şəbəkələr)"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəxsi şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> tətbiqinə qoşulmusunuz və o, e-məktublar, tətbiq və veb saytlar daxil olmaqla şəxsi şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tərəfindən idarə olunur. <xliff:g id="APPLICATION">%2$s</xliff:g> tətbiqinə qoşuludur və iş şəbəkə fəaliyyətinizə nəzarət edə bilər, bura e-məktubıar, tətbiq və veb saytlar daxildir.\n\nƏtraflı məlumat üçün administratorunuz ilə əlaqə saxlayın."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tərəfindən idarə olunur. <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> tətbiqinə qoşuludur və iş şəbəkə fəaliyyətinizi idarə edə bilər, bura e-məktubıar, tətbiq və veb saytlar daxildir\n\nSiz, həmçinin, <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> tətbiqinə də qoşulsunuz və o, şəxsi şəbəkə fəaliyyətinizə nəzarət edə bilər."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Sizin cihaz tərəfindən idarə olunur <xliff:g id="ORGANIZATION">%1$s</xliff:g> . \n\n Sizin administrator nəzarət və parametrləri, korporativ giriş, apps, sizin cihaz ilə bağlı məlumat və cihaz yer məlumat idarə edə bilərsiniz. \n\n Siz bağlı olduğunuz <xliff:g id="APPLICATION">%2$s</xliff:g> , E-poçt, apps, və web o cümlədən, şəbəkə fəaliyyətinə nəzarət edə bilər. \n\n Daha ətraflı məlumat üçün, administratora müraciət."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Saatın saniyəsini status panelində göstərin. Batareyaya təsir edə bilər."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Sürətli Ayarları yenidən tənzimləyin"</string>
<string name="show_brightness" msgid="6613930842805942519">"Sürətli ayarlarda parlaqlılığı göstərin"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Bölünmüş ekran sürüşdürməsi aktiv edin"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Jestlərin icmal düyməsindən yuxarı sürüşdürərək bölünmüş ekrana daxil olmasını aktiv edin"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth aktivləşsin?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Tabletinizlə klaviaturaya bağlanmaq üçün ilk olaraq Bluetooth\'u aktivləşdirməlisiniz."</string>
diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
index f95045c..cdb1917 100644
--- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml
+++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Uređaj se možda nadgleda"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil se možda nadgleda"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Mreža se možda nadgleda"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Mreža se možda nadgleda"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Nadgledanje uređaja"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Nadgledanje profila"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nadgledanje mreže"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može da nadgleda aktivnosti na ličnoj mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može da nadgleda aktivnosti na ličnoj mreži, uključujući imejlove, aplikacije i veb-sajtove."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profilom za Work upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može da nadgleda aktivnosti na poslovnoj mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nViše informacija potražite od administratora."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profilom za Work upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, koja može da nadgleda aktivnosti na poslovnoj mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nPovezani ste i sa aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, koja može da nadgleda aktivnosti na ličnoj mreži."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator može da nadgleda podešavanja, korporativni pristup, aplikacije, podatke povezane sa uređajem i informacije o lokaciji uređaja, kao i da upravlja njima.\n\nPovezani ste sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može da nadgleda aktivnosti na mreži, uključujući imejlove, aplikacije i veb-sajtove.\n\nViše informacija potražite od administratora."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Sekunde na satu se prikazuju na statusnoj traci. To može da utiče na trajanje baterije."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Preuredi Brza podešavanja"</string>
<string name="show_brightness" msgid="6613930842805942519">"Prikaži osvetljenost u Brzim podešavanjima"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omogući pokret za prevlačenje nagore za podeljeni ekran"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Omogućava pokret za prelazak na podeljeni ekran prevlačenjem nagore od dugmeta Pregled"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimentalno"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Želite li da uključite Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Da biste povezali tastaturu sa tabletom, prvo morate da uključite Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-be-rBY/strings.xml b/packages/SystemUI/res/values-be-rBY/strings.xml
index 325d706..7ddb67d 100644
--- a/packages/SystemUI/res/values-be-rBY/strings.xml
+++ b/packages/SystemUI/res/values-be-rBY/strings.xml
@@ -410,6 +410,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"За сеткай могуць назіраць"</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>
@@ -422,6 +423,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Вы падключаны да праграмы <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>
@@ -498,8 +500,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Паказваць секунды гадзінніка на панэлі стану. Можа паўплываць на рэсурс акумулятара."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Змяніць парадак Хуткіх налад"</string>
<string name="show_brightness" msgid="6613930842805942519">"Паказваць яркасць у Хуткіх наладах"</string>
- <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>
diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml
index c5817ee..0606ab8 100644
--- a/packages/SystemUI/res/values-bg/strings.xml
+++ b/packages/SystemUI/res/values-bg/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Мрежата може да се наблюдава"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Установена е връзка с приложението <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Показване на секундите на часовника в лентата на състоянието. Може да се отрази на живота на батерията."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Пренареждане на бързите настройки"</string>
<string name="show_brightness" msgid="6613930842805942519">"Показване на яркостта от бързите настройки"</string>
- <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>
diff --git a/packages/SystemUI/res/values-bn-rBD/strings.xml b/packages/SystemUI/res/values-bn-rBD/strings.xml
index 40076e6..aff2900 100644
--- a/packages/SystemUI/res/values-bn-rBD/strings.xml
+++ b/packages/SystemUI/res/values-bn-rBD/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"নেটওয়ার্ক নিরীক্ষণ করা হতে পারে"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"আপনি <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"স্থিতি দন্ডে ঘড়ির সেকেন্ড দেখায়৷ ব্যাটারি লাইফকে প্রভাবিত করতে পারে৷"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"দ্রুত সেটিংসে পুনরায় সাজান"</string>
<string name="show_brightness" msgid="6613930842805942519">"দ্রুত সেটিংসে উজ্জ্বলতা দেখান"</string>
- <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">"ব্লুটুথ চালু করবেন?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"আপনার ট্যাবলেটের সাথে আপনার কীবোর্ড সংযুক্ত করতে, আপনাকে প্রথমে ব্লুটুথ চালু করতে হবে।"</string>
diff --git a/packages/SystemUI/res/values-bs-rBA/strings.xml b/packages/SystemUI/res/values-bs-rBA/strings.xml
index dcba67b..08a12d7 100644
--- a/packages/SystemUI/res/values-bs-rBA/strings.xml
+++ b/packages/SystemUI/res/values-bs-rBA/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Uređaj može biti nadziran"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil može biti nadziran"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Mreža može biti nadzirana"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Mreža može biti nadzirana"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Praćenje uređaja"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Praćenje profila"</string>
<string name="monitoring_title" msgid="169206259253048106">"Praćenje mreže"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-mailove, aplikacije i web-lokacije."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Povezani ste sa aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vašu aktivnost na privatnoj mreži, uključujući e-mailove, aplikacije i web-lokacije."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste na aplikaciju <xliff:g id="APPLICATION">%1$s</xliff:g>, koja može pratiti vaše privatne aktivnosti na mreži, uključujući e-poštu, aplikacije i web stranice."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profilom za posao upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može pratiti vašu aktivnost na radnoj mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nZa više informacija kontaktirajte svog administratora."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profilom za posao upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je sa aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, koja može pratiti vašu aktivnost na radnoj mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nPovezani ste i sa aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, koja može pratiti vašu aktivnost na privatnoj mreži."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može pratiti postavke, korporativni pristup, aplikacije, podatke povezane sa vašim uređajem i informacije o lokaciji uređaja, kao i upravljati njima.\n\nPovezani ste sa aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g>, koja može pratiti vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nZa više informacija kontaktirajte svog administratora."</string>
@@ -496,8 +498,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Prikaži sekunde na statusnoj traci. Može skratiti trajanje baterije."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Preuredi \"Brze postavke\""</string>
<string name="show_brightness" msgid="6613930842805942519">"Prikaži osvjetljenje u opciji \"Brze postavke\""</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omogućiti potez za podjelu ekrana prevlačenjem prema gore"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Uključite pokrete prstima da biste ušli u podijeljeni ekran tako što ćete od dugmeta Pregled prevući prstom prema gore"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimentalno"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Želiti li uključiti Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Da povežete tastaturu sa tabletom, prvo morate uključiti Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml
index 3354f92..b51d7e7 100644
--- a/packages/SystemUI/res/values-ca/strings.xml
+++ b/packages/SystemUI/res/values-ca/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"És possible que el dispositiu estigui supervisat."</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"El perfil es pot supervisar"</string>
<string name="vpn_footer" msgid="2388611096129106812">"És possible que la xarxa estigui supervisada."</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"És possible que la xarxa estigui supervisada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Supervisió del dispositiu"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisió del perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisió de la xarxa"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Estàs connectat a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pot supervisar la teva activitat personal a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil professional. Aquest perfil està connectat a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pot supervisar la teva activitat professional a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el teu perfil professional. Aquest perfil està connectat a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pot supervisar la teva activitat professional a la xarxa, com ara els correus electrònics, les aplicacions i els llocs web.\n\nA més, estàs connectat a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que també pot supervisar la teva activitat personal a la xarxa."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> gestiona el dispositiu.\n\nL\'administrador pot supervisar i gestionar el següent: configuració, accés corporatiu, aplicacions i dades associades amb el dispositiu, inclosa la informació d\'ubicació.\n\nEstàs connectat a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pot supervisar l\'activitat a la xarxa, com ara els correus, les aplicacions i els llocs web.\n\nPer obtenir més informació, contacta amb l\'administrador."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra els segons del rellotge a la barra d\'estat. Això pot afectar la durada de la bateria."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Reorganitza Configuració ràpida"</string>
<string name="show_brightness" msgid="6613930842805942519">"Mostra la brillantor a Configuració ràpida"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activa el gest per dividir la pantalla en lliscar cap amunt"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activa el gest per entrar al mode de pantalla dividida en lliscar cap amunt des del botó Visió general"</string>
<string name="experimental" msgid="6198182315536726162">"Experimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Vols activar el Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Per connectar el teclat amb la tauleta, primer has d\'activar el Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml
index d64e5d9..782602a 100644
--- a/packages/SystemUI/res/values-cs/strings.xml
+++ b/packages/SystemUI/res/values-cs/strings.xml
@@ -410,6 +410,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Zařízení může být sledováno"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil může být monitorován"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Síť může být sledována"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Síť může být monitorována"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Sledování zařízení"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoring profilu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Sledování sítě"</string>
@@ -422,6 +423,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Jste připojeni k aplikaci <xliff:g id="APPLICATION">%1$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je připojen k aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Váš pracovní profil spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je připojen k aplikaci <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, která může sledovat vaši aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nTaké jste připojeni k aplikaci <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Toto zařízení spravuje organizace <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrátor může sledovat a spravovat nastavení, firemní přístup, aplikace, data přidružená k tomuto zařízení a informace o jeho poloze.\n\nJste připojeni k aplikaci <xliff:g id="APPLICATION">%2$s</xliff:g>, která může sledovat vaši osobní aktivitu v síti, včetně e-mailů, aplikací a webů.\n\nO další informace požádejte svého administrátora."</string>
@@ -498,8 +500,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Na stavovém řádku se bude zobrazovat sekundová ručička. Může být ovlivněna výdrž baterie."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Změnit uspořádání Rychlého nastavení"</string>
<string name="show_brightness" msgid="6613930842805942519">"Zobrazit jas v Rychlém nastavení"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivovat rozdělenou obrazovku přejetím prstem nahoru"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Umožňuje aktivovat rozdělenou obrazovku přejetím prstem nahoru od tlačítka Přehled."</string>
<string name="experimental" msgid="6198182315536726162">"Experimentální"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Zapnout Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Chcete-li klávesnici připojit k tabletu, nejdříve musíte zapnout Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml
index da8daa4..c37fe15 100644
--- a/packages/SystemUI/res/values-da/strings.xml
+++ b/packages/SystemUI/res/values-da/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Enheden kan være overvåget"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilen kan overvåges"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Netværket kan være overvåget"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Netværket kan være overvåget"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Overvågning af enhed"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilovervågning"</string>
<string name="monitoring_title" msgid="169206259253048106">"Overvågning af netværk"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din private netværksaktivitet, bl.a. e-mails, apps og websites."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Du har forbindelse til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåge din private netværksaktivitet, bl.a. e-mails, apps og websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er forbundet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåge din arbejdsrelaterede netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Din arbejdsprofil administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er forbundet til <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan overvåge din arbejdsrelaterede netværksaktivitet, bl.a. e-mails, apps og websites.\n\nDu er også forbundet til <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan overvåge din private netværksaktivitet."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Din enhed administreres af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nDin administrator kan overvåge og administrere indstillinger, virksomhedens adgang, data tilknyttet din enhed og enhedens stedoplysninger.\n\nDu er forbundet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåge din netværksaktivitet, bl.a. e-mails, apps og websites.\n\nKontakt din administrator for at få flere oplysninger."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Vis sekunder i statuslinjen. Dette kan påvirke batteriets levetid."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Omarranger Hurtige indstillinger"</string>
<string name="show_brightness" msgid="6613930842805942519">"Vis lysstyrke i Hurtige indstillinger"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivér bevægelsen Stryg opad for at dele skærmen"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktivér bevægelse for at dele skærmen ved at stryge opad fra knappen Oversigt"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimentel"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Vil du slå Bluetooth til?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Bluetooth skal være slået til, før du kan knytte dit tastatur til din tablet."</string>
diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml
index 46078d9..c353fae 100644
--- a/packages/SystemUI/res/values-de/strings.xml
+++ b/packages/SystemUI/res/values-de/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Aktivität auf dem Gerät kann vom Eigentümer protokolliert werden"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil wird möglicherweise überwacht."</string>
<string name="vpn_footer" msgid="2388611096129106812">"Das Netzwerk wird möglicherweise überwacht."</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Das Netzwerk wird möglicherweise überwacht"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Geräteüberwachung"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilüberwachung"</string>
<string name="monitoring_title" msgid="169206259253048106">"Netzwerküberwachung"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Du bist mit der App <xliff:g id="APPLICATION">%1$s</xliff:g> verbunden, die deine Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Du bist mit der App <xliff:g id="APPLICATION">%1$s</xliff:g> verbunden, die deine persönliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Du bist mit der App \"<xliff:g id="APPLICATION">%1$s</xliff:g>\" verbunden. Diese kann deine persönlichen Netzwerkaktivitäten erfassen, einschließlich E-Mails, Apps und Websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Dein Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet. Das Profil ist mit der App <xliff:g id="APPLICATION">%2$s</xliff:g> verbunden, die deine geschäftlichen Netzwerkaktivitäten überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhältst du von deinem Administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Dein Arbeitsprofil wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet. Das Profil ist mit der App <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> verbunden, die deine geschäftliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nDu bist außerdem mit der App <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> verbunden, die deine persönliche Netzwerkaktivität überwachen kann."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Dein Gerät wird von <xliff:g id="ORGANIZATION">%1$s</xliff:g> verwaltet.\n\nDein Administrator kann die zu deinem Gerät gehörigen Einstellungen, Unternehmenszugriffsrechte, Apps und Daten überwachen und verwalten, einschließlich der Standortinformationen deines Geräts.\n\nDu bist außerdem mit der App <xliff:g id="APPLICATION">%2$s</xliff:g> verbunden, die deine persönliche Netzwerkaktivität überwachen kann, einschließlich E-Mails, Apps und Websites.\n\nWeitere Informationen erhältst du bei deinem Administrator."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Uhrsekunden in der Statusleiste anzeigen. Kann sich auf die Akkulaufzeit auswirken."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Schnelleinstellungen neu anordnen"</string>
<string name="show_brightness" msgid="6613930842805942519">"Helligkeit in den Schnelleinstellungen anzeigen"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Teilen des Bildschirms durch Wischen nach oben aktivieren"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktiviert die Bewegung zum Teilen des Bildschirms, bei der von der Schaltfläche \"Übersicht\" nach oben gewischt wird"</string>
<string name="experimental" msgid="6198182315536726162">"Experimentell"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth aktivieren?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Zum Verbinden von Tastatur und Tablet muss Bluetooth aktiviert sein."</string>
diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml
index 0a327ab..ac260dc 100644
--- a/packages/SystemUI/res/values-el/strings.xml
+++ b/packages/SystemUI/res/values-el/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Το δίκτυο ενδέχεται να παρακολουθείται"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Έχετε συνδεθεί στην εφαρμογή <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Εμφάνιση δευτερολέπτων ρολογιού στη γραμμή κατάστασης. Ενδέχεται να επηρεάσει τη διάρκεια ζωής της μπαταρίας."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Αναδιάταξη Γρήγορων ρυθμίσεων"</string>
<string name="show_brightness" msgid="6613930842805942519">"Εμφάνιση φωτεινότητας στις Γρήγορες ρυθμίσεις"</string>
- <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">"Για να συνδέσετε το πληκτρολόγιο με το tablet σας, θα πρέπει πρώτα να ενεργοποιήσετε το Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml
index 9443ad9..f974183 100644
--- a/packages/SystemUI/res/values-en-rAU/strings.xml
+++ b/packages/SystemUI/res/values-en-rAU/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Device may be monitored"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profile may be monitored"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Network may be monitored"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Network may be monitored"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Device monitoring"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
<string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string>
<string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Enable split-screen swipe-up gesture"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Enable gesture to enter split-screen by swiping up from the Overview button"</string>
<string name="experimental" msgid="6198182315536726162">"Experimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"To connect your keyboard with your tablet, you first have to turn on Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml
index 9443ad9..f974183 100644
--- a/packages/SystemUI/res/values-en-rGB/strings.xml
+++ b/packages/SystemUI/res/values-en-rGB/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Device may be monitored"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profile may be monitored"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Network may be monitored"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Network may be monitored"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Device monitoring"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
<string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string>
<string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Enable split-screen swipe-up gesture"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Enable gesture to enter split-screen by swiping up from the Overview button"</string>
<string name="experimental" msgid="6198182315536726162">"Experimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"To connect your keyboard with your tablet, you first have to turn on Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml
index 9443ad9..f974183 100644
--- a/packages/SystemUI/res/values-en-rIN/strings.xml
+++ b/packages/SystemUI/res/values-en-rIN/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Device may be monitored"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profile may be monitored"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Network may be monitored"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Network may be monitored"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Device monitoring"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profile monitoring"</string>
<string name="monitoring_title" msgid="169206259253048106">"Network monitoring"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your network activity including emails, apps and websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"You\'re connected to <xliff:g id="APPLICATION">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps and websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nFor more information, contact your administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Your work profile is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>. It is connected to <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps and websites.\n\nYou\'re also connected to <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, which can monitor your personal network activity."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Your device is managed by <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nYour administrator can monitor and manage settings, corporate access, apps, data associated with your device, and your device\'s location information.\n\nYou\'re connected to <xliff:g id="APPLICATION">%2$s</xliff:g>, which can monitor your network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Show clock seconds in the status bar. May impact battery life."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Rearrange Quick Settings"</string>
<string name="show_brightness" msgid="6613930842805942519">"Show brightness in Quick Settings"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Enable split-screen swipe-up gesture"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Enable gesture to enter split-screen by swiping up from the Overview button"</string>
<string name="experimental" msgid="6198182315536726162">"Experimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Turn on Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"To connect your keyboard with your tablet, you first have to turn on Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml
index 602d6b2..12062d1 100644
--- a/packages/SystemUI/res/values-es-rUS/strings.xml
+++ b/packages/SystemUI/res/values-es-rUS/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Es posible que el dispositivo esté supervisado."</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Es posible que se supervise el perfil."</string>
<string name="vpn_footer" msgid="2388611096129106812">"Es posible que la red esté supervisada."</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Es posible que la red esté supervisada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Supervisión del dispositivo"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisión del perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisión de red"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Tienes conexión a la aplicación <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Tienes conexión a la aplicación <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de la red personal, incluidos los correos electrónicos, las aplicaciones y los sitios web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Te conectaste a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede supervisar la actividad de tu red personal, incluidos los correos electrónicos, las apps y los sitios web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo. Tiene conexión a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar la actividad de tu red de trabajo, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu perfil de trabajo. Tiene conexión a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que puede supervisar la actividad de tu red de trabajo, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nTambién tienes conexión a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que puede supervisar la actividad de la red personal."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> administra tu dispositivo.\n\nEl administrador puede supervisar y administrar la configuración, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo y la información de la ubicación.\n\nTienes conexión a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar la actividad de la red, incluidos los correos electrónicos, las aplicaciones y los sitios web.\n\nPara obtener más información, comunícate con el administrador."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Muestra los segundos del reloj en la barra de estado. Puede afectar la duración de la batería."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar la Configuración rápida"</string>
<string name="show_brightness" msgid="6613930842805942519">"Mostrar el brillo en la Configuración rápida"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Habilitar gesto de dedo hacia arriba para dividir pantalla"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Habilita el gesto de deslizar el dedo hacia arriba desde el botón Recientes para acceder al modo de pantalla dividida"</string>
<string name="experimental" msgid="6198182315536726162">"Experimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"¿Activar Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Para conectar el teclado con la tablet, primero debes activar Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml
index ba11d6f..8d6f9d8 100644
--- a/packages/SystemUI/res/values-es/strings.xml
+++ b/packages/SystemUI/res/values-es/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Es posible que este dispositivo esté supervisado"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Es posible que se supervise el perfil"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Puede que la red esté supervisada"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Puede que la red esté supervisada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Supervisión de dispositivo"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisión del perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisión de red"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Estas conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede controlar tu actividad de red personal, como correos electrónicos, aplicaciones y sitios web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Estas conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que puede controlar tu actividad de red personal, como correos electrónicos, aplicaciones y sitios web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g> y está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede controlar tu actividad de red del trabajo, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con el administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"El administrador de tu perfil de trabajo es <xliff:g id="ORGANIZATION">%1$s</xliff:g> y está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que puede controlar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nTú también estás conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que puede controlar tu actividad de red personal."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"El administrador de tu dispositivo es <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nTu administrador puede supervisar y administrar los ajustes, el acceso corporativo, las aplicaciones, los datos asociados al dispositivo e información de su ubicación.\n\nEstás conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que puede supervisar tu actividad de red, como correos electrónicos, aplicaciones y sitios web.\n\nPara obtener más información, ponte en contacto con tu administrador."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Muestra los segundos del reloj en la barra de estado. Puede afectar a la duración de la batería."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar Ajustes rápidos"</string>
<string name="show_brightness" msgid="6613930842805942519">"Mostrar brillo en Ajustes rápidos"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Habilitar deslizar dedo hacia arriba para dividir pantalla"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Habilita el gesto de deslizar el dedo hacia arriba desde el botón Aplicaciones recientes para acceder al modo de pantalla dividida"</string>
<string name="experimental" msgid="6198182315536726162">"Experimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"¿Activar Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Para poder conectar tu teclado a tu tablet, debes activar el Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-et-rEE/strings.xml b/packages/SystemUI/res/values-et-rEE/strings.xml
index bfc55e9..801eb03 100644
--- a/packages/SystemUI/res/values-et-rEE/strings.xml
+++ b/packages/SystemUI/res/values-et-rEE/strings.xml
@@ -47,7 +47,7 @@
<string name="status_bar_settings_auto_rotation" msgid="3790482541357798421">"Pööra ekraani automaatselt"</string>
<string name="status_bar_settings_mute_label" msgid="554682549917429396">"SUMMUTA"</string>
<string name="status_bar_settings_auto_brightness_label" msgid="511453614962324674">"AUTO"</string>
- <string name="status_bar_settings_notifications" msgid="397146176280905137">"Teatised"</string>
+ <string name="status_bar_settings_notifications" msgid="397146176280905137">"Märguanded"</string>
<string name="bluetooth_tethered" msgid="7094101612161133267">"Bluetooth on jagatud"</string>
<string name="status_bar_input_method_settings_configure_input_methods" msgid="3504292471512317827">"Seadista sisestusmeetodeid"</string>
<string name="status_bar_use_physical_keyboard" msgid="7551903084416057810">"Füüsiline klaviatuur"</string>
@@ -164,7 +164,7 @@
<!-- no translation found for accessibility_battery_level_charging (1147587904439319646) -->
<skip />
<string name="accessibility_settings_button" msgid="799583911231893380">"Süsteemiseaded"</string>
- <string name="accessibility_notifications_button" msgid="4498000369779421892">"Teatised"</string>
+ <string name="accessibility_notifications_button" msgid="4498000369779421892">"Märguanded"</string>
<string name="accessibility_remove_notification" msgid="3603099514902182350">"Märguande eemaldamine."</string>
<string name="accessibility_gps_enabled" msgid="3511469499240123019">"GPS on lubatud."</string>
<string name="accessibility_gps_acquiring" msgid="8959333351058967158">"GPS-signaali otsimine."</string>
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Seadet võidakse jälgida"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiili võidakse jälgida"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Võrku võidakse jälgida"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Võrku võidakse jälgida"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Seadme jälgimine"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profiili jälgimine"</string>
<string name="monitoring_title" msgid="169206259253048106">"Võrgu jälgimine"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Teie seade on ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Teie seade on ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Olete ühendatud rakendusega <xliff:g id="APPLICATION">%1$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi, sh meile, rakendusi ja veebisaite."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>. See on ühendatud rakendusega <xliff:g id="APPLICATION">%2$s</xliff:g>, mis võib jälgida teie töökoha võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Teie tööprofiili haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>. See on ühendatud rakendusega <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, mis võib jälgida teie töökoha võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nTeie seade on ühendatud ka rakendusega <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, mis võib jälgida teie isiklikke võrgutegevusi."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Teie seadet haldab organisatsioon <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministraator saab jälgida ja hallata seadeid, ettevõttesisest juurdepääsu, rakendusi, seadmega seotud andmeid ja seadme asukohateavet.\n\nOlete ühendatud rakendusega <xliff:g id="APPLICATION">%2$s</xliff:g>, mis saab jälgida teie võrgutegevusi, sh meile, rakendusi ja veebisaite.\n\nLisateabe saamiseks võtke ühendust administraatoriga."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Olekuribal kella sekundite kuvamine. See võib mõjutada aku kasutusaega."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Korralda kiirseaded ümber"</string>
<string name="show_brightness" msgid="6613930842805942519">"Kuva kiirseadetes heledus"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Luba ülespühkimise liigutus ekraani poolitamiseks"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Lubab žesti, mis poolitab ekraani, kui kasutaja pühib üles nupul Ülevaade."</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimentaalne"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Kas lülitada Bluetooth sisse?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Klaviatuuri ühendamiseks tahvelarvutiga peate esmalt Bluetoothi sisse lülitama."</string>
diff --git a/packages/SystemUI/res/values-eu-rES/strings.xml b/packages/SystemUI/res/values-eu-rES/strings.xml
index a340b3d..2c3a314 100644
--- a/packages/SystemUI/res/values-eu-rES/strings.xml
+++ b/packages/SystemUI/res/values-eu-rES/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Baliteke gailua kontrolatuta egotea"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Baliteke profila kontrolatuta egotea"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Baliteke sarea kontrolatuta egotea"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Baliteke sarea kontrolatuta egotea"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Gailuen kontrola"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profila kontrolatzeko aukera"</string>
<string name="monitoring_title" msgid="169206259253048106">"Sareen kontrola"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN konexioa"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduera pertsonalak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduera pertsonalak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea, eta profila <xliff:g id="APPLICATION">%2$s</xliff:g> aplikaziora konektatuta dago. Aplikazio horrek sarean egiten dituzun laneko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da laneko profilaren kudeatzailea, eta profila <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> aplikaziora konektatuta dago. Aplikazio horrek sarean egiten dituzun laneko jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nHorrez gain, sarean egiten dituzun jarduera pertsonalak kontrola ditzakeen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> aplikaziora konektatuta zaude."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"<xliff:g id="ORGANIZATION">%1$s</xliff:g> da gailuaren kudeatzailea.\n\nAdministratzaileak ezarpenak, enpresako sarbidea, aplikazioak, gailuarekin lotutako datuak eta gailuaren kokapenari buruzko informazioa kontrola eta kudea ditzake.\n\n<xliff:g id="APPLICATION">%2$s</xliff:g> aplikaziora konektatuta zaude. Aplikazio horrek sarean egiten dituzun jarduerak kontrola ditzake, mezu elektronikoak, aplikazioak eta webguneak barne.\n\nInformazio gehiago lortzeko, jarri administratzailearekin harremanetan."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Erakutsi erlojuko segundoak egoera-barran. Baliteke bateria gehiago erabiltzea."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Berrantolatu ezarpen bizkorrak"</string>
<string name="show_brightness" msgid="6613930842805942519">"Erakutsi distira Ezarpen bizkorretan"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Gaitu pantaila zatitzeko keinua hatza gora pasatuta"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Sakatu Ikuspegi nagusia botoia eta gaitu hatza gora pasatuta pantaila zatitzeko keinua"</string>
<string name="experimental" msgid="6198182315536726162">"Esperimentala"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth eginbidea aktibatu nahi duzu?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Teklatua tabletara konektatzeko, Bluetooth eginbidea aktibatu behar duzu."</string>
diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml
index 58a5d93..7a0b666 100644
--- a/packages/SystemUI/res/values-fa/strings.xml
+++ b/packages/SystemUI/res/values-fa/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"ممکن است شبکه کنترل شود"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"به <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"ثانیههای ساعت را در نوار وضعیت نشان میدهد. ممکن است بر ماندگاری باتری تأثیر بگذارد."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ترتیب مجدد در تنظیمات سریع"</string>
<string name="show_brightness" msgid="6613930842805942519">"نمایش روشنایی در تنظیمات سریع"</string>
- <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">"بلوتوث روشن شود؟"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"برای مرتبط کردن صفحهکلید با رایانه لوحی، ابتدا باید بلوتوث را روشن کنید."</string>
diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml
index f292c2b..cc5ee98 100644
--- a/packages/SystemUI/res/values-fi/strings.xml
+++ b/packages/SystemUI/res/values-fi/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Laitetta voidaan valvoa"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiilia saatetaan valvoa"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Verkkoa saatetaan valvoa"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Verkkoa saatetaan valvoa"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Laitteiden valvonta"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profiilin valvonta"</string>
<string name="monitoring_title" msgid="169206259253048106">"Verkon valvonta"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Olet muodostanut yhteyden sovellukseen <xliff:g id="APPLICATION">%1$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa. Sovellus voi esimerkiksi seurata avaamiasi sähköposteja, sovelluksia ja verkkosivustoja."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Se on yhteydessä sovellukseen <xliff:g id="APPLICATION">%2$s</xliff:g>, joka voi valvoa työhön liittyvää toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nSaat lisätietoja järjestelmänvalvojaltasi."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Työprofiiliasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Se on yhteydessä sovellukseen <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, joka voi valvoa työhön liittyvää toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisäksi olet yhteydessä sovellukseen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, joka voi valvoa henkilökohtaista toimintaasi verkossa."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Laitettasi hallinnoi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJärjestelmänvalvojasi voi valvoa ja hallinnoida laitteesi asetuksia, yrityskäyttöä, sovelluksia, laitteeseesi liittyviä tietoja ja laitteen sijaintitietoja.\n\nOlet yhteydessä sovellukseen <xliff:g id="APPLICATION">%2$s</xliff:g>, joka voi valvoa toimintaasi verkossa. Sovellus voi seurata esimerkiksi avaamiasi sähköposteja, sovelluksia ja verkkosivustoja.\n\nLisätietoja saat järjestelmänvalvojaltasi."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Näytä sekunnit tilapalkin kellossa. Tämä voi vaikuttaa akun kestoon."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Järjestä pika-asetukset uudelleen"</string>
<string name="show_brightness" msgid="6613930842805942519">"Näytä kirkkaus pika-asetuksissa"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Siirry jaetun näytön tilaan pyyhkäisemällä ylöspäin"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Voit siirtyä jaetun näytön tilaan pyyhkäisemällä Viimeisimmät-painikkeesta ylöspäin."</string>
<string name="experimental" msgid="6198182315536726162">"Kokeellinen"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Otetaanko Bluetooth käyttöön?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Jotta voit yhdistää näppäimistön tablettiisi, sinun on ensin otettava Bluetooth käyttöön."</string>
@@ -603,7 +603,7 @@
<string name="keycode_description" msgid="1403795192716828949">"Näppäinkoodi-painikkeet sallivat näppäimistön näppäimien lisäämisen navigointipalkkiin. Kun painiketta painetaan, se jäljittelee valittua näppäintä. Valitse ensin painikkeen kohteena oleva näppäin, sitten painikkeessa näkyvä kuva."</string>
<string name="select_keycode" msgid="7413765103381924584">"Valitse näppäimistön näppäin"</string>
<string name="preview" msgid="9077832302472282938">"Esikatselu"</string>
- <string name="drag_to_add_tiles" msgid="7058945779098711293">"Lisää osioita vetämällä."</string>
+ <string name="drag_to_add_tiles" msgid="7058945779098711293">"Lisää osioita vetämällä"</string>
<string name="drag_to_remove_tiles" msgid="3361212377437088062">"Poista vetämällä tähän."</string>
<string name="qs_edit" msgid="2232596095725105230">"Muokkaa"</string>
<string name="tuner_time" msgid="6572217313285536011">"Aika"</string>
diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml
index 7d50fee..09dd85a 100644
--- a/packages/SystemUI/res/values-fr-rCA/strings.xml
+++ b/packages/SystemUI/res/values-fr-rCA/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Il est possible que cet appareil soit surveillé."</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"le profil peut être contrôlé"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Le réseau peut être surveillé"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Le réseau peut être surveillé"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Surveillance d\'appareils"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Contrôle de profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Surveillance réseau"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"RPV"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les courriels, les applications et les sites Web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les courriels, les applications et les sites Web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web.\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris les courriels, les applications et les sites Web.\n\nVous êtes également connecté à <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Votre appareil est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et ses données de localisation.\n\nVous êtes connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>, qui peut contrôler votre activité réseau, y compris les courriels, les applications et les sites Web.\n\nPour en savoir plus, communiquez avec votre administrateur."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Afficher les secondes sur l\'horloge dans la barre d\'état. Cela peut réduire l\'autonomie de la pile."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Réorganiser les paramètres rapides"</string>
<string name="show_brightness" msgid="6613930842805942519">"Afficher la luminosité dans les paramètres rapides"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activer le geste d\'écran partagé en balayant vers le haut"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activer le geste permettant d\'utiliser l\'écran partagé en balayant l\'écran vers le haut à partir du bouton « Aperçu »"</string>
<string name="experimental" msgid="6198182315536726162">"Fonctions expérimentales"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Activer Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Pour connecter votre clavier à votre tablette, vous devez d\'abord activer la connectivité Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml
index d89e1c1..f516e54 100644
--- a/packages/SystemUI/res/values-fr/strings.xml
+++ b/packages/SystemUI/res/values-fr/strings.xml
@@ -314,7 +314,7 @@
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Notifications"</string>
<string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Lampe de poche"</string>
<string name="quick_settings_cellular_detail_title" msgid="8575062783675171695">"Données mobiles"</string>
- <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Consommation des données"</string>
+ <string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Conso des données"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Données restantes"</string>
<string name="quick_settings_cellular_detail_over_limit" msgid="967669665390990427">"Limite dépassée"</string>
<string name="quick_settings_cellular_detail_data_used" msgid="1476810587475761478">"<xliff:g id="DATA_USED">%s</xliff:g> utilisés"</string>
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Il est possible que cet appareil soit surveillé."</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Le profil peut être contrôlé."</string>
<string name="vpn_footer" msgid="2388611096129106812">"Il est possible que le réseau soit surveillé."</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Il est possible que le réseau soit surveillé."</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Contrôle des appareils"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Contrôle du profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Contrôle du réseau"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris votre activité relative aux e-mails, aux applications et aux sites Web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Vous êtes connecté à <xliff:g id="APPLICATION">%1$s</xliff:g>. Cette application peut contrôler votre activité personnelle sur le réseau, y compris les e-mails, les applications et les sites Web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION">%2$s</xliff:g>. Cette application peut contrôler l\'activité de ce profil sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web.\n\nPour en savoir plus, contactez votre administrateur."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Votre profil professionnel est géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Il est connecté à <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>. Cette application peut contrôler l\'activité de ce profil sur le réseau, y compris l\'activité relative aux e-mails, aux applications et aux sites Web.\n\nVous êtes également connecté à <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>. Cette application peut surveiller votre activité personnelle sur le réseau."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Votre appareil géré par <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVotre administrateur peut contrôler et gérer les paramètres, l\'accès aux contenus de l\'entreprise, les applications, les données associées à cet appareil et les informations de localisation de celui-ci.\n\nVous êtes connecté à <xliff:g id="APPLICATION">%2$s</xliff:g> qui peut contrôler votre activité sur le réseau (e-mails, applications et sites Web).\n\nPour en savoir plus, contactez votre administrateur."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Afficher les secondes dans la barre d\'état. Cela risque de réduire l\'autonomie de la batterie."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Réorganiser la fenêtre de configuration rapide"</string>
<string name="show_brightness" msgid="6613930842805942519">"Afficher la luminosité dans fenêtre de configuration rapide"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activer l\'écran partagé en balayant vers le haut"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activer le geste permettant d\'utiliser l\'écran partagé en balayant l\'écran vers le haut à partir du bouton \"Aperçu\""</string>
<string name="experimental" msgid="6198182315536726162">"Paramètres expérimentaux"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Activer le Bluetooth ?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Pour connecter un clavier à votre tablette, vous devez avoir activé le Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-gl-rES/strings.xml b/packages/SystemUI/res/values-gl-rES/strings.xml
index 6d0e366..01ddd36 100644
--- a/packages/SystemUI/res/values-gl-rES/strings.xml
+++ b/packages/SystemUI/res/values-gl-rES/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"É posible que se supervise o dispositivo"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pódese supervisar"</string>
<string name="vpn_footer" msgid="2388611096129106812">"É posible que se supervise a rede"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"É posible que se supervise a rede"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Supervisión de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Supervisión do perfil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Supervisión de rede"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade persoal na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Estás conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode supervisar a túa actividade persoal na rede, incluídos os correos electrónicos, as aplicacións e os sitios web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, ponte en contacto co teu administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"O teu perfil de traballo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode supervisar a túa actividade na rede, incluídos os correos electrónicos, as aplicacións e os sitios web.\n\nTamén estás conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode supervisar a túa actividade persoal na rede."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"O dispositivo está xestionado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO teu administrador pode supervisar e xestionar a configuración, o acceso corporativo, as aplicacións, os datos asociados co dispositivo e a información de localización do dispositivo.\n\nEstás conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode supervisar a túa actividade na rede: os correos electrónicos, as aplicacións e os sitios web.\n\nPara obter máis información, contacta co teu administrador."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra os segundos do reloxo na barra de estado. Pode influír na duración da batería."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar Configuración rápida"</string>
<string name="show_brightness" msgid="6613930842805942519">"Mostrar brillo en Configuración rápida"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activar pantalla dividida pasando o dedo cara arriba"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activa o xesto de pasar o dedo cara arriba desde o botón Visión xeral para acceder ao modo de pantalla dividida"</string>
<string name="experimental" msgid="6198182315536726162">"Experimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Queres activar o Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Para conectar o teu teclado coa tableta, primeiro tes que activar o Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-gu-rIN/strings.xml b/packages/SystemUI/res/values-gu-rIN/strings.xml
index 0663b41..a560ab8 100644
--- a/packages/SystemUI/res/values-gu-rIN/strings.xml
+++ b/packages/SystemUI/res/values-gu-rIN/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"નેટવર્ક મૉનિટર કરવામાં આવી શકે છે"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"તમે <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"ઘડિયાળ સેકન્ડ સ્થિતિ બારમાં બતાવો. બૅટરીની આવરદા પર અસર કરી શકે છે."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ઝડપી સેટિંગ્સને ફરીથી ગોઠવો"</string>
<string name="show_brightness" msgid="6613930842805942519">"ઝડપી સેટિંગ્સમાં તેજ બતાવો"</string>
- <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>
diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml
index 2924556..33e7ec0 100644
--- a/packages/SystemUI/res/values-hi/strings.xml
+++ b/packages/SystemUI/res/values-hi/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"नेटवर्क को मॉनीटर किया जा सकता है"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"आप <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"स्थिति बार में घड़ी के सेकंड दिखाएं. इससे बैटरी के जीवनकाल पर प्रभाव पड़ सकता है."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"त्वरित सेटिंग को पुन: व्यवस्थित करें"</string>
<string name="show_brightness" msgid="6613930842805942519">"त्वरित सेटिंग में स्क्रीन की रोशनी दिखाएं"</string>
- <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">"ब्लूटूथ चालू करें?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"अपने कीबोर्ड को अपने टैबलेट से कनेक्ट करने के लिए, आपको पहले ब्लूटूथ चालू करना होगा."</string>
diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml
index 02466d6..bdf8faf 100644
--- a/packages/SystemUI/res/values-hr/strings.xml
+++ b/packages/SystemUI/res/values-hr/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Uređaj se možda nadzire"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil se možda nadzire"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Mreža se možda nadzire"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Mreža se možda nadzire"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Nadzor uređaja"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Nadzor profila"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nadzor mreže"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste s aplikacijom <xliff:g id="APPLICATION">%1$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je s aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g> koja može nadzirati vašu poslovnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se svojem administratoru za više informacija."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Vašim poslovnim profilom upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je s aplikacijom <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> koja može nadzirati vašu poslovnu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nPovezani ste i s aplikacijom <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> koja može nadzirati vašu osobnu aktivnost na mreži."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Vašim uređajem upravlja <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nVaš administrator može nadzirati postavke, poslovni pristup, aplikacije, podatke povezane s uređajem i podatke o lokaciji uređaja te upravljati njima.\n\nPovezani ste s aplikacijom <xliff:g id="APPLICATION">%2$s</xliff:g> koja može nadzirati vašu aktivnost na mreži, uključujući e-poštu, aplikacije i web-lokacije.\n\nObratite se svojem administratoru za više informacija."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Prikazuju se sekunde na satu na traci statusa. Može utjecati na trajanje baterije."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Promijeni raspored Brzih postavki"</string>
<string name="show_brightness" msgid="6613930842805942519">"Prikaži svjetlinu u Brzim postavkama"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omogući pokret povlačenja prema gore za podijeljen zaslon"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Omogućivanje pokreta za otvaranje podijeljenog zaslona tako da se od gumba Pregled prstom prijeđe prema gore"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimentalno"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Želite li uključiti Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Da biste povezali tipkovnicu s tabletom, morate uključiti Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml
index b89b106..92d8721 100644
--- a/packages/SystemUI/res/values-hu/strings.xml
+++ b/packages/SystemUI/res/values-hu/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Lehet, hogy az eszközt figyelik"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilját felügyelhetik"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Lehet, hogy a hálózatot figyelik"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Lehet, hogy a hálózat felügyelt"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Eszközfigyelés"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilfelügyelet"</string>
<string name="monitoring_title" msgid="169206259253048106">"Hálózatfigyelés"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Csatlakoztatta a(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazást, amely figyelheti hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Csatlakoztatta a(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazást, amely figyelheti személyes hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ön a(z) <xliff:g id="APPLICATION">%1$s</xliff:g> alkalmazáshoz csatlakozik, amely figyelheti személyes hálózati tevékenységét, beleértve az e-maileket, alkalmazásokat és webhelyeket."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Munkaprofilját a(z) <xliff:g id="ORGANIZATION">%1$s</xliff:g> felügyeli. Csatlakoztatva van hozzá a(z) <xliff:g id="APPLICATION">%2$s</xliff:g> alkalmazás, amely figyelheti az Ön hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket.\n\nTovábbi információért forduljon a rendszergazdájához."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Munkaprofilját a(z) <xliff:g id="ORGANIZATION">%1$s</xliff:g> felügyeli. Csatlakoztatva van hozzá a(z) <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> alkalmazás, amely figyelheti az Ön hálózati tevékenységét, beleértve az e-maileket, az alkalmazásokat és a webhelyeket.\n\nCsatlakoztatta továbbá a(z) <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> alkalmazást, amely szintén figyelemmel kísérheti személyes hálózati tevékenységét."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Eszközét a következő felügyeli: <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nA rendszergazda figyelemmel kísérheti és módosíthatja beállításait, vállalati hozzáféréseit, alkalmazásait, az eszközéhez társított adatokat és eszköze helyadatait.\n\nÖn a következőhöz csatlakozik: <xliff:g id="APPLICATION">%2$s</xliff:g>, amely (az e-mailekre, alkalmazásokra és webhelyekre is kiterjedően) figyelemmel kísérheti hálózati tevékenységét.\n\nTovábbi információért forduljon a rendszergazdához."</string>
@@ -481,7 +483,7 @@
<string name="accessibility_status_bar_hotspot" msgid="4099381329956402865">"Hotspot"</string>
<string name="accessibility_managed_profile" msgid="6613641363112584120">"Munkaprofil"</string>
<string name="tuner_warning_title" msgid="7094689930793031682">"Egyeseknek tetszik, másoknak nem"</string>
- <string name="tuner_warning" msgid="8730648121973575701">"A Kezelőfelület-hangoló az Android felhasználói felületének szerkesztéséhez és testreszabásához nyújt további megoldásokat. Ezek a kísérleti funkciók változhatnak vagy megsérülhetnek a későbbi kiadásokban,illetve eltűnhetnek azokból. Körültekintően járjon el."</string>
+ <string name="tuner_warning" msgid="8730648121973575701">"A Kezelőfelület-hangoló az Android felhasználói felületének szerkesztéséhez és testreszabásához nyújt további megoldásokat. Ezek a kísérleti funkciók változhatnak vagy megsérülhetnek a későbbi kiadásokban, illetve eltűnhetnek azokból. Körültekintően járjon el."</string>
<string name="tuner_persistent_warning" msgid="8597333795565621795">"Ezek a kísérleti funkciók változhatnak vagy megsérülhetnek a későbbi kiadásokban, illetve eltűnhetnek azokból. Körültekintően járjon el."</string>
<string name="got_it" msgid="2239653834387972602">"Értem"</string>
<string name="tuner_toast" msgid="603429811084428439">"Gratulálunk! A Kezelőfelület-hangolót hozzáadtuk a Beállításokhoz"</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Másodpercek megjelenítése az állapotsor óráján. Ez hatással lehet az akkumulátor üzemidejére."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Gyorsbeállítások átrendezése"</string>
<string name="show_brightness" msgid="6613930842805942519">"Fényerő megjelenítése a gyorsbeállításokban"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Képernyőfelosztó gyors felfelé csúsztatás engedélyezése"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Kézmozdulat engedélyezése osztott képernyős nézet aktiválásához, ha az Áttekintés gombról felfelé húzza az ujját"</string>
<string name="experimental" msgid="6198182315536726162">"Kísérleti"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Engedélyezi a Bluetooth-kapcsolatot?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Ha a billentyűzetet csatlakoztatni szeretné táblagépéhez, először engedélyeznie kell a Bluetooth-kapcsolatot."</string>
diff --git a/packages/SystemUI/res/values-hy-rAM/strings.xml b/packages/SystemUI/res/values-hy-rAM/strings.xml
index d0d6c50..99b5f52 100644
--- a/packages/SystemUI/res/values-hy-rAM/strings.xml
+++ b/packages/SystemUI/res/values-hy-rAM/strings.xml
@@ -32,7 +32,7 @@
<string name="status_bar_no_notifications_title" msgid="4755261167193833213">"Ծանուցումներ չկան"</string>
<string name="status_bar_ongoing_events_title" msgid="1682504513316879202">"Ընթացիկ"</string>
<string name="status_bar_latest_events_title" msgid="6594767438577593172">"Ծանուցումներ"</string>
- <string name="battery_low_title" msgid="6456385927409742437">"Մարտկոցը լիցքաթափվում է"</string>
+ <string name="battery_low_title" msgid="6456385927409742437">"Մարտկոցի լիցքը սպառվում է"</string>
<string name="battery_low_percent_format" msgid="2900940511201380775">"Մնաց <xliff:g id="PERCENTAGE">%s</xliff:g>"</string>
<string name="battery_low_percent_format_saver_started" msgid="6859235584035338833">"Մնաց <xliff:g id="PERCENTAGE">%s</xliff:g>: Մարտկոցի տնտեսումը միացված է:"</string>
<string name="invalid_charger" msgid="4549105996740522523">"USB լիցքավորումը չի աջակցվում:\nՕգտվեք միայն գործող լիցքավորիչից:"</string>
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Ցանցը կարող է վերահսկվել"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Դուք կապակցված եք <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Ցույց տալ ժամացույցի վայրկյանները կարգավիճակի տողում: Կարող է ազդել մարտկոցի աշխատանքի ժամանակի վրա:"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Վերադասավորել Արագ կարգավորումները"</string>
<string name="show_brightness" msgid="6613930842805942519">"Ցույց տալ պայծառությունն Արագ կարգավորումներում"</string>
- <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>
diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml
index ad24d6a..4591758 100644
--- a/packages/SystemUI/res/values-in/strings.xml
+++ b/packages/SystemUI/res/values-in/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Perangkat mungkin dipantau"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil dapat dipantau"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Jaringan mungkin dipantau"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Jaringan mungkin dipantau"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Pemantauan perangkat"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Pemantauan profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Pemantauan jaringan"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi, termasuk email, aplikasi, dan situs web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Anda tersambung ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi, termasuk email, aplikasi, dan situs web.."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g> dan tersambung ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan kerja, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profil kerja dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g> dan tersambung ke <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan kerja, termasuk email, aplikasi, dan situs web.\n\nAnda juga tersambung ke <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, yang dapat memantau aktivitas jaringan pribadi."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Perangkat dikelola oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator dapat memantau dan mengelola setelan, akses perusahaan, aplikasi, data terkait perangkat, dan informasi lokasi perangkat.\n\nAnda tersambung ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang dapat memantau aktivitas jaringan, termasuk email, aplikasi, dan situs web.\n\nUntuk informasi selengkapnya, hubungi administrator."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Tampilkan detik jam di bilah status. Dapat memengaruhi masa pakai baterai."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Atur Ulang Setelan Cepat"</string>
<string name="show_brightness" msgid="6613930842805942519">"Tampilkan kecerahan di Setelan Cepat"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktifkan isyarat gesek atas untuk layar terpisah"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktifkan isyarat untuk masuk layar terpisah dengan menggesek tombol Ringkasan ke atas"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Aktifkan Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Untuk menghubungkan keyboard dengan tablet, terlebih dahulu aktifkan Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-is-rIS/strings.xml b/packages/SystemUI/res/values-is-rIS/strings.xml
index a95e28b..117652d 100644
--- a/packages/SystemUI/res/values-is-rIS/strings.xml
+++ b/packages/SystemUI/res/values-is-rIS/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Hugsanlega er fylgst með tækjum"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Hugsanlega er fylgst með þessu sniði"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Hugsanlega er fylgst með netinu"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Hugsanlega er fylgst með netinu"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Tækjaeftirlit"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Fylgst með sniði"</string>
<string name="monitoring_title" msgid="169206259253048106">"Neteftirlit"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Þú ert með tengingu við <xliff:g id="APPLICATION">%1$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni, þ. á m. tölvupósti, forritum og vefsvæðum."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Það er tengt <xliff:g id="APPLICATION">%2$s</xliff:g>, sem getur fylgst með vinnutengdri netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Vinnusniðinu þínu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Það er tengt <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, sem getur fylgst með vinnutengdri netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nÞú ert einnig með tengingu við <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, sem getur fylgst með persónulegri netnotkun þinni."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Tækinu er stjórnað af <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nKerfisstjórinn þinn getur fylgst með og stjórnað stillingum, fyrirtækjaaðgangi, forritum, gögnum sem tengd eru tækinu og staðsetningarupplýsingum tækisins.\n\nÞú ert með tengingu við <xliff:g id="APPLICATION">%2$s</xliff:g>, sem getur fylgst með netnotkun þinni, þar á meðal tölvupósti, forritum og vefsvæðum.\n\nHafðu samband við kerfisstjórann til að fá frekari upplýsingar."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Sýna sekúndur á klukku í stöðustikunni. Getur haft áhrif á endingu rafhlöðu."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Endurraða flýtistillingum"</string>
<string name="show_brightness" msgid="6613930842805942519">"Sýna birtustig í flýtistillingum"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Virkja skjáskiptingu með því að strjúka upp"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Virkja skjáskiptingarbendingu með því að strjúka upp frá yfirlitshnappi"</string>
<string name="experimental" msgid="6198182315536726162">"Tilraunastillingar"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Kveikja á Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Til að geta tengt lyklaborðið við spjaldtölvuna þarftu fyrst að kveikja á Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml
index d370b65..ed27f8a 100644
--- a/packages/SystemUI/res/values-it/strings.xml
+++ b/packages/SystemUI/res/values-it/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Il dispositivo potrebbe essere monitorato"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Il profilo potrebbe essere monitorato"</string>
<string name="vpn_footer" msgid="2388611096129106812">"La rete potrebbe essere monitorata"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"La rete potrebbe essere monitorata"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitoraggio del dispositivo"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoraggio del profilo"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitoraggio rete"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Sei connesso a <xliff:g id="APPLICATION">%1$s</xliff:g>, da cui è possibile monitorare la tua attività di rete, inclusi email, app e siti web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Sei connesso a <xliff:g id="APPLICATION">%1$s</xliff:g>, da cui è possibile monitorare la tua attività di rete personale, inclusi email, app e siti web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Sei collegato a <xliff:g id="APPLICATION">%1$s</xliff:g>, che consente di monitorare la tua attività di rete personale, inclusi siti web, email e app."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>. È connesso a <xliff:g id="APPLICATION">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete lavorativa, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta il tuo amministratore."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Il tuo profilo di lavoro è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>. È connesso a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete lavorativa, inclusi email, app e siti web.\n\nSei connesso anche a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, da cui è possibile monitorare la tua attività di rete personale."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Il tuo dispositivo è gestito da <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nL\'amministratore può monitorare e gestire impostazioni, accesso aziendale, app e dati associati al dispositivo, incluse le informazioni sulla posizione del dispositivo.\n\nSei connesso a <xliff:g id="APPLICATION">%2$s</xliff:g>, da cui è possibile monitorare la tua attività di rete, inclusi email, app e siti web.\n\nPer ulteriori informazioni, contatta l\'amministratore."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Mostra i secondi nell\'orologio nella barra di stato. Ciò potrebbe ridurre la durata della carica della batteria."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Riorganizza Impostazioni rapide"</string>
<string name="show_brightness" msgid="6613930842805942519">"Mostra luminosità in Impostazioni rapide"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Attiva Schermo diviso mediante scorrimento verso l\'alto"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Consente di attivare la modalità Schermo diviso scorrendo verso l\'alto dal pulsante Panoramica"</string>
<string name="experimental" msgid="6198182315536726162">"Sperimentali"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Attivare il Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Per connettere la tastiera al tablet, devi prima attivare il Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml
index 4cf48c2..e82a479 100644
--- a/packages/SystemUI/res/values-iw/strings.xml
+++ b/packages/SystemUI/res/values-iw/strings.xml
@@ -408,6 +408,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"ייתכן שהרשת מנוטרת"</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>
@@ -420,6 +421,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"אתה מחובר לאפליקציה <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>
@@ -496,8 +498,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"הצג שניות בשעון בשורת הסטטוס. פעולה זו עשויה להשפיע על אורך חיי הסוללה."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"סידור מחדש של הגדרות מהירות"</string>
<string name="show_brightness" msgid="6613930842805942519">"הצג בהירות בהגדרות מהירות"</string>
- <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>
diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml
index c42e346..f3f5cd5 100644
--- a/packages/SystemUI/res/values-ja/strings.xml
+++ b/packages/SystemUI/res/values-ja/strings.xml
@@ -406,6 +406,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"ネットワークが監視されている可能性があります"</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>
@@ -418,6 +419,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"「<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>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"ステータスバーに時計の秒を表示します。電池使用量に影響する可能性があります。"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"クイック設定を並べ替え"</string>
<string name="show_brightness" msgid="6613930842805942519">"クイック設定に明るさ調整バーを表示する"</string>
- <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をONにしますか?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"タブレットでキーボードに接続するには、最初にBluetoothをONにする必要があります。"</string>
diff --git a/packages/SystemUI/res/values-ka-rGE/strings.xml b/packages/SystemUI/res/values-ka-rGE/strings.xml
index 6ddcde8..5743bc8 100644
--- a/packages/SystemUI/res/values-ka-rGE/strings.xml
+++ b/packages/SystemUI/res/values-ka-rGE/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"ქსელზე შესაძლოა მონიტორინგი ხორციელდებოდეს"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"თქვენ დაუკავშირდით <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"საათის წამების ჩვენება სტატუსის ზოლში. შეიძლება გავლენა იქონიოს ბატარეაზე."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"სწრაფი პარამეტრების გადაწყობა"</string>
<string name="show_brightness" msgid="6613930842805942519">"სიკაშკაშის ჩვენება სწრაფ პარამეტრებში"</string>
- <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>
diff --git a/packages/SystemUI/res/values-kk-rKZ/strings.xml b/packages/SystemUI/res/values-kk-rKZ/strings.xml
index 2c444e4..7338127 100644
--- a/packages/SystemUI/res/values-kk-rKZ/strings.xml
+++ b/packages/SystemUI/res/values-kk-rKZ/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Желі бақылауда болуы мүмкін"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Жеке желідегі әрекеттеріңізді, соның ішінде электрондық пошта хабарларын, қолданбаларды және веб-сайттарды бақылай алатын <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Күйін көрсету жолағында сағат секундтарын көрсету. Батареяның қызмет көрсету мерзіміне әсер етуі мүмкін."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Жылдам параметрлерді қайта реттеу"</string>
<string name="show_brightness" msgid="6613930842805942519">"Жылдам параметрлерде жарықтықты көрсету"</string>
- <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>
diff --git a/packages/SystemUI/res/values-km-rKH/strings.xml b/packages/SystemUI/res/values-km-rKH/strings.xml
index 0db7abc..0e58b12 100644
--- a/packages/SystemUI/res/values-km-rKH/strings.xml
+++ b/packages/SystemUI/res/values-km-rKH/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"បណ្ដាញអាចត្រូវបានត្រួតពិនិត្យ"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"អ្នកត្រូវបានភ្ជាប់ទៅ <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"បង្ហាញវិនាទីនៅលើរបារស្ថានភាពអាចនឹងប៉ះពាល់ដល់ថាមពលថ្ម។"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"រៀបចំការកំណត់រហ័សឡើងវិញ"</string>
<string name="show_brightness" msgid="6613930842805942519">"បង្ហាញកម្រិតពន្លឺនៅក្នុងការកំណត់រហ័ស"</string>
- <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">"បើកប៊្លូធូសឬ?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"ដើម្បីភ្ជាប់ក្តារចុចរបស់អ្នកជាមួយនឹងថេប្លេតរបស់អ្នក អ្នកត្រូវតែបើកប៊្លូធូសជាមុនសិន។"</string>
diff --git a/packages/SystemUI/res/values-kn-rIN/strings.xml b/packages/SystemUI/res/values-kn-rIN/strings.xml
index c62a8db..ea29900 100644
--- a/packages/SystemUI/res/values-kn-rIN/strings.xml
+++ b/packages/SystemUI/res/values-kn-rIN/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"ನೆಟ್ವರ್ಕ್ ಅನ್ನು ವೀಕ್ಷಿಸಬಹುದಾಗಿರುತ್ತದೆ"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ನೀವು ಇಮೇಲ್ಗಳು, ಅಪ್ಲಿಕೇಶನ್ಗಳು, ಮತ್ತು ವೆಬ್ಸೈಟ್ಗಳನ್ನು ಒಳಗೊಂಡಂತೆ ನಿಮ್ಮ ವೈಯಕ್ತಿಕ ನೆಟ್ವರ್ಕ್ ಚಟುವಟಿಕೆಯ ಮೇಲ್ವಿಚಾರಣೆ ಮಾಡಬಹುದಾದ <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"ಸ್ಥಿತಿ ಪಟ್ಟಿಯಲ್ಲಿ ಗಡಿಯಾರ ಸೆಕೆಂಡುಗಳನ್ನು ತೋರಿಸು. ಇದಕ್ಕೆ ಬ್ಯಾಟರಿ ಬಾಳಿಕೆಯು ಪರಿಣಾಮಬೀರಬಹುದು."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಮರುಹೊಂದಿಸಿ"</string>
<string name="show_brightness" msgid="6613930842805942519">"ತ್ವರಿತ ಸೆಟ್ಟಿಂಗ್ಗಳಲ್ಲಿ ಪ್ರಖರತೆಯನ್ನು ತೋರಿಸಿ"</string>
- <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">"ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡುವುದೇ?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"ನಿಮ್ಮ ಕೀಬೋರ್ಡ್ ಅನ್ನು ಟ್ಯಾಬ್ಲೆಟ್ಗೆ ಸಂಪರ್ಕಿಸಲು, ನೀವು ಮೊದಲು ಬ್ಲೂಟೂತ್ ಆನ್ ಮಾಡಬೇಕಾಗುತ್ತದೆ."</string>
diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml
index 3c08e92..04e1132 100644
--- a/packages/SystemUI/res/values-ko/strings.xml
+++ b/packages/SystemUI/res/values-ko/strings.xml
@@ -406,6 +406,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"네트워크가 모니터링될 수 있음"</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>
@@ -418,6 +419,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<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>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"상태 표시줄에 시계 초 단위를 표시합니다. 배터리 수명에 영향을 줄 수도 있습니다."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"빠른 설정 재정렬"</string>
<string name="show_brightness" msgid="6613930842805942519">"빠른 설정에서 밝기 표시"</string>
- <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">"블루투스를 켜시겠습니까?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"키보드를 태블릿에 연결하려면 먼저 블루투스를 켜야 합니다."</string>
diff --git a/packages/SystemUI/res/values-ky-rKG/strings.xml b/packages/SystemUI/res/values-ky-rKG/strings.xml
index 7645b93..3f66b87 100644
--- a/packages/SystemUI/res/values-ky-rKG/strings.xml
+++ b/packages/SystemUI/res/values-ky-rKG/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Тармак тинтилиши мүмкүн"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Электрондук почта, колдонмолор жана вебсайттар сыяктуу тармактагы жеке аракеттериңизди тескей турган <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Сиз электрондук почталар, колдонмолор жана вебсайттар сыяктуу тармактагы аракеттериңизди тармактагы аракетиңизди тескей турган APPLICATION колдонмосуна туташып турасыз.\n<xliff:g id="APPLICATION">%2$s</xliff:g>Көбүрөөк маалымат алуу үчүн, администраторуңузга кайрылыңыз.\n\n"</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Абал тилкесинен сааттын секунддары көрсөтүлсүн. Батареянын кубаты көбүрөөк сарпталышы мүмкүн."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Ыкчам жөндөөлөрдү кайра коюу"</string>
<string name="show_brightness" msgid="6613930842805942519">"Ыкчам жөндөөлөрдөн жарык деңгээлин көрсөтүү"</string>
- <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>
diff --git a/packages/SystemUI/res/values-lo-rLA/strings.xml b/packages/SystemUI/res/values-lo-rLA/strings.xml
index 6b1fca8..54855af 100644
--- a/packages/SystemUI/res/values-lo-rLA/strings.xml
+++ b/packages/SystemUI/res/values-lo-rLA/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"ການນຳໃຊ້ເຄືອຂ່າຍອາດມີການກວດສອບຕິດຕາມ"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ທ່ານເຊື່ອມຕໍ່ກັບ <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"ສະແດງວິນາທີໂມງຢູ່ໃນແຖບສະຖານະ. ອາດຈະມີຜົນກະທົບຕໍ່ອາຍຸແບັດເຕີຣີ."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ຈັດວາງການຕັ້ງຄ່າດ່ວນຄືນໃໝ່"</string>
<string name="show_brightness" msgid="6613930842805942519">"ສະແດງຄວາມແຈ້ງຢູ່ໃນການຕັ້ງຄ່າດ່ວນ"</string>
- <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>
diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml
index 46e50fb..a76a6c5 100644
--- a/packages/SystemUI/res/values-lt/strings.xml
+++ b/packages/SystemUI/res/values-lt/strings.xml
@@ -408,6 +408,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Įrenginys gali būti stebimas"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilis gali būti stebimas"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Tinklas gali būti stebimas"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Tinklas gali būti stebimas"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Įrenginio stebėjimas"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilio stebėjimas"</string>
<string name="monitoring_title" msgid="169206259253048106">"Tinklo stebėjimas"</string>
@@ -420,6 +421,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti asmeninio profilio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Esate prisijungę prie programos „<xliff:g id="APPLICATION">%1$s</xliff:g>“, kuri gali stebėti asmeninio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“. Jis susietas su programa „<xliff:g id="APPLICATION">%2$s</xliff:g>“, kuri gali stebėti darbo profilio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Darbo profilį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“. Jis susietas su programa „<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>“, kuri gali stebėti darbo profilio tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nTaip pat esate prisijungę prie programos „<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>“, kuri gali stebėti asmeninio profilio tinklo veiklą."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Jūsų įrenginį tvarko „<xliff:g id="ORGANIZATION">%1$s</xliff:g>“.\n\nAdministratorius gali stebėti ir tvarkyti nustatymus, įmonės informacijos pasiekiamumo nustatymus, programas, su įrenginiu susietus duomenis ir įrenginio vietovės informaciją.\n\nEsate prisijungę prie programos „<xliff:g id="APPLICATION">%2$s</xliff:g>“, kuri gali stebėti tinklo veiklą, įskaitant el. laiškus, programas ir svetaines.\n\nDaugiau informacijos galite gauti susisiekę su administratoriumi."</string>
@@ -496,8 +498,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Rodyti laikrodžio sekundes būsenos juostoje. Tai gali paveikti akumuliatoriaus naudojimo laiką."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Pertvarkyti sparčiuosius nustatymus"</string>
<string name="show_brightness" msgid="6613930842805942519">"Rodyti skaistį sparčiuosiuose nustatymuose"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Įgalinti ekrano skaidymo perbraukimo aukštyn gestą"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Įgalinti gestą, kuriuo galima įjungti skaidytą ekraną, perbraukiant aukštyn nuo apžvalgos mygtuko"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimentinė versija"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Įjungti „Bluetooth“?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Kad galėtumėte prijungti klaviatūrą prie planšetinio kompiuterio, pirmiausia turite įjungti „Bluetooth“."</string>
diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml
index 9efad2e..6f430b7 100644
--- a/packages/SystemUI/res/values-lv/strings.xml
+++ b/packages/SystemUI/res/values-lv/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Ierīci var pārraudzīt"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilu var pārraudzīt"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Iespējams, tīklā veiktās darbības tiek pārraudzītas."</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Var tikt pārraudzītas tīklā veiktās darbības."</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Ierīces pārraudzība"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profila pārraudzība"</string>
<string name="monitoring_title" msgid="169206259253048106">"Tīkla pārraudzība"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās privātās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ir izveidots savienojums ar lietotni <xliff:g id="APPLICATION">%1$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās privātās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Tas ir saistīts ar lietojumprogrammu <xliff:g id="APPLICATION">%2$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Jūsu darba profilu pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Tas ir saistīts ar lietojumprogrammu <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, kura var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nIr piesaistīta arī lietojumprogramma <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās privātās darbības."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Jūsu ierīci pārvalda <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJūsu administrators var pārraudzīt un pārvaldīt iestatījumus, korporatīvo piekļuvi, lietotnes un datus, kas ir saistīti ar šo ierīci, kā arī informāciju par jūsu ierīces atrašanās vietu.\n\nIr piesaistīta lietojumprogramma <xliff:g id="APPLICATION">%2$s</xliff:g>, kas var pārraudzīt jūsu tīklā veiktās darbības, tostarp e-pasta ziņojumus, lietotnes un vietnes.\n\nLai iegūtu plašāku informāciju, sazinieties ar administratoru."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Statusa joslā rādīt pulksteņa sekundes. Var ietekmēt akumulatora darbības laiku."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Pārkārtot ātros iestatījumus"</string>
<string name="show_brightness" msgid="6613930842805942519">"Rādīt spilgtumu ātrajos iestatījumos"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Iespējot vilkšanu augšup, lai sadalītu ekrānu"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Iespējot žestu ekrāna sadalīšanai, velkot augšup no pogas Pārskats"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimentāli"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Vai ieslēgt Bluetooth savienojumu?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Lai pievienotu tastatūru planšetdatoram, vispirms ir jāieslēdz Bluetooth savienojums."</string>
diff --git a/packages/SystemUI/res/values-mk-rMK/strings.xml b/packages/SystemUI/res/values-mk-rMK/strings.xml
index 549543d..68a8fc1 100644
--- a/packages/SystemUI/res/values-mk-rMK/strings.xml
+++ b/packages/SystemUI/res/values-mk-rMK/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Мрежата може да се следи"</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>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"ВПН"</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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Поврзани сте на <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Прикажи ги секундите на часовникот на статусната лента. Може да влијае на траењето на батеријата."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Преуредете ги Брзи поставки"</string>
<string name="show_brightness" msgid="6613930842805942519">"Прикажете ја осветленоста во Брзи поставки"</string>
- <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>
diff --git a/packages/SystemUI/res/values-ml-rIN/strings.xml b/packages/SystemUI/res/values-ml-rIN/strings.xml
index 9f596b8..ecb664e 100644
--- a/packages/SystemUI/res/values-ml-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ml-rIN/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"നെറ്റ്വർക്ക് നിരീക്ഷിക്കപ്പെടാം"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"നിങ്ങൾ <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"സ്റ്റാറ്റസ് ബാറിൽ ക്ലോക്ക് സെക്കൻഡ് കാണിക്കുന്നത് ബാറ്ററിയുടെ ലൈഫിനെ ബാധിക്കാം."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ദ്രുത ക്രമീകരണം പുനഃസജ്ജീകരിക്കുക"</string>
<string name="show_brightness" msgid="6613930842805942519">"ദ്രുത ക്രമീകരണത്തിൽ തെളിച്ചം കാണിക്കുക"</string>
- <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>
diff --git a/packages/SystemUI/res/values-mn-rMN/strings.xml b/packages/SystemUI/res/values-mn-rMN/strings.xml
index f3a2f08..f55d6ed 100644
--- a/packages/SystemUI/res/values-mn-rMN/strings.xml
+++ b/packages/SystemUI/res/values-mn-rMN/strings.xml
@@ -402,6 +402,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Сүлжээг хянаж байж болзошгүй"</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>
@@ -414,6 +415,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Та имэйл, апп, вэб хуудас зэрэг хувийн сүлжээнийхээ үйл ажиллагааг хянах боломжтой <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Статус талбарт цагийн секундыг харуулах. Энэ нь тэжээлийн цэнэгт нөлөөлж болно."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Түргэн тохиргоог дахин засварлах"</string>
<string name="show_brightness" msgid="6613930842805942519">"Түргэн тохиргоонд гэрэлтүүлэг харах"</string>
- <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>
@@ -505,14 +505,14 @@
<string name="tuner_full_importance_settings" msgid="3207312268609236827">"Тэжээлийн мэдэгдлийн удирдлага"</string>
<string name="tuner_full_importance_settings_on" msgid="7545060756610299966">"Идэвхтэй"</string>
<string name="tuner_full_importance_settings_off" msgid="8208165412614935229">"Идэвхгүй"</string>
- <string name="power_notification_controls_description" msgid="4372459941671353358">"Тэжээлийн мэдэгдлийн удирдлагын тусламжтайгаар та апп-н мэдэгдэлд 0-5 хүртэлх ач холбогдлын төвшин тогтоох боломжтой. \n\n"<b>"5-р төвшин"</b>" \n- Мэдэгдлийн жагсаалтын хамгийн дээр харуулна \n- Бүтэн дэлгэцэд саад болно \n- Дэлгэцэд тогтмол гарч ирнэ \n\n"<b>"4-р төвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд тогтмол гарч ирнэ \n\n"<b>"3-р төвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд хэзээ ч гарч ирэхгүй \n\n"<b>"2-р төвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд хэзээ ч гарч ирэхгүй \n- Дуу болон чичиргээ хэзээ ч гаргахгүй \n\n"<b>"1-р төвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд хэзээ ч гарч ирэхгүй \n- Дуу болон чичиргээ хэзээ ч гаргахгүй \n- Түгжигдсэн дэлгэц болон статусын самбараас нууна \n- Мэдэгдлийн жагсаалтын доор харуулна \n\n"<b>"0-р төвшин"</b>" \n- Энэ апп-н бүх мэдэгдлийг блоклоно"</string>
+ <string name="power_notification_controls_description" msgid="4372459941671353358">"Тэжээлийн мэдэгдлийн удирдлагын тусламжтайгаар та апп-н мэдэгдэлд 0-5 хүртэлх ач холбогдлын түвшин тогтоох боломжтой. \n\n"<b>"5-р түвшин"</b>" \n- Мэдэгдлийн жагсаалтын хамгийн дээр харуулна \n- Бүтэн дэлгэцэд саад болно \n- Дэлгэцэд тогтмол гарч ирнэ \n\n"<b>"4-р түвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд тогтмол гарч ирнэ \n\n"<b>"3-р түвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд хэзээ ч гарч ирэхгүй \n\n"<b>"2-р түвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд хэзээ ч гарч ирэхгүй \n- Дуу болон чичиргээ хэзээ ч гаргахгүй \n\n"<b>"1-р түвшин"</b>" \n- Бүтэн дэлгэцэд саад болохоос сэргийлнэ \n- Дэлгэцэд хэзээ ч гарч ирэхгүй \n- Дуу болон чичиргээ хэзээ ч гаргахгүй \n- Түгжигдсэн дэлгэц болон статусын самбараас нууна \n- Мэдэгдлийн жагсаалтын доор харуулна \n\n"<b>"0-р түвшин"</b>" \n- Энэ апп-н бүх мэдэгдлийг блоклоно"</string>
<string name="user_unspecified_importance" msgid="361613856933432117">"Ач холбогдол: Автомат"</string>
- <string name="blocked_importance" msgid="5035073235408414397">"Ач холбогдол: 0-р төвшин"</string>
- <string name="min_importance" msgid="560779348928574878">"Ач холбогдол: 1-р төвшин"</string>
- <string name="low_importance" msgid="7571498511534140">"Ач холбогдол: 2-р төвшин"</string>
- <string name="default_importance" msgid="7609889614553354702">"Ач холбогдол: 3-р төвшин"</string>
- <string name="high_importance" msgid="3441537905162782568">"Ач холбогдол: 4-р төвшин"</string>
- <string name="max_importance" msgid="4880179829869865275">"Ач холбогдол: 5-р төвшин"</string>
+ <string name="blocked_importance" msgid="5035073235408414397">"Ач холбогдол: 0-р түвшин"</string>
+ <string name="min_importance" msgid="560779348928574878">"Ач холбогдол: 1-р түвшин"</string>
+ <string name="low_importance" msgid="7571498511534140">"Ач холбогдол: 2-р түвшин"</string>
+ <string name="default_importance" msgid="7609889614553354702">"Ач холбогдол: 3-р түвшин"</string>
+ <string name="high_importance" msgid="3441537905162782568">"Ач холбогдол: 4-р түвшин"</string>
+ <string name="max_importance" msgid="4880179829869865275">"Ач холбогдол: 5-р түвшин"</string>
<string name="notification_importance_user_unspecified" msgid="2868359605125272874">"Апп нь мэдэгдэл бүрийн ач холбогдлыг тодорхойлдог."</string>
<string name="notification_importance_blocked" msgid="4237497046867398057">"Энэ апп-н мэдэгдлийг хэзээ ч бүү харуул."</string>
<string name="notification_importance_min" msgid="7844224511187027155">"Бүтэн дэлгэцэд саадгүй, гарч ирэхгүй, дуугүй, чичиргээгүй. Түгжигдсэн дэлгэц, статусын хэсгээс нуух."</string>
diff --git a/packages/SystemUI/res/values-mr-rIN/strings.xml b/packages/SystemUI/res/values-mr-rIN/strings.xml
index e5c6410..8cf182bf 100644
--- a/packages/SystemUI/res/values-mr-rIN/strings.xml
+++ b/packages/SystemUI/res/values-mr-rIN/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"नेटवर्कचे परीक्षण केले जाऊ शकते"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"आपण <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"स्टेटस बारमध्ये घड्याळ सेकंद दर्शवा. कदाचित बॅटरी आयुष्य प्रभावित होऊ शकते."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"द्रुत सेटिंग्जची पुनर्रचना करा"</string>
<string name="show_brightness" msgid="6613930842805942519">"द्रुत सेटिंग्जमध्ये चमक दर्शवा"</string>
- <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">"ब्लूटुथ सुरू करायचे?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"आपला कीबोर्ड आपल्या टॅब्लेटसह कनेक्ट करण्यासाठी, आपल्याला प्रथम ब्लूटुथ चालू करणे आवश्यक आहे."</string>
diff --git a/packages/SystemUI/res/values-ms-rMY/strings.xml b/packages/SystemUI/res/values-ms-rMY/strings.xml
index 7c543a6..c4b9060 100644
--- a/packages/SystemUI/res/values-ms-rMY/strings.xml
+++ b/packages/SystemUI/res/values-ms-rMY/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Peranti mungkin dipantau"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil mungkin dipantau"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Rangkaian mungkin dipantau"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Rangkaian mungkin dipantau"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Pemantauan peranti"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Pemantauan profil"</string>
<string name="monitoring_title" msgid="169206259253048106">"Pemantauan rangkaian"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda, termasuk e-mel, apl dan tapak web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Anda disambungkan ke <xliff:g id="APPLICATION">%1$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda, termasuk e-mel, apl dan tapak web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil ini disambungkan ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian kerja anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, sila hubungi pentadbir anda."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profil kerja anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil disambungkan ke <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian kerja anda, termasuk e-mel, apl dan tapak web.\n\nAnda turut disambungkan ke <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, yang boleh memantau aktiviti rangkaian peribadi anda."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Peranti anda diurus oleh <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nPentadbir anda boleh memantau dan mengurus tetapan, akses korporat, apl, data yang dikaitkan dengan peranti anda serta maklumat lokasi peranti anda.\n\nAnda disambungkan ke <xliff:g id="APPLICATION">%2$s</xliff:g>, yang boleh memantau aktiviti rangkaian anda, termasuk e-mel, apl dan tapak web.\n\nUntuk mendapatkan maklumat lanjut, hubungi pentadbir anda."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Tunjukkan saat jam dalam bar status. Mungkin menjejaskan hayat bateri."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Susun Semula Tetapan Pantas"</string>
<string name="show_brightness" msgid="6613930842805942519">"Tunjukkan kecerahan dalam Tetapan Pantas"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Dayakan gerak isyarat leret ke atas utk masuk skrin terpisah"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Dayakan gerak isyarat untuk memasuki skrin terpisah dengan meleret ke atas daripada butang Ikhtisar"</string>
<string name="experimental" msgid="6198182315536726162">"Percubaan"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Hidupkan Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Untuk menyambungkan papan kekunci anda dengan tablet, anda perlu menghidupkan Bluetooth terlebih dahulu."</string>
diff --git a/packages/SystemUI/res/values-my-rMM/strings.xml b/packages/SystemUI/res/values-my-rMM/strings.xml
index 56a7249..62b7ad6 100644
--- a/packages/SystemUI/res/values-my-rMM/strings.xml
+++ b/packages/SystemUI/res/values-my-rMM/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"ကွန်ရက်ကို စောင့်ကြည့်စစ်ဆေးမှု ရှိနိုင်ပါသည်"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"သင်သည် အီးမေးလ်၊ အက်ပ်နှင့် ဝဘ်ဆိုက်များအပါအဝင် သင့်ကိုယ်ရေးကိုယ်တာ ကွန်ရက်အသုံးပြုမှုကို စောင့်ကြည့်နိုင်သည့် <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"အခြေအနေပြနေရာမှာ နာရီ စက္ကန့်များကို ပြပါ။ ဘက်ထရီ သက်တမ်းကို အကျိုးသက်ရောက်နိုင်တယ်။"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"အမြန် ဆက်တင်များကို ပြန်စီစဉ်ရန်"</string>
<string name="show_brightness" msgid="6613930842805942519">"အမြန် ဆက်တင်များထဲက တောက်ပမှုကို ပြရန်"</string>
- <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">"ဘလူးတုသ် ဖွင့်ရမလား။"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"ကီးဘုတ်ကို တပ်ဘလက်နှင့် ချိတ်ဆက်ရန်၊ ပမထဦးစွာ ဘလူးတုသ်ကို ဖွင့်ပါ။"</string>
diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml
index 3efdd3e..6406a14 100644
--- a/packages/SystemUI/res/values-nb/strings.xml
+++ b/packages/SystemUI/res/values-nb/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Enheten kan være overvåket"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilen kan overvåkes"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Nettverket kan være overvåket"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Nettverket kan bli overvåket"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Enhetsovervåking"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilovervåking"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nettverksovervåking"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Enheten er koblet til <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din, inkludert e-post, apper og nettsteder."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er koblet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din på jobben, inkludert e-post, apper og nettsteder.\n\nFor å få mer informasjon, ta kontakt med administratoren."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Work-profilen din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den er koblet til <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din på jobben, inkludert e-post, apper og nettsteder.\n\nDu er også koblet til <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan overvåke den personlige nettverksaktiviteten din."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Enheten din administreres av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratoren din kan overvåke og administrere innstillinger, bedriftstilgang, apper, data tilknyttet enheten din og enhetens posisjonsinformasjon.\n\nDu er koblet til <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan overvåke nettverksaktiviteten din, inkludert e-post, apper og nettsteder.\n\nFor mer informasjon, ta kontakt med administratoren."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Vis sekunder i statusfeltet på klokken. Det kan påvirke batteritiden."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Omorganiser hurtiginnstillingene"</string>
<string name="show_brightness" msgid="6613930842805942519">"Vis lysstyrke i hurtiginnstillingene"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Slå på delt skjerm ved å sveipe opp"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Slå på bevegelsen for å åpne delt skjerm ved å sveipe opp fra Oversikt-knappen"</string>
<string name="experimental" msgid="6198182315536726162">"På forsøksstadiet"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Vil du slå på Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"For å koble tastaturet til nettbrettet ditt må du først slå på Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ne-rNP/strings.xml b/packages/SystemUI/res/values-ne-rNP/strings.xml
index 07d0795..4e1ec08 100644
--- a/packages/SystemUI/res/values-ne-rNP/strings.xml
+++ b/packages/SystemUI/res/values-ne-rNP/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"नेटवर्कको अनुगमन गरिने सम्भावना छ"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"तपाईं <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"वस्तुस्थिति पट्टीको घडीमा सेकेन्ड देखाउनुहोस्। ब्याट्री आयु प्रभावित हुन सक्छ।"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"द्रुत सेटिङहरू पुनः व्यवस्थित गर्नुहोस्"</string>
<string name="show_brightness" msgid="6613930842805942519">"द्रुत सेटिङहरूमा उज्यालो देखाउनुहोस्"</string>
- <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">"ब्लुटुथ सक्रिय पार्ने हो?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"आफ्नो ट्याब्लेटसँग किबोर्ड जोड्न, पहिले तपाईँले ब्लुटुथ सक्रिय गर्नुपर्छ।"</string>
diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml
index 9509229..a1d1e27 100644
--- a/packages/SystemUI/res/values-nl/strings.xml
+++ b/packages/SystemUI/res/values-nl/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Apparaat wordt mogelijk gecontroleerd"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profiel kan worden gecontroleerd"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Netwerk kan worden gecontroleerd"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Netwerk kan worden gecontroleerd"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Apparaatcontrole"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profielcontrole"</string>
<string name="monitoring_title" msgid="169206259253048106">"Netwerkcontrole"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"U bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g>, waarmee je netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"U bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g>, waarmee je persoonlijke netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Je bent verbonden met <xliff:g id="APPLICATION">%1$s</xliff:g>, waarmee je persoonlijke netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Je werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Deze is verbonden met <xliff:g id="APPLICATION">%2$s</xliff:g>, waarmee je werkgerelateerde netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nNeem contact op met je beheerder voor meer informatie."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Je werkprofiel wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Deze is verbonden met <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, waarmee je werkgerelateerde netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nU bent ook verbonden met <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, waarmee je persoonlijke netwerkactiviteit kan worden gecontroleerd."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Je apparaat wordt beheerd door <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nJe beheerder kan instellingen, zakelijke toegang, apps, gekoppelde apparaatgegevens en locatiegegevens voor je apparaat controleren en beheren.\n\nU bent verbonden met <xliff:g id="APPLICATION">%2$s</xliff:g> waarmee je netwerkactiviteit kan worden gecontroleerd, inclusief e-mails, apps en websites.\n\nNeem contact op met je beheerder voor meer informatie."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Klokseconden op de statusbalk weergeven. Kan van invloed zijn op de accuduur."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Snelle instellingen opnieuw indelen"</string>
<string name="show_brightness" msgid="6613930842805942519">"Helderheid weergeven in Snelle instellingen"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omhoog vegen voor gesplitst scherm inschakelen"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Gebaar inschakelen om gesplitst scherm te openen door vanaf de knop Overzicht omhoog te vegen"</string>
<string name="experimental" msgid="6198182315536726162">"Experimenteel"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth inschakelen?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Als je je toetsenbord wilt verbinden met je tablet, moet je eerst Bluetooth inschakelen."</string>
diff --git a/packages/SystemUI/res/values-pa-rIN/strings.xml b/packages/SystemUI/res/values-pa-rIN/strings.xml
index 17c1261..d77e517 100644
--- a/packages/SystemUI/res/values-pa-rIN/strings.xml
+++ b/packages/SystemUI/res/values-pa-rIN/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"ਹੋ ਸਕਦਾ ਹੈ ਕਿ ਨੈੱਟਵਰਕ ਦੀ ਨਿਗਰਾਨੀ ਹੋ ਰਹੀ ਹੋਵੇ"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ਤੁਸੀਂ <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"ਸਥਿਤੀ ਬਾਰ ਵਿੱਚ ਘੜੀ ਸਕਿੰਟ ਦਿਖਾਓ। ਬੈਟਰੀ ਸਮਰੱਥਾ ਤੇ ਅਸਰ ਪੈ ਸਕਦਾ ਹੈ।"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਨੂੰ ਦੁਬਾਰਾ ਕ੍ਰਮ ਦਿਓ"</string>
<string name="show_brightness" msgid="6613930842805942519">"ਤਤਕਾਲ ਸੈਟਿੰਗਾਂ ਵਿੱਚ ਚਮਕ ਦਿਖਾਓ"</string>
- <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>
diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml
index c86d26c..7d69a9f 100644
--- a/packages/SystemUI/res/values-pl/strings.xml
+++ b/packages/SystemUI/res/values-pl/strings.xml
@@ -408,6 +408,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Urządzenie może być monitorowane"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil może być monitorowany"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Sieć może być monitorowana"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Sieć może być monitorowana"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitorowanie urządzeń"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorowanie profilu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorowanie sieci"</string>
@@ -420,6 +421,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Masz połączenie z aplikacją <xliff:g id="APPLICATION">%1$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci, w tym e-maile, aplikacje i strony internetowe."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil jest połączony z aplikacją <xliff:g id="APPLICATION">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci związaną z pracą, w tym e-maile, aplikacje i strony internetowe.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Twoim profilem do pracy zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Profil jest połączony z aplikacją <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci związaną z pracą, w tym e-maile, aplikacje i strony internetowe.\n\nMasz też połączenie z aplikacją <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, która może monitorować Twoją prywatną aktywność w sieci."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Twoim urządzeniem zarządza <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministrator może monitorować ustawienia, firmowe uprawnienia dostępu, aplikacje, dane powiązane z urządzeniem i informacje o jego lokalizacji oraz nimi zarządzać.\n\nMasz połączenie z aplikacją <xliff:g id="APPLICATION">%2$s</xliff:g>, która może monitorować Twoją aktywność w sieci, w tym e-maile, aplikacje i strony internetowe.\n\nAby dowiedzieć się więcej, skontaktuj się z administratorem."</string>
@@ -496,8 +498,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Pokaż sekundy na zegarku na pasku stanu. Może mieć wpływ na czas pracy baterii."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Uporządkuj Szybkie ustawienia"</string>
<string name="show_brightness" msgid="6613930842805942519">"Pokaż jasność w Szybkich ustawieniach"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Włącz dzielenie ekranu gestem przesunięcia w górę"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Włącz dzielenie ekranu po wykonaniu gestu przesunięcia palcem w górę od przycisku Przegląd"</string>
<string name="experimental" msgid="6198182315536726162">"Eksperymentalne"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Włączyć Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Aby połączyć klawiaturę z tabletem, musisz najpierw włączyć Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml
index 199dbad..91746f3 100644
--- a/packages/SystemUI/res/values-pt-rBR/strings.xml
+++ b/packages/SystemUI/res/values-pt-rBR/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"O dispositivo pode ser monitorado"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pode ser monitorado"</string>
<string name="vpn_footer" msgid="2388611096129106812">"A rede pode ser monitorada"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"A rede pode ser monitorada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitoramento de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoramento de perfis"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitoramento de rede"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nVocê também está conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorar sua atividade pessoal na rede."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao seu dispositivo e informações sobre localização do dispositivo.\n\nVocê está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Mostrar segundos do relógio na barra de status. Pode afetar a duração da bateria."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar \"Configurações rápidas\""</string>
<string name="show_brightness" msgid="6613930842805942519">"Mostrar brilho nas \"Configurações rápidas\""</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ativar gesto para dividir a tela ao deslizar para cima"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Ativa o gesto para entrar no modo de tela dividida deslizando a partir do botão \"Visão geral\""</string>
<string name="experimental" msgid="6198182315536726162">"Experimentais"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Ativar o Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Para conectar o teclado ao tablet, é preciso primeiro ativar o Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml
index d3d7f24..496e05e 100644
--- a/packages/SystemUI/res/values-pt-rPT/strings.xml
+++ b/packages/SystemUI/res/values-pt-rPT/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"O dispositivo pode ser monitorizado"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pode ser monitorizado"</string>
<string name="vpn_footer" msgid="2388611096129106812">"A rede pode ser monitorizada"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"A rede pode ser monitorizada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitorização de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorização de perfis"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorização da rede"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Está ligado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Websites."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Está ligado ao <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorizar a atividade da rede pessoal, incluindo emails, aplicações e Websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está ligado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"O seu perfil de trabalho é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Está ligado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorizar a atividade da rede de trabalho, incluindo emails, aplicações e Websites.\n\nTambém está ligado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorizar a atividade da rede pessoal."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"O seu dispositivo é gerido por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nO seu administrador pode monitorizar e gerir as definições, o acesso empresarial, as aplicações, os dados associados ao dispositivo e as informações de localização do dispositivo.\n\nEstá ligado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorizar a atividade da rede, incluindo emails, aplicações e Websites.\n\nPara obter mais informações, contacte o administrador."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Mostrar segundos do relógio na barra de estado. Pode afetar a autonomia da bateria."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar as Definições rápidas"</string>
<string name="show_brightness" msgid="6613930842805942519">"Mostrar luminosidade nas Definições rápidas"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ativar gesto de deslize rápido para cima do ecrã dividido"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Ativar o gesto para aceder ao ecrã dividido ao deslizar rapidamente para cima a partir do botão Vista geral"</string>
<string name="experimental" msgid="6198182315536726162">"Experimental"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Pretende ativar o Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Para ligar o teclado ao tablet, tem de ativar primeiro o Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml
index 199dbad..91746f3 100644
--- a/packages/SystemUI/res/values-pt/strings.xml
+++ b/packages/SystemUI/res/values-pt/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"O dispositivo pode ser monitorado"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"O perfil pode ser monitorado"</string>
<string name="vpn_footer" msgid="2388611096129106812">"A rede pode ser monitorada"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"A rede pode ser monitorada"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitoramento de dispositivos"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitoramento de perfis"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitoramento de rede"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Você está conectado a <xliff:g id="APPLICATION">%1$s</xliff:g>, que pode monitorar sua atividade pessoal na rede, incluindo e-mails, apps e websites."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Seu perfil de trabalho é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ele está conectado a <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, que pode monitorar sua atividade profissional na rede, incluindo e-mails, apps e websites.\n\nVocê também está conectado a <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, que pode monitorar sua atividade pessoal na rede."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Seu dispositivo é gerenciado por <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSeu administrador pode monitorar e gerenciar configurações, acesso corporativo, apps, dados associados ao seu dispositivo e informações sobre localização do dispositivo.\n\nVocê está conectado a <xliff:g id="APPLICATION">%2$s</xliff:g>, que pode monitorar suas atividades de rede, incluindo e-mails, apps e websites.\n\nPara ver mais informações, entre em contato com seu administrador."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Mostrar segundos do relógio na barra de status. Pode afetar a duração da bateria."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Reorganizar \"Configurações rápidas\""</string>
<string name="show_brightness" msgid="6613930842805942519">"Mostrar brilho nas \"Configurações rápidas\""</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ativar gesto para dividir a tela ao deslizar para cima"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Ativa o gesto para entrar no modo de tela dividida deslizando a partir do botão \"Visão geral\""</string>
<string name="experimental" msgid="6198182315536726162">"Experimentais"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Ativar o Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Para conectar o teclado ao tablet, é preciso primeiro ativar o Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml
index f59721a..115cf95 100644
--- a/packages/SystemUI/res/values-ro/strings.xml
+++ b/packages/SystemUI/res/values-ro/strings.xml
@@ -408,6 +408,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Dispozitivul poate fi monitorizat"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profilul poate fi monitorizat"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Rețeaua poate fi monitorizată"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Este posibil ca rețeaua să fie monitorizată"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitorizarea dispozitivului"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorizarea profilului"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorizarea rețelei"</string>
@@ -420,6 +421,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Sunteți conectat(ă) la <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Sunteți conectat(ă) la <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua personală, inclusiv e-mailurile, aplicațiile și site-urile."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"V-ați conectat la aplicația <xliff:g id="APPLICATION">%1$s</xliff:g>, care vă poate monitoriza activitatea personală în rețea, inclusiv e-mailurile, aplicațiile și site-urile accesate."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este conectat la <xliff:g id="APPLICATION">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua de serviciu, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profilul de serviciu este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Este conectat la <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua de serviciu, inclusiv e-mailurile, aplicațiile și site-urile.\n\nDe asemenea, sunteți conectat(ă) la <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, care vă poate monitoriza activitatea în rețeaua personală."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Dispozitivul este gestionat de <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratorul poate monitoriza și gestiona setările, accesul la rețeaua companiei, aplicațiile, datele asociate cu dispozitivul și informațiile privind locația dispozitivului.\n\nSunteți conectat(ă) la <xliff:g id="APPLICATION">%2$s</xliff:g>, care vă poate monitoriza activitatea în rețea, inclusiv e-mailurile, aplicațiile și site-urile.\n\nPentru mai multe informații, contactați administratorul."</string>
@@ -496,8 +498,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Afișează secundele pe ceas în bara de stare. Poate afecta autonomia bateriei."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Rearanjați Setările rapide"</string>
<string name="show_brightness" msgid="6613930842805942519">"Afișați luminozitatea în Setările rapide"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Activați gestul de accesare a ecranului împărțit prin glisare în sus"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Activați gestul de accesare a ecranului împărțit prin glisarea în sus de la butonul Recente"</string>
<string name="experimental" msgid="6198182315536726162">"Experimentale"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Activați Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Pentru a conecta tastatura la tabletă, mai întâi trebuie să activați Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml
index bee7eed..f15caf4 100644
--- a/packages/SystemUI/res/values-ru/strings.xml
+++ b/packages/SystemUI/res/values-ru/strings.xml
@@ -410,6 +410,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Сеть может отслеживаться"</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>
@@ -422,6 +423,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Запущено приложение \"<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>
@@ -498,8 +500,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Показывать в строке состояния время с точностью до секунды (заряд батареи может расходоваться быстрее)."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Изменить порядок Быстрых настроек"</string>
<string name="show_brightness" msgid="6613930842805942519">"Добавить яркость в Быстрые настройки"</string>
- <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>
diff --git a/packages/SystemUI/res/values-si-rLK/strings.xml b/packages/SystemUI/res/values-si-rLK/strings.xml
index 0811f5e..f05ba9a 100644
--- a/packages/SystemUI/res/values-si-rLK/strings.xml
+++ b/packages/SystemUI/res/values-si-rLK/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"ඇතැම් විට ජාලය නිරීක්ෂණය විය හැක"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"ඊ-තැපැල්, යෙදුම් සහ වෙබ් අඩවි ඇතුළු ඔබේ පෞද්ගලික ජාල ක්රියාකාරකම් නිරීක්ෂණය කළ හැකි, <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"තත්ත්ව තීරුවෙහි ඔරලෝසු තත්පර පෙන්වන්න. බැටරි ආයු කාලයට බලපෑමට හැකිය."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"ඉක්මන් සැකසීම් යළි පිළිවෙළට සකසන්න"</string>
<string name="show_brightness" msgid="6613930842805942519">"ඉක්මන් සැකසීම්වල දීප්තිය පෙන්වන්න"</string>
- <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">"බ්ලූටූත් ක්රියාත්මක කරන්නද?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"ඔබේ යතුරු පුවරුව ඔබේ ටැබ්ලට් පරිගණකයට සම්බන්ධ කිරීමට, ඔබ පළමුව බ්ලූටූත් ක්රියාත්මක කළ යුතුය."</string>
diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml
index 304c9a0..2fe2073 100644
--- a/packages/SystemUI/res/values-sk/strings.xml
+++ b/packages/SystemUI/res/values-sk/strings.xml
@@ -410,6 +410,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Zariadenie môže byť sledované"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil môže byť monitorovaný"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Sieť môže byť sledovaná"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Sieť môže byť monitorovaná"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Sledovanie zariadenia"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorovanie profilu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Sledovanie siete"</string>
@@ -422,6 +423,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu osobnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ste pripojený/-á k aplikácii <xliff:g id="APPLICATION">%1$s</xliff:g>, ktorá môže sledovať vašu osobnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je pripojený k aplikácii <xliff:g id="APPLICATION">%2$s</xliff:g>, ktorá môže sledovať vašu pracovnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Váš pracovný profil spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Je pripojený k aplikácii <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ktorá môže sledovať vašu pracovnú aktivitu v sieti vrátane e-mailových správ, aplikácií a webových stránok.\n\nSte tiež pripojený/-á k aplikácii <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ktorá môže sledovať vašu osobnú aktivitu v sieti."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Vaše zariadenie spravuje organizácia <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSprávca môže sledovať a spravovať nastavenia, podnikový prístup, aplikácie a údaje priradené k vášmu účtu, ako aj informácie o polohe zariadenia.\n\nSte pripojený/-á k aplikácii <xliff:g id="APPLICATION">%2$s</xliff:g>, ktorá môže sledovať vašu aktivitu v sieti vrátane e-mailových správ, aplikácii a webových stránok.\n\nĎalšie informácie získate od svojho správcu."</string>
@@ -498,8 +500,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Zobrazí sekundy v stavovom riadku. Môže to ovplyvňovať výdrž batérie."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Zmeniť usporiadanie Rýchlych nastavení"</string>
<string name="show_brightness" msgid="6613930842805942519">"Zobraziť jas v Rýchlych nastaveniach"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivovať rozdelenú obrazovku prejdením prstom"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Umožňuje aktivovať rozdelenú obrazovku prejdením prstom nahor od tlačidla Prehľad"</string>
<string name="experimental" msgid="6198182315536726162">"Experimentálne"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Zapnúť Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Ak chcete klávesnicu pripojiť k tabletu, najprv musíte zapnúť Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml
index a8bc3d1..2ab9390 100644
--- a/packages/SystemUI/res/values-sl/strings.xml
+++ b/packages/SystemUI/res/values-sl/strings.xml
@@ -410,6 +410,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Naprava je morda nadzorovana"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil je morda nadziran"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Omrežje je lahko nadzorovano"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Omrežje je morda nadzorovano"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Nadzor naprave"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Nadzor nad profilom"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nadzor omrežja"</string>
@@ -422,6 +423,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Povezani ste z aplikacijo <xliff:g id="APPLICATION">%1$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Delovni profil upravlja organizacija <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je z aplikacijo <xliff:g id="APPLICATION">%2$s</xliff:g>, ki lahko nadzira vašo delovno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Delovni profil upravlja organizacija <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Povezan je z aplikacijo <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ki lahko nadzira vašo delovno omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nPovezani ste tudi z aplikacijo <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ki lahko nadzira vašo osebno omrežno dejavnost."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Napravo upravlja organizcija <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nSkrbnik lahko nadzira in upravlja nastavitve, dostop za podjetje, aplikacije, podatke, povezane z napravo, in podatke o lokaciji naprave.\n\nPovezani ste z aplikacijo <xliff:g id="APPLICATION">%2$s</xliff:g>, ki lahko nadzira omrežno dejavnost, vključno z e-pošto, aplikacijami in spletnimi mesti.\n\nČe želite več informacij, se obrnite na skrbnika."</string>
@@ -498,8 +500,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Prikaže sekunde pri uri v vrstici stanja. To lahko vpliva na čas delovanja pri akumulatorskem napajanju."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Preuredi hitre nastavitve"</string>
<string name="show_brightness" msgid="6613930842805942519">"Prikaz svetlosti v hitrih nastavitvah"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Omogočanje poteze za razdeljen zaslon z vlečenjem navzgor"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Omogočanje poteze za vklop razdeljenega zaslona, tako da uporabnik od gumba za pregled povleče s prstom navzgor"</string>
<string name="experimental" msgid="6198182315536726162">"Poskusno"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Želite vklopiti Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Če želite povezati tipkovnico in tablični računalnik, vklopite Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-sq-rAL/strings.xml b/packages/SystemUI/res/values-sq-rAL/strings.xml
index 4bc29aa..146964d 100644
--- a/packages/SystemUI/res/values-sq-rAL/strings.xml
+++ b/packages/SystemUI/res/values-sq-rAL/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Pajisja mund të monitorohet"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profili mund të monitorohet"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Rrjeti mund të jetë i monitoruar"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Rrjeti mund të jetë i monitoruar"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Monitorimi i pajisjes"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Monitorimi i profilit"</string>
<string name="monitoring_title" msgid="169206259253048106">"Monitorimi i rrjetit"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd në rrjet përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Je i lidhur me aplikacionin <xliff:g id="APPLICATION">%1$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ai është i lidhur me <xliff:g id="APPLICATION">%2$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd të punës në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit.\n\nPër më shumë informacione, kontakto me administratorin tënd."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Profili yt i punës menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ai është i lidhur me <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd të punës në rrjet, përfshirë mailet, aplikacionet dhe sajtet e uebit.\n\nJe lidhur gjithashtu edhe me <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, i cili mund të monitorojë aktivitetin tënd personal në rrjet."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Pajisja jote menaxhohet nga <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratori mund të monitorojë dhe menaxhojë cilësimet, qasjen e korporatës, aplikacionet, të dhënat që shoqërojnë pajisjen tënde si dhe informacionin e vendndodhjes së pajisjes.\n\nJe i lidhur me <xliff:g id="APPLICATION">%2$s</xliff:g>, që mund të monitorojë aktivitetin tënd të punës në rrjet përfshirë mail-at, aplikacionet dhe faqet e internetit.\n\nPër më shumë informacion, kontakto me administratorin tënd."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Trego sekondat e orës në shiritin e statusit. Mund të ndikojë te jeta e baterisë."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Risistemo Cilësimet e shpejta"</string>
<string name="show_brightness" msgid="6613930842805942519">"Shfaq ndriçimin te Cilësimet e shpejta"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivizo gjestin e rrëshqitjes lart për ekranin e ndarë"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktivizo gjestin për të hyrë tek ekrani i ndarë duke rrëshqitur lart nga butoni \"Përmbledhja\""</string>
<string name="experimental" msgid="6198182315536726162">"Eksperimentale"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Të aktivizohet \"bluetooth-i\"?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Për të lidhur tastierën me tabletin, në fillim duhet të aktivizosh \"bluetooth-in\"."</string>
diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml
index 16ae7e2..b127028 100644
--- a/packages/SystemUI/res/values-sr/strings.xml
+++ b/packages/SystemUI/res/values-sr/strings.xml
@@ -406,6 +406,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Мрежа се можда надгледа"</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>
@@ -418,6 +419,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Повезани сте са апликацијом <xliff:g id="APPLICATION">%1$s</xliff:g>, која може да надгледа активности на личној мрежи, укључујући имејлове, апликације и веб-сајтове."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Профилом за Work управља <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">"Профилом за Work управља <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>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Секунде на сату се приказују на статусној траци. То може да утиче на трајање батерије."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Преуреди Брза подешавања"</string>
<string name="show_brightness" msgid="6613930842805942519">"Прикажи осветљеност у Брзим подешавањима"</string>
- <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>
diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml
index e6988d7..a6aa2d1 100644
--- a/packages/SystemUI/res/values-sv/strings.xml
+++ b/packages/SystemUI/res/values-sv/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Enheten kan övervakas"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Det kan hända att profilen övervakas"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Nätverket kan vara övervakat"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Nätverket kan vara övervakat"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Enhetsövervakning"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilövervakning"</string>
<string name="monitoring_title" msgid="169206259253048106">"Nätverksövervakning"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan bevaka aktivitet på nätverket, inklusive e-post, appar och webbplatser."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g>, som kan bevaka din privata aktivitet på nätverket, inklusive e-post, appar och webbplatser."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Du är ansluten till <xliff:g id="APPLICATION">%1$s</xliff:g> som kan övervaka din privata aktivitet på nätverket, inklusive e-postmeddelanden, appar och webbplatser."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den är ansluten till <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan hantera aktivitet på arbetsplatsens nätverk, inklusive e-post, appar och webbplatser.\n\nKontakta administratören för mer information."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Jobbprofilen hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Den är ansluten till <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, som kan hantera aktivitet på arbetsplatsens nätverk, inklusive e-post, appar och webbplatser.\n\nDu är även ansluten till <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, som kan hantera privat aktivitet på nätverket."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Enheten hanteras av <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nAdministratören kan bevaka och hantera inställningar, företagsåtkomst, appar, data som är kopplad till enheten och enhetens platsuppgifter.\n\nDu är ansluten till <xliff:g id="APPLICATION">%2$s</xliff:g>, som kan övervaka aktivitet på nätverket, inklusive e-post. appar och webbplatser .\n\nKontakta administratören för mer information."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Visa klocksekunder i statusfältet. Detta kan påverka batteritiden."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Ordna snabbinställningarna"</string>
<string name="show_brightness" msgid="6613930842805942519">"Visa ljusstyrka i snabbinställningarna"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Aktivera delad skärm när du sveper uppåt"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Aktivera en rörelse som delar skärmen när du sveper uppåt från knappen Översikt"</string>
<string name="experimental" msgid="6198182315536726162">"Experimentella"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Vill du aktivera Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Om du vill ansluta tangentbordet till surfplattan måste du först aktivera Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml
index 50c6685..c6bd735 100644
--- a/packages/SystemUI/res/values-sw/strings.xml
+++ b/packages/SystemUI/res/values-sw/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Huenda kifaa kinafuatiliwa"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Huenda wasifu ukafuatiliwa"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Huenda mtandao unafuatiliwa"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Huenda mtandao unafuatiliwa"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Ufuatiliaji wa kifaa"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Ufuatiliaji wasifu"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ufuatiliaji wa mtandao"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Umeunganishwa kwenye <xliff:g id="APPLICATION">%1$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu na tovuti."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Wasifu huu umeunganishwa kwenye <xliff:g id="APPLICATION">%2$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti. \n\nKwa maelezo zaidi, wasiliana na msimamizi wako."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Wasifu wako wa kazini unasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Wasifu huu umeunganishwa kwenye <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ambayo inaweza kufuatilia mtandao wako wa kazini, ikiwa ni pamoja na barua pepe, programu na tovuti. \n\n Wewe pia umeunganishwa kwenye <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, ambayo inaweza kufuatilia shughuli za mtandao wako kibinafsi."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Kifaa chako kinasimamiwa na <xliff:g id="ORGANIZATION">%1$s</xliff:g>. \n\nMsimamizi wako anaweza kufuatilia na kudhibiti mipangilio, ufikiaji wa kampuni, programu, data inayohusiana na kifaa chako, na maelezo ya mahali kilipo kifaa chako. \n\n Umeuganishwa kwenye <xliff:g id="APPLICATION">%2$s</xliff:g>, ambayo inaweza kufuatilia shughuli ya mtandao wako, ikiwa ni pamoja na barua pepe, programu, na tovuti. \n\n Kwa maelezo zaidi, wasiliana na msimamizi wako."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Onyesha sekunde za saa katika sehemu ya arifa. Inaweza kuathiri muda wa matumizi ya betri."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Panga Upya Mipangilio ya Haraka"</string>
<string name="show_brightness" msgid="6613930842805942519">"Onyesha unga\'avu katika Mipangilio ya Haraka"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Ruhusu kugawanya skrini kwa ishara ya kutelezesha kidole juu"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Washa kipengele cha ishara ili utumie skrini iliyogawanywa kwa kutelezesha kidole juu kutoka kitufe cha Muhtasari"</string>
<string name="experimental" msgid="6198182315536726162">"Ya majaribio"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Je, ungependa kuwasha Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Ili uunganishe Kibodi yako kwenye kompyuta yako kibao, lazima kwanza uwashe Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-ta-rIN/strings.xml b/packages/SystemUI/res/values-ta-rIN/strings.xml
index f0cb530..ae2e4b0 100644
--- a/packages/SystemUI/res/values-ta-rIN/strings.xml
+++ b/packages/SystemUI/res/values-ta-rIN/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"நெட்வொர்க் கண்காணிக்கப்படலாம்"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"நிலைப் பட்டியில் கடிகார வினாடிகளைக் காட்டும். பேட்டரியின் ஆயுளைக் குறைக்கலாம்."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"விரைவு அமைப்புகளை மறுவரிசைப்படுத்து"</string>
<string name="show_brightness" msgid="6613930842805942519">"விரைவு அமைப்புகளில் ஒளிர்வுப் பட்டியைக் காட்டு"</string>
- <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">"புளூடூத்தை இயக்கவா?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"உங்கள் டேப்லெட்டுடன் விசைப்பலகையை இணைக்க, முதலில் புளூடூத்தை இயக்க வேண்டும்."</string>
diff --git a/packages/SystemUI/res/values-te-rIN/strings.xml b/packages/SystemUI/res/values-te-rIN/strings.xml
index e50d47a..eb0aec3 100644
--- a/packages/SystemUI/res/values-te-rIN/strings.xml
+++ b/packages/SystemUI/res/values-te-rIN/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"నెట్వర్క్ పర్యవేక్షించబడవచ్చు"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"మీరు <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"స్థితి పట్టీలో గడియారం సెకన్లు చూపుతుంది. బ్యాటరీ శక్తి ప్రభావితం చేయవచ్చు."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"శీఘ్ర సెట్టింగ్ల ఏర్పాటు క్రమం మార్చు"</string>
<string name="show_brightness" msgid="6613930842805942519">"శీఘ్ర సెట్టింగ్ల్లో ప్రకాశం చూపు"</string>
- <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">"బ్లూటూత్ ఆన్ చేయాలా?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"మీ కీబోర్డ్ను మీ టాబ్లెట్తో కనెక్ట్ చేయడానికి, మీరు ముందుగా బ్లూటూత్ ఆన్ చేయాలి."</string>
diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml
index a60371b..f31bb02 100644
--- a/packages/SystemUI/res/values-th/strings.xml
+++ b/packages/SystemUI/res/values-th/strings.xml
@@ -345,7 +345,7 @@
<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>
- <string name="zen_priority_introduction" msgid="3070506961866919502">"คุณจะไม่ถูกรบกวนจากเสียงและการสั่น ยกเว้นการปลุก การเตือนความจำ กิจกรรม และผู้โทรที่คุณระบุ"</string>
+ <string name="zen_priority_introduction" msgid="3070506961866919502">"คุณจะไม่ถูกรบกวนจากเสียงและการสั่น ยกเว้นการปลุก การช่วยเตือน กิจกรรม และผู้โทรที่คุณระบุ"</string>
<string name="zen_priority_customize_button" msgid="7948043278226955063">"กำหนดค่า"</string>
<string name="zen_silence_introduction_voice" msgid="2284540992298200729">"การใช้โหมดนี้จะบล็อกเสียงและการสั่นทั้งหมด ซึ่งรวมถึงเสียงปลุก เพลง วิดีโอ และเกม คุณจะยังโทรออกได้อยู่"</string>
<string name="zen_silence_introduction" msgid="3137882381093271568">"การใช้โหมดนี้จะบล็อกเสียงและการสั่นทั้งหมด ซึ่งรวมถึงเสียงปลุก เพลง วิดีโอ และเกม"</string>
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"เครือข่ายอาจถูกตรวจสอบ"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"คุณเชื่อมต่อกับ <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"แสดงวินาทีของนาฬิกาในแถบสถานะ อาจส่งผลต่ออายุแบตเตอรี"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"จัดเรียงการตั้งค่าด่วนใหม่"</string>
<string name="show_brightness" msgid="6613930842805942519">"แสดงความสว่างในการตั้งค่าด่วน"</string>
- <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">"เปิดบลูทูธไหม"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"หากต้องการเชื่อมต่อแป้นพิมพ์กับแท็บเล็ต คุณต้องเปิดบลูทูธก่อน"</string>
diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml
index ed6830e..97e1b15 100644
--- a/packages/SystemUI/res/values-tl/strings.xml
+++ b/packages/SystemUI/res/values-tl/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Maaaring subaybayan ang device"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Maaaring subaybayan ang profile"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Maaaring sinusubaybayan ang network"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Maaaring sinusubaybayan ang network"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Pagsubaybay sa device"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Pagsubaybay sa Profile"</string>
<string name="monitoring_title" msgid="169206259253048106">"Pagsubaybay sa network"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network kabilang ang mga email, app at website."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa iyong personal na aktibidad sa network, kabilang ang mga email, app at website."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Nakakonekta ka sa <xliff:g id="APPLICATION">%1$s</xliff:g>, na maaaring sumubaybay sa aktibidad sa iyong personal na network, kabilang ang mga email, app at website."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Ang iyong profile sa trabaho ay pinapamahalaan ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Nakakonekta ito sa <xliff:g id="APPLICATION">%2$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Ang iyong profile sa trabaho ay pinapamahalaan ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Nakakonekta ito sa <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, na maaaring sumubaybay sa iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nNakakonekta ka rin sa <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, na maaaring sumubaybay sa iyong personal na aktibidad sa network."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Pinapamahalaan ang iyong device ng <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nMaaaring subaybayan at pamahalaan ng iyong administrator ang mga setting, corporate na access, app, data na nauugnay sa iyong device at ang impormasyon ng lokasyon ng iyong device.\n\nNakakonekta ka sa <xliff:g id="APPLICATION">%2$s</xliff:g>, na maaaring subaybayan ang iyong aktibidad sa network, kabilang ang mga email, app at website.\n\nPara sa higit pang impormasyon, makipag-ugnayan sa iyong administrator."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Ipakita ang mga segundo ng orasan sa status bar. Maaaring makaapekto sa tagal ng baterya."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Ayusing Muli ang Mga Mabilisang Setting"</string>
<string name="show_brightness" msgid="6613930842805942519">"Ipakita ang liwanag sa Mga Mabilisang Setting"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"I-enable ang pag-swipe pataas na galaw para sa split-screen"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"I-enable ang gesture upang makapasok sa split-screen sa pamamagitan ng pagsa-swipe pataas mula sa button ng Pangkalahatang-ideya"</string>
<string name="experimental" msgid="6198182315536726162">"Pang-eksperimento"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"I-on ang Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Upang ikonekta ang iyong keyboard sa iyong tablet, kailangan mo munang i-on ang Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml
index 8fae7975..f336b34 100644
--- a/packages/SystemUI/res/values-tr/strings.xml
+++ b/packages/SystemUI/res/values-tr/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Cihaz izlenebilir"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil izlenebilir"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Ağ etkinliği izlenebilir"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Ağ etkinliği izlenebilir"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Cihaz izleme"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profil izleme"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ağ izleme"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%1$s</xliff:g> uygulamasına bağlısınız."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor. E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%2$s</xliff:g> uygulamasına bağlı.\n\nDaha fazla bilgi için yöneticinizle iletişim kurun."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"İş profiliniz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor. E-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> uygulamasına bağlı.\n\n Ayrıca kişisel ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> uygulamasına bağlısınız."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Cihazınız <xliff:g id="ORGANIZATION">%1$s</xliff:g> tarafından yönetiliyor.\n\nYöneticiniz; ayarları, şirket erişimini, uygulamaları, cihazınızla ilişkilendirilmiş verileri ve cihazınızın konum bilgilerini izleyebilir ve yönetebilir.\n\nE-postalarınız, uygulamalarınız ve web siteleriniz dahil olmak üzere ağ etkinliğinizi izleyebilen <xliff:g id="APPLICATION">%2$s</xliff:g> uygulamasına bağlısınız.\n\nDaha fazla bilgi edinmek için yöneticinizle iletişim kurun."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Durum çubuğunda saatin saniyelerini gösterir. Pil ömrünü etkileyebilir."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Hızlı Ayarlar\'ı Yeniden Düzenle"</string>
<string name="show_brightness" msgid="6613930842805942519">"Hızlı Ayarlar\'da parlaklığı göster"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Hızlıca yukarı kaydırma hareketiyle ekran bölm. etkinleştir"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Genel bakış düğmesinden yukarı hızlıca kaydırarak bölünmüş ekrana geçme hareketini etkinleştir"</string>
<string name="experimental" msgid="6198182315536726162">"Deneysel"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth açılsın mı?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Klavyenizi tabletinize bağlamak için önce Bluetooth\'u açmanız gerekir."</string>
diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml
index 7eaf0db..b760eee 100644
--- a/packages/SystemUI/res/values-uk/strings.xml
+++ b/packages/SystemUI/res/values-uk/strings.xml
@@ -410,6 +410,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"Мережа може відстежуватися"</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>
@@ -422,6 +423,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Ваш профіль під’єднано до додатка <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>
@@ -498,8 +500,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Показувати секунди на годиннику в рядку стану. Акумулятор може розряджатися швидше."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Упорядкувати швидкі налаштування"</string>
<string name="show_brightness" msgid="6613930842805942519">"Показувати панель яскравості у швидких налаштуваннях"</string>
- <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>
diff --git a/packages/SystemUI/res/values-ur-rPK/strings.xml b/packages/SystemUI/res/values-ur-rPK/strings.xml
index 5c0ed18..de1c5fa 100644
--- a/packages/SystemUI/res/values-ur-rPK/strings.xml
+++ b/packages/SystemUI/res/values-ur-rPK/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"نیٹ ورک کو شاید مانیٹر کیا جائے"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"آپ <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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"گھڑی کے سیکنڈز اسٹیٹس بار میں دکھائیں۔ اس کا بیٹری کی زندگی پر اثر پڑ سکتا ہے۔"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"فوری ترتیبات کو دوبارہ ترتیب دیں"</string>
<string name="show_brightness" msgid="6613930842805942519">"فوری ترتیبات میں چمکیلا پن دکھائیں"</string>
- <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">"بلوٹوتھ آن کریں؟"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"اپنے کی بورڈ کو اپنے ٹیبلٹ کے ساتھ منسلک کرنے کیلئے پہلے آپ کو اپنا بلو ٹوتھ آن کرنا ہو گا۔"</string>
diff --git a/packages/SystemUI/res/values-uz-rUZ/strings.xml b/packages/SystemUI/res/values-uz-rUZ/strings.xml
index ac6194f..4e054cb 100644
--- a/packages/SystemUI/res/values-uz-rUZ/strings.xml
+++ b/packages/SystemUI/res/values-uz-rUZ/strings.xml
@@ -406,6 +406,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Qurilma kuzatilishi mumkin"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Profil kuzatilishi mumkin"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Tarmoqni kuzatish mumkin"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Tarmoq kuzatilishi mumkin"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Qurilmalarni kuzatish"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Profilni kuzatish"</string>
<string name="monitoring_title" msgid="169206259253048106">"Tarmoqlarni kuzatish"</string>
@@ -418,6 +419,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"<xliff:g id="APPLICATION">%1$s</xliff:g> ilovasi ishga tushirilgan. U internetdagi harakatlaringiz, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi. <xliff:g id="APPLICATION">%2$s</xliff:g> ilovasi ish tarmog‘idagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Sizning ishchi profilingiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi. <xliff:g id="APPLICATION_WORK">%2$s</xliff:g> ilovasi ish tarmog‘idagi harakatlaringizni, jumladan, e-pochta, ilova va veb-saytlardagi xatti-harakatlaringizni kuzatishi mumkin.\n\nShuningdek, <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g> ilovasi ham shaxsiy tarmoqdagi harakatlaringizni kuzatishi mumkin."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Qurilmangiz <xliff:g id="ORGANIZATION">%1$s</xliff:g> tomonidan boshqariladi.\n\nAdministrator sozlamalar, korporativ kirish huquqi, ilovalar, qurilmangizdagi ma’lumotlar, jumladan, joylashuv ma’lumotlarini boshqarishi mumkin.\n\nShuningdek, siz <xliff:g id="APPLICATION">%2$s</xliff:g> ilovasiga ham ulangansiz. Ushbu ilova internetdagi harakatlaringizni, jumladan, e-pochta, ilovalar va veb-saytlar bilan ishlashingizni kuzata oladi.\n\nBatafsil ma’lumot olish uchun administrator bilan bog‘laning."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Holat panelida soat soniyalari ko‘rsatilsin. Bu batareya resursiga ta’sir qilishi mumkin."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Tezkor sozlamalarni qayta tartiblash"</string>
<string name="show_brightness" msgid="6613930842805942519">"Tezkor sozlamalarda yorqinlikni ko‘rsatish"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Tepaga surish orqali ekranni ikkiga bo‘lish"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Umumiy ma’lumot tugmasini tepaga surish orqali ekranni bo‘lish ishorasini yoqish"</string>
<string name="experimental" msgid="6198182315536726162">"Tajribaviy"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Bluetooth yoqilsinmi?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Klaviaturani planshetingizga ulash uchun Bluetooth xizmatini yoqishingiz kerak."</string>
diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml
index 1eaa9a3..775f7ff 100644
--- a/packages/SystemUI/res/values-vi/strings.xml
+++ b/packages/SystemUI/res/values-vi/strings.xml
@@ -310,7 +310,7 @@
<string name="quick_settings_tethering_label" msgid="7153452060448575549">"Đang dùng làm điểm truy cập Internet"</string>
<string name="quick_settings_hotspot_label" msgid="6046917934974004879">"Điểm phát sóng"</string>
<string name="quick_settings_notifications_label" msgid="4818156442169154523">"Thông báo"</string>
- <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Đèn nháy"</string>
+ <string name="quick_settings_flashlight_label" msgid="2133093497691661546">"Đèn pin"</string>
<string name="quick_settings_cellular_detail_title" msgid="8575062783675171695">"Dữ liệu di động"</string>
<string name="quick_settings_cellular_detail_data_usage" msgid="1964260360259312002">"Sử dụng dữ liệu"</string>
<string name="quick_settings_cellular_detail_remaining_data" msgid="722715415543541249">"Dữ liệu còn lại"</string>
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Thiết bị có thể được giám sát"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Hồ sơ có thể được giám sát"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Mạng có thể được giám sát"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Mạng có thể được giám sát"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Giám sát thiết bị"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Giám sát hồ sơ"</string>
<string name="monitoring_title" msgid="169206259253048106">"Giám sát mạng"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn bao gồm email, ứng dụng và trang web."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng cá nhân của bạn bao gồm email, ứng dụng và trang web."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Bạn đang kết nối với <xliff:g id="APPLICATION">%1$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng cá nhân của bạn bao gồm email, ứng dụng và trang web."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Hồ sơ công việc của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Hồ sơ được kết nối với <xliff:g id="APPLICATION">%2$s</xliff:g>, ứng dụng này có thể giám sát hoạt động mạng cơ quan của bạn, bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Hồ sơ công việc của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>. Hồ sơ được kết nối với <xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, ứng dụng này có thể giám sát hoạt động mạng cơ quan của bạn, bao gồm email, ứng dụng và trang web.\n\nBạn cũng được kết nối với <xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, có thể giám sát hoạt động mạng cá nhân của bạn."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Thiết bị của bạn được quản lý bởi <xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nQuản trị viên có thể giám sát và quản lý cài đặt, quyền truy cập của công ty, ứng dụng, dữ liệu được liên kết với thiết bị của bạn và thông tin về vị trí của thiết bị.\n\nBạn được kết nối với <xliff:g id="APPLICATION">%2$s</xliff:g>. Ứng dụng này có thể giám sát hoạt động mạng của bạn, bao gồm email, ứng dụng và trang web.\n\nĐể biết thêm thông tin, hãy liên hệ với quản trị viên của bạn."</string>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Hiển thị giây đồng hồ trong thanh trạng thái. Có thể ảnh hưởng đến thời lượng pin."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Sắp xếp lại Cài đặt nhanh"</string>
<string name="show_brightness" msgid="6613930842805942519">"Hiển thị độ sáng trong Cài đặt nhanh"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Bật cử chỉ vuốt lên ở chế độ chia đôi màn hình"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Cho phép cử chỉ truy cập chế độ chia đôi màn hình bằng cách vuốt lên từ nút Tổng quan"</string>
<string name="experimental" msgid="6198182315536726162">"Thử nghiệm"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Bật Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Để kết nối bàn phím với máy tính bảng, trước tiên, bạn phải bật Bluetooth."</string>
diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml
index 2548c4b..c25acac 100644
--- a/packages/SystemUI/res/values-zh-rCN/strings.xml
+++ b/packages/SystemUI/res/values-zh-rCN/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"网络可能会受到监控"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"您已连接到<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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"在状态栏中显示时钟的秒数。这可能会影响电池的续航时间。"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"重新排列快捷设置"</string>
<string name="show_brightness" msgid="6613930842805942519">"在快捷设置中显示亮度栏"</string>
- <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">"要开启蓝牙吗?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"要将您的键盘连接到平板电脑,您必须先开启蓝牙。"</string>
diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml
index c0172b1..7cd2d5d 100644
--- a/packages/SystemUI/res/values-zh-rHK/strings.xml
+++ b/packages/SystemUI/res/values-zh-rHK/strings.xml
@@ -406,6 +406,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"網絡可能會受到監控"</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>
@@ -418,6 +419,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"您已連接至「<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>
@@ -494,8 +496,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"在狀態列中顯示時鐘秒數,但可能會影響電池壽命。"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"重新排列快速設定"</string>
<string name="show_brightness" msgid="6613930842805942519">"在快速設定顯示亮度"</string>
- <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">"要開啟藍牙嗎?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"如要將鍵盤連接至平板電腦,請先開啟藍牙。"</string>
diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml
index 66c1264..d7f6f70 100644
--- a/packages/SystemUI/res/values-zh-rTW/strings.xml
+++ b/packages/SystemUI/res/values-zh-rTW/strings.xml
@@ -404,6 +404,7 @@
<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="branded_vpn_footer" msgid="2168111859226496230">"網路可能會受到監控"</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>
@@ -416,6 +417,7 @@
<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="branded_monitoring_description_app_personal" msgid="2669518213949202599">"由於你已連結至「<xliff:g id="APPLICATION">%1$s</xliff:g>」,你的個人網路活動 (包括收發電子郵件、使用應用程式及瀏覽網站) 可能會受到這個應用程式監控。"</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"您的 Work 設定檔是由下列機構管理:<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">"您的 Work 設定檔是由下列機構管理:<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>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"在狀態列中顯示時鐘秒數。這可能會影響電池續航力。"</string>
<string name="qs_rearrange" msgid="8060918697551068765">"重新排列快速設定"</string>
<string name="show_brightness" msgid="6613930842805942519">"在快速設定中顯示亮度"</string>
- <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">"要開啟藍牙功能嗎?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"如要將鍵盤連線到平板電腦,您必須先開啟藍牙。"</string>
diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml
index 49bf0bd..72fb812 100644
--- a/packages/SystemUI/res/values-zu/strings.xml
+++ b/packages/SystemUI/res/values-zu/strings.xml
@@ -404,6 +404,7 @@
<string name="device_owned_footer" msgid="3802752663326030053">"Idivayisi inganganyelwa"</string>
<string name="profile_owned_footer" msgid="8021888108553696069">"Iphrofayela ingaqashwa"</string>
<string name="vpn_footer" msgid="2388611096129106812">"Inethiwekhi kungenzeka iqashiwe"</string>
+ <string name="branded_vpn_footer" msgid="2168111859226496230">"Inethiwekhi kungenzeka iqashiwe"</string>
<string name="monitoring_title_device_owned" msgid="7121079311903859610">"Ukwengamela idivayisi"</string>
<string name="monitoring_title_profile_owned" msgid="6790109874733501487">"Ukuqapha iphrofayela"</string>
<string name="monitoring_title" msgid="169206259253048106">"Ukuqashwa kwenethiwekhi"</string>
@@ -416,6 +417,7 @@
<string name="legacy_vpn_name" msgid="6604123105765737830">"I-VPN"</string>
<string name="monitoring_description_app" msgid="6259179342284742878">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engahlola umsebenzi wakho wenethiwekhi ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
<string name="monitoring_description_app_personal" msgid="484599052118316268">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yomuntu siqu, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
+ <string name="branded_monitoring_description_app_personal" msgid="2669518213949202599">"Uxhumeke ku-<xliff:g id="APPLICATION">%1$s</xliff:g>, engaqapha umsebenzi wakho womuntu siqu wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi."</string>
<string name="monitoring_description_app_work" msgid="1754325860918060897">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ixhumeke ku-<xliff:g id="APPLICATION">%2$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yokusebenza, ofaka ama-imeyili, izinhlelo zokusebenza, namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho."</string>
<string name="monitoring_description_app_personal_work" msgid="4946600443852045903">"Iphrofayela yakho yomsebenzi iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>. Ixhumeke ku-<xliff:g id="APPLICATION_WORK">%2$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yomsebenzi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi.\n\nFuthi uxhumeke ku-<xliff:g id="APPLICATION_PERSONAL">%3$s</xliff:g>, engahlola umsebenzi wenethiwekhi yakho yomuntu siqu."</string>
<string name="monitoring_description_vpn_app_device_owned" msgid="4970443827043261703">"Idivayisi yakho iphethwe yi-<xliff:g id="ORGANIZATION">%1$s</xliff:g>.\n\nUmqondisi wakho angaqaphela aphinde aphathe izilungiselelo, ukufinyelela kwezinkampani, izinhlelo zokusebenza, idatha ehlotshaniswa nedivayisi yakho, nolwazi lendawo yedivayisi yakho.\n\nUxhumeke ku-<xliff:g id="APPLICATION">%2$s</xliff:g>, engaqaphela umsebenzi wakho wenethiwekhi, ofaka ama-imeyili, izinhlelo zokusebenza namawebhusayithi.\n\nUkuze uthole olunye ulwazi, xhumana nomqondisi wakho."</string>
@@ -492,8 +494,6 @@
<string name="clock_seconds_desc" msgid="6282693067130470675">"Bonisa amasekhondi wewashi kubha yesimo. Ingathinta impilo yebhethri."</string>
<string name="qs_rearrange" msgid="8060918697551068765">"Hlela kabusha izilungiselelo ezisheshayo"</string>
<string name="show_brightness" msgid="6613930842805942519">"Bonisa ukukhanya kuzilungiselelo ezisheshayo"</string>
- <string name="overview_nav_bar_gesture" msgid="8579814204727917764">"Nika amandla ukuthinta kokuswayiphela phezulu ukuhlukanisa isikrini"</string>
- <string name="overview_nav_bar_gesture_desc" msgid="6329167382305102615">"Nika amandla ukuthinta ukuze ungene ekuhlukaniseni isikrini ngokuswayiphela phezulu kusukela kunkinobho yokubuka konke"</string>
<string name="experimental" msgid="6198182315536726162">"Okokulinga"</string>
<string name="enable_bluetooth_title" msgid="5027037706500635269">"Vula i-Bluetooth?"</string>
<string name="enable_bluetooth_message" msgid="9106595990708985385">"Ukuze uxhume ikhibhodi yakho nethebhulethi yakho, kufanele uqale ngokuvula i-Bluetooth."</string>
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index c2897cd..8d44048 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -218,12 +218,6 @@
<!-- Doze: should notifications be used as a pulse signal? -->
<bool name="doze_pulse_on_notifications">true</bool>
- <!-- Doze: when to pulse after a buzzworthy notification arrives -->
- <string name="doze_pulse_schedule" translatable="false">10s,30s,60s</string>
-
- <!-- Doze: maximum number of times the notification pulse schedule can be reset -->
- <integer name="doze_pulse_schedule_resets">2</integer>
-
<!-- Doze: duration to avoid false pickup gestures triggered by notification vibrations -->
<integer name="doze_pickup_vibration_threshold">2000</integer>
@@ -253,7 +247,7 @@
<integer name="doze_pulse_duration_in_pickup">130</integer>
<!-- Doze: pulse parameter - once faded in, how long does it stay visible? -->
- <integer name="doze_pulse_duration_visible">3000</integer>
+ <integer name="doze_pulse_duration_visible">6000</integer>
<!-- Doze: pulse parameter - how long does it take to fade out? -->
<integer name="doze_pulse_duration_out">600</integer>
diff --git a/packages/SystemUI/res/values/strings.xml b/packages/SystemUI/res/values/strings.xml
index 6c48b25..ca62970 100644
--- a/packages/SystemUI/res/values/strings.xml
+++ b/packages/SystemUI/res/values/strings.xml
@@ -1001,6 +1001,9 @@
<!-- Footer vpn present text [CHAR LIMIT=50] -->
<string name="vpn_footer">Network may be monitored</string>
+ <!-- Footer vpn present text [CHAR LIMIT=50] -->
+ <string name="branded_vpn_footer">Network may be monitored</string>
+
<!-- Monitoring dialog title for device owned devices [CHAR LIMIT=35] -->
<string name="monitoring_title_device_owned">Device monitoring</string>
@@ -1037,6 +1040,9 @@
<!-- Monitoring dialog text for single app (inside personal profile) [CHAR LIMIT=400] -->
<string name="monitoring_description_app_personal">You\'re connected to <xliff:g id="application">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps, and websites.</string>
+ <!-- Monitoring dialog text for single app (inside personal profile) [CHAR LIMIT=400] -->
+ <string name="branded_monitoring_description_app_personal">You\'re connected to <xliff:g id="application">%1$s</xliff:g>, which can monitor your personal network activity, including emails, apps, and websites.</string>
+
<!-- Monitoring dialog text for single app (inside work profile) [CHAR LIMIT=400] -->
<string name="monitoring_description_app_work">Your work profile is managed by <xliff:g id="organization">%1$s</xliff:g>. It is connected to <xliff:g id="application">%2$s</xliff:g>, which can monitor your work network activity, including emails, apps, and websites.\n\nFor more information, contact your administrator.</string>
@@ -1243,11 +1249,6 @@
<!-- Option to use new paging layout in quick settings [CHAR LIMIT=60] -->
<string name="qs_paging" translatable="false">Use the new Quick Settings</string>
- <!-- Toggle to enable the gesture to enter split-screen by swiping up from the Overview button. [CHAR LIMIT=60]-->
- <string name="overview_nav_bar_gesture">Enable split-screen swipe-up gesture</string>
- <!-- Description for the toggle to enable the gesture to enter split-screen by swiping up from the Overview button. [CHAR LIMIT=NONE]-->
- <string name="overview_nav_bar_gesture_desc">Enable gesture to enter split-screen by swiping up from the Overview button</string>
-
<!-- Category in the System UI Tuner settings, where new/experimental
settings are -->
<string name="experimental">Experimental</string>
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 1ee13e9..1e3b841 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -42,7 +42,7 @@
</style>
<!-- Theme used for the activity that shows when the system forced an app to be resizable -->
- <style name="ForcedResizableTheme" parent="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
+ <style name="ForcedResizableTheme" parent="@android:style/Theme.Translucent.NoTitleBar">
<item name="android:windowBackground">@drawable/forced_resizable_background</item>
<item name="android:statusBarColor">@color/transparent</item>
<item name="android:windowAnimationStyle">@style/Animation.ForcedResizable</item>
diff --git a/packages/SystemUI/res/xml/other_settings.xml b/packages/SystemUI/res/xml/other_settings.xml
index 3c872fa..ce636cd 100644
--- a/packages/SystemUI/res/xml/other_settings.xml
+++ b/packages/SystemUI/res/xml/other_settings.xml
@@ -18,11 +18,6 @@
xmlns:sysui="http://schemas.android.com/apk/res-auto"
android:title="@string/other">
- <com.android.systemui.tuner.TunerSwitch
- android:key="overview_nav_bar_gesture"
- android:title="@string/overview_nav_bar_gesture"
- android:summary="@string/overview_nav_bar_gesture_desc" />
-
<!-- importance -->
<Preference
android:key="power_notification_controls"
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/AccelerationClassifier.java b/packages/SystemUI/src/com/android/systemui/classifier/AccelerationClassifier.java
index bad739fd..4585fe9 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/AccelerationClassifier.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/AccelerationClassifier.java
@@ -62,36 +62,36 @@
@Override
public float getFalseTouchEvaluation(int type, Stroke stroke) {
Data data = mStrokeMap.get(stroke);
- return SpeedRatioEvaluator.evaluate(data.maxSpeedRatio)
- + DistanceRatioEvaluator.evaluate(data.maxDistanceRatio);
+ return 2 * SpeedRatioEvaluator.evaluate(data.maxSpeedRatio);
}
private static class Data {
- public Point previousPoint;
- public float previousSpeed;
- public float previousDistance;
- public float maxSpeedRatio;
- public float maxDistanceRatio;
+
+ static final float MILLIS_TO_NANOS = 1e6f;
+
+ Point previousPoint;
+ float previousSpeed = 0;
+ float maxSpeedRatio = 0;
public Data(Point point) {
previousPoint = point;
- previousSpeed = previousDistance = 0.0f;
- maxDistanceRatio = maxSpeedRatio = 0.0f;
}
public void addPoint(Point point) {
float distance = previousPoint.dist(point);
float duration = (float) (point.timeOffsetNano - previousPoint.timeOffsetNano + 1);
float speed = distance / duration;
- if (previousDistance != 0.0f) {
- maxDistanceRatio = Math.max(maxDistanceRatio, distance / previousDistance);
- }
+ if (duration > 20 * MILLIS_TO_NANOS || duration < 5 * MILLIS_TO_NANOS) {
+ // reject this segment and ensure we won't use data about it in the next round.
+ previousSpeed = 0;
+ previousPoint = point;
+ return;
+ }
if (previousSpeed != 0.0f) {
maxSpeedRatio = Math.max(maxSpeedRatio, speed / previousSpeed);
}
- previousDistance = distance;
previousSpeed = speed;
previousPoint = point;
}
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/DistanceRatioEvaluator.java b/packages/SystemUI/src/com/android/systemui/classifier/DistanceRatioEvaluator.java
deleted file mode 100644
index 8acb009..0000000
--- a/packages/SystemUI/src/com/android/systemui/classifier/DistanceRatioEvaluator.java
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
- * Copyright (C) 2015 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.systemui.classifier;
-
-public class DistanceRatioEvaluator {
- public static float evaluate(float value) {
- float evaluation = 0.0f;
- if (value <= 1.0) evaluation++;
- if (value <= 0.5) evaluation++;
- if (value > 4.0) evaluation++;
- if (value > 7.0) evaluation++;
- if (value > 14.0) evaluation++;
- return evaluation;
- }
-}
diff --git a/packages/SystemUI/src/com/android/systemui/classifier/SpeedRatioEvaluator.java b/packages/SystemUI/src/com/android/systemui/classifier/SpeedRatioEvaluator.java
index 4c6cea0..e34f222 100644
--- a/packages/SystemUI/src/com/android/systemui/classifier/SpeedRatioEvaluator.java
+++ b/packages/SystemUI/src/com/android/systemui/classifier/SpeedRatioEvaluator.java
@@ -19,6 +19,7 @@
public class SpeedRatioEvaluator {
public static float evaluate(float value) {
float evaluation = 0.0f;
+ if (value == 0) return 0;
if (value <= 1.0) evaluation++;
if (value <= 0.5) evaluation++;
if (value > 9.0) evaluation++;
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
index 7c8d0f6..874021a 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeLog.java
@@ -33,7 +33,7 @@
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private static final boolean ENABLED = true;
private static final int SIZE = Build.IS_DEBUGGABLE ? 400 : 50;
- private static final SimpleDateFormat FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
+ static final SimpleDateFormat FORMAT = new SimpleDateFormat("MM-dd HH:mm:ss.SSS");
private static final int PULSE_REASONS = 4;
diff --git a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
index fc0d8bb..ec4f447 100644
--- a/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
+++ b/packages/SystemUI/src/com/android/systemui/doze/DozeService.java
@@ -16,8 +16,6 @@
package com.android.systemui.doze;
-import android.app.AlarmManager;
-import android.app.PendingIntent;
import android.app.UiModeManager;
import android.content.BroadcastReceiver;
import android.content.Context;
@@ -43,7 +41,6 @@
import com.android.internal.logging.MetricsProto.MetricsEvent;
import com.android.systemui.SystemUIApplication;
import com.android.systemui.statusbar.phone.DozeParameters;
-import com.android.systemui.statusbar.phone.DozeParameters.PulseSchedule;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -55,19 +52,6 @@
private static final String ACTION_BASE = "com.android.systemui.doze";
private static final String PULSE_ACTION = ACTION_BASE + ".pulse";
- private static final String NOTIFICATION_PULSE_ACTION = ACTION_BASE + ".notification_pulse";
- private static final String EXTRA_INSTANCE = "instance";
-
- /**
- * Earliest time we pulse due to a notification light after the service started.
- *
- * <p>Incoming notification light events during the blackout period are
- * delayed to the earliest time defined by this constant.</p>
- *
- * <p>This delay avoids a pulse immediately after screen off, at which
- * point the notification light is re-enabled again by NoMan.</p>
- */
- private static final int EARLIEST_LIGHT_PULSE_AFTER_START_MS = 10 * 1000;
private final String mTag = String.format(TAG + ".%08x", hashCode());
private final Context mContext = this;
@@ -80,19 +64,14 @@
private TriggerSensor mPickupSensor;
private PowerManager mPowerManager;
private PowerManager.WakeLock mWakeLock;
- private AlarmManager mAlarmManager;
private UiModeManager mUiModeManager;
private boolean mDreaming;
private boolean mPulsing;
private boolean mBroadcastReceiverRegistered;
private boolean mDisplayStateSupported;
- private boolean mNotificationLightOn;
private boolean mPowerSaveActive;
private boolean mCarMode;
private long mNotificationPulseTime;
- private long mLastScheduleResetTime;
- private long mEarliestPulseDueToLight;
- private int mScheduleResetsRemaining;
public DozeService() {
if (DEBUG) Log.d(mTag, "new DozeService()");
@@ -110,11 +89,11 @@
pw.print(" mSigMotionSensor: "); pw.println(mSigMotionSensor);
pw.print(" mPickupSensor:"); pw.println(mPickupSensor);
pw.print(" mDisplayStateSupported: "); pw.println(mDisplayStateSupported);
- pw.print(" mNotificationLightOn: "); pw.println(mNotificationLightOn);
pw.print(" mPowerSaveActive: "); pw.println(mPowerSaveActive);
pw.print(" mCarMode: "); pw.println(mCarMode);
- pw.print(" mNotificationPulseTime: "); pw.println(mNotificationPulseTime);
- pw.print(" mScheduleResetsRemaining: "); pw.println(mScheduleResetsRemaining);
+ pw.print(" mNotificationPulseTime: "); pw.println(
+ DozeLog.FORMAT.format(new Date(mNotificationPulseTime
+ - SystemClock.elapsedRealtime() + System.currentTimeMillis())));
mDozeParameters.dump(pw);
}
@@ -141,7 +120,6 @@
mPowerManager = (PowerManager) mContext.getSystemService(Context.POWER_SERVICE);
mWakeLock = mPowerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TAG);
mWakeLock.setReferenceCounted(true);
- mAlarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE);
mDisplayStateSupported = mDozeParameters.getDisplayStateSupported();
mUiModeManager = (UiModeManager) mContext.getSystemService(Context.UI_MODE_SERVICE);
turnDisplayOff();
@@ -176,8 +154,6 @@
}
mDreaming = true;
- rescheduleNotificationPulse(false /*predicate*/); // cancel any pending pulse alarms
- mEarliestPulseDueToLight = System.currentTimeMillis() + EARLIEST_LIGHT_PULSE_AFTER_START_MS;
listenForPulseSignals(true);
// Ask the host to get things ready to start dozing.
@@ -316,7 +292,6 @@
private void listenForBroadcasts(boolean listen) {
if (listen) {
final IntentFilter filter = new IntentFilter(PULSE_ACTION);
- filter.addAction(NOTIFICATION_PULSE_ACTION);
filter.addAction(UiModeManager.ACTION_ENTER_CAR_MODE);
mContext.registerReceiver(mBroadcastReceiver, filter);
mBroadcastReceiverRegistered = true;
@@ -330,93 +305,17 @@
private void listenForNotifications(boolean listen) {
if (listen) {
- resetNotificationResets();
mHost.addCallback(mHostCallback);
-
- // Continue to pulse for existing LEDs.
- mNotificationLightOn = mHost.isNotificationLightOn();
- if (mNotificationLightOn) {
- updateNotificationPulseDueToLight();
- }
} else {
mHost.removeCallback(mHostCallback);
}
}
- private void resetNotificationResets() {
- if (DEBUG) Log.d(mTag, "resetNotificationResets");
- mScheduleResetsRemaining = mDozeParameters.getPulseScheduleResets();
- }
-
- private void updateNotificationPulseDueToLight() {
- long timeMs = System.currentTimeMillis();
- timeMs = Math.max(timeMs, mEarliestPulseDueToLight);
- updateNotificationPulse(timeMs);
- }
-
- private void updateNotificationPulse(long notificationTimeMs) {
- if (DEBUG) Log.d(mTag, "updateNotificationPulse notificationTimeMs=" + notificationTimeMs);
+ private void requestNotificationPulse() {
+ if (DEBUG) Log.d(mTag, "requestNotificationPulse");
if (!mDozeParameters.getPulseOnNotifications()) return;
- if (mScheduleResetsRemaining <= 0) {
- if (DEBUG) Log.d(mTag, "No more schedule resets remaining");
- return;
- }
- final long pulseDuration = mDozeParameters.getPulseDuration(false /*pickup*/);
- boolean pulseImmediately = System.currentTimeMillis() >= notificationTimeMs;
- if ((notificationTimeMs - mLastScheduleResetTime) >= pulseDuration) {
- mScheduleResetsRemaining--;
- mLastScheduleResetTime = notificationTimeMs;
- } else if (!pulseImmediately){
- if (DEBUG) Log.d(mTag, "Recently updated, not resetting schedule");
- return;
- }
- if (DEBUG) Log.d(mTag, "mScheduleResetsRemaining = " + mScheduleResetsRemaining);
- mNotificationPulseTime = notificationTimeMs;
- if (pulseImmediately) {
- DozeLog.traceNotificationPulse(mContext, 0);
- requestPulse(DozeLog.PULSE_REASON_NOTIFICATION);
- }
- // schedule the rest of the pulses
- rescheduleNotificationPulse(true /*predicate*/);
- }
-
- private PendingIntent notificationPulseIntent(long instance) {
- return PendingIntent.getBroadcast(mContext, 0,
- new Intent(NOTIFICATION_PULSE_ACTION)
- .setPackage(getPackageName())
- .putExtra(EXTRA_INSTANCE, instance)
- .setFlags(Intent.FLAG_RECEIVER_FOREGROUND),
- PendingIntent.FLAG_UPDATE_CURRENT);
- }
-
- private void rescheduleNotificationPulse(boolean predicate) {
- if (DEBUG) Log.d(mTag, "rescheduleNotificationPulse predicate=" + predicate);
- final PendingIntent notificationPulseIntent = notificationPulseIntent(0);
- mAlarmManager.cancel(notificationPulseIntent);
- if (!predicate) {
- if (DEBUG) Log.d(mTag, " don't reschedule: predicate is false");
- return;
- }
- final PulseSchedule schedule = mDozeParameters.getPulseSchedule();
- if (schedule == null) {
- if (DEBUG) Log.d(mTag, " don't reschedule: schedule is null");
- return;
- }
- final long now = System.currentTimeMillis();
- final long time = schedule.getNextTime(now, mNotificationPulseTime);
- if (time <= 0) {
- if (DEBUG) Log.d(mTag, " don't reschedule: time is " + time);
- return;
- }
- final long delta = time - now;
- if (delta <= 0) {
- if (DEBUG) Log.d(mTag, " don't reschedule: delta is " + delta);
- return;
- }
- final long instance = time - mNotificationPulseTime;
- if (DEBUG) Log.d(mTag, "Scheduling pulse " + instance + " in " + delta + "ms for "
- + new Date(time));
- mAlarmManager.setExact(AlarmManager.RTC_WAKEUP, time, notificationPulseIntent(instance));
+ mNotificationPulseTime = SystemClock.elapsedRealtime();
+ requestPulse(DozeLog.PULSE_REASON_NOTIFICATION);
}
private static String triggerEventToString(TriggerEvent event) {
@@ -439,13 +338,6 @@
if (DEBUG) Log.d(mTag, "Received pulse intent");
requestPulse(DozeLog.PULSE_REASON_INTENT);
}
- if (NOTIFICATION_PULSE_ACTION.equals(intent.getAction())) {
- final long instance = intent.getLongExtra(EXTRA_INSTANCE, -1);
- if (DEBUG) Log.d(mTag, "Received notification pulse intent instance=" + instance);
- DozeLog.traceNotificationPulse(mContext, instance);
- requestPulse(DozeLog.PULSE_REASON_NOTIFICATION);
- rescheduleNotificationPulse(mNotificationLightOn);
- }
if (UiModeManager.ACTION_ENTER_CAR_MODE.equals(intent.getAction())) {
mCarMode = true;
if (mCarMode && mDreaming) {
@@ -465,17 +357,13 @@
@Override
public void onBuzzBeepBlinked() {
if (DEBUG) Log.d(mTag, "onBuzzBeepBlinked");
- updateNotificationPulse(System.currentTimeMillis());
+ requestNotificationPulse();
}
@Override
public void onNotificationLight(boolean on) {
- if (DEBUG) Log.d(mTag, "onNotificationLight on=" + on);
- if (mNotificationLightOn == on) return;
- mNotificationLightOn = on;
- if (mNotificationLightOn) {
- updateNotificationPulseDueToLight();
- }
+ if (DEBUG) Log.d(mTag, "onNotificationLight (noop) on=" + on);
+ // noop for now
}
@Override
@@ -564,17 +452,12 @@
requestPulse(mPulseReason, sensorPerformsProxCheck);
updateListener(); // reregister, this sensor only fires once
- // reset the notification pulse schedule, but only if we think we were not triggered
- // by a notification-related vibration
- final long timeSinceNotification = System.currentTimeMillis()
+ // record pickup gesture, also keep track of whether we might have been triggered
+ // by recent vibration.
+ final long timeSinceNotification = SystemClock.elapsedRealtime()
- mNotificationPulseTime;
final boolean withinVibrationThreshold =
timeSinceNotification < mDozeParameters.getPickupVibrationThreshold();
- if (withinVibrationThreshold) {
- if (DEBUG) Log.d(mTag, "Not resetting schedule, recent notification");
- } else {
- resetNotificationResets();
- }
if (mSensor.getType() == Sensor.TYPE_PICK_UP_GESTURE) {
DozeLog.tracePickupPulse(mContext, withinVibrationThreshold);
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
index 84901ee..b393cf7 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardService.java
@@ -90,10 +90,10 @@
}
@Override // Binder interface
- public void setOccluded(boolean isOccluded) {
+ public void setOccluded(boolean isOccluded, boolean animate) {
Trace.beginSection("KeyguardService.mBinder#setOccluded");
checkPermission();
- mKeyguardViewMediator.setOccluded(isOccluded);
+ mKeyguardViewMediator.setOccluded(isOccluded, animate);
Trace.endSection();
}
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
index 433fd00..4449435 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
@@ -16,7 +16,11 @@
package com.android.systemui.keyguard;
-import android.annotation.UserIdInt;
+import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW;
+import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT;
+
import android.app.Activity;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
@@ -82,12 +86,6 @@
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayList;
-import java.util.List;
-
-import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
-import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.SOME_AUTH_REQUIRED_AFTER_USER_REQUEST;
-import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_DPM_LOCK_NOW;
-import static com.android.internal.widget.LockPatternUtils.StrongAuthTracker.STRONG_AUTH_REQUIRED_AFTER_LOCKOUT;
/**
* Mediates requests related to the keyguard. This includes queries about the
@@ -509,7 +507,12 @@
}
}
-
+ @Override
+ public void onHasLockscreenWallpaperChanged(boolean hasLockscreenWallpaper) {
+ synchronized (KeyguardViewMediator.this) {
+ notifyHasLockscreenWallpaperChanged(hasLockscreenWallpaper);
+ }
+ }
};
ViewMediatorCallback mViewMediatorCallback = new ViewMediatorCallback() {
@@ -1111,11 +1114,11 @@
/**
* Notify us when the keyguard is occluded by another window
*/
- public void setOccluded(boolean isOccluded) {
+ public void setOccluded(boolean isOccluded, boolean animate) {
Trace.beginSection("KeyguardViewMediator#setOccluded");
if (DEBUG) Log.d(TAG, "setOccluded " + isOccluded);
mHandler.removeMessages(SET_OCCLUDED);
- Message msg = mHandler.obtainMessage(SET_OCCLUDED, (isOccluded ? 1 : 0), 0);
+ Message msg = mHandler.obtainMessage(SET_OCCLUDED, isOccluded ? 1 : 0, animate ? 1 : 0);
mHandler.sendMessage(msg);
Trace.endSection();
}
@@ -1123,7 +1126,7 @@
/**
* Handles SET_OCCLUDED message sent by setOccluded()
*/
- private void handleSetOccluded(boolean isOccluded) {
+ private void handleSetOccluded(boolean isOccluded, boolean animate) {
Trace.beginSection("KeyguardViewMediator#handleSetOccluded");
synchronized (KeyguardViewMediator.this) {
if (mHiding && isOccluded) {
@@ -1134,7 +1137,7 @@
if (mOccluded != isOccluded) {
mOccluded = isOccluded;
- mStatusBarKeyguardViewManager.setOccluded(isOccluded);
+ mStatusBarKeyguardViewManager.setOccluded(isOccluded, animate);
updateActivityLockScreenState();
adjustStatusBarLocked();
}
@@ -1465,7 +1468,7 @@
break;
case SET_OCCLUDED:
Trace.beginSection("KeyguardViewMediator#handleMessage SET_OCCLUDED");
- handleSetOccluded(msg.arg1 != 0);
+ handleSetOccluded(msg.arg1 != 0, msg.arg2 != 0);
Trace.endSection();
break;
case KEYGUARD_TIMEOUT:
@@ -2014,6 +2017,21 @@
}
}
+ private void notifyHasLockscreenWallpaperChanged(boolean hasLockscreenWallpaper) {
+ int size = mKeyguardStateCallbacks.size();
+ for (int i = size - 1; i >= 0; i--) {
+ try {
+ mKeyguardStateCallbacks.get(i).onHasLockscreenWallpaperChanged(
+ hasLockscreenWallpaper);
+ } catch (RemoteException e) {
+ Slog.w(TAG, "Failed to call onHasLockscreenWallpaperChanged", e);
+ if (e instanceof DeadObjectException) {
+ mKeyguardStateCallbacks.remove(i);
+ }
+ }
+ }
+ }
+
public void addStateMonitorCallback(IKeyguardStateCallback callback) {
synchronized (this) {
mKeyguardStateCallbacks.add(callback);
@@ -2023,6 +2041,7 @@
callback.onInputRestrictedStateChanged(mInputRestricted);
callback.onTrustedChanged(mUpdateMonitor.getUserHasTrust(
KeyguardUpdateMonitor.getCurrentUser()));
+ callback.onHasLockscreenWallpaperChanged(mUpdateMonitor.hasLockscreenWallpaper());
} catch (RemoteException e) {
Slog.w(TAG, "Failed to call to IKeyguardStateCallback", e);
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java b/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java
index ac90ce7..19a5d52 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSContainer.java
@@ -237,6 +237,10 @@
mQSPanel.setListening(mListening && mQsExpanded);
}
+ public void setHeaderListening(boolean listening) {
+ mHeader.setListening(listening);
+ }
+
public void setQsExpansion(float expansion, float headerTranslation) {
if (DEBUG) Log.d(TAG, "setQSExpansion " + expansion + " " + headerTranslation);
mQsExpansion = expansion;
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
index 65d6805..4ac629d 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSFooter.java
@@ -120,14 +120,13 @@
mFooterTextId = R.string.device_owned_footer;
mIsVisible = true;
} else {
- mFooterTextId = R.string.vpn_footer;
+ boolean isBranded = mSecurityController.isVpnBranded();
+ mFooterTextId = isBranded ? R.string.branded_vpn_footer : R.string.vpn_footer;
// Update the VPN footer icon, if needed.
- int footerIconId = (mSecurityController.isVpnBranded()
- ? R.drawable.ic_qs_branded_vpn
- : R.drawable.ic_qs_vpn);
+ int footerIconId = isBranded ? R.drawable.ic_qs_branded_vpn : R.drawable.ic_qs_vpn;
if (mFooterIconId != footerIconId) {
- mFooterIcon.setImageResource(footerIconId);
mFooterIconId = footerIconId;
+ mMainHandler.post(mUpdateIcon);
}
mIsVisible = mIsIconVisible;
}
@@ -148,11 +147,15 @@
String primaryVpn = mSecurityController.getPrimaryVpnName();
String profileVpn = mSecurityController.getProfileVpnName();
boolean managed = mSecurityController.hasProfileOwner();
+ boolean isBranded = deviceOwner == null && mSecurityController.isVpnBranded();
mDialog = new SystemUIDialog(mContext);
- mDialog.setTitle(getTitle(deviceOwner));
- mDialog.setMessage(getMessage(deviceOwner, profileOwner, primaryVpn, profileVpn, managed));
- mDialog.setButton(DialogInterface.BUTTON_POSITIVE, getPositiveButton(), this);
+ if (!isBranded) {
+ mDialog.setTitle(getTitle(deviceOwner));
+ }
+ mDialog.setMessage(getMessage(deviceOwner, profileOwner, primaryVpn, profileVpn, managed,
+ isBranded));
+ mDialog.setButton(DialogInterface.BUTTON_POSITIVE, getPositiveButton(isBranded), this);
if (mSecurityController.isVpnEnabled() && !mSecurityController.isVpnRestricted()) {
mDialog.setButton(DialogInterface.BUTTON_NEGATIVE, getSettingsButton(), this);
}
@@ -163,12 +166,12 @@
return mContext.getString(R.string.status_bar_settings_settings_button);
}
- private String getPositiveButton() {
- return mContext.getString(R.string.quick_settings_done);
+ private String getPositiveButton(boolean isBranded) {
+ return mContext.getString(isBranded ? android.R.string.ok : R.string.quick_settings_done);
}
private String getMessage(String deviceOwner, String profileOwner, String primaryVpn,
- String profileVpn, boolean primaryUserIsManaged) {
+ String profileVpn, boolean primaryUserIsManaged, boolean isBranded) {
// Show a special warning when the device has device owner, but --
// TODO See b/25779452 -- device owner doesn't actually have monitoring power.
if (deviceOwner != null) {
@@ -184,8 +187,12 @@
return mContext.getString(R.string.monitoring_description_app_personal_work,
profileOwner, profileVpn, primaryVpn);
} else {
- return mContext.getString(R.string.monitoring_description_app_personal,
- primaryVpn);
+ if (isBranded) {
+ return mContext.getString(R.string.branded_monitoring_description_app_personal);
+ } else {
+ return mContext.getString(R.string.monitoring_description_app_personal,
+ primaryVpn);
+ }
}
} else if (profileVpn != null) {
return mContext.getString(R.string.monitoring_description_app_work,
@@ -207,6 +214,13 @@
}
}
+ private final Runnable mUpdateIcon = new Runnable() {
+ @Override
+ public void run() {
+ mFooterIcon.setImageResource(mFooterIconId);
+ }
+ };
+
private final Runnable mUpdateDisplayState = new Runnable() {
@Override
public void run() {
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
index 385b835..fef8930 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/QSPanel.java
@@ -246,10 +246,12 @@
if (mListening) {
refreshAllTiles();
}
- if (listening) {
- mBrightnessController.registerCallbacks();
- } else {
- mBrightnessController.unregisterCallbacks();
+ if (mBrightnessView.getVisibility() == View.VISIBLE) {
+ if (listening) {
+ mBrightnessController.registerCallbacks();
+ } else {
+ mBrightnessController.unregisterCallbacks();
+ }
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
index 681005c..17ce0cb 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileLifecycleManager.java
@@ -65,6 +65,9 @@
private static final int MAX_BIND_RETRIES = 5;
private static final int BIND_RETRY_DELAY = 1000;
+ // Shared prefs that hold tile lifecycle info.
+ private static final String TILES = "tiles_prefs";
+
private final Context mContext;
private final Handler mHandler;
private final Intent mIntent;
@@ -126,6 +129,12 @@
}
public void setBindService(boolean bind) {
+ if (mBound && mUnbindImmediate) {
+ // If we are already bound and expecting to unbind, this means we should stay bound
+ // because something else wants to hold the connection open.
+ mUnbindImmediate = false;
+ return;
+ }
mBound = bind;
if (bind) {
if (mBindTryCount == MAX_BIND_RETRIES) {
@@ -406,4 +415,13 @@
public interface TileChangeListener {
void onTileChanged(ComponentName tile);
}
+
+ public static boolean isTileAdded(Context context, ComponentName component) {
+ return context.getSharedPreferences(TILES, 0).getBoolean(component.flattenToString(), false);
+ }
+
+ public static void setTileAdded(Context context, ComponentName component, boolean added) {
+ context.getSharedPreferences(TILES, 0).edit().putBoolean(component.flattenToString(),
+ added).commit();
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
index f3e4d60..91a0eb0 100644
--- a/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
+++ b/packages/SystemUI/src/com/android/systemui/qs/external/TileServiceManager.java
@@ -88,8 +88,15 @@
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_PACKAGE_REMOVED);
filter.addDataScheme("package");
- mServices.getContext().registerReceiverAsUser(mUninstallReceiver,
+ Context context = mServices.getContext();
+ context.registerReceiverAsUser(mUninstallReceiver,
new UserHandle(ActivityManager.getCurrentUser()), filter, null, mHandler);
+ ComponentName component = tileLifecycleManager.getComponent();
+ if (!TileLifecycleManager.isTileAdded(context, component)) {
+ TileLifecycleManager.setTileAdded(context, component, true);
+ mStateManager.onTileAdded();
+ mStateManager.flushMessagesAndUnbind();
+ }
}
public void setTileChangeListener(TileChangeListener changeListener) {
diff --git a/packages/SystemUI/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl b/packages/SystemUI/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl
index 9403664..9214eef 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl
+++ b/packages/SystemUI/src/com/android/systemui/recents/IRecentsNonSystemUserCallbacks.aidl
@@ -35,4 +35,5 @@
in Rect initialBounds);
void onDraggingInRecents(float distanceFromTop);
void onDraggingInRecentsEnded(float velocity);
+ void showCurrentUserToast(int msgResId, int msgLength);
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/Recents.java b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
index e117bfe..7207463 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/Recents.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/Recents.java
@@ -18,10 +18,12 @@
import android.app.ActivityManager;
import android.app.UiModeManager;
+import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
import android.content.Intent;
+import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.content.pm.ActivityInfo;
import android.content.res.Configuration;
@@ -53,6 +55,7 @@
import com.android.systemui.recents.events.activity.RecentsActivityStartingEvent;
import com.android.systemui.recents.events.component.RecentsVisibilityChangedEvent;
import com.android.systemui.recents.events.component.ScreenPinningRequestEvent;
+import com.android.systemui.recents.events.component.ShowUserToastEvent;
import com.android.systemui.recents.events.ui.RecentsDrawnEvent;
import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.recents.model.RecentsTaskLoader;
@@ -96,7 +99,7 @@
// and does not reside in the home stack.
private String mOverrideRecentsPackageName;
- private Handler mHandler;
+ private Handler mHandler = new Handler();
private RecentsImpl mImpl;
private int mDraggingInRecentsCurrentUser;
@@ -162,6 +165,20 @@
}
};
+
+ private BroadcastReceiver mSystemUserUnlockedReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (Intent.ACTION_USER_UNLOCKED.equals(intent.getAction())) {
+ int userId = intent.getIntExtra(Intent.EXTRA_USER_HANDLE, UserHandle.USER_NULL);
+ if (userId != UserHandle.USER_NULL) {
+ mImpl.onUserUnlocked(userId);
+ }
+ }
+ }
+ };
+
+
/**
* Returns the callbacks interface that non-system users can call.
*/
@@ -191,7 +208,7 @@
sSystemServicesProxy = SystemServicesProxy.getInstance(mContext);
sTaskLoader = new RecentsTaskLoader(mContext);
sConfiguration = new RecentsConfiguration(mContext);
- mHandler = new Handler();
+
UiModeManager uiModeManager = (UiModeManager) mContext.
getSystemService(Context.UI_MODE_SERVICE);
if (uiModeManager.getCurrentModeType() == Configuration.UI_MODE_TYPE_TELEVISION) {
@@ -221,6 +238,12 @@
// For the system user, initialize an instance of the interface that we can pass to the
// secondary user
mSystemToUserCallbacks = new RecentsSystemUser(mContext, mImpl);
+
+ // Listen for user-unlocked to kick off preloading recents
+ IntentFilter filter = new IntentFilter();
+ filter.addAction(Intent.ACTION_USER_UNLOCKED);
+ mContext.registerReceiverAsUser(mSystemUserUnlockedReceiver, UserHandle.SYSTEM, filter,
+ null /* permission */, null /* scheduler */);
} else {
// For the secondary user, bind to the primary user's service to get a persistent
// interface to register its implementation and to later update its state
@@ -455,8 +478,8 @@
mDraggingInRecentsCurrentUser = currentUser;
return true;
} else {
- Toast.makeText(mContext, R.string.recents_incompatible_app_message,
- Toast.LENGTH_SHORT).show();
+ EventBus.getDefault().send(new ShowUserToastEvent(
+ R.string.recents_incompatible_app_message, Toast.LENGTH_SHORT));
return false;
}
} else {
@@ -674,6 +697,27 @@
mImpl.onConfigurationChanged();
}
+ public final void onBusEvent(ShowUserToastEvent event) {
+ int currentUser = sSystemServicesProxy.getCurrentUser();
+ if (sSystemServicesProxy.isSystemUser(currentUser)) {
+ mImpl.onShowCurrentUserToast(event.msgResId, event.msgLength);
+ } else {
+ if (mSystemToUserCallbacks != null) {
+ IRecentsNonSystemUserCallbacks callbacks =
+ mSystemToUserCallbacks.getNonSystemUserRecentsForUser(currentUser);
+ if (callbacks != null) {
+ try {
+ callbacks.showCurrentUserToast(event.msgResId, event.msgLength);
+ } catch (RemoteException e) {
+ Log.e(TAG, "Callback failed", e);
+ }
+ } else {
+ Log.e(TAG, "No SystemUI callbacks found for user: " + currentUser);
+ }
+ }
+ }
+ }
+
/**
* Attempts to register with the system user.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
index 2757fc4..a7f2716 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImpl.java
@@ -40,6 +40,7 @@
import android.view.ViewConfiguration;
import android.view.WindowManager;
+import android.widget.Toast;
import com.android.internal.logging.MetricsLogger;
import com.android.internal.policy.DockedDividerUtils;
import com.android.systemui.R;
@@ -186,7 +187,7 @@
reloadResources();
}
- public void onBootCompleted() {
+ public void onUserUnlocked(int userId) {
// When we start, preload the data associated with the previous recent tasks.
// We can use a new plan since the caches will be the same.
RecentsTaskLoader loader = Recents.getTaskLoader();
@@ -199,6 +200,10 @@
loader.loadTasks(mContext, plan, launchOpts);
}
+ public void onBootCompleted() {
+ // Do nothing
+ }
+
public void onConfigurationChanged() {
reloadResources();
mDummyStackView.reloadOnConfigurationChange();
@@ -392,6 +397,10 @@
EventBus.getDefault().sendOntoMainThread(new DraggingInRecentsEndedEvent(velocity));
}
+ public void onShowCurrentUserToast(int msgResId, int msgLength) {
+ Toast.makeText(mContext, msgResId, msgLength).show();
+ }
+
/**
* Transitions to the next recent task in the stack.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/recents/RecentsImplProxy.java b/packages/SystemUI/src/com/android/systemui/recents/RecentsImplProxy.java
index 60bf760..ff9e89e9 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/RecentsImplProxy.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/RecentsImplProxy.java
@@ -38,6 +38,7 @@
private static final int MSG_DOCK_TOP_TASK = 7;
private static final int MSG_ON_DRAGGING_IN_RECENTS = 8;
private static final int MSG_ON_DRAGGING_IN_RECENTS_ENDED = 9;
+ private static final int MSG_SHOW_USER_TOAST = 10;
private RecentsImpl mImpl;
@@ -109,6 +110,11 @@
mHandler.sendMessage(mHandler.obtainMessage(MSG_ON_DRAGGING_IN_RECENTS_ENDED, velocity));
}
+ @Override
+ public void showCurrentUserToast(int msgResId, int msgLength) {
+ mHandler.sendMessage(mHandler.obtainMessage(MSG_SHOW_USER_TOAST, msgResId, msgLength));
+ }
+
private final Handler mHandler = new Handler() {
@Override
@@ -147,6 +153,9 @@
case MSG_ON_DRAGGING_IN_RECENTS_ENDED:
mImpl.onDraggingInRecentsEnded((Float) msg.obj);
break;
+ case MSG_SHOW_USER_TOAST:
+ mImpl.onShowCurrentUserToast(msg.arg1, msg.arg2);
+ break;
default:
super.handleMessage(msg);
}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/events/component/ShowUserToastEvent.java b/packages/SystemUI/src/com/android/systemui/recents/events/component/ShowUserToastEvent.java
new file mode 100644
index 0000000..e2b39c3
--- /dev/null
+++ b/packages/SystemUI/src/com/android/systemui/recents/events/component/ShowUserToastEvent.java
@@ -0,0 +1,33 @@
+/*
+ * 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.systemui.recents.events.component;
+
+import com.android.systemui.recents.events.EventBus;
+
+/**
+ * This is sent when we want to show a toast for the current user.
+ */
+public class ShowUserToastEvent extends EventBus.Event {
+
+ public final int msgResId;
+ public final int msgLength;
+
+ public ShowUserToastEvent(int msgResId, int msgLength) {
+ this.msgResId = msgResId;
+ this.msgLength = msgLength;
+ }
+}
diff --git a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
index 702b076d..fce7f9d 100644
--- a/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
+++ b/packages/SystemUI/src/com/android/systemui/recents/views/TaskStackLayoutAlgorithm.java
@@ -1258,7 +1258,7 @@
String innerPrefix = prefix + " ";
writer.print(prefix); writer.print(TAG);
- writer.write(" numStackTasks="); writer.write(mNumStackTasks);
+ writer.write(" numStackTasks="); writer.print(mNumStackTasks);
writer.println();
writer.print(innerPrefix);
diff --git a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
index 5f083d5..5920f46 100644
--- a/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
+++ b/packages/SystemUI/src/com/android/systemui/stackdivider/ForcedResizableInfoActivityController.java
@@ -20,12 +20,14 @@
import android.content.Context;
import android.content.Intent;
import android.os.Handler;
+import android.os.UserHandle;
import android.util.ArraySet;
import android.widget.Toast;
import com.android.systemui.R;
import com.android.systemui.recents.events.EventBus;
import com.android.systemui.recents.events.activity.AppTransitionFinishedEvent;
+import com.android.systemui.recents.events.component.ShowUserToastEvent;
import com.android.systemui.recents.misc.SystemServicesProxy;
import com.android.systemui.recents.misc.SystemServicesProxy.TaskStackListener;
import com.android.systemui.stackdivider.events.StartedDragingEvent;
@@ -100,9 +102,8 @@
}
private void activityDismissingDockedStack() {
- Toast toast = Toast.makeText(mContext, R.string.dock_non_resizeble_failed_to_dock_text,
- Toast.LENGTH_SHORT);
- toast.show();
+ EventBus.getDefault().send(new ShowUserToastEvent(
+ R.string.dock_non_resizeble_failed_to_dock_text, Toast.LENGTH_SHORT));
}
private void showPending() {
@@ -112,7 +113,7 @@
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchTaskId(mPendingTaskIds.valueAt(i));
options.setTaskOverlay(true);
- mContext.startActivity(intent, options.toBundle());
+ mContext.startActivityAsUser(intent, options.toBundle(), UserHandle.CURRENT);
}
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 c575417..a1854fa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/BaseStatusBar.java
@@ -2517,8 +2517,7 @@
boolean inUse = mPowerManager.isScreenOn()
&& (!mStatusBarKeyguardViewManager.isShowing()
- || mStatusBarKeyguardViewManager.isOccluded())
- && !mStatusBarKeyguardViewManager.isInputRestricted();
+ || mStatusBarKeyguardViewManager.isOccluded());
try {
inUse = inUse && !mDreamManager.isDreaming();
} catch (RemoteException e) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index 02fdd3f..68de16b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -507,7 +507,7 @@
int intrinsicHeight = getIntrinsicHeight();
mIsPinned = pinned;
if (intrinsicHeight != getIntrinsicHeight()) {
- notifyHeightChanged(false);
+ notifyHeightChanged(false /* needsAnimation */);
}
if (pinned) {
setIconAnimationRunning(true);
@@ -840,8 +840,6 @@
}
public void resetHeight() {
- mMaxExpandHeight = 0;
- mHeadsUpHeight = 0;
onHeightReset();
requestLayout();
}
@@ -1290,7 +1288,7 @@
}
mHeadsUpHeight = headsUpChild.getHeight();
if (intrinsicBefore != getIntrinsicHeight()) {
- notifyHeightChanged(false /* needsAnimation */);
+ notifyHeightChanged(true /* needsAnimation */);
}
}
@@ -1398,7 +1396,7 @@
if (isChildInGroup()) {
mGroupManager.setGroupExpanded(mStatusBarNotification, true);
}
- notifyHeightChanged(false);
+ notifyHeightChanged(false /* needsAnimation */);
}
public void setChildrenExpanded(boolean expanded, boolean animate) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
index 6d73ccb..cf962df 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
@@ -93,8 +93,10 @@
ServiceManager.getService(BatteryStats.SERVICE_NAME));
KeyguardUpdateMonitor.getInstance(context).registerCallback(mUpdateMonitor);
- context.registerReceiverAsUser(mReceiver, UserHandle.SYSTEM,
+ context.registerReceiverAsUser(mTickReceiver, UserHandle.SYSTEM,
new IntentFilter(Intent.ACTION_TIME_TICK), null, null);
+ context.registerReceiverAsUser(mUnlockReceiver, UserHandle.ALL,
+ new IntentFilter(Intent.ACTION_USER_UNLOCKED), null, null);
}
public void setVisible(boolean visible) {
@@ -322,7 +324,16 @@
}
};
- BroadcastReceiver mReceiver = new BroadcastReceiver() {
+ BroadcastReceiver mTickReceiver = new BroadcastReceiver() {
+ @Override
+ public void onReceive(Context context, Intent intent) {
+ if (mVisible) {
+ updateIndication();
+ }
+ }
+ };
+
+ BroadcastReceiver mUnlockReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (mVisible) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java
index 9b3ed33..efceed1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/DozeParameters.java
@@ -38,8 +38,6 @@
private final Context mContext;
- private static PulseSchedule sPulseSchedule;
-
private static IntInOutMatcher sPickupSubtypePerformsProxMatcher;
public DozeParameters(Context context) {
@@ -61,8 +59,6 @@
pw.print(" getVibrateOnPickup(): "); pw.println(getVibrateOnPickup());
pw.print(" getProxCheckBeforePulse(): "); pw.println(getProxCheckBeforePulse());
pw.print(" getPulseOnNotifications(): "); pw.println(getPulseOnNotifications());
- pw.print(" getPulseSchedule(): "); pw.println(getPulseSchedule());
- pw.print(" getPulseScheduleResets(): "); pw.println(getPulseScheduleResets());
pw.print(" getPickupVibrationThreshold(): "); pw.println(getPickupVibrationThreshold());
pw.print(" getPickupSubtypePerformsProxCheck(): ");pw.println(
dumpPickupSubtypePerformsProxCheck());
@@ -126,18 +122,6 @@
return getBoolean("doze.pulse.notifications", R.bool.doze_pulse_on_notifications);
}
- public PulseSchedule getPulseSchedule() {
- final String spec = getString("doze.pulse.schedule", R.string.doze_pulse_schedule);
- if (sPulseSchedule == null || !sPulseSchedule.mSpec.equals(spec)) {
- sPulseSchedule = PulseSchedule.parse(spec);
- }
- return sPulseSchedule;
- }
-
- public int getPulseScheduleResets() {
- return getInt("doze.pulse.schedule.resets", R.integer.doze_pulse_schedule_resets);
- }
-
public int getPickupVibrationThreshold() {
return getInt("doze.pickup.vibration.threshold", R.integer.doze_pickup_vibration_threshold);
}
@@ -249,44 +233,4 @@
return (mIsIn.get(value, mDefaultIsIn));
}
}
-
- public static class PulseSchedule {
- private static final Pattern PATTERN = Pattern.compile("(\\d+?)s", 0);
-
- private String mSpec;
- private int[] mSchedule;
-
- public static PulseSchedule parse(String spec) {
- if (TextUtils.isEmpty(spec)) return null;
- try {
- final PulseSchedule rt = new PulseSchedule();
- rt.mSpec = spec;
- final String[] tokens = spec.split(",");
- rt.mSchedule = new int[tokens.length];
- for (int i = 0; i < tokens.length; i++) {
- final Matcher m = PATTERN.matcher(tokens[i]);
- if (!m.matches()) throw new IllegalArgumentException("Bad token: " + tokens[i]);
- rt.mSchedule[i] = Integer.parseInt(m.group(1));
- }
- if (DEBUG) Log.d(TAG, "Parsed spec [" + spec + "] as: " + rt);
- return rt;
- } catch (RuntimeException e) {
- Log.w(TAG, "Error parsing spec: " + spec, e);
- return null;
- }
- }
-
- @Override
- public String toString() {
- return Arrays.toString(mSchedule);
- }
-
- public long getNextTime(long now, long notificationTime) {
- for (int i = 0; i < mSchedule.length; i++) {
- final long time = notificationTime + mSchedule[i] * 1000;
- if (time > now) return time;
- }
- return 0;
- }
- }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
index 048c4bd..8cabfb9 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
@@ -461,7 +461,7 @@
// happens to occur during the launch.
ActivityOptions o = ActivityOptions.makeBasic();
o.setRotationAnimationHint(
- WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE);
+ WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS);
try {
result = ActivityManagerNative.getDefault().startActivityAsUser(
null, getContext().getBasePackageName(),
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
index 93ed139..41b0bb2 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
@@ -308,6 +308,7 @@
super.setVisibility(visibility);
if (visibility != View.VISIBLE) {
mSystemIconsSuperContainer.animate().cancel();
+ mSystemIconsSuperContainer.setTranslationX(0);
mMultiUserSwitch.animate().cancel();
mMultiUserSwitch.setAlpha(1f);
} else {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightStatusBarController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightStatusBarController.java
index f98b9e5..df4566b 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightStatusBarController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LightStatusBarController.java
@@ -27,7 +27,7 @@
/**
* Controls how light status bar flag applies to the icons.
*/
-public class LightStatusBarController {
+public class LightStatusBarController implements BatteryController.BatteryStateChangeCallback {
private final StatusBarIconController mIconController;
private final BatteryController mBatteryController;
@@ -37,6 +37,7 @@
private int mDockedStackVisibility;
private boolean mFullscreenLight;
private boolean mDockedLight;
+ private int mLastStatusBarMode;
private final Rect mLastFullscreenBounds = new Rect();
private final Rect mLastDockedBounds = new Rect();
@@ -45,6 +46,7 @@
BatteryController batteryController) {
mIconController = iconController;
mBatteryController = batteryController;
+ batteryController.addStateChangedCallback(this);
}
public void setFingerprintUnlockController(
@@ -73,6 +75,7 @@
}
mFullscreenStackVisibility = newFullscreen;
mDockedStackVisibility = newDocked;
+ mLastStatusBarMode = statusBarMode;
mLastFullscreenBounds.set(fullscreenStackBounds);
mLastDockedBounds.set(dockedStackBounds);
}
@@ -123,4 +126,16 @@
mIconController.setIconsDark(true, animateChange());
}
}
+
+ @Override
+ public void onBatteryLevelChanged(int level, boolean pluggedIn, boolean charging) {
+
+ }
+
+ @Override
+ public void onPowerSaveChanged(boolean isPowerSave) {
+ onSystemUiVisibilityChanged(mFullscreenStackVisibility, mDockedStackVisibility,
+ 0 /* mask */, mLastFullscreenBounds, mLastDockedBounds, true /* sbModeChange*/,
+ mLastStatusBarMode);
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
index ef19d95..2be47e4 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
@@ -26,6 +26,7 @@
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Rect;
+import android.graphics.Xfermode;
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.Drawable;
import android.graphics.drawable.DrawableWrapper;
@@ -37,6 +38,8 @@
import android.os.UserHandle;
import android.util.Log;
+import com.android.keyguard.KeyguardUpdateMonitor;
+
import libcore.io.IoUtils;
import java.util.Objects;
@@ -51,6 +54,7 @@
private final PhoneStatusBar mBar;
private final WallpaperManager mWallpaperManager;
private final Handler mH;
+ private final KeyguardUpdateMonitor mUpdateMonitor;
private boolean mCached;
private Bitmap mCache;
@@ -65,6 +69,7 @@
mH = h;
mWallpaperManager = (WallpaperManager) ctx.getSystemService(Context.WALLPAPER_SERVICE);
mCurrentUserId = ActivityManager.getCurrentUser();
+ mUpdateMonitor = KeyguardUpdateMonitor.getInstance(ctx);
IWallpaperManager service = IWallpaperManager.Stub.asInterface(
ServiceManager.getService(Context.WALLPAPER_SERVICE));
@@ -88,6 +93,7 @@
LoaderResult result = loadBitmap(mCurrentUserId, mSelectedUser);
if (result.success) {
mCached = true;
+ mUpdateMonitor.setHasLockscreenWallpaper(result.bitmap != null);
mCache = result.bitmap;
}
return mCache;
@@ -180,6 +186,7 @@
if (result.success) {
mCached = true;
mCache = result.bitmap;
+ mUpdateMonitor.setHasLockscreenWallpaper(result.bitmap != null);
mBar.updateMediaMetaData(
true /* metaDataChanged */, true /* allowEnterAnimation */);
}
@@ -224,6 +231,12 @@
}
@Override
+ public void setXfermode(@Nullable Xfermode mode) {
+ // DrawableWrapper does not call this for us.
+ getDrawable().setXfermode(mode);
+ }
+
+ @Override
public int getIntrinsicWidth() {
return -1;
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
index 51ff29e..45d51b0 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
@@ -54,7 +54,7 @@
public class NavigationBarView extends LinearLayout {
final static boolean DEBUG = false;
- final static String TAG = "PhoneStatusBar/NavigationBarView";
+ final static String TAG = "StatusBar/NavBarView";
// slippery nav bar when everything is disabled, e.g. during setup
final static boolean SLIPPERY_WHEN_DISABLED = true;
@@ -527,8 +527,8 @@
updateCurrentView();
}
- public boolean needsReorient() {
- return mCurrentRotation != mDisplay.getRotation();
+ public boolean needsReorient(int rotation) {
+ return mCurrentRotation != rotation;
}
private void updateCurrentView() {
@@ -567,7 +567,7 @@
setMenuVisibility(mShowMenu, true /* force */);
if (DEBUG) {
- Log.d(TAG, "reorient(): rot=" + mDisplay.getRotation());
+ Log.d(TAG, "reorient(): rot=" + mCurrentRotation);
}
updateTaskSwitchHelper();
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 1755cc6..2c8339a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationGroupManager.java
@@ -42,7 +42,7 @@
private int mBarState = -1;
private HashMap<String, StatusBarNotification> mIsolatedEntries = new HashMap<>();
private HeadsUpManager mHeadsUpManager;
- private boolean mUpdatingSuppressionBlocked;
+ private boolean mIsUpdatingUnchangedGroup;
public void setOnGroupChangeListener(OnGroupChangeListener listener) {
mListener = listener;
@@ -141,7 +141,7 @@
}
private void updateSuppression(NotificationGroup group) {
- if (group == null || mUpdatingSuppressionBlocked) {
+ if (group == null) {
return;
}
boolean prevSuppressed = group.suppressed;
@@ -154,7 +154,9 @@
if (group.suppressed) {
handleSuppressedSummaryHeadsUpped(group.summary);
}
- mListener.onGroupsChanged();
+ if (!mIsUpdatingUnchangedGroup) {
+ mListener.onGroupsChanged();
+ }
}
}
@@ -188,12 +190,12 @@
boolean groupKeysChanged = !oldKey.equals(newKey);
boolean wasGroupChild = isGroupChild(oldNotification);
boolean isGroupChild = isGroupChild(entry.notification);
- mUpdatingSuppressionBlocked = !groupKeysChanged && wasGroupChild == isGroupChild;
+ mIsUpdatingUnchangedGroup = !groupKeysChanged && wasGroupChild == isGroupChild;
if (mGroupMap.get(getGroupKey(oldNotification)) != null) {
onEntryRemovedInternal(entry, oldNotification);
}
onEntryAdded(entry);
- mUpdatingSuppressionBlocked = false;
+ mIsUpdatingUnchangedGroup = false;
if (isIsolated(entry.notification)) {
mIsolatedEntries.put(entry.key, entry.notification);
if (groupKeysChanged) {
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
index d3ab392..f4b41bb 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
@@ -1617,6 +1617,9 @@
if (mQsExpanded) {
onQsExpansionStarted();
}
+ // Since there are QS tiles in the header now, we need to make sure we start listening
+ // immediately so they can be up to date.
+ mQsContainer.setHeaderListening(true);
}
@Override
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
index af85101..a6a5742 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
@@ -92,6 +92,7 @@
* Whether an instant expand request is currently pending and we are just waiting for layout.
*/
private boolean mInstantExpanding;
+ private boolean mAnimateAfterExpanding;
PanelBar mBar;
@@ -656,7 +657,7 @@
vel = 0;
}
mFlingAnimationUtils.apply(animator, mExpandedHeight, target, vel, getHeight());
- if (expandBecauseOfFalsing) {
+ if (vel == 0) {
animator.setDuration(350);
}
} else {
@@ -870,6 +871,7 @@
}
mInstantExpanding = true;
+ mAnimateAfterExpanding = animate;
mUpdateFlingOnLayout = false;
abortAnimations();
cancelPeek();
@@ -894,7 +896,7 @@
if (mStatusBar.getStatusBarWindow().getHeight()
!= mStatusBar.getStatusBarHeight()) {
getViewTreeObserver().removeOnGlobalLayoutListener(this);
- if (animate) {
+ if (mAnimateAfterExpanding) {
notifyExpandingStarted();
fling(0, true /* expand */);
} else {
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 b4368d693..b1bea02 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -65,7 +65,6 @@
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
-import android.hardware.display.DisplayManager;
import android.inputmethodservice.InputMethodService;
import android.media.AudioAttributes;
import android.media.MediaMetadata;
@@ -100,6 +99,7 @@
import android.util.EventLog;
import android.util.Log;
import android.view.Display;
+import android.view.IRotationWatcher;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.MotionEvent;
@@ -207,7 +207,7 @@
public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
DragDownHelper.DragDownCallback, ActivityStarter, OnUnlockMethodChangedListener,
- HeadsUpManager.OnHeadsUpChangedListener, DisplayManager.DisplayListener {
+ HeadsUpManager.OnHeadsUpChangedListener {
static final String TAG = "PhoneStatusBar";
public static final boolean DEBUG = BaseStatusBar.DEBUG;
public static final boolean SPEW = false;
@@ -279,6 +279,14 @@
*/
private static final int REMOTE_INPUT_KEPT_ENTRY_AUTO_CANCEL_DELAY = 200;
+ /**
+ * Never let the alpha become zero for surfaces that draw with SRC - otherwise the RenderNode
+ * won't draw anything and uninitialized memory will show through
+ * if mScrimSrcModeEnabled. Note that 0.001 is rounded down to 0 in
+ * libhwui.
+ */
+ private static final float SRC_MIN_ALPHA = 0.002f;
+
static {
boolean onlyCoreApps;
boolean freeformWindowManagement;
@@ -693,8 +701,6 @@
mUnlockMethodCache.addListener(this);
startKeyguard();
- mContext.getSystemService(DisplayManager.class).registerDisplayListener(this, null);
-
mDozeServiceHost = new DozeServiceHost();
KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mDozeServiceHost);
putComponent(DozeHost.class, mDozeServiceHost);
@@ -1411,6 +1417,27 @@
if (DEBUG) Log.v(TAG, "addNavigationBar: about to add " + mNavigationBarView);
if (mNavigationBarView == null) return;
+ try {
+ WindowManagerGlobal.getWindowManagerService()
+ .watchRotation(new IRotationWatcher.Stub() {
+ @Override
+ public void onRotationChanged(int rotation) throws RemoteException {
+ // We need this to be scheduled as early as possible to beat the redrawing of
+ // window in response to the orientation change.
+ Message msg = Message.obtain(mHandler, () -> {
+ if (mNavigationBarView != null
+ && mNavigationBarView.needsReorient(rotation)) {
+ repositionNavigationBar();
+ }
+ });
+ msg.setAsynchronous(true);
+ mHandler.sendMessageAtFrontOfQueue(msg);
+ }
+ });
+ } catch (RemoteException e) {
+ throw e.rethrowFromSystemServer();
+ }
+
prepareNavigationBarView();
mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());
@@ -1591,7 +1618,8 @@
}
Entry entry = mNotificationData.get(key);
- if (entry != null && mRemoteInputController.isRemoteInputActive(entry)) {
+ if (entry != null && mRemoteInputController.isRemoteInputActive(entry)
+ && (entry.row != null && !entry.row.isDismissed())) {
mLatestRankingMap = ranking;
mRemoteInputEntriesToRemoveOnCollapse.add(entry);
return;
@@ -2189,17 +2217,13 @@
if (mBackdrop.getVisibility() != View.VISIBLE) {
mBackdrop.setVisibility(View.VISIBLE);
if (allowEnterAnimation) {
- mBackdrop.animate().alpha(1f).withEndAction(new Runnable() {
- @Override
- public void run() {
- mStatusBarWindowManager.setBackdropShowing(true);
- }
- });
+ mBackdrop.setAlpha(SRC_MIN_ALPHA);
+ mBackdrop.animate().alpha(1f);
} else {
mBackdrop.animate().cancel();
mBackdrop.setAlpha(1f);
- mStatusBarWindowManager.setBackdropShowing(true);
}
+ mStatusBarWindowManager.setBackdropShowing(true);
metaDataChanged = true;
if (DEBUG_MEDIA) {
Log.v(TAG, "DEBUG_MEDIA: Fading in album artwork");
@@ -2262,11 +2286,7 @@
} else {
mStatusBarWindowManager.setBackdropShowing(false);
mBackdrop.animate()
- // Never let the alpha become zero - otherwise the RenderNode
- // won't draw anything and uninitialized memory will show through
- // if mScrimSrcModeEnabled. Note that 0.001 is rounded down to 0 in
- // libhwui.
- .alpha(0.002f)
+ .alpha(SRC_MIN_ALPHA)
.setInterpolator(Interpolators.ACCELERATE_DECELERATE)
.setDuration(300)
.setStartDelay(0)
@@ -2281,7 +2301,6 @@
});
if (mKeyguardFadingAway) {
mBackdrop.animate()
-
// Make it disappear faster, as the focus should be on the activity
// behind.
.setDuration(mKeyguardFadingAwayDuration / 2)
@@ -2516,6 +2535,7 @@
mStatusBarWindowManager.setHeadsUpShowing(false);
mHeadsUpManager.setHeadsUpGoingAway(false);
}
+ removeRemoteInputEntriesKeptUntilCollapsed();
}
});
}
@@ -3419,7 +3439,7 @@
// force the crossfade animation if an orientation change
// happens to occur during the launch.
options.setRotationAnimationHint(
- WindowManager.LayoutParams.ROTATION_ANIMATION_CROSSFADE);
+ WindowManager.LayoutParams.ROTATION_ANIMATION_SEAMLESS);
}
try {
result = ActivityManagerNative.getDefault().startActivityAsUser(
@@ -3587,22 +3607,6 @@
}
@Override
- public void onDisplayAdded(int displayId) {
- }
-
- @Override
- public void onDisplayRemoved(int displayId) {
- }
-
- @Override
- public void onDisplayChanged(int displayId) {
- if (displayId == Display.DEFAULT_DISPLAY
- && mNavigationBarView != null && mNavigationBarView.needsReorient()) {
- repositionNavigationBar();
- }
- }
-
- @Override
public void userSwitched(int newUserId) {
super.userSwitched(newUserId);
if (MULTIUSER_DEBUG) mNotificationPanelDebugText.setText("USER " + newUserId);
@@ -4115,6 +4119,15 @@
}
/**
+ * Plays the animation when an activity that was occluding Keyguard goes away.
+ */
+ public void animateKeyguardUnoccluding() {
+ mScrimController.animateKeyguardUnoccluding(500);
+ mNotificationPanel.setExpandedFraction(0f);
+ animateExpandNotificationsPanel();
+ }
+
+ /**
* Starts the timeout when we try to start the affordances on Keyguard. We usually rely that
* Keyguard goes away via fadeKeyguardAfterLaunchTransition, however, that might not happen
* because the launched app crashed or something else went wrong.
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
index 10facea..da698d8 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/QSTileHost.java
@@ -86,7 +86,7 @@
private static final String TAG = "QSTileHost";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
- public static final String TILES_SETTING = "sysui_qs_tiles";
+ public static final String TILES_SETTING = Secure.QS_TILES;
private final Context mContext;
private final PhoneStatusBar mStatusBar;
@@ -407,19 +407,7 @@
new UserHandle(ActivityManager.getCurrentUser()));
lifecycleManager.onStopListening();
lifecycleManager.onTileRemoved();
- lifecycleManager.flushMessagesAndUnbind();
- }
- }
- for (int i = 0; i < NA; i++) {
- String tileSpec = newTiles.get(i);
- if (!tileSpec.startsWith(CustomTile.PREFIX)) continue;
- if (!previousTiles.contains(tileSpec)) {
- ComponentName component = CustomTile.getComponentFromSpec(tileSpec);
- Intent intent = new Intent().setComponent(component);
- TileLifecycleManager lifecycleManager = new TileLifecycleManager(new Handler(),
- mContext, mServices, new Tile(), intent,
- new UserHandle(ActivityManager.getCurrentUser()));
- lifecycleManager.onTileAdded();
+ TileLifecycleManager.setTileAdded(mContext, component, false);
lifecycleManager.flushMessagesAndUnbind();
}
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
index 8b87a7f..35e084d 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
@@ -176,7 +176,7 @@
mSkipFirstFrame = skipFirstFrame;
mOnAnimationFinished = onAnimationFinished;
- if (mKeyguardUpdateMonitor.isUserUnlocked()) {
+ if (!mKeyguardUpdateMonitor.needsSlowUnlockTransition()) {
scheduleUpdate();
// No need to wait for the next frame to be drawn for this case - onPreDraw will execute
@@ -196,6 +196,14 @@
}
}
+ public void animateKeyguardUnoccluding(long duration) {
+ mAnimateChange = false;
+ setScrimBehindColor(0f);
+ mAnimateChange = true;
+ scheduleUpdate();
+ mDurationOverride = duration;
+ }
+
public void animateGoingToFullShade(long delay, long duration) {
mDurationOverride = duration;
mAnimationDelay = delay;
@@ -233,9 +241,9 @@
}
private float getScrimInFrontAlpha() {
- return mKeyguardUpdateMonitor.isUserUnlocked()
- ? SCRIM_IN_FRONT_ALPHA
- : SCRIM_IN_FRONT_ALPHA_LOCKED;
+ return mKeyguardUpdateMonitor.needsSlowUnlockTransition()
+ ? SCRIM_IN_FRONT_ALPHA_LOCKED
+ : SCRIM_IN_FRONT_ALPHA;
}
private void scheduleUpdate() {
if (mUpdatePending) return;
@@ -397,7 +405,7 @@
}
private Interpolator getInterpolator() {
- if (mAnimateKeyguardFadingOut && !mKeyguardUpdateMonitor.isUserUnlocked()) {
+ if (mAnimateKeyguardFadingOut && mKeyguardUpdateMonitor.needsSlowUnlockTransition()) {
return KEYGUARD_FADE_OUT_INTERPOLATOR_LOCKED;
} else if (mAnimateKeyguardFadingOut) {
return KEYGUARD_FADE_OUT_INTERPOLATOR;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
index c72f994..664e103 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
@@ -242,7 +242,7 @@
return mStatusBarWindowManager.isShowingWallpaper();
}
- public void setOccluded(boolean occluded) {
+ public void setOccluded(boolean occluded, boolean animate) {
if (occluded && !mOccluded && mShowing) {
if (mPhoneStatusBar.isInLaunchTransition()) {
mOccluded = true;
@@ -258,9 +258,12 @@
}
}
mOccluded = occluded;
- mPhoneStatusBar.updateMediaMetaData(false, false);
+ mPhoneStatusBar.updateMediaMetaData(false, animate && !occluded);
mStatusBarWindowManager.setKeyguardOccluded(occluded);
reset();
+ if (animate && !occluded) {
+ mPhoneStatusBar.animateKeyguardUnoccluding();
+ }
}
public boolean isOccluded() {
@@ -288,7 +291,7 @@
public void hide(long startTime, long fadeoutDuration) {
mShowing = false;
- if (!KeyguardUpdateMonitor.getInstance(mContext).isUserUnlocked()) {
+ if (KeyguardUpdateMonitor.getInstance(mContext).needsSlowUnlockTransition()) {
fadeoutDuration = KEYGUARD_DISMISS_DURATION_LOCKED;
}
long uptimeMillis = SystemClock.uptimeMillis();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
index 61bac2d..e6066aa 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/KeyButtonView.java
@@ -59,6 +59,7 @@
private AudioManager mAudioManager;
private boolean mGestureAborted;
private boolean mLongClicked;
+ private OnClickListener mOnClickListener;
private final Runnable mCheckLongPress = new Runnable() {
public void run() {
@@ -109,6 +110,12 @@
mCode = code;
}
+ @Override
+ public void setOnClickListener(OnClickListener onClickListener) {
+ super.setOnClickListener(onClickListener);
+ mOnClickListener = onClickListener;
+ }
+
public void loadAsync(String uri) {
new AsyncTask<String, Void, Drawable>() {
@Override
@@ -190,6 +197,7 @@
// Provide the same haptic feedback that the system offers for virtual keys.
performHapticFeedback(HapticFeedbackConstants.VIRTUAL_KEY);
}
+ playSoundEffect(SoundEffectConstants.CLICK);
removeCallbacks(mCheckLongPress);
postDelayed(mCheckLongPress, ViewConfiguration.getLongPressTimeout());
break;
@@ -215,14 +223,14 @@
if (doIt) {
sendEvent(KeyEvent.ACTION_UP, 0);
sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
- playSoundEffect(SoundEffectConstants.CLICK);
} else {
sendEvent(KeyEvent.ACTION_UP, KeyEvent.FLAG_CANCELED);
}
} else {
// no key code, just a regular ImageView
- if (doIt) {
- performClick();
+ if (doIt && mOnClickListener != null) {
+ mOnClickListener.onClick(this);
+ sendAccessibilityEvent(AccessibilityEvent.TYPE_VIEW_CLICKED);
}
}
removeCallbacks(mCheckLongPress);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
index 29577ef..ab2a8bc 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/RemoteInputView.java
@@ -38,6 +38,7 @@
import android.view.ViewAnimationUtils;
import android.view.ViewGroup;
import android.view.ViewParent;
+import android.view.accessibility.AccessibilityEvent;
import android.view.inputmethod.CompletionInfo;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputConnection;
@@ -86,6 +87,8 @@
private int mRevealCy;
private int mRevealR;
+ private boolean mResetting;
+
public RemoteInputView(Context context, AttributeSet attrs) {
super(context, attrs);
}
@@ -281,6 +284,8 @@
}
private void reset() {
+ mResetting = true;
+
mEditText.getText().clear();
mEditText.setEnabled(true);
mSendButton.setVisibility(VISIBLE);
@@ -288,6 +293,19 @@
mController.removeSpinning(mEntry.key);
updateSendButton();
onDefocus(false /* animate */);
+
+ mResetting = false;
+ }
+
+ @Override
+ public boolean onRequestSendAccessibilityEvent(View child, AccessibilityEvent event) {
+ if (mResetting && child == mEditText) {
+ // Suppress text events if it happens during resetting. Ideally this would be
+ // suppressed by the text view not being shown, but that doesn't work here because it
+ // needs to stay visible for the animation.
+ return false;
+ }
+ return super.onRequestSendAccessibilityEvent(child, event);
}
private void updateSendButton() {
@@ -348,7 +366,7 @@
}
public boolean isActive() {
- return mEditText.isFocused();
+ return mEditText.isFocused() && mEditText.isEnabled();
}
public void stealFocusFrom(RemoteInputView other) {
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 f72e50b..d1de38c 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -216,7 +216,6 @@
private float mTopPaddingOverflow;
private boolean mDontReportNextOverScroll;
private boolean mDontClampNextScroll;
- private boolean mRequestViewResizeAnimationOnLayout;
private boolean mNeedViewResizeAnimation;
private View mExpandedGroupView;
private boolean mEverythingNeedsAnimation;
@@ -412,7 +411,10 @@
@Override
protected void onDraw(Canvas canvas) {
- canvas.drawRect(0, mCurrentBounds.top, getWidth(), mCurrentBounds.bottom, mBackgroundPaint);
+ if (mCurrentBounds.top < mCurrentBounds.bottom) {
+ canvas.drawRect(0, mCurrentBounds.top, getWidth(), mCurrentBounds.bottom,
+ mBackgroundPaint);
+ }
if (DEBUG) {
int y = mTopPadding;
canvas.drawLine(0, y, getWidth(), y, mDebugPaint);
@@ -515,10 +517,6 @@
setMaxLayoutHeight(getHeight());
updateContentHeight();
clampScrollPosition();
- if (mRequestViewResizeAnimationOnLayout) {
- requestAnimationOnViewResize(null);
- mRequestViewResizeAnimationOnLayout = false;
- }
requestChildrenUpdate();
updateFirstAndLastBackgroundViews();
}
@@ -1963,9 +1961,9 @@
}
private void applyCurrentBackgroundBounds() {
- if (!mFadingOut) {
- mScrimController.setExcludedBackgroundArea(mCurrentBounds);
- }
+ mScrimController.setExcludedBackgroundArea(
+ mFadingOut || mParentFadingOut || mAmbientState.isDark() ? null
+ : mCurrentBounds);
invalidate();
}
@@ -2013,11 +2011,12 @@
bottom = top;
}
if (mPhoneStatusBar.getBarState() != StatusBarState.KEYGUARD) {
- mBackgroundBounds.top = (int) Math.max(mTopPadding + mStackTranslation, top);
+ top = (int) Math.max(mTopPadding + mStackTranslation, top);
} else {
// otherwise the animation from the shade to the keyguard will jump as it's maxed
- mBackgroundBounds.top = Math.max(0, top);
+ top = Math.max(0, top);
}
+ mBackgroundBounds.top = top;
mBackgroundBounds.bottom = Math.min(getHeight(), Math.max(bottom, top));
}
@@ -3100,9 +3099,6 @@
@Override
public void onReset(ExpandableView view) {
- if (mIsExpanded && mAnimationsEnabled) {
- mRequestViewResizeAnimationOnLayout = true;
- }
updateAnimationState(view);
updateChronometerForChild(view);
}
@@ -3451,7 +3447,7 @@
notifyHeightChangeListener(mEmptyShadeView);
}
};
- if (mAnimationsEnabled) {
+ if (mAnimationsEnabled && mIsExpanded) {
mEmptyShadeView.setWillBeGone(true);
mEmptyShadeView.performVisibilityAnimation(false, onFinishedRunnable);
} else {
@@ -3843,11 +3839,7 @@
}
private void updateFadingState() {
- if (mFadingOut || mParentFadingOut || mAmbientState.isDark()) {
- mScrimController.setExcludedBackgroundArea(null);
- } else {
- applyCurrentBackgroundBounds();
- }
+ applyCurrentBackgroundBounds();
updateSrcDrawing();
}
diff --git a/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java b/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java
index 5e4854c..3f8650a 100644
--- a/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java
+++ b/packages/SystemUI/src/com/android/systemui/tv/pip/PipManager.java
@@ -78,6 +78,18 @@
sSettingsPackageAndClassNamePairList.add(new Pair<String, String>(
"com.google.android.leanbacklauncher",
"com.google.android.leanbacklauncher.settings.HomeScreenSettingsActivity"));
+ sSettingsPackageAndClassNamePairList.add(new Pair<String, String>(
+ "com.google.android.apps.mediashell",
+ "com.google.android.apps.mediashell.settings.CastSettingsActivity"));
+ sSettingsPackageAndClassNamePairList.add(new Pair<String, String>(
+ "com.google.android.katniss",
+ "com.google.android.katniss.setting.SpeechSettingsActivity"));
+ sSettingsPackageAndClassNamePairList.add(new Pair<String, String>(
+ "com.google.android.katniss",
+ "com.google.android.katniss.setting.SearchSettingsActivity"));
+ sSettingsPackageAndClassNamePairList.add(new Pair<String, String>(
+ "com.google.android.gsf.notouch",
+ "com.google.android.gsf.notouch.UsageDiagnosticsSettingActivity"));
}
/**
diff --git a/packages/SystemUI/tests/Android.mk b/packages/SystemUI/tests/Android.mk
index c9c5805..d122ccc 100644
--- a/packages/SystemUI/tests/Android.mk
+++ b/packages/SystemUI/tests/Android.mk
@@ -58,6 +58,42 @@
# UI it doesn't own. This is necessary to allow screenshots to be taken
LOCAL_CERTIFICATE := platform
+# Provide jack a list of classes to exclude from code coverage.
+# This is needed because the SystemUITests compile SystemUI source directly, rather than using
+# LOCAL_INSTRUMENTATION_FOR := SystemUI.
+#
+# We want to exclude the test classes from code coverage measurements, but they share the same
+# package as the rest of SystemUI so they can't be easily filtered by package name.
+#
+# Generate a comma separated list of patterns based on the test source files under src/
+# SystemUI classes are in ../src/ so they won't be excluded.
+# Example:
+# Input files: src/com/android/systemui/Test.java src/com/android/systemui/AnotherTest.java
+# Generated exclude list: com.android.systemui.Test*,com.android.systemui.AnotherTest*
+
+# Filter all src files under src/ to just java files
+local_java_files := $(filter %.java,$(call all-java-files-under, src))
+# Transform java file names into full class names.
+# This only works if the class name matches the file name and the directory structure
+# matches the package.
+local_classes := $(subst /,.,$(patsubst src/%.java,%,$(local_java_files)))
+local_comma := ,
+local_empty :=
+local_space := $(local_empty) $(local_empty)
+# Convert class name list to jacoco exclude list
+# This appends a * to all classes and replace the space separators with commas.
+jacoco_exclude := $(subst $(space),$(comma),$(patsubst %,%*,$(local_classes)))
+
+LOCAL_JACK_COVERAGE_INCLUDE_FILTER := com.android.systemui.*
+LOCAL_JACK_COVERAGE_EXCLUDE_FILTER := com.android.systemui.tests.*,$(jacoco_exclude)
+
include frameworks/base/packages/SettingsLib/common.mk
include $(BUILD_PACKAGE)
+
+# Reset variables
+local_java_files :=
+local_classes :=
+local_comma :=
+local_space :=
+jacoco_exclude :=
diff --git a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java
index 25530c4..3a82f88 100644
--- a/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java
+++ b/packages/WallpaperBackup/src/com/android/wallpaperbackup/WallpaperBackupAgent.java
@@ -19,17 +19,22 @@
import static android.app.WallpaperManager.FLAG_LOCK;
import static android.app.WallpaperManager.FLAG_SYSTEM;
+import android.app.AppGlobals;
import android.app.WallpaperManager;
import android.app.backup.BackupAgent;
import android.app.backup.BackupDataInput;
import android.app.backup.BackupDataOutput;
import android.app.backup.FullBackupDataOutput;
+import android.content.ComponentName;
import android.content.Context;
import android.content.SharedPreferences;
+import android.content.pm.IPackageManager;
+import android.content.pm.PackageInfo;
import android.graphics.Rect;
import android.os.Environment;
import android.os.FileUtils;
import android.os.ParcelFileDescriptor;
+import android.os.RemoteException;
import android.os.UserHandle;
import android.util.Slog;
import android.util.Xml;
@@ -114,22 +119,19 @@
touch.close();
fullBackupFile(empty, data);
- // only back up the wallpaper if we've been told it's allowed
- if (mWm.isWallpaperBackupEligible()) {
- if (DEBUG) {
- Slog.v(TAG, "Wallpaper is backup-eligible");
- }
+ SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
+ final int lastSysGeneration = prefs.getInt(SYSTEM_GENERATION, -1);
+ final int lastLockGeneration = prefs.getInt(LOCK_GENERATION, -1);
- SharedPreferences prefs = getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE);
- final int lastSysGeneration = prefs.getInt(SYSTEM_GENERATION, -1);
- final int lastLockGeneration = prefs.getInt(LOCK_GENERATION, -1);
+ final int sysGeneration =
+ mWm.getWallpaperIdForUser(FLAG_SYSTEM, UserHandle.USER_SYSTEM);
+ final int lockGeneration =
+ mWm.getWallpaperIdForUser(FLAG_LOCK, UserHandle.USER_SYSTEM);
+ final boolean sysChanged = (sysGeneration != lastSysGeneration);
+ final boolean lockChanged = (lockGeneration != lastLockGeneration);
- final int sysGeneration =
- mWm.getWallpaperIdForUser(FLAG_SYSTEM, UserHandle.USER_SYSTEM);
- final int lockGeneration =
- mWm.getWallpaperIdForUser(FLAG_LOCK, UserHandle.USER_SYSTEM);
- final boolean sysChanged = (sysGeneration != lastSysGeneration);
- final boolean lockChanged = (lockGeneration != lastLockGeneration);
+ final boolean sysEligible = mWm.isWallpaperBackupEligible(FLAG_SYSTEM);
+ final boolean lockEligible = mWm.isWallpaperBackupEligible(FLAG_LOCK);
// There might be a latent lock wallpaper file present but unused: don't
// include it in the backup if that's the case.
@@ -137,40 +139,38 @@
final boolean hasLockWallpaper = (lockFd != null);
IoUtils.closeQuietly(lockFd);
- if (DEBUG) {
- Slog.v(TAG, "sysGen=" + sysGeneration + " : sysChanged=" + sysChanged);
- Slog.v(TAG, "lockGen=" + lockGeneration + " : lockChanged=" + lockChanged);
- Slog.v(TAG, "hasLockWallpaper=" + hasLockWallpaper);
- }
- if (mWallpaperInfo.exists()) {
- if (sysChanged || lockChanged || !infoStage.exists()) {
- if (DEBUG) Slog.v(TAG, "New wallpaper configuration; copying");
- FileUtils.copyFileOrThrow(mWallpaperInfo, infoStage);
- }
- fullBackupFile(infoStage, data);
- }
- if (mWallpaperFile.exists()) {
- if (sysChanged || !imageStage.exists()) {
- if (DEBUG) Slog.v(TAG, "New system wallpaper; copying");
- FileUtils.copyFileOrThrow(mWallpaperFile, imageStage);
- }
- fullBackupFile(imageStage, data);
- prefs.edit().putInt(SYSTEM_GENERATION, sysGeneration).apply();
- }
+ if (DEBUG) {
+ Slog.v(TAG, "sysGen=" + sysGeneration + " : sysChanged=" + sysChanged);
+ Slog.v(TAG, "lockGen=" + lockGeneration + " : lockChanged=" + lockChanged);
+ Slog.v(TAG, "sysEligble=" + sysEligible);
+ Slog.v(TAG, "lockEligible=" + lockEligible);
+ }
- // Don't try to store the lock image if we overran our quota last time
- if (hasLockWallpaper && mLockWallpaperFile.exists() && !mQuotaExceeded) {
- if (lockChanged || !lockImageStage.exists()) {
- if (DEBUG) Slog.v(TAG, "New lock wallpaper; copying");
- FileUtils.copyFileOrThrow(mLockWallpaperFile, lockImageStage);
- }
- fullBackupFile(lockImageStage, data);
- prefs.edit().putInt(LOCK_GENERATION, lockGeneration).apply();
+ // only back up the wallpapers if we've been told they're eligible
+ if ((sysEligible || lockEligible) && mWallpaperInfo.exists()) {
+ if (sysChanged || lockChanged || !infoStage.exists()) {
+ if (DEBUG) Slog.v(TAG, "New wallpaper configuration; copying");
+ FileUtils.copyFileOrThrow(mWallpaperInfo, infoStage);
}
- } else {
- if (DEBUG) {
- Slog.v(TAG, "Wallpaper not backup-eligible; writing no data");
+ fullBackupFile(infoStage, data);
+ }
+ if (sysEligible && mWallpaperFile.exists()) {
+ if (sysChanged || !imageStage.exists()) {
+ if (DEBUG) Slog.v(TAG, "New system wallpaper; copying");
+ FileUtils.copyFileOrThrow(mWallpaperFile, imageStage);
}
+ fullBackupFile(imageStage, data);
+ prefs.edit().putInt(SYSTEM_GENERATION, sysGeneration).apply();
+ }
+
+ // Don't try to store the lock image if we overran our quota last time
+ if (lockEligible && hasLockWallpaper && mLockWallpaperFile.exists() && !mQuotaExceeded) {
+ if (lockChanged || !lockImageStage.exists()) {
+ if (DEBUG) Slog.v(TAG, "New lock wallpaper; copying");
+ FileUtils.copyFileOrThrow(mLockWallpaperFile, lockImageStage);
+ }
+ fullBackupFile(lockImageStage, data);
+ prefs.edit().putInt(LOCK_GENERATION, lockGeneration).apply();
}
} catch (Exception e) {
Slog.e(TAG, "Unable to back up wallpaper", e);
@@ -222,6 +222,19 @@
// wallpaper image present.
restoreFromStage(imageStage, infoStage, "wp", sysWhich);
restoreFromStage(lockImageStage, infoStage, "kwp", FLAG_LOCK);
+
+ // And reset to the wallpaper service we should be using
+ ComponentName wpService = parseWallpaperComponent(infoStage, "wp");
+ if (servicePackageExists(wpService)) {
+ if (DEBUG) {
+ Slog.i(TAG, "Using wallpaper service " + wpService);
+ }
+ mWm.setWallpaperComponent(wpService, UserHandle.USER_SYSTEM);
+ } else {
+ if (DEBUG) {
+ Slog.v(TAG, "Can't use wallpaper service " + wpService);
+ }
+ }
} catch (Exception e) {
Slog.e(TAG, "Unable to restore wallpaper: " + e.getMessage());
} finally {
@@ -279,18 +292,60 @@
} while (type != XmlPullParser.END_DOCUMENT);
} catch (Exception e) {
// Whoops; can't process the info file at all. Report failure.
- Slog.w(TAG, "Failed to parse restored metadata: " + e.getMessage());
+ Slog.w(TAG, "Failed to parse restored crop: " + e.getMessage());
return null;
}
return cropHint;
}
+ private ComponentName parseWallpaperComponent(File wallpaperInfo, String sectionTag) {
+ ComponentName name = null;
+ try (FileInputStream stream = new FileInputStream(wallpaperInfo)) {
+ final XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(stream, StandardCharsets.UTF_8.name());
+
+ int type;
+ do {
+ type = parser.next();
+ if (type == XmlPullParser.START_TAG) {
+ String tag = parser.getName();
+ if (sectionTag.equals(tag)) {
+ final String parsedName = parser.getAttributeValue(null, "component");
+ name = (parsedName != null)
+ ? ComponentName.unflattenFromString(parsedName)
+ : null;
+ break;
+ }
+ }
+ } while (type != XmlPullParser.END_DOCUMENT);
+ } catch (Exception e) {
+ // Whoops; can't process the info file at all. Report failure.
+ Slog.w(TAG, "Failed to parse restored component: " + e.getMessage());
+ return null;
+ }
+ return name;
+ }
+
private int getAttributeInt(XmlPullParser parser, String name, int defValue) {
final String value = parser.getAttributeValue(null, name);
return (value == null) ? defValue : Integer.parseInt(value);
}
+ private boolean servicePackageExists(ComponentName comp) {
+ try {
+ if (comp != null) {
+ final IPackageManager pm = AppGlobals.getPackageManager();
+ final PackageInfo info = pm.getPackageInfo(comp.getPackageName(),
+ 0, UserHandle.USER_SYSTEM);
+ return (info != null);
+ }
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Unable to contact package manager");
+ }
+ return false;
+ }
+
//
// Key/value API: abstract, therefore required; but not used
//
diff --git a/proto/src/metrics_constants.proto b/proto/src/metrics_constants.proto
index 5099db7..8a0dfe5 100644
--- a/proto/src/metrics_constants.proto
+++ b/proto/src/metrics_constants.proto
@@ -2207,7 +2207,12 @@
// CATEGORY: SETTINGS
ACTION_AMBIENT_DISPLAY = 495;
+ // ACTION: Settings -> [sub settings activity] -> Options menu -> Help & Support
+ // SUBTYPE: sub settings classname
+ ACTION_SETTING_HELP_AND_FEEDBACK = 496;
+
// ---- End N-MR1 Constants, all N-MR1 constants go above this line ----
+
// Add new aosp constants above this line.
// END OF AOSP CONSTANTS
}
diff --git a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
index 4dab0b1..8dca14f 100644
--- a/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
+++ b/services/accessibility/java/com/android/server/accessibility/AccessibilityManagerService.java
@@ -21,6 +21,7 @@
import android.Manifest;
import android.accessibilityservice.AccessibilityService;
import android.accessibilityservice.AccessibilityServiceInfo;
+import android.accessibilityservice.GestureDescription;
import android.accessibilityservice.IAccessibilityServiceClient;
import android.accessibilityservice.IAccessibilityServiceConnection;
import android.annotation.NonNull;
@@ -278,6 +279,31 @@
}
@Override
+ public void onPackageUpdateFinished(String packageName, int uid) {
+ // Unbind all services from this package, and then update the user state to
+ // re-bind new versions of them.
+ synchronized (mLock) {
+ final int userId = getChangingUserId();
+ if (userId != mCurrentUserId) {
+ return;
+ }
+ UserState userState = getUserStateLocked(userId);
+ boolean unboundAService = false;
+ for (int i = userState.mBoundServices.size() - 1; i >= 0; i--) {
+ Service boundService = userState.mBoundServices.get(i);
+ String servicePkg = boundService.mComponentName.getPackageName();
+ if (servicePkg.equals(packageName)) {
+ boundService.unbindLocked();
+ unboundAService = true;
+ }
+ }
+ if (unboundAService) {
+ onUserStateChangedLocked(userState);
+ }
+ }
+ }
+
+ @Override
public void onPackageRemoved(String packageName, int uid) {
synchronized (mLock) {
final int userId = getChangingUserId();
@@ -2182,6 +2208,8 @@
AccessibilityServiceInfo mAccessibilityServiceInfo;
+ // The service that's bound to this instance. Whenever this value is non-null, this
+ // object is registered as a death recipient
IBinder mService;
IAccessibilityServiceClient mServiceInterface;
@@ -2316,14 +2344,14 @@
}
} else {
userState.mBindingServices.add(mComponentName);
- mService = userState.mUiAutomationServiceClient.asBinder();
mMainHandler.post(new Runnable() {
@Override
public void run() {
// Simulate asynchronous connection since in onServiceConnected
// we may modify the state data in case of an error but bind is
// called while iterating over the data and bad things can happen.
- onServiceConnected(mComponentName, mService);
+ onServiceConnected(mComponentName,
+ userState.mUiAutomationServiceClient.asBinder());
}
});
userState.mUiAutomationService = this;
@@ -2415,7 +2443,19 @@
@Override
public void onServiceConnected(ComponentName componentName, IBinder service) {
synchronized (mLock) {
- mService = service;
+ if (mService != service) {
+ if (mService != null) {
+ mService.unlinkToDeath(this, 0);
+ }
+ mService = service;
+ try {
+ mService.linkToDeath(this, 0);
+ } catch (RemoteException re) {
+ Slog.e(LOG_TAG, "Failed registering death link");
+ binderDied();
+ return;
+ }
+ }
mServiceInterface = IAccessibilityServiceClient.Stub.asInterface(service);
UserState userState = getUserStateLocked(mUserId);
addServiceLocked(this, userState);
@@ -2752,7 +2792,7 @@
}
@Override
- public void sendMotionEvents(int sequence, ParceledListSlice events) {
+ public void sendGesture(int sequence, ParceledListSlice gestureSteps) {
synchronized (mLock) {
if (mSecurityPolicy.canPerformGestures(this)) {
final long endMillis =
@@ -2766,9 +2806,16 @@
}
}
if (mMotionEventInjector != null) {
- mMotionEventInjector.injectEvents((List<MotionEvent>) events.getList(),
- mServiceInterface, sequence);
- return;
+ List<GestureDescription.GestureStep> steps = gestureSteps.getList();
+ List<MotionEvent> events = GestureDescription.MotionEventGenerator
+ .getMotionEventsFromGestureSteps(steps);
+ // Confirm that the motion events end with an UP event.
+ if (events.get(events.size() - 1).getAction() == MotionEvent.ACTION_UP) {
+ mMotionEventInjector.injectEvents(events, mServiceInterface, sequence);
+ return;
+ } else {
+ Slog.e(LOG_TAG, "Gesture is not well-formed");
+ }
} else {
Slog.e(LOG_TAG, "MotionEventInjector installation timed out");
}
@@ -3042,7 +3089,6 @@
}
public void onAdded() throws RemoteException {
- linkToOwnDeathLocked();
final long identity = Binder.clearCallingIdentity();
try {
mWindowManagerService.addWindowToken(mOverlayWindowToken,
@@ -3059,17 +3105,6 @@
} finally {
Binder.restoreCallingIdentity(identity);
}
- unlinkToOwnDeathLocked();
- }
-
- public void linkToOwnDeathLocked() throws RemoteException {
- mService.linkToDeath(this, 0);
- }
-
- public void unlinkToOwnDeathLocked() {
- if (mService != null) {
- mService.unlinkToDeath(this, 0);
- }
}
public void resetLocked() {
@@ -3082,7 +3117,10 @@
} catch (RemoteException re) {
/* ignore */
}
- mService = null;
+ if (mService != null) {
+ mService.unlinkToDeath(this, 0);
+ mService = null;
+ }
mServiceInterface = null;
}
@@ -3560,6 +3598,7 @@
case WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL:
case WindowManager.LayoutParams.TYPE_APPLICATION_ABOVE_SUB_PANEL:
case WindowManager.LayoutParams.TYPE_BASE_APPLICATION:
+ case WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION:
case WindowManager.LayoutParams.TYPE_PHONE:
case WindowManager.LayoutParams.TYPE_PRIORITY_PHONE:
case WindowManager.LayoutParams.TYPE_TOAST:
diff --git a/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java b/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java
index e03c16e..e8f93b8 100644
--- a/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java
+++ b/services/accessibility/java/com/android/server/accessibility/KeyEventDispatcher.java
@@ -121,7 +121,7 @@
Service service = boundServices.get(i);
// Key events are handled only by services that declared
// this capability and requested to filter key events.
- if (!service.mRequestFilterKeyEvents) {
+ if (!service.mRequestFilterKeyEvents || (service.mServiceInterface == null)) {
continue;
}
int filterKeyEventBit = service.mAccessibilityServiceInfo.getCapabilities()
diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
index 9d3889b..b5fcb5c 100644
--- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
+++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java
@@ -2266,6 +2266,7 @@
pw.print(info.updatePeriodMillis);
pw.print(" resizeMode=");
pw.print(info.resizeMode);
+ pw.print(" widgetCategory=");
pw.print(info.widgetCategory);
pw.print(" autoAdvanceViewId=");
pw.print(info.autoAdvanceViewId);
diff --git a/services/core/java/com/android/server/AnyMotionDetector.java b/services/core/java/com/android/server/AnyMotionDetector.java
index f93c716..d564925 100644
--- a/services/core/java/com/android/server/AnyMotionDetector.java
+++ b/services/core/java/com/android/server/AnyMotionDetector.java
@@ -97,6 +97,15 @@
/** True if an orientation measurement is in progress. */
private boolean mMeasurementInProgress;
+ /** True if sendMessageDelayed() for the mMeasurementTimeout callback has been scheduled */
+ private boolean mMeasurementTimeoutIsActive;
+
+ /** True if sendMessageDelayed() for the mWakelockTimeout callback has been scheduled */
+ private boolean mWakelockTimeoutIsActive;
+
+ /** True if sendMessageDelayed() for the mSensorRestart callback has been scheduled */
+ private boolean mSensorRestartIsActive;
+
/** The most recent gravity vector. */
private Vector3 mCurrentGravityVector = null;
@@ -118,6 +127,9 @@
mSensorManager = sm;
mAccelSensor = mSensorManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);
mMeasurementInProgress = false;
+ mMeasurementTimeoutIsActive = false;
+ mWakelockTimeoutIsActive = false;
+ mSensorRestartIsActive = false;
mState = STATE_INACTIVE;
mCallback = callback;
mThresholdAngle = thresholdAngle;
@@ -146,6 +158,7 @@
mWakeLock.acquire();
Message wakelockTimeoutMsg = Message.obtain(mHandler, mWakelockTimeout);
mHandler.sendMessageDelayed(wakelockTimeoutMsg, WAKELOCK_TIMEOUT_MILLIS);
+ mWakelockTimeoutIsActive = true;
startOrientationMeasurementLocked();
}
}
@@ -157,17 +170,20 @@
mState = STATE_INACTIVE;
if (DEBUG) Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE.");
}
+ mHandler.removeCallbacks(mMeasurementTimeout);
+ mHandler.removeCallbacks(mSensorRestart);
+ mMeasurementTimeoutIsActive = false;
+ mSensorRestartIsActive = false;
if (mMeasurementInProgress) {
mMeasurementInProgress = false;
mSensorManager.unregisterListener(mListener);
}
- mHandler.removeCallbacks(mMeasurementTimeout);
- mHandler.removeCallbacks(mSensorRestart);
mCurrentGravityVector = null;
mPreviousGravityVector = null;
if (mWakeLock.isHeld()) {
- mWakeLock.release();
mHandler.removeCallbacks(mWakelockTimeout);
+ mWakelockTimeoutIsActive = false;
+ mWakeLock.release();
}
}
}
@@ -183,6 +199,7 @@
}
Message measurementTimeoutMsg = Message.obtain(mHandler, mMeasurementTimeout);
mHandler.sendMessageDelayed(measurementTimeoutMsg, ACCELEROMETER_DATA_TIMEOUT_MILLIS);
+ mMeasurementTimeoutIsActive = true;
}
}
@@ -191,8 +208,9 @@
mMeasurementInProgress);
int status = RESULT_UNKNOWN;
if (mMeasurementInProgress) {
- mSensorManager.unregisterListener(mListener);
mHandler.removeCallbacks(mMeasurementTimeout);
+ mMeasurementTimeoutIsActive = false;
+ mSensorManager.unregisterListener(mListener);
mMeasurementInProgress = false;
mPreviousGravityVector = mCurrentGravityVector;
mCurrentGravityVector = mRunningStats.getRunningAverage();
@@ -213,8 +231,9 @@
if (DEBUG) Slog.d(TAG, "getStationaryStatus() returned " + status);
if (status != RESULT_UNKNOWN) {
if (mWakeLock.isHeld()) {
- mWakeLock.release();
mHandler.removeCallbacks(mWakelockTimeout);
+ mWakelockTimeoutIsActive = false;
+ mWakeLock.release();
}
if (DEBUG) {
Slog.d(TAG, "Moved from STATE_ACTIVE to STATE_INACTIVE. status = " + status);
@@ -230,6 +249,7 @@
" milliseconds.");
Message msg = Message.obtain(mHandler, mSensorRestart);
mHandler.sendMessageDelayed(msg, ORIENTATION_MEASUREMENT_INTERVAL_MILLIS);
+ mSensorRestartIsActive = true;
}
}
return status;
@@ -283,6 +303,7 @@
}
if (status != RESULT_UNKNOWN) {
mHandler.removeCallbacks(mWakelockTimeout);
+ mWakelockTimeoutIsActive = false;
mCallback.onAnyMotionResult(status);
}
}
@@ -296,7 +317,10 @@
@Override
public void run() {
synchronized (mLock) {
- startOrientationMeasurementLocked();
+ if (mSensorRestartIsActive == true) {
+ mSensorRestartIsActive = false;
+ startOrientationMeasurementLocked();
+ }
}
}
};
@@ -306,14 +330,18 @@
public void run() {
int status = RESULT_UNKNOWN;
synchronized (mLock) {
- if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " +
- "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " +
- "orientation measurement.");
- status = stopOrientationMeasurementLocked();
- }
- if (status != RESULT_UNKNOWN) {
- mHandler.removeCallbacks(mWakelockTimeout);
- mCallback.onAnyMotionResult(status);
+ if (mMeasurementTimeoutIsActive == true) {
+ mMeasurementTimeoutIsActive = false;
+ if (DEBUG) Slog.i(TAG, "mMeasurementTimeout. Failed to collect sufficient accel " +
+ "data within " + ACCELEROMETER_DATA_TIMEOUT_MILLIS + " ms. Stopping " +
+ "orientation measurement.");
+ status = stopOrientationMeasurementLocked();
+ if (status != RESULT_UNKNOWN) {
+ mHandler.removeCallbacks(mWakelockTimeout);
+ mWakelockTimeoutIsActive = false;
+ mCallback.onAnyMotionResult(status);
+ }
+ }
}
}
};
@@ -322,7 +350,10 @@
@Override
public void run() {
synchronized (mLock) {
- stop();
+ if (mWakelockTimeoutIsActive == true) {
+ mWakelockTimeoutIsActive = false;
+ stop();
+ }
}
}
};
diff --git a/services/core/java/com/android/server/AppOpsService.java b/services/core/java/com/android/server/AppOpsService.java
index b5b0cd8..4caeba8 100644
--- a/services/core/java/com/android/server/AppOpsService.java
+++ b/services/core/java/com/android/server/AppOpsService.java
@@ -875,7 +875,7 @@
return AppOpsManager.MODE_IGNORED;
}
synchronized (this) {
- if (isOpRestricted(uid, code, resolvedPackageName)) {
+ if (isOpRestrictedLocked(uid, code, resolvedPackageName)) {
return AppOpsManager.MODE_IGNORED;
}
code = AppOpsManager.opToSwitch(code);
@@ -1024,7 +1024,7 @@
return AppOpsManager.MODE_ERRORED;
}
Op op = getOpLocked(ops, code, true);
- if (isOpRestricted(uid, code, packageName)) {
+ if (isOpRestrictedLocked(uid, code, packageName)) {
return AppOpsManager.MODE_IGNORED;
}
if (op.duration == -1) {
@@ -1082,7 +1082,7 @@
return AppOpsManager.MODE_ERRORED;
}
Op op = getOpLocked(ops, code, true);
- if (isOpRestricted(uid, code, resolvedPackageName)) {
+ if (isOpRestrictedLocked(uid, code, resolvedPackageName)) {
return AppOpsManager.MODE_IGNORED;
}
final int switchCode = AppOpsManager.opToSwitch(code);
@@ -1308,7 +1308,7 @@
return op;
}
- private boolean isOpRestricted(int uid, int code, String packageName) {
+ private boolean isOpRestrictedLocked(int uid, int code, String packageName) {
int userHandle = UserHandle.getUserId(uid);
final int restrictionSetCount = mOpUserRestrictions.size();
@@ -2210,25 +2210,33 @@
private void setUserRestrictionNoCheck(int code, boolean restricted, IBinder token,
int userHandle, String[] exceptionPackages) {
- ClientRestrictionState restrictionState = mOpUserRestrictions.get(token);
+ boolean notifyChange = false;
- if (restrictionState == null) {
- try {
- restrictionState = new ClientRestrictionState(token);
- } catch (RemoteException e) {
- return;
+ synchronized (AppOpsService.this) {
+ ClientRestrictionState restrictionState = mOpUserRestrictions.get(token);
+
+ if (restrictionState == null) {
+ try {
+ restrictionState = new ClientRestrictionState(token);
+ } catch (RemoteException e) {
+ return;
+ }
+ mOpUserRestrictions.put(token, restrictionState);
}
- mOpUserRestrictions.put(token, restrictionState);
+
+ if (restrictionState.setRestriction(code, restricted, exceptionPackages, userHandle)) {
+ notifyChange = true;
+ }
+
+ if (restrictionState.isDefault()) {
+ mOpUserRestrictions.remove(token);
+ restrictionState.destroy();
+ }
}
- if (restrictionState.setRestriction(code, restricted, exceptionPackages, userHandle)) {
+ if (notifyChange) {
notifyWatchersOfChange(code);
}
-
- if (restrictionState.isDefault()) {
- mOpUserRestrictions.remove(token);
- restrictionState.destroy();
- }
}
private void notifyWatchersOfChange(int code) {
@@ -2263,10 +2271,12 @@
@Override
public void removeUser(int userHandle) throws RemoteException {
checkSystemUid("removeUser");
- final int tokenCount = mOpUserRestrictions.size();
- for (int i = tokenCount - 1; i >= 0; i--) {
- ClientRestrictionState opRestrictions = mOpUserRestrictions.valueAt(i);
- opRestrictions.removeUser(userHandle);
+ synchronized (AppOpsService.this) {
+ final int tokenCount = mOpUserRestrictions.size();
+ for (int i = tokenCount - 1; i >= 0; i--) {
+ ClientRestrictionState opRestrictions = mOpUserRestrictions.valueAt(i);
+ opRestrictions.removeUser(userHandle);
+ }
}
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index b7461ee..58431c8 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -38,7 +38,6 @@
import android.annotation.Nullable;
import android.app.BroadcastOptions;
-import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.BroadcastReceiver;
@@ -132,9 +131,12 @@
import com.android.server.connectivity.DataConnectionStats;
import com.android.server.connectivity.KeepaliveTracker;
import com.android.server.connectivity.Nat464Xlat;
+import com.android.server.connectivity.LingerMonitor;
import com.android.server.connectivity.NetworkAgentInfo;
import com.android.server.connectivity.NetworkDiagnostics;
import com.android.server.connectivity.NetworkMonitor;
+import com.android.server.connectivity.NetworkNotificationManager;
+import com.android.server.connectivity.NetworkNotificationManager.NotificationType;
import com.android.server.connectivity.PacManager;
import com.android.server.connectivity.PermissionMonitor;
import com.android.server.connectivity.Tethering;
@@ -436,6 +438,8 @@
TelephonyManager mTelephonyManager;
private KeepaliveTracker mKeepaliveTracker;
+ private NetworkNotificationManager mNotifier;
+ private LingerMonitor mLingerMonitor;
// sequence number for Networks; keep in sync with system/netd/NetworkController.cpp
private final static int MIN_NET_ID = 100; // some reserved marks
@@ -832,6 +836,16 @@
mUserManager = (UserManager) context.getSystemService(Context.USER_SERVICE);
mKeepaliveTracker = new KeepaliveTracker(mHandler);
+ mNotifier = new NetworkNotificationManager(mContext, mTelephonyManager,
+ mContext.getSystemService(NotificationManager.class));
+
+ final int dailyLimit = Settings.Global.getInt(mContext.getContentResolver(),
+ Settings.Global.NETWORK_SWITCH_NOTIFICATION_DAILY_LIMIT,
+ LingerMonitor.DEFAULT_NOTIFICATION_DAILY_LIMIT);
+ final long rateLimit = Settings.Global.getLong(mContext.getContentResolver(),
+ Settings.Global.NETWORK_SWITCH_NOTIFICATION_RATE_LIMIT_MILLIS,
+ LingerMonitor.DEFAULT_NOTIFICATION_RATE_LIMIT_MILLIS);
+ mLingerMonitor = new LingerMonitor(mContext, mNotifier, dailyLimit, rateLimit);
}
private NetworkRequest createInternetRequestForTransport(int transportType) {
@@ -2230,16 +2244,15 @@
updateCapabilities(nai, nai.networkCapabilities);
}
if (!visible) {
- setProvNotificationVisibleIntent(false, netId, null, 0, null, null, false);
+ mNotifier.clearNotification(netId);
} else {
if (nai == null) {
loge("EVENT_PROVISIONING_NOTIFICATION from unknown NetworkMonitor");
break;
}
if (!nai.networkMisc.provisioningNotificationDisabled) {
- setProvNotificationVisibleIntent(true, netId, NotificationType.SIGN_IN,
- nai.networkInfo.getType(), nai.networkInfo.getExtraInfo(),
- (PendingIntent)msg.obj, nai.networkMisc.explicitlySelected);
+ mNotifier.showNotification(netId, NotificationType.SIGN_IN, nai, null,
+ (PendingIntent) msg.obj, nai.networkMisc.explicitlySelected);
}
}
break;
@@ -2389,6 +2402,7 @@
}
mLegacyTypeTracker.remove(nai, wasDefault);
rematchAllNetworksAndRequests(null, 0);
+ mLingerMonitor.noteDisconnect(nai);
if (nai.created) {
// Tell netd to clean up the configuration for this network
// (routing rules, DNS, etc).
@@ -2710,8 +2724,8 @@
PendingIntent pendingIntent = PendingIntent.getActivityAsUser(
mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT, null, UserHandle.CURRENT);
- setProvNotificationVisibleIntent(true, nai.network.netId, NotificationType.NO_INTERNET,
- nai.networkInfo.getType(), nai.networkInfo.getExtraInfo(), pendingIntent, true);
+ mNotifier.showNotification(nai.network.netId, NotificationType.NO_INTERNET, nai, null,
+ pendingIntent, true);
}
private class InternalHandler extends Handler {
@@ -3617,118 +3631,6 @@
return -1;
}
- private static final String NOTIFICATION_ID = "CaptivePortal.Notification";
- private static enum NotificationType { SIGN_IN, NO_INTERNET; };
-
- private void setProvNotificationVisible(boolean visible, int networkType, String action) {
- Intent intent = new Intent(action);
- PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
- // Concatenate the range of types onto the range of NetIDs.
- int id = MAX_NET_ID + 1 + (networkType - ConnectivityManager.TYPE_NONE);
- setProvNotificationVisibleIntent(visible, id, NotificationType.SIGN_IN,
- networkType, null, pendingIntent, false);
- }
-
- /**
- * Show or hide network provisioning notifications.
- *
- * We use notifications for two purposes: to notify that a network requires sign in
- * (NotificationType.SIGN_IN), or to notify that a network does not have Internet access
- * (NotificationType.NO_INTERNET). We display at most one notification per ID, so on a
- * particular network we can display the notification type that was most recently requested.
- * So for example if a captive portal fails to reply within a few seconds of connecting, we
- * might first display NO_INTERNET, and then when the captive portal check completes, display
- * SIGN_IN.
- *
- * @param id an identifier that uniquely identifies this notification. This must match
- * between show and hide calls. We use the NetID value but for legacy callers
- * we concatenate the range of types with the range of NetIDs.
- */
- private void setProvNotificationVisibleIntent(boolean visible, int id,
- NotificationType notifyType, int networkType, String extraInfo, PendingIntent intent,
- boolean highPriority) {
- if (VDBG || (DBG && visible)) {
- log("setProvNotificationVisibleIntent " + notifyType + " visible=" + visible
- + " networkType=" + getNetworkTypeName(networkType)
- + " extraInfo=" + extraInfo + " highPriority=" + highPriority);
- }
-
- Resources r = Resources.getSystem();
- NotificationManager notificationManager = (NotificationManager) mContext
- .getSystemService(Context.NOTIFICATION_SERVICE);
-
- if (visible) {
- CharSequence title;
- CharSequence details;
- int icon;
- if (notifyType == NotificationType.NO_INTERNET &&
- networkType == ConnectivityManager.TYPE_WIFI) {
- title = r.getString(R.string.wifi_no_internet, 0);
- details = r.getString(R.string.wifi_no_internet_detailed);
- icon = R.drawable.stat_notify_wifi_in_range; // TODO: Need new icon.
- } else if (notifyType == NotificationType.SIGN_IN) {
- switch (networkType) {
- case ConnectivityManager.TYPE_WIFI:
- title = r.getString(R.string.wifi_available_sign_in, 0);
- details = r.getString(R.string.network_available_sign_in_detailed,
- extraInfo);
- icon = R.drawable.stat_notify_wifi_in_range;
- break;
- case ConnectivityManager.TYPE_MOBILE:
- case ConnectivityManager.TYPE_MOBILE_HIPRI:
- title = r.getString(R.string.network_available_sign_in, 0);
- // TODO: Change this to pull from NetworkInfo once a printable
- // name has been added to it
- details = mTelephonyManager.getNetworkOperatorName();
- icon = R.drawable.stat_notify_rssi_in_range;
- break;
- default:
- title = r.getString(R.string.network_available_sign_in, 0);
- details = r.getString(R.string.network_available_sign_in_detailed,
- extraInfo);
- icon = R.drawable.stat_notify_rssi_in_range;
- break;
- }
- } else {
- Slog.wtf(TAG, "Unknown notification type " + notifyType + "on network type "
- + getNetworkTypeName(networkType));
- return;
- }
-
- Notification notification = new Notification.Builder(mContext)
- .setWhen(0)
- .setSmallIcon(icon)
- .setAutoCancel(true)
- .setTicker(title)
- .setColor(mContext.getColor(
- com.android.internal.R.color.system_notification_accent_color))
- .setContentTitle(title)
- .setContentText(details)
- .setContentIntent(intent)
- .setLocalOnly(true)
- .setPriority(highPriority ?
- Notification.PRIORITY_HIGH :
- Notification.PRIORITY_DEFAULT)
- .setDefaults(highPriority ? Notification.DEFAULT_ALL : 0)
- .setOnlyAlertOnce(true)
- .build();
-
- try {
- notificationManager.notifyAsUser(NOTIFICATION_ID, id, notification, UserHandle.ALL);
- } catch (NullPointerException npe) {
- loge("setNotificationVisible: visible notificationManager npe=" + npe);
- npe.printStackTrace();
- }
- } else {
- try {
- notificationManager.cancelAsUser(NOTIFICATION_ID, id, UserHandle.ALL);
- } catch (NullPointerException npe) {
- loge("setNotificationVisible: cancel notificationManager npe=" + npe);
- npe.printStackTrace();
- }
- }
- }
-
/** Location to an updatable file listing carrier provisioning urls.
* An example:
*
@@ -3832,7 +3734,9 @@
enforceConnectivityInternalPermission();
final long ident = Binder.clearCallingIdentity();
try {
- setProvNotificationVisible(visible, networkType, action);
+ // Concatenate the range of types onto the range of NetIDs.
+ int id = MAX_NET_ID + 1 + (networkType - ConnectivityManager.TYPE_NONE);
+ mNotifier.setProvNotificationVisible(visible, id, action);
} finally {
Binder.restoreCallingIdentity(ident);
}
@@ -4356,6 +4260,10 @@
return nai == getDefaultNetwork();
}
+ private boolean isDefaultRequest(NetworkRequestInfo nri) {
+ return nri.request.requestId == mDefaultRequest.requestId;
+ }
+
public int registerNetworkAgent(Messenger messenger, NetworkInfo networkInfo,
LinkProperties linkProperties, NetworkCapabilities networkCapabilities,
int currentScore, NetworkMisc networkMisc) {
@@ -4815,9 +4723,12 @@
// network. Think about if there is a way to reduce this. Push
// netid->request mapping to each factory?
sendUpdatedScoreToFactories(nri.request, newNetwork.getCurrentScore());
- if (mDefaultRequest.requestId == nri.request.requestId) {
+ if (isDefaultRequest(nri)) {
isNewDefault = true;
oldDefaultNetwork = currentNetwork;
+ if (currentNetwork != null) {
+ mLingerMonitor.noteLingerDefaultNetwork(currentNetwork, newNetwork);
+ }
}
}
} else if (newNetwork.isSatisfyingRequest(nri.request.requestId)) {
diff --git a/services/core/java/com/android/server/LockSettingsService.java b/services/core/java/com/android/server/LockSettingsService.java
index 2de09a3..a91e205 100644
--- a/services/core/java/com/android/server/LockSettingsService.java
+++ b/services/core/java/com/android/server/LockSettingsService.java
@@ -1222,6 +1222,9 @@
long challenge, int userId, ICheckCredentialProgressCallback progressCallback)
throws RemoteException {
checkPasswordReadPermission(userId);
+ if (TextUtils.isEmpty(pattern)) {
+ throw new IllegalArgumentException("Pattern can't be null or empty");
+ }
CredentialHash storedHash = mStorage.readPatternHash(userId);
return doVerifyPattern(pattern, storedHash, hasChallenge, challenge, userId,
progressCallback);
@@ -1323,6 +1326,9 @@
long challenge, int userId, ICheckCredentialProgressCallback progressCallback)
throws RemoteException {
checkPasswordReadPermission(userId);
+ if (TextUtils.isEmpty(password)) {
+ throw new IllegalArgumentException("Password can't be null or empty");
+ }
CredentialHash storedHash = mStorage.readPasswordHash(userId);
return doVerifyPassword(password, storedHash, hasChallenge, challenge, userId,
progressCallback);
diff --git a/services/core/java/com/android/server/MountService.java b/services/core/java/com/android/server/MountService.java
index cdd977b..0023e4b 100644
--- a/services/core/java/com/android/server/MountService.java
+++ b/services/core/java/com/android/server/MountService.java
@@ -1056,6 +1056,10 @@
|| mForceAdoptable) {
flags |= DiskInfo.FLAG_ADOPTABLE;
}
+ // Adoptable storage isn't currently supported on FBE devices
+ if (StorageManager.isFileEncryptedNativeOnly()) {
+ flags &= ~DiskInfo.FLAG_ADOPTABLE;
+ }
mDisks.put(id, new DiskInfo(id, flags));
break;
}
@@ -1985,6 +1989,11 @@
}
if ((mask & StorageManager.DEBUG_FORCE_ADOPTABLE) != 0) {
+ if (StorageManager.isFileEncryptedNativeOnly()) {
+ throw new IllegalStateException(
+ "Adoptable storage not available on device with native FBE");
+ }
+
synchronized (mLock) {
mForceAdoptable = (flags & StorageManager.DEBUG_FORCE_ADOPTABLE) != 0;
diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java
index ec53c16..bdbd066 100644
--- a/services/core/java/com/android/server/NetworkManagementService.java
+++ b/services/core/java/com/android/server/NetworkManagementService.java
@@ -1310,8 +1310,9 @@
mConnector.execute("tether", "interface", "remove", iface);
} catch (NativeDaemonConnectorException e) {
throw e.rethrowAsParcelableException();
+ } finally {
+ removeInterfaceFromLocalNetwork(iface);
}
- removeInterfaceFromLocalNetwork(iface);
}
@Override
diff --git a/services/core/java/com/android/server/accounts/AccountManagerService.java b/services/core/java/com/android/server/accounts/AccountManagerService.java
index 9108acf..b86da67 100644
--- a/services/core/java/com/android/server/accounts/AccountManagerService.java
+++ b/services/core/java/com/android/server/accounts/AccountManagerService.java
@@ -22,18 +22,24 @@
import android.accounts.AccountAndUser;
import android.accounts.AccountAuthenticatorResponse;
import android.accounts.AccountManager;
+import android.accounts.AccountManagerInternal;
import android.accounts.AuthenticatorDescription;
import android.accounts.CantAddAccountActivity;
import android.accounts.GrantCredentialsPermissionActivity;
+import android.accounts.IAccountAccessTracker;
import android.accounts.IAccountAuthenticator;
import android.accounts.IAccountAuthenticatorResponse;
import android.accounts.IAccountManager;
import android.accounts.IAccountManagerResponse;
+import android.annotation.IntRange;
import android.annotation.NonNull;
+import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
+import android.app.ActivityThread;
import android.app.AppGlobals;
import android.app.AppOpsManager;
+import android.app.INotificationManager;
import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
@@ -46,9 +52,11 @@
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
+import android.content.IntentSender;
import android.content.ServiceConnection;
import android.content.pm.ActivityInfo;
import android.content.pm.ApplicationInfo;
+import android.content.pm.IPackageManager;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.pm.PackageManager.NameNotFoundException;
@@ -72,7 +80,9 @@
import android.os.Message;
import android.os.Parcel;
import android.os.Process;
+import android.os.RemoteCallback;
import android.os.RemoteException;
+import android.os.ServiceManager;
import android.os.SystemClock;
import android.os.UserHandle;
import android.os.UserManager;
@@ -86,6 +96,7 @@
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.content.PackageMonitor;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.IndentingPrintWriter;
import com.android.internal.util.Preconditions;
@@ -115,6 +126,7 @@
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.concurrent.CopyOnWriteArrayList;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
@@ -237,6 +249,13 @@
+ " AND " + ACCOUNTS_NAME + "=?"
+ " AND " + ACCOUNTS_TYPE + "=?";
+ private static final String COUNT_OF_MATCHING_GRANTS_ANY_TOKEN = ""
+ + "SELECT COUNT(*) FROM " + TABLE_GRANTS + ", " + TABLE_ACCOUNTS
+ + " WHERE " + GRANTS_ACCOUNTS_ID + "=" + ACCOUNTS_ID
+ + " AND " + GRANTS_GRANTEE_UID + "=?"
+ + " AND " + ACCOUNTS_NAME + "=?"
+ + " AND " + ACCOUNTS_TYPE + "=?";
+
private static final String SELECTION_AUTHTOKENS_BY_ACCOUNT =
AUTHTOKENS_ACCOUNTS_ID + "=(select _id FROM accounts WHERE name=? AND type=?)";
@@ -266,7 +285,7 @@
private final Object cacheLock = new Object();
/** protected by the {@link #cacheLock} */
private final HashMap<String, Account[]> accountCache =
- new LinkedHashMap<String, Account[]>();
+ new LinkedHashMap<>();
/** protected by the {@link #cacheLock} */
private final HashMap<Account, HashMap<String, String>> userDataCache =
new HashMap<Account, HashMap<String, String>>();
@@ -305,6 +324,8 @@
private final SparseArray<UserAccounts> mUsers = new SparseArray<>();
private final SparseBooleanArray mLocalUnlockedUsers = new SparseBooleanArray();
+ private CopyOnWriteArrayList<AccountManagerInternal.OnAppPermissionChangeListener>
+ mAppPermissionChangeListeners = new CopyOnWriteArrayList<>();
private static AtomicReference<AccountManagerService> sThis = new AtomicReference<>();
private static final Account[] EMPTY_ACCOUNT_ARRAY = new Account[]{};
@@ -376,6 +397,118 @@
}
}
}, UserHandle.ALL, userFilter, null, null);
+
+ LocalServices.addService(AccountManagerInternal.class, new AccountManagerInternalImpl());
+
+ // Need to cancel account request notifications if the update/install can access the account
+ new PackageMonitor() {
+ @Override
+ public void onPackageAdded(String packageName, int uid) {
+ // Called on a handler, and running as the system
+ cancelAccountAccessRequestNotificationIfNeeded(uid, true);
+ }
+
+ @Override
+ public void onPackageUpdateFinished(String packageName, int uid) {
+ // Called on a handler, and running as the system
+ cancelAccountAccessRequestNotificationIfNeeded(uid, true);
+ }
+ }.register(mContext, mMessageHandler.getLooper(), UserHandle.ALL, true);
+
+ // Cancel account request notification if an app op was preventing the account access
+ mAppOpsManager.startWatchingMode(AppOpsManager.OP_GET_ACCOUNTS, null,
+ new AppOpsManager.OnOpChangedInternalListener() {
+ @Override
+ public void onOpChanged(int op, String packageName) {
+ try {
+ final int userId = ActivityManager.getCurrentUser();
+ final int uid = mPackageManager.getPackageUidAsUser(packageName, userId);
+ final int mode = mAppOpsManager.checkOpNoThrow(
+ AppOpsManager.OP_GET_ACCOUNTS, uid, packageName);
+ if (mode == AppOpsManager.MODE_ALLOWED) {
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ cancelAccountAccessRequestNotificationIfNeeded(packageName, uid, true);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ } catch (NameNotFoundException e) {
+ /* ignore */
+ }
+ }
+ });
+
+ // Cancel account request notification if a permission was preventing the account access
+ mPackageManager.addOnPermissionsChangeListener(
+ (int uid) -> {
+ Account[] accounts = null;
+ String[] packageNames = mPackageManager.getPackagesForUid(uid);
+ if (packageNames != null) {
+ final int userId = UserHandle.getUserId(uid);
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ for (String packageName : packageNames) {
+ if (mContext.getPackageManager().checkPermission(
+ Manifest.permission.GET_ACCOUNTS, packageName)
+ != PackageManager.PERMISSION_GRANTED) {
+ continue;
+ }
+
+ if (accounts == null) {
+ accounts = getAccountsAsUser(null, userId, "android");
+ if (ArrayUtils.isEmpty(accounts)) {
+ return;
+ }
+ }
+
+ for (Account account : accounts) {
+ cancelAccountAccessRequestNotificationIfNeeded(
+ account, uid, packageName, true);
+ }
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ });
+ }
+
+ private void cancelAccountAccessRequestNotificationIfNeeded(int uid,
+ boolean checkAccess) {
+ Account[] accounts = getAccountsAsUser(null, UserHandle.getUserId(uid), "android");
+ for (Account account : accounts) {
+ cancelAccountAccessRequestNotificationIfNeeded(account, uid, checkAccess);
+ }
+ }
+
+ private void cancelAccountAccessRequestNotificationIfNeeded(String packageName, int uid,
+ boolean checkAccess) {
+ Account[] accounts = getAccountsAsUser(null, UserHandle.getUserId(uid), "android");
+ for (Account account : accounts) {
+ cancelAccountAccessRequestNotificationIfNeeded(account, uid, packageName, checkAccess);
+ }
+ }
+
+ private void cancelAccountAccessRequestNotificationIfNeeded(Account account, int uid,
+ boolean checkAccess) {
+ String[] packageNames = mPackageManager.getPackagesForUid(uid);
+ if (packageNames != null) {
+ for (String packageName : packageNames) {
+ cancelAccountAccessRequestNotificationIfNeeded(account, uid,
+ packageName, checkAccess);
+ }
+ }
+ }
+
+ private void cancelAccountAccessRequestNotificationIfNeeded(Account account,
+ int uid, String packageName, boolean checkAccess) {
+ if (!checkAccess || hasAccountAccess(account, packageName,
+ UserHandle.getUserHandleForUid(uid))) {
+ cancelNotification(getCredentialPermissionNotificationId(account,
+ AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE, uid), packageName,
+ UserHandle.getUserHandleForUid(uid));
+ }
}
@Override
@@ -566,7 +699,8 @@
final ArrayList<String> accountNames = cur.getValue();
final Account[] accountsForType = new Account[accountNames.size()];
for (int i = 0; i < accountsForType.length; i++) {
- accountsForType[i] = new Account(accountNames.get(i), accountType);
+ accountsForType[i] = new Account(accountNames.get(i), accountType,
+ new AccountAccessTracker());
}
accounts.accountCache.put(accountType, accountsForType);
}
@@ -934,6 +1068,7 @@
* Should only be called inside of a clearCallingIdentity block.
*/
private AuthenticatorDescription[] getAuthenticatorTypesInternal(int userId) {
+ mAuthenticatorCache.updateServices(userId);
Collection<AccountAuthenticatorCache.ServiceInfo<AuthenticatorDescription>>
authenticatorCollection = mAuthenticatorCache.getAllServices(userId);
AuthenticatorDescription[] types =
@@ -947,8 +1082,6 @@
return types;
}
-
-
private boolean isCrossUser(int callingUid, int userId) {
return (userId != UserHandle.getCallingUserId()
&& callingUid != Process.myUid()
@@ -1377,6 +1510,8 @@
Bundle result = new Bundle();
result.putString(AccountManager.KEY_ACCOUNT_NAME, resultingAccount.name);
result.putString(AccountManager.KEY_ACCOUNT_TYPE, resultingAccount.type);
+ result.putBinder(AccountManager.KEY_ACCOUNT_ACCESS_TRACKER,
+ resultingAccount.getAccessTracker().asBinder());
try {
response.onResult(result);
} catch (RemoteException e) {
@@ -1723,6 +1858,21 @@
} finally {
Binder.restoreCallingIdentity(id);
}
+
+ if (isChanged) {
+ synchronized (accounts.credentialsPermissionNotificationIds) {
+ for (Pair<Pair<Account, String>, Integer> key
+ : accounts.credentialsPermissionNotificationIds.keySet()) {
+ if (account.equals(key.first.first)
+ && AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE.equals(key.first.second)) {
+ final int uid = (Integer) key.second;
+ mMessageHandler.post(() -> cancelAccountAccessRequestNotificationIfNeeded(
+ account, uid, false));
+ }
+ }
+ }
+ }
+
return isChanged;
}
@@ -2119,7 +2269,7 @@
final int callingUid = getCallingUid();
clearCallingIdentity();
- if (callingUid != Process.SYSTEM_UID) {
+ if (UserHandle.getAppId(callingUid) != Process.SYSTEM_UID) {
throw new SecurityException("can only call from system");
}
int userId = UserHandle.getUserId(callingUid);
@@ -2319,9 +2469,11 @@
if (result.containsKey(AccountManager.KEY_AUTH_TOKEN_LABEL)) {
Intent intent = newGrantCredentialsPermissionIntent(
account,
+ null,
callerUid,
new AccountAuthenticatorResponse(this),
- authTokenType);
+ authTokenType,
+ true);
Bundle bundle = new Bundle();
bundle.putParcelable(AccountManager.KEY_INTENT, intent);
onResult(bundle);
@@ -2372,7 +2524,7 @@
intent);
doNotification(mAccounts,
account, result.getString(AccountManager.KEY_AUTH_FAILED_MESSAGE),
- intent, accounts.userId);
+ intent, "android", accounts.userId);
}
}
super.onResult(result);
@@ -2403,7 +2555,7 @@
}
private void createNoCredentialsPermissionNotification(Account account, Intent intent,
- int userId) {
+ String packageName, int userId) {
int uid = intent.getIntExtra(
GrantCredentialsPermissionActivity.EXTRAS_REQUESTING_UID, -1);
String authTokenType = intent.getStringExtra(
@@ -2431,20 +2583,23 @@
PendingIntent.FLAG_CANCEL_CURRENT, null, user))
.build();
installNotification(getCredentialPermissionNotificationId(
- account, authTokenType, uid), n, user);
+ account, authTokenType, uid), n, packageName, user.getIdentifier());
}
- private Intent newGrantCredentialsPermissionIntent(Account account, int uid,
- AccountAuthenticatorResponse response, String authTokenType) {
+ private Intent newGrantCredentialsPermissionIntent(Account account, String packageName,
+ int uid, AccountAuthenticatorResponse response, String authTokenType,
+ boolean startInNewTask) {
Intent intent = new Intent(mContext, GrantCredentialsPermissionActivity.class);
- // See FLAG_ACTIVITY_NEW_TASK docs for limitations and benefits of the flag.
- // Since it was set in Eclair+ we can't change it without breaking apps using
- // the intent from a non-Activity context.
- intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.addCategory(
- String.valueOf(getCredentialPermissionNotificationId(account, authTokenType, uid)));
+ if (startInNewTask) {
+ // See FLAG_ACTIVITY_NEW_TASK docs for limitations and benefits of the flag.
+ // Since it was set in Eclair+ we can't change it without breaking apps using
+ // the intent from a non-Activity context. This is the default behavior.
+ intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ }
+ intent.addCategory(String.valueOf(getCredentialPermissionNotificationId(account,
+ authTokenType, uid) + (packageName != null ? packageName : "")));
intent.putExtra(GrantCredentialsPermissionActivity.EXTRAS_ACCOUNT, account);
intent.putExtra(GrantCredentialsPermissionActivity.EXTRAS_AUTH_TOKEN_TYPE, authTokenType);
intent.putExtra(GrantCredentialsPermissionActivity.EXTRAS_RESPONSE, response);
@@ -3295,6 +3450,137 @@
}
@Override
+ public boolean hasAccountAccess(@NonNull Account account, @NonNull String packageName,
+ @NonNull UserHandle userHandle) {
+ if (UserHandle.getAppId(Binder.getCallingUid()) != Process.SYSTEM_UID) {
+ throw new SecurityException("Can be called only by system UID");
+ }
+ Preconditions.checkNotNull(account, "account cannot be null");
+ Preconditions.checkNotNull(packageName, "packageName cannot be null");
+ Preconditions.checkNotNull(userHandle, "userHandle cannot be null");
+
+ final int userId = userHandle.getIdentifier();
+
+ Preconditions.checkArgumentInRange(userId, 0, Integer.MAX_VALUE, "user must be concrete");
+
+ try {
+ final int uid = mPackageManager.getPackageUidAsUser(packageName, userId);
+ return hasAccountAccess(account, packageName, uid);
+ } catch (NameNotFoundException e) {
+ return false;
+ }
+ }
+
+ private boolean hasAccountAccess(@NonNull Account account, @Nullable String packageName,
+ int uid) {
+ if (packageName == null) {
+ String[] packageNames = mPackageManager.getPackagesForUid(uid);
+ if (ArrayUtils.isEmpty(packageNames)) {
+ return false;
+ }
+ // For app op checks related to permissions all packages in the UID
+ // have the same app op state, so doesn't matter which one we pick.
+ packageName = packageNames[0];
+ }
+
+ // Use null token which means any token. Having a token means the package
+ // is trusted by the authenticator, hence it is fine to access the account.
+ if (permissionIsGranted(account, null, uid, UserHandle.getUserId(uid))) {
+ return true;
+ }
+ // In addition to the permissions required to get an auth token we also allow
+ // the account to be accessed by holders of the get accounts permissions.
+ return checkUidPermission(Manifest.permission.GET_ACCOUNTS_PRIVILEGED, uid, packageName)
+ || checkUidPermission(Manifest.permission.GET_ACCOUNTS, uid, packageName);
+ }
+
+ private boolean checkUidPermission(String permission, int uid, String opPackageName) {
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ IPackageManager pm = ActivityThread.getPackageManager();
+ if (pm.checkUidPermission(permission, uid) != PackageManager.PERMISSION_GRANTED) {
+ return false;
+ }
+ final int opCode = AppOpsManager.permissionToOpCode(permission);
+ return (opCode == AppOpsManager.OP_NONE || mAppOpsManager.noteOpNoThrow(
+ opCode, uid, opPackageName) == AppOpsManager.MODE_ALLOWED);
+ } catch (RemoteException e) {
+ /* ignore - local call */
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ return false;
+ }
+
+ @Override
+ public IntentSender createRequestAccountAccessIntentSenderAsUser(@NonNull Account account,
+ @NonNull String packageName, @NonNull UserHandle userHandle) {
+ if (UserHandle.getAppId(Binder.getCallingUid()) != Process.SYSTEM_UID) {
+ throw new SecurityException("Can be called only by system UID");
+ }
+
+ Preconditions.checkNotNull(account, "account cannot be null");
+ Preconditions.checkNotNull(packageName, "packageName cannot be null");
+ Preconditions.checkNotNull(userHandle, "userHandle cannot be null");
+
+ final int userId = userHandle.getIdentifier();
+
+ Preconditions.checkArgumentInRange(userId, 0, Integer.MAX_VALUE, "user must be concrete");
+
+ final int uid;
+ try {
+ uid = mPackageManager.getPackageUidAsUser(packageName, userId);
+ } catch (NameNotFoundException e) {
+ Slog.e(TAG, "Unknown package " + packageName);
+ return null;
+ }
+
+ Intent intent = newRequestAccountAccessIntent(account, packageName, uid, null);
+
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ return PendingIntent.getActivityAsUser(
+ mContext, 0, intent, PendingIntent.FLAG_ONE_SHOT
+ | PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_IMMUTABLE,
+ null, new UserHandle(userId)).getIntentSender();
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+
+ private Intent newRequestAccountAccessIntent(Account account, String packageName,
+ int uid, RemoteCallback callback) {
+ return newGrantCredentialsPermissionIntent(account, packageName, uid,
+ new AccountAuthenticatorResponse(new IAccountAuthenticatorResponse.Stub() {
+ @Override
+ public void onResult(Bundle value) throws RemoteException {
+ handleAuthenticatorResponse(true);
+ }
+
+ @Override
+ public void onRequestContinued() {
+ /* ignore */
+ }
+
+ @Override
+ public void onError(int errorCode, String errorMessage) throws RemoteException {
+ handleAuthenticatorResponse(false);
+ }
+
+ private void handleAuthenticatorResponse(boolean accessGranted) throws RemoteException {
+ cancelNotification(getCredentialPermissionNotificationId(account,
+ AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE, uid), packageName,
+ UserHandle.getUserHandleForUid(uid));
+ if (callback != null) {
+ Bundle result = new Bundle();
+ result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, accessGranted);
+ callback.sendResult(result);
+ }
+ }
+ }), AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE, false);
+ }
+
+ @Override
public boolean someUserHasAccount(@NonNull final Account account) {
if (!UserHandle.isSameApp(Process.SYSTEM_UID, Binder.getCallingUid())) {
throw new SecurityException("Only system can check for accounts across users");
@@ -4934,7 +5220,7 @@
}
private void doNotification(UserAccounts accounts, Account account, CharSequence message,
- Intent intent, int userId) {
+ Intent intent, String packageName, final int userId) {
long identityToken = clearCallingIdentity();
try {
if (Log.isLoggable(TAG, Log.VERBOSE)) {
@@ -4944,12 +5230,12 @@
if (intent.getComponent() != null &&
GrantCredentialsPermissionActivity.class.getName().equals(
intent.getComponent().getClassName())) {
- createNoCredentialsPermissionNotification(account, intent, userId);
+ createNoCredentialsPermissionNotification(account, intent, packageName, userId);
} else {
+ Context contextForUser = getContextForUser(new UserHandle(userId));
final Integer notificationId = getSigninRequiredNotificationId(accounts, account);
intent.addCategory(String.valueOf(notificationId));
- UserHandle user = new UserHandle(userId);
- Context contextForUser = getContextForUser(user);
+
final String notificationTitleFormat =
contextForUser.getText(R.string.notification_title).toString();
Notification n = new Notification.Builder(contextForUser)
@@ -4961,9 +5247,9 @@
.setContentText(message)
.setContentIntent(PendingIntent.getActivityAsUser(
mContext, 0, intent, PendingIntent.FLAG_CANCEL_CURRENT,
- null, user))
+ null, new UserHandle(userId)))
.build();
- installNotification(notificationId, n, user);
+ installNotification(notificationId, n, packageName, userId);
}
} finally {
restoreCallingIdentity(identityToken);
@@ -4971,18 +5257,40 @@
}
@VisibleForTesting
- protected void installNotification(final int notificationId, final Notification n,
+ protected void installNotification(int notificationId, final Notification notification,
UserHandle user) {
- ((NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE))
- .notifyAsUser(null, notificationId, n, user);
+ installNotification(notificationId, notification, "android", user.getIdentifier());
+ }
+
+ private void installNotification(int notificationId, final Notification notification,
+ String packageName, int userId) {
+ final long token = clearCallingIdentity();
+ try {
+ INotificationManager notificationManager = NotificationManager.getService();
+ try {
+ notificationManager.enqueueNotificationWithTag(packageName, packageName, null,
+ notificationId, notification, new int[1], userId);
+ } catch (RemoteException e) {
+ /* ignore - local call */
+ }
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
}
@VisibleForTesting
protected void cancelNotification(int id, UserHandle user) {
+ cancelNotification(id, mContext.getPackageName(), user);
+ }
+
+ protected void cancelNotification(int id, String packageName, UserHandle user) {
long identityToken = clearCallingIdentity();
try {
- ((NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE))
- .cancelAsUser(null, id, user);
+ INotificationManager service = INotificationManager.Stub.asInterface(
+ ServiceManager.getService(Context.NOTIFICATION_SERVICE));
+ service.cancelNotificationWithTag(packageName, null, id, user.getIdentifier());
+ } catch (RemoteException e) {
+ /* ignore - local call */
} finally {
restoreCallingIdentity(identityToken);
}
@@ -5043,18 +5351,40 @@
private boolean permissionIsGranted(
Account account, String authTokenType, int callerUid, int userId) {
- final boolean isPrivileged = isPrivileged(callerUid);
- final boolean fromAuthenticator = account != null
- && isAccountManagedByCaller(account.type, callerUid, userId);
- final boolean hasExplicitGrants = account != null
- && hasExplicitlyGrantedPermission(account, authTokenType, callerUid);
- if (Log.isLoggable(TAG, Log.VERBOSE)) {
- Log.v(TAG, "checkGrantsOrCallingUidAgainstAuthenticator: caller uid "
- + callerUid + ", " + account
- + ": is authenticator? " + fromAuthenticator
- + ", has explicit permission? " + hasExplicitGrants);
+ if (UserHandle.getAppId(callerUid) == Process.SYSTEM_UID) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Access to " + account + " granted calling uid is system");
+ }
+ return true;
}
- return fromAuthenticator || hasExplicitGrants || isPrivileged;
+
+ if (isPrivileged(callerUid)) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Access to " + account + " granted calling uid "
+ + callerUid + " privileged");
+ }
+ return true;
+ }
+ if (account != null && isAccountManagedByCaller(account.type, callerUid, userId)) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Access to " + account + " granted calling uid "
+ + callerUid + " manages the account");
+ }
+ return true;
+ }
+ if (account != null && hasExplicitlyGrantedPermission(account, authTokenType, callerUid)) {
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Access to " + account + " granted calling uid "
+ + callerUid + " user granted access");
+ }
+ return true;
+ }
+
+ if (Log.isLoggable(TAG, Log.VERBOSE)) {
+ Log.v(TAG, "Access to " + account + " not granted for uid " + callerUid);
+ }
+
+ return false;
}
private boolean isAccountVisibleToCaller(String accountType, int callingUid, int userId,
@@ -5138,16 +5468,26 @@
private boolean hasExplicitlyGrantedPermission(Account account, String authTokenType,
int callerUid) {
- if (callerUid == Process.SYSTEM_UID) {
+ if (UserHandle.getAppId(callerUid) == Process.SYSTEM_UID) {
return true;
}
- UserAccounts accounts = getUserAccountsForCaller();
+ UserAccounts accounts = getUserAccounts(UserHandle.getUserId(callerUid));
synchronized (accounts.cacheLock) {
final SQLiteDatabase db = accounts.openHelper.getReadableDatabase();
- String[] args = { String.valueOf(callerUid), authTokenType,
- account.name, account.type};
- final boolean permissionGranted =
- DatabaseUtils.longForQuery(db, COUNT_OF_MATCHING_GRANTS, args) != 0;
+
+ final String query;
+ final String[] args;
+
+ if (authTokenType != null) {
+ query = COUNT_OF_MATCHING_GRANTS;
+ args = new String[] {String.valueOf(callerUid), authTokenType,
+ account.name, account.type};
+ } else {
+ query = COUNT_OF_MATCHING_GRANTS_ANY_TOKEN;
+ args = new String[] {String.valueOf(callerUid), account.name,
+ account.type};
+ }
+ final boolean permissionGranted = DatabaseUtils.longForQuery(db, query, args) != 0;
if (!permissionGranted && ActivityManager.isRunningInTestHarness()) {
// TODO: Skip this check when running automated tests. Replace this
// with a more general solution.
@@ -5246,7 +5586,7 @@
throws RemoteException {
final int callingUid = getCallingUid();
- if (callingUid != Process.SYSTEM_UID) {
+ if (UserHandle.getAppId(callingUid) != Process.SYSTEM_UID) {
throw new SecurityException();
}
@@ -5288,6 +5628,14 @@
}
cancelNotification(getCredentialPermissionNotificationId(account, authTokenType, uid),
UserHandle.of(accounts.userId));
+
+ cancelAccountAccessRequestNotificationIfNeeded(account, uid, true);
+ }
+
+ // Listeners are a final CopyOnWriteArrayList, hence no lock needed.
+ for (AccountManagerInternal.OnAppPermissionChangeListener listener
+ : mAppPermissionChangeListeners) {
+ mMessageHandler.post(() -> listener.onAppPermissionChanged(account, uid));
}
}
@@ -5321,9 +5669,16 @@
} finally {
db.endTransaction();
}
+
cancelNotification(getCredentialPermissionNotificationId(account, authTokenType, uid),
new UserHandle(accounts.userId));
}
+
+ // Listeners are a final CopyOnWriteArrayList, hence no lock needed.
+ for (AccountManagerInternal.OnAppPermissionChangeListener listener
+ : mAppPermissionChangeListeners) {
+ mMessageHandler.post(() -> listener.onAppPermissionChanged(account, uid));
+ }
}
static final private String stringArrayToString(String[] value) {
@@ -5362,7 +5717,7 @@
if (accountsForType != null) {
System.arraycopy(accountsForType, 0, newAccountsForType, 0, oldLength);
}
- newAccountsForType[oldLength] = account;
+ newAccountsForType[oldLength] = new Account(account, new AccountAccessTracker());
accounts.accountCache.put(account.type, newAccountsForType);
}
@@ -5605,4 +5960,88 @@
}
}
}
+
+ private final class AccountAccessTracker extends IAccountAccessTracker.Stub {
+ @Override
+ public void onAccountAccessed() throws RemoteException {
+ final int uid = Binder.getCallingUid();
+ if (UserHandle.getAppId(uid) == Process.SYSTEM_UID) {
+ return;
+ }
+ final int userId = UserHandle.getCallingUserId();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ for (Account account : getAccounts(userId, mContext.getOpPackageName())) {
+ IAccountAccessTracker accountTracker = account.getAccessTracker();
+ if (accountTracker != null && asBinder() == accountTracker.asBinder()) {
+ // An app just accessed the account. At this point it knows about
+ // it and there is not need to hide this account from the app.
+ if (!hasAccountAccess(account, null, uid)) {
+ updateAppPermission(account, AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE,
+ uid, true);
+ }
+ }
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
+ }
+ }
+
+ private final class AccountManagerInternalImpl extends AccountManagerInternal {
+ @Override
+ public void requestAccountAccess(@NonNull Account account, @NonNull String packageName,
+ @IntRange(from = 0) int userId, @NonNull RemoteCallback callback) {
+ if (account == null) {
+ Slog.w(TAG, "account cannot be null");
+ return;
+ }
+ if (packageName == null) {
+ Slog.w(TAG, "packageName cannot be null");
+ return;
+ }
+ if (userId < UserHandle.USER_SYSTEM) {
+ Slog.w(TAG, "user id must be concrete");
+ return;
+ }
+ if (callback == null) {
+ Slog.w(TAG, "callback cannot be null");
+ return;
+ }
+
+ if (AccountManagerService.this.hasAccountAccess(account, packageName,
+ new UserHandle(userId))) {
+ Bundle result = new Bundle();
+ result.putBoolean(AccountManager.KEY_BOOLEAN_RESULT, true);
+ callback.sendResult(result);
+ return;
+ }
+
+ final int uid;
+ try {
+ uid = mPackageManager.getPackageUidAsUser(packageName, userId);
+ } catch (NameNotFoundException e) {
+ Slog.e(TAG, "Unknown package " + packageName);
+ return;
+ }
+
+ Intent intent = newRequestAccountAccessIntent(account, packageName, uid, callback);
+ final UserAccounts userAccounts;
+ synchronized (mUsers) {
+ userAccounts = mUsers.get(userId);
+ }
+ doNotification(userAccounts, account, null, intent, packageName, userId);
+ }
+
+ @Override
+ public void addOnAppPermissionChangeListener(OnAppPermissionChangeListener listener) {
+ // Listeners are a final CopyOnWriteArrayList, hence no lock needed.
+ mAppPermissionChangeListeners.add(listener);
+ }
+
+ @Override
+ public boolean hasAccountAccess(@NonNull Account account, @IntRange(from = 0) int uid) {
+ return AccountManagerService.this.hasAccountAccess(account, null, uid);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/accounts/IAccountAuthenticatorCache.java b/services/core/java/com/android/server/accounts/IAccountAuthenticatorCache.java
index bb09687..2c7d921 100644
--- a/services/core/java/com/android/server/accounts/IAccountAuthenticatorCache.java
+++ b/services/core/java/com/android/server/accounts/IAccountAuthenticatorCache.java
@@ -64,4 +64,10 @@
Handler handler);
void invalidateCache(int userId);
+
+ /**
+ * Request to update services info for which package has been updated, but hasn't been
+ * picked up by the cache.
+ */
+ void updateServices(int userId);
}
diff --git a/services/core/java/com/android/server/am/ActivityManagerService.java b/services/core/java/com/android/server/am/ActivityManagerService.java
index a09f014..ab33dbf 100644
--- a/services/core/java/com/android/server/am/ActivityManagerService.java
+++ b/services/core/java/com/android/server/am/ActivityManagerService.java
@@ -1158,6 +1158,7 @@
* For example, references to the commonly used services.
*/
HashMap<String, IBinder> mAppBindArgs;
+ HashMap<String, IBinder> mIsolatedAppBindArgs;
/**
* Temporary to avoid allocations. Protected by main lock.
@@ -2377,22 +2378,21 @@
if (memInfo != null) {
updateCpuStatsNow();
long nativeTotalPss = 0;
+ final List<ProcessCpuTracker.Stats> stats;
synchronized (mProcessCpuTracker) {
- final int N = mProcessCpuTracker.countStats();
- for (int j=0; j<N; j++) {
- ProcessCpuTracker.Stats st = mProcessCpuTracker.getStats(j);
- if (st.vsize <= 0 || st.uid >= Process.FIRST_APPLICATION_UID) {
- // This is definitely an application process; skip it.
+ stats = mProcessCpuTracker.getStats( (st)-> {
+ return st.vsize > 0 && st.uid < Process.FIRST_APPLICATION_UID;
+ });
+ }
+ final int N = stats.size();
+ for (int j = 0; j < N; j++) {
+ synchronized (mPidsSelfLocked) {
+ if (mPidsSelfLocked.indexOfKey(stats.get(j).pid) >= 0) {
+ // This is one of our own processes; skip it.
continue;
}
- synchronized (mPidsSelfLocked) {
- if (mPidsSelfLocked.indexOfKey(st.pid) >= 0) {
- // This is one of our own processes; skip it.
- continue;
- }
- }
- nativeTotalPss += Debug.getPss(st.pid, null, null);
}
+ nativeTotalPss += Debug.getPss(stats.get(j).pid, null, null);
}
memInfo.readMemInfo();
synchronized (ActivityManagerService.this) {
@@ -2935,18 +2935,24 @@
* lazily setup to make sure the services are running when they're asked for.
*/
private HashMap<String, IBinder> getCommonServicesLocked(boolean isolated) {
+ // Isolated processes won't get this optimization, so that we don't
+ // violate the rules about which services they have access to.
+ if (isolated) {
+ if (mIsolatedAppBindArgs == null) {
+ mIsolatedAppBindArgs = new HashMap<>();
+ mIsolatedAppBindArgs.put("package", ServiceManager.getService("package"));
+ }
+ return mIsolatedAppBindArgs;
+ }
+
if (mAppBindArgs == null) {
mAppBindArgs = new HashMap<>();
- // Isolated processes won't get this optimization, so that we don't
- // violate the rules about which services they have access to.
- if (!isolated) {
- // Setup the application init args
- mAppBindArgs.put("package", ServiceManager.getService("package"));
- mAppBindArgs.put("window", ServiceManager.getService("window"));
- mAppBindArgs.put(Context.ALARM_SERVICE,
- ServiceManager.getService(Context.ALARM_SERVICE));
- }
+ // Setup the application init args
+ mAppBindArgs.put("package", ServiceManager.getService("package"));
+ mAppBindArgs.put("window", ServiceManager.getService("window"));
+ mAppBindArgs.put(Context.ALARM_SERVICE,
+ ServiceManager.getService(Context.ALARM_SERVICE));
}
return mAppBindArgs;
}
@@ -3092,6 +3098,15 @@
if (task == null) {
return;
}
+ if (mUserController.shouldConfirmCredentials(task.userId)) {
+ mActivityStarter.showConfirmDeviceCredential(task.userId);
+ if (task.stack != null && task.stack.mStackId == FREEFORM_WORKSPACE_STACK_ID) {
+ mStackSupervisor.moveTaskToStackLocked(task.taskId,
+ FULLSCREEN_WORKSPACE_STACK_ID, !ON_TOP, !FORCE_FOCUS,
+ "setFocusedTask", ANIMATE);
+ }
+ return;
+ }
final ActivityRecord r = task.topRunningActivityLocked();
if (setFocusedActivityLocked(r, "setFocusedTask")) {
mStackSupervisor.resumeFocusedStackTopActivityLocked();
@@ -3832,6 +3847,15 @@
app.killedByAm = false;
checkTime(startTime, "startProcess: starting to update pids map");
synchronized (mPidsSelfLocked) {
+ ProcessRecord oldApp;
+ // If there is already an app occupying that pid that hasn't been cleaned up
+ if ((oldApp = mPidsSelfLocked.get(startResult.pid)) != null && !app.isolated) {
+ // Clean up anything relating to this pid first
+ Slog.w(TAG, "Reusing pid " + startResult.pid
+ + " while app is still mapped to it");
+ cleanUpApplicationRecordLocked(oldApp, false, false, -1,
+ true /*replacingPid*/);
+ }
this.mPidsSelfLocked.put(startResult.pid, app);
if (isActivityProcess) {
Message msg = mHandler.obtainMessage(PROC_START_TIMEOUT_MSG);
@@ -5047,7 +5071,8 @@
private final void handleAppDiedLocked(ProcessRecord app,
boolean restarting, boolean allowRestart) {
int pid = app.pid;
- boolean kept = cleanUpApplicationRecordLocked(app, restarting, allowRestart, -1);
+ boolean kept = cleanUpApplicationRecordLocked(app, restarting, allowRestart, -1,
+ false /*replacingPid*/);
if (!kept && !restarting) {
removeLruProcessLocked(app);
if (pid > 0) {
@@ -11807,6 +11832,12 @@
final long ident = Binder.clearCallingIdentity();
try {
final int currentUserId = mUserController.getCurrentUserIdLocked();
+
+ // Drop locked freeform tasks out into the fullscreen stack.
+ // TODO: Redact the tasks in place. It's much better to keep them on the screen
+ // where they were before, but in an obscured state.
+ mStackSupervisor.moveProfileTasksFromFreeformToFullscreenStackLocked(userId);
+
if (mUserController.isLockScreenDisabled(currentUserId)) {
// If there is no device lock, we will show the profile's credential page.
mActivityStarter.showConfirmDeviceCredential(userId);
@@ -13803,7 +13834,7 @@
try {
java.lang.Process logcat = new ProcessBuilder(
"/system/bin/timeout", "-k", "15s", "10s",
- "/system/bin/logcat", "-v", "time", "-b", "events", "-b", "system",
+ "/system/bin/logcat", "-v", "threadtime", "-b", "events", "-b", "system",
"-b", "main", "-b", "crash", "-t", String.valueOf(lines))
.redirectErrorStream(true).start();
@@ -16493,21 +16524,24 @@
}
updateCpuStatsNow();
long[] memtrackTmp = new long[1];
+ final List<ProcessCpuTracker.Stats> stats;
+ // Get a list of Stats that have vsize > 0
synchronized (mProcessCpuTracker) {
- final int N = mProcessCpuTracker.countStats();
- for (int i=0; i<N; i++) {
- ProcessCpuTracker.Stats st = mProcessCpuTracker.getStats(i);
- if (st.vsize > 0) {
- long pss = Debug.getPss(st.pid, null, memtrackTmp);
- if (pss > 0) {
- if (infoMap.indexOfKey(st.pid) < 0) {
- ProcessMemInfo mi = new ProcessMemInfo(st.name, st.pid,
- ProcessList.NATIVE_ADJ, -1, "native", null);
- mi.pss = pss;
- mi.memtrack = memtrackTmp[0];
- memInfos.add(mi);
- }
- }
+ stats = mProcessCpuTracker.getStats((st) -> {
+ return st.vsize > 0;
+ });
+ }
+ final int statsCount = stats.size();
+ for (int i = 0; i < statsCount; i++) {
+ ProcessCpuTracker.Stats st = stats.get(i);
+ long pss = Debug.getPss(st.pid, null, memtrackTmp);
+ if (pss > 0) {
+ if (infoMap.indexOfKey(st.pid) < 0) {
+ ProcessMemInfo mi = new ProcessMemInfo(st.name, st.pid,
+ ProcessList.NATIVE_ADJ, -1, "native", null);
+ mi.pss = pss;
+ mi.memtrack = memtrackTmp[0];
+ memInfos.add(mi);
}
}
}
@@ -16822,7 +16856,8 @@
* app that was passed in must remain on the process lists.
*/
private final boolean cleanUpApplicationRecordLocked(ProcessRecord app,
- boolean restarting, boolean allowRestart, int index) {
+ boolean restarting, boolean allowRestart, int index, boolean replacingPid) {
+ Slog.d(TAG, "cleanUpApplicationRecord -- " + app.pid);
if (index >= 0) {
removeLruProcessLocked(app);
ProcessList.remove(app.pid);
@@ -16953,7 +16988,9 @@
if (!app.persistent || app.isolated) {
if (DEBUG_PROCESSES || DEBUG_CLEANUP) Slog.v(TAG_CLEANUP,
"Removing non-persistent process during cleanup: " + app);
- removeProcessNameLocked(app.processName, app.uid);
+ if (!replacingPid) {
+ removeProcessNameLocked(app.processName, app.uid);
+ }
if (mHeavyWeightProcess == app) {
mHandler.sendMessage(mHandler.obtainMessage(CANCEL_HEAVY_NOTIFICATION_MSG,
mHeavyWeightProcess.userId, 0));
@@ -17757,6 +17794,7 @@
|| Intent.ACTION_MEDIA_BUTTON.equals(action)
|| Intent.ACTION_MEDIA_SCANNER_SCAN_FILE.equals(action)
|| Intent.ACTION_SHOW_KEYBOARD_SHORTCUTS.equals(action)
+ || Intent.ACTION_MASTER_CLEAR.equals(action)
|| AppWidgetManager.ACTION_APPWIDGET_CONFIGURE.equals(action)
|| AppWidgetManager.ACTION_APPWIDGET_UPDATE.equals(action)
|| LocationManager.HIGH_POWER_REQUEST_CHANGE_ACTION.equals(action)
@@ -21282,7 +21320,7 @@
// Ignore exceptions.
}
}
- cleanUpApplicationRecordLocked(app, false, true, -1);
+ cleanUpApplicationRecordLocked(app, false, true, -1, false /*replacingPid*/);
mRemovedProcesses.remove(i);
if (app.persistent) {
diff --git a/services/core/java/com/android/server/am/ActivityRecord.java b/services/core/java/com/android/server/am/ActivityRecord.java
index 00fda43..f374c09 100755
--- a/services/core/java/com/android/server/am/ActivityRecord.java
+++ b/services/core/java/com/android/server/am/ActivityRecord.java
@@ -750,6 +750,14 @@
&& intent.getType() == null;
}
+ static boolean isMainIntent(Intent intent) {
+ return Intent.ACTION_MAIN.equals(intent.getAction())
+ && intent.hasCategory(Intent.CATEGORY_LAUNCHER)
+ && intent.getCategories().size() == 1
+ && intent.getData() == null
+ && intent.getType() == null;
+ }
+
private boolean canLaunchHomeActivity(int uid, ActivityRecord sourceRecord) {
if (uid == Process.myUid() || uid == 0) {
// System process can launch home activity.
@@ -1301,8 +1309,12 @@
state == ActivityState.RESUMED;
}
- public void setSleeping(boolean _sleeping) {
- if (sleeping == _sleeping) {
+ void setSleeping(boolean _sleeping) {
+ setSleeping(_sleeping, false);
+ }
+
+ void setSleeping(boolean _sleeping, boolean force) {
+ if (!force && sleeping == _sleeping) {
return;
}
if (app != null && app.thread != null) {
diff --git a/services/core/java/com/android/server/am/ActivityStack.java b/services/core/java/com/android/server/am/ActivityStack.java
index a27adf7..b4303c5 100644
--- a/services/core/java/com/android/server/am/ActivityStack.java
+++ b/services/core/java/com/android/server/am/ActivityStack.java
@@ -1591,11 +1591,6 @@
return STACK_INVISIBLE;
}
- final boolean isLockscreenShown = mService.mLockScreenShown == LOCK_SCREEN_SHOWN;
- if (isLockscreenShown && !StackId.isAllowedOverLockscreen(mStackId)) {
- return STACK_INVISIBLE;
- }
-
final ActivityStack focusedStack = mStackSupervisor.getFocusedStack();
final int focusedStackId = focusedStack.mStackId;
@@ -2485,13 +2480,25 @@
}
}
+ boolean allowSavedSurface = true;
if (next.newIntents != null) {
+ // Restrict saved surface to launcher start, or there is no intent at all
+ // (eg. task being brought to front). If the intent is something else,
+ // likely the app is going to show some specific page or view, instead of
+ // what's left last time.
+ for (int i = next.newIntents.size() - 1; i >= 0; i--) {
+ final Intent intent = next.newIntents.get(i);
+ if (intent != null && !ActivityRecord.isMainIntent(intent)) {
+ allowSavedSurface = false;
+ break;
+ }
+ }
next.app.thread.scheduleNewIntent(next.newIntents, next.appToken);
}
// Well the app will no longer be stopped.
// Clear app token stopped state in window manager if needed.
- mWindowManager.notifyAppResumed(next.appToken, next.stopped);
+ mWindowManager.notifyAppResumed(next.appToken, next.stopped, allowSavedSurface);
EventLog.writeEvent(EventLogTags.AM_RESUME_ACTIVITY, next.userId,
System.identityHashCode(next), next.task.taskId, next.shortComponentName);
@@ -4505,15 +4512,6 @@
return true;
}
- // TODO: We could probably make the condition below just check that the activity state is
- // stopped, but also checking the sleep state for now to reduce change impact late in
- // development cycle.
- if (mService.isSleepingOrShuttingDownLocked() && r.state == ActivityState.STOPPED) {
- if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
- "Skipping config check (stopped while sleeping): " + r);
- return true;
- }
-
if (DEBUG_SWITCH || DEBUG_CONFIGURATION) Slog.v(TAG_CONFIGURATION,
"Ensuring correct configuration: " + r);
diff --git a/services/core/java/com/android/server/am/ActivityStackSupervisor.java b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
index 1cb83d2..17670f8 100644
--- a/services/core/java/com/android/server/am/ActivityStackSupervisor.java
+++ b/services/core/java/com/android/server/am/ActivityStackSupervisor.java
@@ -743,9 +743,11 @@
if (!mService.mUserController.shouldConfirmCredentials(userId)) {
return false;
}
- final ActivityStack fullScreenStack = getStack(FULLSCREEN_WORKSPACE_STACK_ID);
- final ActivityStack dockedStack = getStack(DOCKED_STACK_ID);
- final ActivityStack[] activityStacks = new ActivityStack[] {fullScreenStack, dockedStack};
+ final ActivityStack[] activityStacks = {
+ getStack(DOCKED_STACK_ID),
+ getStack(FREEFORM_WORKSPACE_STACK_ID),
+ getStack(FULLSCREEN_WORKSPACE_STACK_ID),
+ };
for (final ActivityStack activityStack : activityStacks) {
if (activityStack == null) {
continue;
@@ -759,14 +761,22 @@
if (activityStack.isDockedStack() && mIsDockMinimized) {
continue;
}
- final TaskRecord topTask = activityStack.topTask();
- if (topTask == null) {
- continue;
- }
- // To handle the case that work app is in the task but just is not the top one.
- for (int i = topTask.mActivities.size() - 1; i >= 0; i--) {
- final ActivityRecord activityRecord = topTask.mActivities.get(i);
- if (activityRecord.userId == userId) {
+ if (activityStack.mStackId == FREEFORM_WORKSPACE_STACK_ID) {
+ // TODO: Only the topmost task should trigger credential confirmation. But first,
+ // there needs to be a way to block out locked task window surfaces.
+ final List<TaskRecord> tasks = activityStack.getAllTasks();
+ final int size = tasks.size();
+ for (int i = 0; i < size; i++) {
+ if (taskContainsActivityFromUser(tasks.get(i), userId)) {
+ return true;
+ }
+ }
+ } else {
+ final TaskRecord topTask = activityStack.topTask();
+ if (topTask == null) {
+ continue;
+ }
+ if (taskContainsActivityFromUser(topTask, userId)) {
return true;
}
}
@@ -774,6 +784,17 @@
return false;
}
+ private boolean taskContainsActivityFromUser(TaskRecord task, @UserIdInt int userId) {
+ // To handle the case that work app is in the task but just is not the top one.
+ for (int i = task.mActivities.size() - 1; i >= 0; i--) {
+ final ActivityRecord activityRecord = task.mActivities.get(i);
+ if (activityRecord.userId == userId) {
+ return true;
+ }
+ }
+ return false;
+ }
+
void setNextTaskIdForUserLocked(int taskId, int userId) {
final int currentTaskId = mCurTaskIdForUser.get(userId, -1);
if (taskId > currentTaskId) {
@@ -2164,6 +2185,32 @@
}
}
+ /**
+ * TODO: remove the need for this method. (b/30693465)
+ *
+ * @param userId user handle for the locked managed profile. Freeform tasks for this user will
+ * be moved to another stack, so they are not shown in the background.
+ */
+ void moveProfileTasksFromFreeformToFullscreenStackLocked(@UserIdInt int userId) {
+ final ActivityStack stack = getStack(FREEFORM_WORKSPACE_STACK_ID);
+ if (stack == null) {
+ return;
+ }
+ mWindowManager.deferSurfaceLayout();
+ try {
+ final ArrayList<TaskRecord> tasks = stack.getAllTasks();
+ final int size = tasks.size();
+ for (int i = size - 1; i >= 0; i--) {
+ if (taskContainsActivityFromUser(tasks.get(i), userId)) {
+ positionTaskInStackLocked(tasks.get(i).taskId, FULLSCREEN_WORKSPACE_STACK_ID,
+ /* position */ 0);
+ }
+ }
+ } finally {
+ mWindowManager.continueSurfaceLayout();
+ }
+ }
+
void resizeDockedStackLocked(Rect dockedBounds, Rect tempDockedTaskBounds,
Rect tempDockedTaskInsetBounds, Rect tempOtherTaskBounds, Rect tempOtherTaskInsetBounds,
boolean preserveWindows) {
@@ -2354,6 +2401,10 @@
// Preferred stack is the docked stack, but the task can't go in the docked stack.
// Put it in the fullscreen stack.
stackId = FULLSCREEN_WORKSPACE_STACK_ID;
+ } else if (stackId == FREEFORM_WORKSPACE_STACK_ID
+ && mService.mUserController.shouldConfirmCredentials(task.userId)) {
+ // Task is barred from the freeform stack. Put it in the fullscreen stack.
+ stackId = FULLSCREEN_WORKSPACE_STACK_ID;
}
if (task.stack != null) {
@@ -2426,6 +2477,12 @@
Slog.w(TAG, "Can not move unresizeable task=" + task
+ " to docked stack. Moving to stackId=" + stackId + " instead.");
}
+ if (stackId == FREEFORM_WORKSPACE_STACK_ID
+ && mService.mUserController.shouldConfirmCredentials(task.userId)) {
+ stackId = (prevStack != null) ? prevStack.mStackId : FULLSCREEN_WORKSPACE_STACK_ID;
+ Slog.w(TAG, "Can not move locked profile task=" + task
+ + " to freeform stack. Moving to stackId=" + stackId + " instead.");
+ }
// Temporarily disable resizeablility of task we are moving. We don't want it to be resized
// if a docked stack is created below which will lead to the stack we are moving from and
@@ -3708,6 +3765,12 @@
void activityRelaunchedLocked(IBinder token) {
mWindowManager.notifyAppRelaunchingFinished(token);
+ if (mService.isSleepingOrShuttingDownLocked()) {
+ final ActivityRecord r = ActivityRecord.isInStackLocked(token);
+ if (r != null) {
+ r.setSleeping(true, true);
+ }
+ }
}
void activityRelaunchingLocked(ActivityRecord r) {
diff --git a/services/core/java/com/android/server/am/ActivityStarter.java b/services/core/java/com/android/server/am/ActivityStarter.java
index 5252446..cec37d8 100644
--- a/services/core/java/com/android/server/am/ActivityStarter.java
+++ b/services/core/java/com/android/server/am/ActivityStarter.java
@@ -103,6 +103,7 @@
import android.os.Bundle;
import android.os.IBinder;
import android.os.PowerManagerInternal;
+import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
import android.os.UserHandle;
@@ -132,6 +133,9 @@
private static final String TAG_CONFIGURATION = TAG + POSTFIX_CONFIGURATION;
private static final String TAG_USER_LEAVING = TAG + POSTFIX_USER_LEAVING;
+ // TODO b/30204367 remove when the platform fully supports ephemeral applications
+ private static final boolean USE_DEFAULT_EPHEMERAL_LAUNCHER = false;
+
private final ActivityManagerService mService;
private final ActivityStackSupervisor mSupervisor;
private ActivityStartInterceptor mInterceptor;
@@ -456,39 +460,13 @@
// starts either the intent we resolved here [on install error] or the ephemeral
// app [on install success].
if (rInfo != null && rInfo.ephemeralResolveInfo != null) {
- // Create a pending intent to start the intent resolved here.
- final IIntentSender failureTarget = mService.getIntentSenderLocked(
- ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage,
- Binder.getCallingUid(), userId, null, null, 0, new Intent[]{ intent },
- new String[]{ resolvedType },
- PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT
- | PendingIntent.FLAG_IMMUTABLE, null);
-
- // Create a pending intent to start the ephemeral application; force it to be
- // directed to the ephemeral package.
- ephemeralIntent.setPackage(rInfo.ephemeralResolveInfo.getPackageName());
- final IIntentSender ephemeralTarget = mService.getIntentSenderLocked(
- ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage,
- Binder.getCallingUid(), userId, null, null, 0, new Intent[]{ ephemeralIntent },
- new String[]{ resolvedType },
- PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT
- | PendingIntent.FLAG_IMMUTABLE, null);
-
- int flags = intent.getFlags();
- intent = new Intent();
- intent.setFlags(flags
- | Intent.FLAG_ACTIVITY_NEW_TASK
- | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
- intent.putExtra(Intent.EXTRA_PACKAGE_NAME,
- rInfo.ephemeralResolveInfo.getPackageName());
- intent.putExtra(Intent.EXTRA_EPHEMERAL_FAILURE, new IntentSender(failureTarget));
- intent.putExtra(Intent.EXTRA_EPHEMERAL_SUCCESS, new IntentSender(ephemeralTarget));
-
+ intent = buildEphemeralInstallerIntent(intent, ephemeralIntent,
+ rInfo.ephemeralResolveInfo.getPackageName(), callingPackage, resolvedType,
+ userId);
resolvedType = null;
callingUid = realCallingUid;
callingPid = realCallingPid;
- rInfo = rInfo.ephemeralInstaller;
aInfo = mSupervisor.resolveActivity(intent, rInfo, startFlags, null /*profilerInfo*/);
}
@@ -543,6 +521,60 @@
return err;
}
+ /**
+ * Builds and returns an intent to launch the ephemeral installer.
+ */
+ private Intent buildEphemeralInstallerIntent(Intent launchIntent, Intent origIntent,
+ String ephemeralPackage, String callingPackage, String resolvedType, int userId) {
+ final Intent nonEphemeralIntent = new Intent(origIntent);
+ nonEphemeralIntent.setFlags(nonEphemeralIntent.getFlags() | Intent.FLAG_IGNORE_EPHEMERAL);
+ // Intent that is launched if the ephemeral package couldn't be installed
+ // for any reason.
+ final IIntentSender failureIntentTarget = mService.getIntentSenderLocked(
+ ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage,
+ Binder.getCallingUid(), userId, null /*token*/, null /*resultWho*/, 1,
+ new Intent[]{ nonEphemeralIntent }, new String[]{ resolvedType },
+ PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT
+ | PendingIntent.FLAG_IMMUTABLE, null /*bOptions*/);
+
+ final Intent ephemeralIntent;
+ if (USE_DEFAULT_EPHEMERAL_LAUNCHER) {
+ // Force the intent to be directed to the ephemeral package
+ ephemeralIntent = new Intent(origIntent);
+ ephemeralIntent.setPackage(ephemeralPackage);
+ } else {
+ // Success intent goes back to the installer
+ // TODO; do we need any extras for the installer?
+ ephemeralIntent = new Intent(launchIntent);
+ ephemeralIntent.setData(null);
+ }
+
+ // Intent that is eventually launched if the ephemeral package was
+ // installed successfully. This will actually be launched by a platform
+ // broadcast receiver.
+ final IIntentSender successIntentTarget = mService.getIntentSenderLocked(
+ ActivityManager.INTENT_SENDER_ACTIVITY, callingPackage,
+ Binder.getCallingUid(), userId, null /*token*/, null /*resultWho*/, 0,
+ new Intent[]{ ephemeralIntent }, new String[]{ resolvedType },
+ PendingIntent.FLAG_CANCEL_CURRENT | PendingIntent.FLAG_ONE_SHOT
+ | PendingIntent.FLAG_IMMUTABLE, null /*bOptions*/);
+
+ // Finally build the actual intent to launch the ephemeral installer
+ int flags = launchIntent.getFlags();
+ final Intent intent = new Intent();
+ intent.setFlags(flags
+ | Intent.FLAG_ACTIVITY_NEW_TASK
+ | Intent.FLAG_ACTIVITY_CLEAR_TASK
+ | Intent.FLAG_ACTIVITY_NO_HISTORY
+ | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
+ intent.putExtra(Intent.EXTRA_PACKAGE_NAME, ephemeralPackage);
+ intent.putExtra(Intent.EXTRA_EPHEMERAL_FAILURE, new IntentSender(failureIntentTarget));
+ intent.putExtra(Intent.EXTRA_EPHEMERAL_SUCCESS, new IntentSender(successIntentTarget));
+ // TODO: Remove when the platform has fully implemented ephemeral apps
+ intent.setData(origIntent.getData());
+ return intent;
+ }
+
void postStartActivityUncheckedProcessing(
ActivityRecord r, int result, int prevFocusedStackId, ActivityRecord sourceRecord,
ActivityStack targetStack) {
@@ -572,6 +604,9 @@
// If we launched the activity from a no display activity that was launched from the home
// screen, we also need to start recents to un-minimize the docked stack, since the
// noDisplay activity will be finished shortly after.
+ // Note that some apps have trampoline activities without noDisplay being set. In that case,
+ // we have another heuristic in DockedStackDividerController.notifyAppTransitionStarting
+ // that tries to detect that case.
// TODO: We should prevent noDisplay activities from affecting task/stack ordering and
// visibility instead of using this flag.
final boolean noDisplayActivityOverHome = sourceRecord != null
@@ -625,10 +660,15 @@
ActivityStack targetStack;
ActivityStack fullscreenStack =
mSupervisor.getStack(FULLSCREEN_WORKSPACE_STACK_ID);
+ ActivityStack freeformStack =
+ mSupervisor.getStack(FREEFORM_WORKSPACE_STACK_ID);
if (fullscreenStack != null &&
fullscreenStack.getStackVisibilityLocked(null) != ActivityStack.STACK_INVISIBLE) {
// Single window case and the case that the docked stack is shown with fullscreen stack.
targetStack = fullscreenStack;
+ } else if (freeformStack != null &&
+ freeformStack.getStackVisibilityLocked(null) != ActivityStack.STACK_INVISIBLE) {
+ targetStack = freeformStack;
} else {
// The case that the docked stack is shown with recent.
targetStack = mSupervisor.getStack(HOME_STACK_ID);
diff --git a/services/core/java/com/android/server/am/AppErrors.java b/services/core/java/com/android/server/am/AppErrors.java
index 7eff773..576f2b2 100644
--- a/services/core/java/com/android/server/am/AppErrors.java
+++ b/services/core/java/com/android/server/am/AppErrors.java
@@ -575,6 +575,8 @@
boolean handleAppCrashLocked(ProcessRecord app, String reason,
String shortMsg, String longMsg, String stackTrace, AppErrorDialog.Data data) {
long now = SystemClock.uptimeMillis();
+ boolean showBackground = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0;
Long crashTime;
Long crashTimePersistent;
@@ -612,7 +614,9 @@
// processes run critical code.
mService.removeProcessLocked(app, false, false, "crash");
mService.mStackSupervisor.resumeFocusedStackTopActivityLocked();
- return false;
+ if (!showBackground) {
+ return false;
+ }
}
mService.mStackSupervisor.resumeFocusedStackTopActivityLocked();
} else {
@@ -705,7 +709,7 @@
}
final boolean crashSilenced = mAppsNotReportingCrashes != null &&
mAppsNotReportingCrashes.contains(proc.info.packageName);
- if (mService.canShowErrorDialogs() && !crashSilenced) {
+ if ((mService.canShowErrorDialogs() || showBackground) && !crashSilenced) {
proc.crashDialog = new AppErrorDialog(mContext, mService, data);
} else {
// The device is asleep, so just pretend that the user
@@ -942,7 +946,9 @@
null, null, 0, null, null, null, AppOpsManager.OP_NONE,
null, false, false, MY_PID, Process.SYSTEM_UID, 0 /* TODO: Verify */);
- if (mService.canShowErrorDialogs()) {
+ boolean showBackground = Settings.Secure.getInt(mContext.getContentResolver(),
+ Settings.Secure.ANR_SHOW_BACKGROUND, 0) != 0;
+ if (mService.canShowErrorDialogs() || showBackground) {
d = new AppNotRespondingDialog(mService,
mContext, proc, (ActivityRecord)data.get("activity"),
msg.arg1 != 0);
diff --git a/services/core/java/com/android/server/am/BroadcastQueue.java b/services/core/java/com/android/server/am/BroadcastQueue.java
index a279290..d3826ac 100644
--- a/services/core/java/com/android/server/am/BroadcastQueue.java
+++ b/services/core/java/com/android/server/am/BroadcastQueue.java
@@ -226,11 +226,12 @@
}
public final boolean replaceParallelBroadcastLocked(BroadcastRecord r) {
+ final Intent intent = r.intent;
for (int i = mParallelBroadcasts.size() - 1; i >= 0; i--) {
- if (r.intent.filterEquals(mParallelBroadcasts.get(i).intent)) {
+ if (intent.filterEquals(mParallelBroadcasts.get(i).intent)) {
if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST,
"***** DROPPING PARALLEL ["
- + mQueueName + "]: " + r.intent);
+ + mQueueName + "]: " + intent);
mParallelBroadcasts.set(i, r);
return true;
}
@@ -239,11 +240,12 @@
}
public final boolean replaceOrderedBroadcastLocked(BroadcastRecord r) {
+ final Intent intent = r.intent;
for (int i = mOrderedBroadcasts.size() - 1; i > 0; i--) {
- if (r.intent.filterEquals(mOrderedBroadcasts.get(i).intent)) {
+ if (intent.filterEquals(mOrderedBroadcasts.get(i).intent)) {
if (DEBUG_BROADCAST) Slog.v(TAG_BROADCAST,
"***** DROPPING ORDERED ["
- + mQueueName + "]: " + r.intent);
+ + mQueueName + "]: " + intent);
mOrderedBroadcasts.set(i, r);
return true;
}
@@ -302,6 +304,11 @@
boolean didSomething = false;
final BroadcastRecord br = mPendingBroadcast;
if (br != null && br.curApp.pid == app.pid) {
+ if (br.curApp != app) {
+ Slog.e(TAG, "App mismatch when sending pending broadcast to "
+ + app.processName + ", intended target is " + br.curApp.processName);
+ return false;
+ }
try {
mPendingBroadcast = null;
processCurBroadcastLocked(br, app);
diff --git a/services/core/java/com/android/server/am/CoreSettingsObserver.java b/services/core/java/com/android/server/am/CoreSettingsObserver.java
index 9dd07a9..73a17c6 100644
--- a/services/core/java/com/android/server/am/CoreSettingsObserver.java
+++ b/services/core/java/com/android/server/am/CoreSettingsObserver.java
@@ -42,6 +42,7 @@
String, Class<?>>();
static {
sSecureSettingToTypeMap.put(Settings.Secure.LONG_PRESS_TIMEOUT, int.class);
+ sSecureSettingToTypeMap.put(Settings.Secure.MULTI_PRESS_TIMEOUT, int.class);
// add other secure settings here...
sSystemSettingToTypeMap.put(Settings.System.TIME_12_24, String.class);
diff --git a/services/core/java/com/android/server/am/PendingIntentRecord.java b/services/core/java/com/android/server/am/PendingIntentRecord.java
index 2467a90..9c08453 100644
--- a/services/core/java/com/android/server/am/PendingIntentRecord.java
+++ b/services/core/java/com/android/server/am/PendingIntentRecord.java
@@ -38,6 +38,7 @@
import java.io.PrintWriter;
import java.lang.ref.WeakReference;
+import java.util.Objects;
final class PendingIntentRecord extends IIntentSender.Stub {
private static final String TAG = TAG_WITH_CLASS_NAME ? "PendingIntentRecord" : TAG_AM;
@@ -102,7 +103,7 @@
if (requestResolvedType != null) {
hash = (ODD_PRIME_NUMBER*hash) + requestResolvedType.hashCode();
}
- hash = (ODD_PRIME_NUMBER*hash) + _p.hashCode();
+ hash = (ODD_PRIME_NUMBER*hash) + (_p != null ? _p.hashCode() : 0);
hash = (ODD_PRIME_NUMBER*hash) + _t;
hashCode = hash;
//Slog.i(ActivityManagerService.TAG, this + " hashCode=0x"
@@ -121,20 +122,14 @@
if (userId != other.userId){
return false;
}
- if (!packageName.equals(other.packageName)) {
+ if (!Objects.equals(packageName, other.packageName)) {
return false;
}
if (activity != other.activity) {
return false;
}
- if (who != other.who) {
- if (who != null) {
- if (!who.equals(other.who)) {
- return false;
- }
- } else if (other.who != null) {
- return false;
- }
+ if (!Objects.equals(who, other.who)) {
+ return false;
}
if (requestCode != other.requestCode) {
return false;
@@ -148,14 +143,8 @@
return false;
}
}
- if (requestResolvedType != other.requestResolvedType) {
- if (requestResolvedType != null) {
- if (!requestResolvedType.equals(other.requestResolvedType)) {
- return false;
- }
- } else if (other.requestResolvedType != null) {
- return false;
- }
+ if (!Objects.equals(requestResolvedType, other.requestResolvedType)) {
+ return false;
}
if (flags != other.flags) {
return false;
diff --git a/services/core/java/com/android/server/am/TaskPersister.java b/services/core/java/com/android/server/am/TaskPersister.java
index 48fecd5..43eb251 100644
--- a/services/core/java/com/android/server/am/TaskPersister.java
+++ b/services/core/java/com/android/server/am/TaskPersister.java
@@ -87,6 +87,8 @@
private final RecentTasks mRecentTasks;
private final SparseArray<SparseBooleanArray> mTaskIdsInFile = new SparseArray<>();
private final File mTaskIdsDir;
+ // To lock file operations in TaskPersister
+ private final Object mIoLock = new Object();
/**
* Value determines write delay mode as follows: < 0 We are Flushing. No delays between writes
@@ -195,52 +197,52 @@
return mTaskIdsInFile.get(userId).clone();
}
final SparseBooleanArray persistedTaskIds = new SparseBooleanArray();
- BufferedReader reader = null;
- String line;
- try {
- reader = new BufferedReader(new FileReader(getUserPersistedTaskIdsFile(userId)));
- while ((line = reader.readLine()) != null) {
- for (String taskIdString : line.split("\\s+")) {
- int id = Integer.parseInt(taskIdString);
- persistedTaskIds.put(id, true);
+ synchronized (mIoLock) {
+ BufferedReader reader = null;
+ String line;
+ try {
+ reader = new BufferedReader(new FileReader(getUserPersistedTaskIdsFile(userId)));
+ while ((line = reader.readLine()) != null) {
+ for (String taskIdString : line.split("\\s+")) {
+ int id = Integer.parseInt(taskIdString);
+ persistedTaskIds.put(id, true);
+ }
}
+ } catch (FileNotFoundException e) {
+ // File doesn't exist. Ignore.
+ } catch (Exception e) {
+ Slog.e(TAG, "Error while reading taskIds file for user " + userId, e);
+ } finally {
+ IoUtils.closeQuietly(reader);
}
- } catch (FileNotFoundException e) {
- // File doesn't exist. Ignore.
- } catch (Exception e) {
- Slog.e(TAG, "Error while reading taskIds file for user " + userId, e);
- } finally {
- IoUtils.closeQuietly(reader);
}
mTaskIdsInFile.put(userId, persistedTaskIds);
return persistedTaskIds.clone();
}
+
@VisibleForTesting
- void maybeWritePersistedTaskIdsForUser(@NonNull SparseBooleanArray taskIds, int userId) {
+ void writePersistedTaskIdsForUser(@NonNull SparseBooleanArray taskIds, int userId) {
if (userId < 0) {
return;
}
- SparseBooleanArray persistedIdsInFile = mTaskIdsInFile.get(userId);
- if (persistedIdsInFile != null && persistedIdsInFile.equals(taskIds)) {
- return;
- }
final File persistedTaskIdsFile = getUserPersistedTaskIdsFile(userId);
- BufferedWriter writer = null;
- try {
- writer = new BufferedWriter(new FileWriter(persistedTaskIdsFile));
- for (int i = 0; i < taskIds.size(); i++) {
- if (taskIds.valueAt(i)) {
- writer.write(String.valueOf(taskIds.keyAt(i)));
- writer.newLine();
+ synchronized (mIoLock) {
+ BufferedWriter writer = null;
+ try {
+ writer = new BufferedWriter(new FileWriter(persistedTaskIdsFile));
+ for (int i = 0; i < taskIds.size(); i++) {
+ if (taskIds.valueAt(i)) {
+ writer.write(String.valueOf(taskIds.keyAt(i)));
+ writer.newLine();
+ }
}
+ } catch (Exception e) {
+ Slog.e(TAG, "Error while writing taskIds file for user " + userId, e);
+ } finally {
+ IoUtils.closeQuietly(writer);
}
- } catch (Exception e) {
- Slog.e(TAG, "Error while writing taskIds file for user " + userId, e);
- } finally {
- IoUtils.closeQuietly(writer);
}
- mTaskIdsInFile.put(userId, taskIds.clone());
}
void unloadUserDataFromMemory(int userId) {
@@ -543,16 +545,23 @@
}
private void writeTaskIdsFiles() {
- int candidateUserIds[];
+ SparseArray<SparseBooleanArray> changedTaskIdsPerUser = new SparseArray<>();
synchronized (mService) {
- candidateUserIds = mRecentTasks.usersWithRecentsLoadedLocked();
- }
- SparseBooleanArray taskIdsToSave;
- for (int userId : candidateUserIds) {
- synchronized (mService) {
- taskIdsToSave = mRecentTasks.mPersistedTaskIds.get(userId).clone();
+ for (int userId : mRecentTasks.usersWithRecentsLoadedLocked()) {
+ SparseBooleanArray taskIdsToSave = mRecentTasks.mPersistedTaskIds.get(userId);
+ SparseBooleanArray persistedIdsInFile = mTaskIdsInFile.get(userId);
+ if (persistedIdsInFile != null && persistedIdsInFile.equals(taskIdsToSave)) {
+ continue;
+ } else {
+ SparseBooleanArray taskIdsToSaveCopy = taskIdsToSave.clone();
+ mTaskIdsInFile.put(userId, taskIdsToSaveCopy);
+ changedTaskIdsPerUser.put(userId, taskIdsToSaveCopy);
+ }
}
- maybeWritePersistedTaskIdsForUser(taskIdsToSave, userId);
+ }
+ for (int i = 0; i < changedTaskIdsPerUser.size(); i++) {
+ writePersistedTaskIdsForUser(changedTaskIdsPerUser.valueAt(i),
+ changedTaskIdsPerUser.keyAt(i));
}
}
diff --git a/services/core/java/com/android/server/connectivity/LingerMonitor.java b/services/core/java/com/android/server/connectivity/LingerMonitor.java
new file mode 100644
index 0000000..635db19
--- /dev/null
+++ b/services/core/java/com/android/server/connectivity/LingerMonitor.java
@@ -0,0 +1,304 @@
+/*
+ * 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 android.app.PendingIntent;
+import android.content.ComponentName;
+import android.content.Context;
+import android.content.Intent;
+import android.net.NetworkCapabilities;
+import android.os.SystemClock;
+import android.os.UserHandle;
+import android.text.TextUtils;
+import android.text.format.DateUtils;
+import android.util.Log;
+import android.util.SparseArray;
+import android.util.SparseIntArray;
+import android.util.SparseBooleanArray;
+import java.util.Arrays;
+import java.util.HashMap;
+
+import com.android.internal.R;
+import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.util.MessageUtils;
+import com.android.server.connectivity.NetworkNotificationManager;
+import com.android.server.connectivity.NetworkNotificationManager.NotificationType;
+
+import static android.net.ConnectivityManager.NETID_UNSET;
+
+/**
+ * Class that monitors default network linger events and possibly notifies the user of network
+ * switches.
+ *
+ * This class is not thread-safe and all its methods must be called on the ConnectivityService
+ * handler thread.
+ */
+public class LingerMonitor {
+
+ private static final boolean DBG = true;
+ private static final boolean VDBG = false;
+ private static final String TAG = LingerMonitor.class.getSimpleName();
+
+ public static final int DEFAULT_NOTIFICATION_DAILY_LIMIT = 3;
+ public static final long DEFAULT_NOTIFICATION_RATE_LIMIT_MILLIS = DateUtils.MINUTE_IN_MILLIS;
+
+ private static final HashMap<String, Integer> TRANSPORT_NAMES = makeTransportToNameMap();
+ @VisibleForTesting
+ public static final Intent CELLULAR_SETTINGS = new Intent().setComponent(new ComponentName(
+ "com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity"));
+
+ @VisibleForTesting
+ public static final int NOTIFY_TYPE_NONE = 0;
+ public static final int NOTIFY_TYPE_NOTIFICATION = 1;
+ public static final int NOTIFY_TYPE_TOAST = 2;
+
+ private static SparseArray<String> sNotifyTypeNames = MessageUtils.findMessageNames(
+ new Class[] { LingerMonitor.class }, new String[]{ "NOTIFY_TYPE_" });
+
+ private final Context mContext;
+ private final NetworkNotificationManager mNotifier;
+ private final int mDailyLimit;
+ private final long mRateLimitMillis;
+
+ private long mFirstNotificationMillis;
+ private long mLastNotificationMillis;
+ private int mNotificationCounter;
+
+ /** Current notifications. Maps the netId we switched away from to the netId we switched to. */
+ private final SparseIntArray mNotifications = new SparseIntArray();
+
+ /** Whether we ever notified that we switched away from a particular network. */
+ private final SparseBooleanArray mEverNotified = new SparseBooleanArray();
+
+ public LingerMonitor(Context context, NetworkNotificationManager notifier,
+ int dailyLimit, long rateLimitMillis) {
+ mContext = context;
+ mNotifier = notifier;
+ mDailyLimit = dailyLimit;
+ mRateLimitMillis = rateLimitMillis;
+ }
+
+ private static HashMap<String, Integer> makeTransportToNameMap() {
+ SparseArray<String> numberToName = MessageUtils.findMessageNames(
+ new Class[] { NetworkCapabilities.class }, new String[]{ "TRANSPORT_" });
+ HashMap<String, Integer> nameToNumber = new HashMap<>();
+ for (int i = 0; i < numberToName.size(); i++) {
+ // MessageUtils will fail to initialize if there are duplicate constant values, so there
+ // are no duplicates here.
+ nameToNumber.put(numberToName.valueAt(i), numberToName.keyAt(i));
+ }
+ return nameToNumber;
+ }
+
+ private static boolean hasTransport(NetworkAgentInfo nai, int transport) {
+ return nai.networkCapabilities.hasTransport(transport);
+ }
+
+ private int getNotificationSource(NetworkAgentInfo toNai) {
+ for (int i = 0; i < mNotifications.size(); i++) {
+ if (mNotifications.valueAt(i) == toNai.network.netId) {
+ return mNotifications.keyAt(i);
+ }
+ }
+ return NETID_UNSET;
+ }
+
+ private boolean everNotified(NetworkAgentInfo nai) {
+ return mEverNotified.get(nai.network.netId, false);
+ }
+
+ @VisibleForTesting
+ public boolean isNotificationEnabled(NetworkAgentInfo fromNai, NetworkAgentInfo toNai) {
+ // TODO: Evaluate moving to CarrierConfigManager.
+ String[] notifySwitches =
+ mContext.getResources().getStringArray(R.array.config_networkNotifySwitches);
+
+ if (VDBG) {
+ Log.d(TAG, "Notify on network switches: " + Arrays.toString(notifySwitches));
+ }
+
+ for (String notifySwitch : notifySwitches) {
+ if (TextUtils.isEmpty(notifySwitch)) continue;
+ String[] transports = notifySwitch.split("-", 2);
+ if (transports.length != 2) {
+ Log.e(TAG, "Invalid network switch notification configuration: " + notifySwitch);
+ continue;
+ }
+ int fromTransport = TRANSPORT_NAMES.get("TRANSPORT_" + transports[0]);
+ int toTransport = TRANSPORT_NAMES.get("TRANSPORT_" + transports[1]);
+ if (hasTransport(fromNai, fromTransport) && hasTransport(toNai, toTransport)) {
+ return true;
+ }
+ }
+
+ return false;
+ }
+
+ private void showNotification(NetworkAgentInfo fromNai, NetworkAgentInfo toNai) {
+ mNotifier.showNotification(fromNai.network.netId, NotificationType.NETWORK_SWITCH,
+ fromNai, toNai, createNotificationIntent(), true);
+ }
+
+ @VisibleForTesting
+ protected PendingIntent createNotificationIntent() {
+ return PendingIntent.getActivityAsUser(mContext, 0, CELLULAR_SETTINGS,
+ PendingIntent.FLAG_CANCEL_CURRENT, null, UserHandle.CURRENT);
+ }
+
+ // Removes any notification that was put up as a result of switching to nai.
+ private void maybeStopNotifying(NetworkAgentInfo nai) {
+ int fromNetId = getNotificationSource(nai);
+ if (fromNetId != NETID_UNSET) {
+ mNotifications.delete(fromNetId);
+ mNotifier.clearNotification(fromNetId);
+ // Toasts can't be deleted.
+ }
+ }
+
+ // Notify the user of a network switch using a notification or a toast.
+ private void notify(NetworkAgentInfo fromNai, NetworkAgentInfo toNai, boolean forceToast) {
+ int notifyType =
+ mContext.getResources().getInteger(R.integer.config_networkNotifySwitchType);
+ if (notifyType == NOTIFY_TYPE_NOTIFICATION && forceToast) {
+ notifyType = NOTIFY_TYPE_TOAST;
+ }
+
+ if (VDBG) {
+ Log.d(TAG, "Notify type: " + sNotifyTypeNames.get(notifyType, "" + notifyType));
+ }
+
+ switch (notifyType) {
+ case NOTIFY_TYPE_NONE:
+ return;
+ case NOTIFY_TYPE_NOTIFICATION:
+ showNotification(fromNai, toNai);
+ break;
+ case NOTIFY_TYPE_TOAST:
+ mNotifier.showToast(fromNai, toNai);
+ break;
+ default:
+ Log.e(TAG, "Unknown notify type " + notifyType);
+ return;
+ }
+
+ if (DBG) {
+ Log.d(TAG, "Notifying switch from=" + fromNai.name() + " to=" + toNai.name() +
+ " type=" + sNotifyTypeNames.get(notifyType, "unknown(" + notifyType + ")"));
+ }
+
+ mNotifications.put(fromNai.network.netId, toNai.network.netId);
+ mEverNotified.put(fromNai.network.netId, true);
+ }
+
+ // The default network changed from fromNai to toNai due to a change in score.
+ public void noteLingerDefaultNetwork(NetworkAgentInfo fromNai, NetworkAgentInfo toNai) {
+ if (VDBG) {
+ Log.d(TAG, "noteLingerDefaultNetwork from=" + fromNai.name() +
+ " everValidated=" + fromNai.everValidated +
+ " lastValidated=" + fromNai.lastValidated +
+ " to=" + toNai.name());
+ }
+
+ // If we are currently notifying the user because the device switched to fromNai, now that
+ // we are switching away from it we should remove the notification. This includes the case
+ // where we switch back to toNai because its score improved again (e.g., because it regained
+ // Internet access).
+ maybeStopNotifying(fromNai);
+
+ // If this network never validated, don't notify. Otherwise, we could do things like:
+ //
+ // 1. Unvalidated wifi connects.
+ // 2. Unvalidated mobile data connects.
+ // 3. Cell validates, and we show a notification.
+ // or:
+ // 1. User connects to wireless printer.
+ // 2. User turns on cellular data.
+ // 3. We show a notification.
+ if (!fromNai.everValidated) return;
+
+ // If this network is a captive portal, don't notify. This cannot happen on initial connect
+ // to a captive portal, because the everValidated check above will fail. However, it can
+ // happen if the captive portal reasserts itself (e.g., because its timeout fires). In that
+ // case, as soon as the captive portal reasserts itself, we'll show a sign-in notification.
+ // We don't want to overwrite that notification with this one; the user has already been
+ // notified, and of the two, the captive portal notification is the more useful one because
+ // it allows the user to sign in to the captive portal. In this case, display a toast
+ // in addition to the captive portal notification.
+ //
+ // Note that if the network we switch to is already up when the captive portal reappears,
+ // this won't work because NetworkMonitor tells ConnectivityService that the network is
+ // unvalidated (causing a switch) before asking it to show the sign in notification. In this
+ // case, the toast won't show and we'll only display the sign in notification. This is the
+ // best we can do at this time.
+ boolean forceToast = fromNai.networkCapabilities.hasCapability(
+ NetworkCapabilities.NET_CAPABILITY_CAPTIVE_PORTAL);
+
+ // Only show the notification once, in order to avoid irritating the user every time.
+ // TODO: should we do this?
+ if (everNotified(fromNai)) {
+ if (VDBG) {
+ Log.d(TAG, "Not notifying handover from " + fromNai.name() + ", already notified");
+ }
+ return;
+ }
+
+ // Only show the notification if we switched away because a network became unvalidated, not
+ // because its score changed.
+ // TODO: instead of just skipping notification, keep a note of it, and show it if it becomes
+ // unvalidated.
+ if (fromNai.lastValidated) return;
+
+ if (!isNotificationEnabled(fromNai, toNai)) return;
+
+ final long now = SystemClock.elapsedRealtime();
+ if (isRateLimited(now) || isAboveDailyLimit(now)) return;
+
+ notify(fromNai, toNai, forceToast);
+ }
+
+ public void noteDisconnect(NetworkAgentInfo nai) {
+ mNotifications.delete(nai.network.netId);
+ mEverNotified.delete(nai.network.netId);
+ maybeStopNotifying(nai);
+ // No need to cancel notifications on nai: NetworkMonitor does that on disconnect.
+ }
+
+ private boolean isRateLimited(long now) {
+ final long millisSinceLast = now - mLastNotificationMillis;
+ if (millisSinceLast < mRateLimitMillis) {
+ return true;
+ }
+ mLastNotificationMillis = now;
+ return false;
+ }
+
+ private boolean isAboveDailyLimit(long now) {
+ if (mFirstNotificationMillis == 0) {
+ mFirstNotificationMillis = now;
+ }
+ final long millisSinceFirst = now - mFirstNotificationMillis;
+ if (millisSinceFirst > DateUtils.DAY_IN_MILLIS) {
+ mNotificationCounter = 0;
+ mFirstNotificationMillis = 0;
+ }
+ if (mNotificationCounter >= mDailyLimit) {
+ return true;
+ }
+ mNotificationCounter++;
+ return false;
+ }
+}
diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
index 7a25df6..b0330b9 100644
--- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
+++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java
@@ -411,14 +411,17 @@
/**
* Cancel lingering. Called by ConnectivityService when a request is added to this network.
+ * Returns true if the given request was lingering on this network, false otherwise.
*/
- public void unlingerRequest(NetworkRequest request) {
+ public boolean unlingerRequest(NetworkRequest request) {
LingerTimer timer = mLingerTimerForRequest.get(request.requestId);
if (timer != null) {
if (VDBG) Log.d(TAG, "Removing LingerTimer " + timer + " from " + this.name());
mLingerTimers.remove(timer);
mLingerTimerForRequest.remove(request.requestId);
+ return true;
}
+ return false;
}
public long getLingerExpiry() {
diff --git a/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java
new file mode 100644
index 0000000..99926a9
--- /dev/null
+++ b/services/core/java/com/android/server/connectivity/NetworkNotificationManager.java
@@ -0,0 +1,221 @@
+/*
+ * 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 android.app.Notification;
+import android.app.NotificationManager;
+import android.app.PendingIntent;
+import android.widget.Toast;
+import android.content.Context;
+import android.content.Intent;
+import android.content.res.Resources;
+import android.net.NetworkCapabilities;
+import android.os.UserHandle;
+import android.telephony.TelephonyManager;
+import android.util.Slog;
+
+import com.android.internal.R;
+
+import static android.net.NetworkCapabilities.*;
+
+
+public class NetworkNotificationManager {
+
+ public static enum NotificationType { SIGN_IN, NO_INTERNET, NETWORK_SWITCH };
+
+ private static final String NOTIFICATION_ID = "Connectivity.Notification";
+
+ private static final String TAG = NetworkNotificationManager.class.getSimpleName();
+ private static final boolean DBG = true;
+ private static final boolean VDBG = false;
+
+ private final Context mContext;
+ private final TelephonyManager mTelephonyManager;
+ private final NotificationManager mNotificationManager;
+
+ public NetworkNotificationManager(Context c, TelephonyManager t, NotificationManager n) {
+ mContext = c;
+ mTelephonyManager = t;
+ mNotificationManager = n;
+ }
+
+ // TODO: deal more gracefully with multi-transport networks.
+ private static int getFirstTransportType(NetworkAgentInfo nai) {
+ for (int i = 0; i < 64; i++) {
+ if (nai.networkCapabilities.hasTransport(i)) return i;
+ }
+ return -1;
+ }
+
+ private static String getTransportName(int transportType) {
+ Resources r = Resources.getSystem();
+ String[] networkTypes = r.getStringArray(R.array.network_switch_type_name);
+ try {
+ return networkTypes[transportType];
+ } catch (IndexOutOfBoundsException e) {
+ return r.getString(R.string.network_switch_type_name_unknown);
+ }
+ }
+
+ private static int getIcon(int transportType) {
+ return (transportType == TRANSPORT_WIFI) ?
+ R.drawable.stat_notify_wifi_in_range : // TODO: Distinguish ! from ?.
+ R.drawable.stat_notify_rssi_in_range;
+ }
+
+ /**
+ * Show or hide network provisioning notifications.
+ *
+ * We use notifications for two purposes: to notify that a network requires sign in
+ * (NotificationType.SIGN_IN), or to notify that a network does not have Internet access
+ * (NotificationType.NO_INTERNET). We display at most one notification per ID, so on a
+ * particular network we can display the notification type that was most recently requested.
+ * So for example if a captive portal fails to reply within a few seconds of connecting, we
+ * might first display NO_INTERNET, and then when the captive portal check completes, display
+ * SIGN_IN.
+ *
+ * @param id an identifier that uniquely identifies this notification. This must match
+ * between show and hide calls. We use the NetID value but for legacy callers
+ * we concatenate the range of types with the range of NetIDs.
+ * @param nai the network with which the notification is associated. For a SIGN_IN or
+ * NO_INTERNET notification, this is the network we're connecting to. For a
+ * NETWORK_SWITCH notification it's the network that we switched from. When this network
+ * disconnects the notification is removed.
+ * @param switchToNai for a NETWORK_SWITCH notification, the network we are switching to. Null
+ * in all other cases. Only used to determine the text of the notification.
+ */
+ public void showNotification(int id, NotificationType notifyType, NetworkAgentInfo nai,
+ NetworkAgentInfo switchToNai, PendingIntent intent, boolean highPriority) {
+ int transportType;
+ String extraInfo;
+ if (nai != null) {
+ transportType = getFirstTransportType(nai);
+ extraInfo = nai.networkInfo.getExtraInfo();
+ // Only notify for Internet-capable networks.
+ if (!nai.networkCapabilities.hasCapability(NET_CAPABILITY_INTERNET)) return;
+ } else {
+ // Legacy notifications.
+ transportType = TRANSPORT_CELLULAR;
+ extraInfo = null;
+ }
+
+ if (DBG) {
+ Slog.d(TAG, "showNotification " + notifyType
+ + " transportType=" + getTransportName(transportType)
+ + " extraInfo=" + extraInfo + " highPriority=" + highPriority);
+ }
+
+ Resources r = Resources.getSystem();
+ CharSequence title;
+ CharSequence details;
+ int icon = getIcon(transportType);
+ if (notifyType == NotificationType.NO_INTERNET && transportType == TRANSPORT_WIFI) {
+ title = r.getString(R.string.wifi_no_internet, 0);
+ details = r.getString(R.string.wifi_no_internet_detailed);
+ } else if (notifyType == NotificationType.SIGN_IN) {
+ switch (transportType) {
+ case TRANSPORT_WIFI:
+ title = r.getString(R.string.wifi_available_sign_in, 0);
+ details = r.getString(R.string.network_available_sign_in_detailed, extraInfo);
+ break;
+ case TRANSPORT_CELLULAR:
+ title = r.getString(R.string.network_available_sign_in, 0);
+ // TODO: Change this to pull from NetworkInfo once a printable
+ // name has been added to it
+ details = mTelephonyManager.getNetworkOperatorName();
+ break;
+ default:
+ title = r.getString(R.string.network_available_sign_in, 0);
+ details = r.getString(R.string.network_available_sign_in_detailed, extraInfo);
+ break;
+ }
+ } else if (notifyType == NotificationType.NETWORK_SWITCH) {
+ String fromTransport = getTransportName(transportType);
+ String toTransport = getTransportName(getFirstTransportType(switchToNai));
+ title = r.getString(R.string.network_switch_metered, toTransport);
+ details = r.getString(R.string.network_switch_metered_detail, toTransport,
+ fromTransport);
+ } else {
+ Slog.wtf(TAG, "Unknown notification type " + notifyType + "on network transport "
+ + getTransportName(transportType));
+ return;
+ }
+
+ Notification.Builder builder = new Notification.Builder(mContext)
+ .setWhen(System.currentTimeMillis())
+ .setShowWhen(notifyType == NotificationType.NETWORK_SWITCH)
+ .setSmallIcon(icon)
+ .setAutoCancel(true)
+ .setTicker(title)
+ .setColor(mContext.getColor(
+ com.android.internal.R.color.system_notification_accent_color))
+ .setContentTitle(title)
+ .setContentIntent(intent)
+ .setLocalOnly(true)
+ .setPriority(highPriority ?
+ Notification.PRIORITY_HIGH :
+ Notification.PRIORITY_DEFAULT)
+ .setDefaults(highPriority ? Notification.DEFAULT_ALL : 0)
+ .setOnlyAlertOnce(true);
+
+ if (notifyType == NotificationType.NETWORK_SWITCH) {
+ builder.setStyle(new Notification.BigTextStyle().bigText(details));
+ } else {
+ builder.setContentText(details);
+ }
+
+ Notification notification = builder.build();
+
+ try {
+ mNotificationManager.notifyAsUser(NOTIFICATION_ID, id, notification, UserHandle.ALL);
+ } catch (NullPointerException npe) {
+ Slog.d(TAG, "setNotificationVisible: visible notificationManager npe=" + npe);
+ }
+ }
+
+ public void clearNotification(int id) {
+ if (DBG) {
+ Slog.d(TAG, "clearNotification id=" + id);
+ }
+ try {
+ mNotificationManager.cancelAsUser(NOTIFICATION_ID, id, UserHandle.ALL);
+ } catch (NullPointerException npe) {
+ Slog.d(TAG, "setNotificationVisible: cancel notificationManager npe=" + npe);
+ }
+ }
+
+ /**
+ * Legacy provisioning notifications coming directly from DcTracker.
+ */
+ public void setProvNotificationVisible(boolean visible, int id, String action) {
+ if (visible) {
+ Intent intent = new Intent(action);
+ PendingIntent pendingIntent = PendingIntent.getBroadcast(mContext, 0, intent, 0);
+ showNotification(id, NotificationType.SIGN_IN, null, null, pendingIntent, false);
+ } else {
+ clearNotification(id);
+ }
+ }
+
+ public void showToast(NetworkAgentInfo fromNai, NetworkAgentInfo toNai) {
+ String fromTransport = getTransportName(getFirstTransportType(fromNai));
+ String toTransport = getTransportName(getFirstTransportType(toNai));
+ String text = mContext.getResources().getString(
+ R.string.network_switch_metered_toast, fromTransport, toTransport);
+ Toast.makeText(mContext, text, Toast.LENGTH_LONG).show();
+ }
+}
diff --git a/services/core/java/com/android/server/connectivity/Tethering.java b/services/core/java/com/android/server/connectivity/Tethering.java
index e0d8373..927f8f9 100644
--- a/services/core/java/com/android/server/connectivity/Tethering.java
+++ b/services/core/java/com/android/server/connectivity/Tethering.java
@@ -1616,6 +1616,7 @@
if (VDBG) Log.d(TAG, "Tether Mode requested by " + who);
if (mNotifyList.indexOf(who) < 0) {
mNotifyList.add(who);
+ mIPv6TetheringCoordinator.addActiveDownstream(who);
}
transitionTo(mTetherModeAliveState);
break;
@@ -1623,6 +1624,7 @@
who = (TetherInterfaceStateMachine)message.obj;
if (VDBG) Log.d(TAG, "Tether Mode unrequested by " + who);
mNotifyList.remove(who);
+ mIPv6TetheringCoordinator.removeActiveDownstream(who);
break;
default:
retValue = false;
@@ -1661,17 +1663,19 @@
maybeLogMessage(this, message.what);
boolean retValue = true;
switch (message.what) {
- case CMD_TETHER_MODE_REQUESTED:
+ case CMD_TETHER_MODE_REQUESTED: {
TetherInterfaceStateMachine who = (TetherInterfaceStateMachine)message.obj;
if (VDBG) Log.d(TAG, "Tether Mode requested by " + who);
if (mNotifyList.indexOf(who) < 0) {
mNotifyList.add(who);
+ mIPv6TetheringCoordinator.addActiveDownstream(who);
}
who.sendMessage(TetherInterfaceStateMachine.CMD_TETHER_CONNECTION_CHANGED,
mCurrentUpstreamIface);
break;
- case CMD_TETHER_MODE_UNREQUESTED:
- who = (TetherInterfaceStateMachine)message.obj;
+ }
+ case CMD_TETHER_MODE_UNREQUESTED: {
+ TetherInterfaceStateMachine who = (TetherInterfaceStateMachine)message.obj;
if (VDBG) Log.d(TAG, "Tether Mode unrequested by " + who);
if (mNotifyList.remove(who)) {
if (DBG) Log.d(TAG, "TetherModeAlive removing notifyee " + who);
@@ -1689,7 +1693,9 @@
} else {
Log.e(TAG, "TetherModeAliveState UNREQUESTED has unknown who: " + who);
}
+ mIPv6TetheringCoordinator.removeActiveDownstream(who);
break;
+ }
case CMD_UPSTREAM_CHANGED:
// need to try DUN immediately if Wifi goes down
mTryCell = true;
diff --git a/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java b/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java
index e94b584..9173feb 100644
--- a/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java
+++ b/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringCoordinator.java
@@ -29,6 +29,7 @@
import java.net.Inet6Address;
import java.net.InetAddress;
import java.util.ArrayList;
+import java.util.LinkedList;
/**
@@ -45,10 +46,28 @@
private static final boolean VDBG = false;
private final ArrayList<TetherInterfaceStateMachine> mNotifyList;
+ private final LinkedList<TetherInterfaceStateMachine> mActiveDownstreams;
private NetworkState mUpstreamNetworkState;
public IPv6TetheringCoordinator(ArrayList<TetherInterfaceStateMachine> notifyList) {
mNotifyList = notifyList;
+ mActiveDownstreams = new LinkedList<>();
+ }
+
+ public void addActiveDownstream(TetherInterfaceStateMachine downstream) {
+ if (mActiveDownstreams.indexOf(downstream) == -1) {
+ // Adding a new downstream appends it to the list. Adding a
+ // downstream a second time without first removing it has no effect.
+ mActiveDownstreams.offer(downstream);
+ updateIPv6TetheringInterfaces();
+ }
+ }
+
+ public void removeActiveDownstream(TetherInterfaceStateMachine downstream) {
+ stopIPv6TetheringOn(downstream);
+ if (mActiveDownstreams.remove(downstream)) {
+ updateIPv6TetheringInterfaces();
+ }
}
public void updateUpstreamNetworkState(NetworkState ns) {
@@ -72,8 +91,7 @@
private void stopIPv6TetheringOnAllInterfaces() {
for (TetherInterfaceStateMachine sm : mNotifyList) {
- sm.sendMessage(TetherInterfaceStateMachine.CMD_IPV6_TETHER_UPDATE,
- 0, 0, null);
+ stopIPv6TetheringOn(sm);
}
}
@@ -98,28 +116,32 @@
private void updateIPv6TetheringInterfaces() {
for (TetherInterfaceStateMachine sm : mNotifyList) {
- final LinkProperties lp = getInterfaceIPv6LinkProperties(sm.interfaceType());
+ final LinkProperties lp = getInterfaceIPv6LinkProperties(sm);
sm.sendMessage(TetherInterfaceStateMachine.CMD_IPV6_TETHER_UPDATE, 0, 0, lp);
break;
}
}
- private LinkProperties getInterfaceIPv6LinkProperties(int interfaceType) {
+ private LinkProperties getInterfaceIPv6LinkProperties(TetherInterfaceStateMachine sm) {
if (mUpstreamNetworkState == null) return null;
+ if (sm.interfaceType() == ConnectivityManager.TETHERING_BLUETOOTH) {
+ // TODO: Figure out IPv6 support on PAN interfaces.
+ return null;
+ }
+
// NOTE: Here, in future, we would have policies to decide how to divvy
// up the available dedicated prefixes among downstream interfaces.
// At this time we have no such mechanism--we only support tethering
- // IPv6 toward Wi-Fi interfaces.
+ // IPv6 toward the oldest (first requested) active downstream.
- switch (interfaceType) {
- case ConnectivityManager.TETHERING_WIFI:
- final LinkProperties lp = getIPv6OnlyLinkProperties(
- mUpstreamNetworkState.linkProperties);
- if (lp.hasIPv6DefaultRoute() && lp.hasGlobalIPv6Address()) {
- return lp;
- }
- break;
+ final TetherInterfaceStateMachine currentActive = mActiveDownstreams.peek();
+ if (currentActive != null && currentActive == sm) {
+ final LinkProperties lp = getIPv6OnlyLinkProperties(
+ mUpstreamNetworkState.linkProperties);
+ if (lp.hasIPv6DefaultRoute() && lp.hasGlobalIPv6Address()) {
+ return lp;
+ }
}
return null;
@@ -250,4 +272,8 @@
ns.networkCapabilities,
ns.linkProperties);
}
+
+ private static void stopIPv6TetheringOn(TetherInterfaceStateMachine sm) {
+ sm.sendMessage(TetherInterfaceStateMachine.CMD_IPV6_TETHER_UPDATE, 0, 0, null);
+ }
}
diff --git a/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringInterfaceServices.java b/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringInterfaceServices.java
index edb4347..c2c1a8c 100644
--- a/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringInterfaceServices.java
+++ b/services/core/java/com/android/server/connectivity/tethering/IPv6TetheringInterfaceServices.java
@@ -25,7 +25,9 @@
import android.net.RouteInfo;
import android.net.ip.RouterAdvertisementDaemon;
import android.net.ip.RouterAdvertisementDaemon.RaParams;
+import android.net.util.NetdService;
import android.os.INetworkManagementService;
+import android.os.ServiceSpecificException;
import android.os.RemoteException;
import android.util.Log;
import android.util.Slog;
@@ -192,7 +194,7 @@
private void configureLocalDns(
HashSet<Inet6Address> deprecatedDnses, HashSet<Inet6Address> newDnses) {
- INetd netd = getNetdServiceOrNull();
+ final INetd netd = NetdService.getInstance();
if (netd == null) {
if (newDnses != null) newDnses.clear();
Log.e(TAG, "No netd service instance available; not setting local IPv6 addresses");
@@ -205,7 +207,7 @@
final String dnsString = dns.getHostAddress();
try {
netd.interfaceDelAddress(mIfName, dnsString, RFC7421_IP_PREFIX_LENGTH);
- } catch (RemoteException e) {
+ } catch (ServiceSpecificException | RemoteException e) {
Log.e(TAG, "Failed to remove local dns IP: " + dnsString, e);
}
}
@@ -222,7 +224,7 @@
final String dnsString = dns.getHostAddress();
try {
netd.interfaceAddAddress(mIfName, dnsString, RFC7421_IP_PREFIX_LENGTH);
- } catch (RemoteException e) {
+ } catch (ServiceSpecificException | RemoteException e) {
Log.e(TAG, "Failed to add local dns IP: " + dnsString, e);
newDnses.remove(dns);
}
@@ -231,7 +233,7 @@
try {
netd.tetherApplyDnsInterfaces();
- } catch (RemoteException e) {
+ } catch (ServiceSpecificException | RemoteException e) {
Log.e(TAG, "Failed to update local DNS caching server");
if (newDnses != null) newDnses.clear();
}
@@ -264,18 +266,6 @@
return localRoutes;
}
- private INetd getNetdServiceOrNull() {
- if (mNMService != null) {
- try {
- return mNMService.getNetdService();
- } catch (RemoteException ignored) {
- // This blocks until netd can be reached, but it can return
- // null during a netd crash.
- }
- }
- return null;
- }
-
// Given a prefix like 2001:db8::/64 return 2001:db8::1.
private static Inet6Address getLocalDnsIpFor(IpPrefix localPrefix) {
final byte[] dnsBytes = localPrefix.getRawAddress();
diff --git a/services/core/java/com/android/server/content/ContentService.java b/services/core/java/com/android/server/content/ContentService.java
index 01b2393..4e236d1 100644
--- a/services/core/java/com/android/server/content/ContentService.java
+++ b/services/core/java/com/android/server/content/ContentService.java
@@ -482,8 +482,7 @@
SyncManager syncManager = getSyncManager();
if (syncManager != null) {
syncManager.scheduleSync(account, userId, uId, authority, extras,
- 0 /* no delay */, 0 /* no delay */,
- false /* onlyThoseWithUnkownSyncableState */);
+ SyncStorageEngine.AuthorityInfo.UNDEFINED);
}
} finally {
restoreCallingIdentity(identityToken);
@@ -547,12 +546,9 @@
getSyncManager().updateOrAddPeriodicSync(info, runAtTime,
flextime, extras);
} else {
- long beforeRuntimeMillis = (flextime) * 1000;
- long runtimeMillis = runAtTime * 1000;
syncManager.scheduleSync(
request.getAccount(), userId, callerUid, request.getProvider(), extras,
- beforeRuntimeMillis, runtimeMillis,
- false /* onlyThoseWithUnknownSyncableState */);
+ SyncStorageEngine.AuthorityInfo.UNDEFINED);
}
} finally {
restoreCallingIdentity(identityToken);
@@ -841,7 +837,7 @@
try {
SyncManager syncManager = getSyncManager();
if (syncManager != null) {
- return syncManager.getIsSyncable(
+ return syncManager.computeSyncable(
account, userId, providerName);
}
} finally {
diff --git a/services/core/java/com/android/server/content/SyncManager.java b/services/core/java/com/android/server/content/SyncManager.java
index 39ddc3a..8c71478 100644
--- a/services/core/java/com/android/server/content/SyncManager.java
+++ b/services/core/java/com/android/server/content/SyncManager.java
@@ -19,6 +19,7 @@
import android.accounts.Account;
import android.accounts.AccountAndUser;
import android.accounts.AccountManager;
+import android.accounts.AccountManagerInternal;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.AppGlobals;
@@ -64,6 +65,7 @@
import android.os.Message;
import android.os.Messenger;
import android.os.PowerManager;
+import android.os.RemoteCallback;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.SystemClock;
@@ -79,6 +81,7 @@
import android.util.Pair;
import android.util.Slog;
+import com.android.internal.util.ArrayUtils;
import com.android.server.LocalServices;
import com.android.server.job.JobSchedulerInternal;
import com.google.android.collect.Lists;
@@ -133,6 +136,8 @@
public class SyncManager {
static final String TAG = "SyncManager";
+ private static final boolean DEBUG_ACCOUNT_ACCESS = false;
+
/** Delay a sync due to local changes this long. In milliseconds */
private static final long LOCAL_SYNC_DELAY;
@@ -194,6 +199,11 @@
private static final String HANDLE_SYNC_ALARM_WAKE_LOCK = "SyncManagerHandleSyncAlarm";
private static final String SYNC_LOOP_WAKE_LOCK = "SyncLoopWakeLock";
+
+ private static final int SYNC_OP_STATE_VALID = 0;
+ private static final int SYNC_OP_STATE_INVALID = 1;
+ private static final int SYNC_OP_STATE_INVALID_NO_ACCOUNT_ACCESS = 2;
+
private Context mContext;
private static final AccountAndUser[] INITIAL_ACCOUNTS_ARRAY = new AccountAndUser[0];
@@ -310,6 +320,10 @@
private final UserManager mUserManager;
+ private final AccountManager mAccountManager;
+
+ private final AccountManagerInternal mAccountManagerInternal;
+
private List<UserInfo> getAllUsers() {
return mUserManager.getUsers();
}
@@ -490,9 +504,7 @@
@Override
public void onSyncRequest(SyncStorageEngine.EndPoint info, int reason, Bundle extras) {
scheduleSync(info.account, info.userId, reason, info.provider, extras,
- 0 /* no flexMillis */,
- 0 /* run immediately */,
- false);
+ AuthorityInfo.UNDEFINED);
}
});
@@ -522,8 +534,7 @@
if (!removed) {
scheduleSync(null, UserHandle.USER_ALL,
SyncOperation.REASON_SERVICE_CHANGED,
- type.authority, null, 0 /* no delay */, 0 /* no delay */,
- false /* onlyThoseWithUnkownSyncableState */);
+ type.authority, null, AuthorityInfo.UNDEFINED);
}
}
}, mSyncHandler);
@@ -562,6 +573,18 @@
}
mPowerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
mUserManager = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ mAccountManager = (AccountManager) mContext.getSystemService(Context.ACCOUNT_SERVICE);
+ mAccountManagerInternal = LocalServices.getService(AccountManagerInternal.class);
+
+ mAccountManagerInternal.addOnAppPermissionChangeListener((Account account, int uid) -> {
+ // If the UID gained access to the account kick-off syncs lacking account access
+ if (mAccountManagerInternal.hasAccountAccess(account, uid)) {
+ scheduleSync(account, UserHandle.getUserId(uid),
+ SyncOperation.REASON_ACCOUNTS_UPDATED,
+ null, null, AuthorityInfo.SYNCABLE_NO_ACCOUNT_ACCESS);
+ }
+ });
+
mBatteryStats = IBatteryStats.Stub.asInterface(ServiceManager.getService(
BatteryStats.SERVICE_NAME));
@@ -631,6 +654,37 @@
mContext.startService(startServiceIntent);
}
});
+
+ // Sync adapters were able to access the synced account without the accounts
+ // permission which circumvents our permission model. Therefore, we require
+ // sync adapters that don't have access to the account to get user consent.
+ // This can be noisy, therefore we will white-list sync adapters installed
+ // before we started checking for account access because they already know
+ // the account (they run before) which is the genie is out of the bottle.
+ whiteListExistingSyncAdaptersIfNeeded();
+ }
+
+ private void whiteListExistingSyncAdaptersIfNeeded() {
+ if (!mSyncStorageEngine.shouldGrantSyncAdaptersAccountAccess()) {
+ return;
+ }
+ List<UserInfo> users = mUserManager.getUsers(true);
+ final int userCount = users.size();
+ for (int i = 0; i < userCount; i++) {
+ UserHandle userHandle = users.get(i).getUserHandle();
+ final int userId = userHandle.getIdentifier();
+ for (RegisteredServicesCache.ServiceInfo<SyncAdapterType> service
+ : mSyncAdapters.getAllServices(userId)) {
+ String packageName = service.componentName.getPackageName();
+ for (Account account : mAccountManager.getAccountsByTypeAsUser(
+ service.type.accountType, userHandle)) {
+ if (!canAccessAccount(account, packageName, userId)) {
+ mAccountManager.updateAppPermission(account,
+ AccountManager.ACCOUNT_ACCESS_TOKEN_TYPE, service.uid, true);
+ }
+ }
+ }
+ }
}
private boolean isDeviceProvisioned() {
@@ -655,7 +709,7 @@
return mSyncStorageEngine;
}
- public int getIsSyncable(Account account, int userId, String providerName) {
+ private int getIsSyncable(Account account, int userId, String providerName) {
int isSyncable = mSyncStorageEngine.getIsSyncable(account, userId, providerName);
UserInfo userInfo = UserManager.get(mContext).getUserInfo(userId);
@@ -666,22 +720,22 @@
RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo =
mSyncAdapters.getServiceInfo(
SyncAdapterType.newKey(providerName, account.type), userId);
- if (syncAdapterInfo == null) return isSyncable;
+ if (syncAdapterInfo == null) return AuthorityInfo.NOT_SYNCABLE;
PackageInfo pInfo = null;
try {
pInfo = AppGlobals.getPackageManager().getPackageInfo(
syncAdapterInfo.componentName.getPackageName(), 0, userId);
- if (pInfo == null) return isSyncable;
+ if (pInfo == null) return AuthorityInfo.NOT_SYNCABLE;
} catch (RemoteException re) {
// Shouldn't happen.
- return isSyncable;
+ return AuthorityInfo.NOT_SYNCABLE;
}
if (pInfo.restrictedAccountType != null
&& pInfo.restrictedAccountType.equals(account.type)) {
return isSyncable;
} else {
- return 0;
+ return AuthorityInfo.NOT_SYNCABLE;
}
}
@@ -733,13 +787,11 @@
* @param extras a Map of SyncAdapter-specific information to control
* syncs of a specific provider. Can be null. Is ignored
* if the url is null.
- * @param beforeRuntimeMillis milliseconds before runtimeMillis that this sync can run.
- * @param runtimeMillis maximum milliseconds in the future to wait before performing sync.
- * @param onlyThoseWithUnkownSyncableState Only sync authorities that have unknown state.
+ * @param targetSyncState Only sync authorities that have the specified sync state.
+ * Use {@link AuthorityInfo#UNDEFINED} to sync all authorities.
*/
public void scheduleSync(Account requestedAccount, int userId, int reason,
- String requestedAuthority, Bundle extras, long beforeRuntimeMillis,
- long runtimeMillis, boolean onlyThoseWithUnkownSyncableState) {
+ String requestedAuthority, Bundle extras, int targetSyncState) {
final boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
if (extras == null) {
extras = new Bundle();
@@ -749,17 +801,27 @@
+ requestedAuthority);
}
- AccountAndUser[] accounts;
- if (requestedAccount != null && userId != UserHandle.USER_ALL) {
- accounts = new AccountAndUser[] { new AccountAndUser(requestedAccount, userId) };
+ AccountAndUser[] accounts = null;
+ if (requestedAccount != null) {
+ if (userId != UserHandle.USER_ALL) {
+ accounts = new AccountAndUser[]{new AccountAndUser(requestedAccount, userId)};
+ } else {
+ for (AccountAndUser runningAccount : mRunningAccounts) {
+ if (requestedAccount.equals(runningAccount.account)) {
+ accounts = ArrayUtils.appendElement(AccountAndUser.class,
+ accounts, runningAccount);
+ }
+ }
+ }
} else {
accounts = mRunningAccounts;
- if (accounts.length == 0) {
- if (isLoggable) {
- Slog.v(TAG, "scheduleSync: no accounts configured, dropping");
- }
- return;
+ }
+
+ if (ArrayUtils.isEmpty(accounts)) {
+ if (isLoggable) {
+ Slog.v(TAG, "scheduleSync: no accounts configured, dropping");
}
+ return;
}
final boolean uploadOnly = extras.getBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, false);
@@ -808,29 +870,41 @@
}
for (String authority : syncableAuthorities) {
- int isSyncable = getIsSyncable(account.account, account.userId,
- authority);
+ int isSyncable = computeSyncable(account.account, account.userId, authority);
+
if (isSyncable == AuthorityInfo.NOT_SYNCABLE) {
continue;
}
- final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo;
- syncAdapterInfo = mSyncAdapters.getServiceInfo(
- SyncAdapterType.newKey(authority, account.account.type), account.userId);
+
+ final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo =
+ mSyncAdapters.getServiceInfo(SyncAdapterType.newKey(authority,
+ account.account.type), account.userId);
if (syncAdapterInfo == null) {
continue;
}
+
final int owningUid = syncAdapterInfo.uid;
- final String owningPackage = syncAdapterInfo.componentName.getPackageName();
- try {
- if (ActivityManagerNative.getDefault().getAppStartMode(owningUid,
- owningPackage) == ActivityManager.APP_START_MODE_DISABLED) {
- Slog.w(TAG, "Not scheduling job " + syncAdapterInfo.uid + ":"
- + syncAdapterInfo.componentName
- + " -- package not allowed to start");
- continue;
+
+ if (isSyncable == AuthorityInfo.SYNCABLE_NO_ACCOUNT_ACCESS) {
+ if (isLoggable) {
+ Slog.v(TAG, " Not scheduling sync operation: "
+ + "isSyncable == SYNCABLE_NO_ACCOUNT_ACCESS");
}
- } catch (RemoteException e) {
+ Bundle finalExtras = new Bundle(extras);
+ mAccountManagerInternal.requestAccountAccess(account.account,
+ syncAdapterInfo.componentName.getPackageName(),
+ UserHandle.getUserId(owningUid),
+ new RemoteCallback((Bundle result) -> {
+ if (result != null
+ && result.getBoolean(AccountManager.KEY_BOOLEAN_RESULT)) {
+ scheduleSync(account.account, userId, reason, authority,
+ finalExtras, targetSyncState);
+ }
+ }
+ ));
+ continue;
}
+
final boolean allowParallelSyncs = syncAdapterInfo.type.allowParallelSyncs();
final boolean isAlwaysSyncable = syncAdapterInfo.type.isAlwaysSyncable();
if (isSyncable < 0 && isAlwaysSyncable) {
@@ -838,9 +912,11 @@
account.account, account.userId, authority, AuthorityInfo.SYNCABLE);
isSyncable = AuthorityInfo.SYNCABLE;
}
- if (onlyThoseWithUnkownSyncableState && isSyncable >= 0) {
+
+ if (targetSyncState != AuthorityInfo.UNDEFINED && targetSyncState != isSyncable) {
continue;
}
+
if (!syncAdapterInfo.type.supportsUploading() && uploadOnly) {
continue;
}
@@ -863,7 +939,10 @@
account.account, authority, account.userId);
long delayUntil =
mSyncStorageEngine.getDelayUntilTime(info);
- if (isSyncable < 0) {
+
+ final String owningPackage = syncAdapterInfo.componentName.getPackageName();
+
+ if (isSyncable == AuthorityInfo.NOT_INITIALIZED) {
// Initialisation sync.
Bundle newExtras = new Bundle();
newExtras.putBoolean(ContentResolver.SYNC_EXTRAS_INITIALIZE, true);
@@ -882,13 +961,11 @@
owningUid, owningPackage, reason, source,
authority, newExtras, allowParallelSyncs)
);
- }
- if (!onlyThoseWithUnkownSyncableState) {
+ } else if (targetSyncState == AuthorityInfo.UNDEFINED
+ || targetSyncState == isSyncable) {
if (isLoggable) {
Slog.v(TAG, "scheduleSync:"
+ " delay until " + delayUntil
- + " run by " + runtimeMillis
- + " flexMillis " + beforeRuntimeMillis
+ ", source " + source
+ ", account " + account
+ ", authority " + authority
@@ -904,6 +981,56 @@
}
}
+ public int computeSyncable(Account account, int userId, String authority) {
+ final int status = getIsSyncable(account, userId, authority);
+ if (status == AuthorityInfo.NOT_SYNCABLE) {
+ return AuthorityInfo.NOT_SYNCABLE;
+ }
+ final SyncAdapterType type = SyncAdapterType.newKey(authority, account.type);
+ final RegisteredServicesCache.ServiceInfo<SyncAdapterType> syncAdapterInfo =
+ mSyncAdapters.getServiceInfo(type, userId);
+ if (syncAdapterInfo == null) {
+ return AuthorityInfo.NOT_SYNCABLE;
+ }
+ final int owningUid = syncAdapterInfo.uid;
+ final String owningPackage = syncAdapterInfo.componentName.getPackageName();
+ try {
+ if (ActivityManagerNative.getDefault().getAppStartMode(owningUid,
+ owningPackage) == ActivityManager.APP_START_MODE_DISABLED) {
+ Slog.w(TAG, "Not scheduling job " + syncAdapterInfo.uid + ":"
+ + syncAdapterInfo.componentName
+ + " -- package not allowed to start");
+ return AuthorityInfo.NOT_SYNCABLE;
+ }
+ } catch (RemoteException e) {
+ /* ignore - local call */
+ }
+ if (!canAccessAccount(account, owningPackage, owningUid)) {
+ Log.w(TAG, "Access to " + account + " denied for package "
+ + owningPackage + " in UID " + syncAdapterInfo.uid);
+ return AuthorityInfo.SYNCABLE_NO_ACCOUNT_ACCESS;
+ }
+
+ return status;
+ }
+
+ private boolean canAccessAccount(Account account, String packageName, int uid) {
+ if (mAccountManager.hasAccountAccess(account, packageName,
+ UserHandle.getUserHandleForUid(uid))) {
+ return true;
+ }
+ // We relax the account access rule to also include the system apps as
+ // they are trusted and we want to minimize the cases where the user
+ // involvement is required to grant access to the synced account.
+ try {
+ mContext.getPackageManager().getApplicationInfoAsUser(packageName,
+ PackageManager.MATCH_SYSTEM_ONLY, UserHandle.getUserId(uid));
+ return true;
+ } catch (NameNotFoundException e) {
+ return false;
+ }
+ }
+
private void removeSyncsForAuthority(EndPoint info) {
verifyJobScheduler();
List<SyncOperation> ops = getAllPendingSyncs();
@@ -960,9 +1087,7 @@
final Bundle extras = new Bundle();
extras.putBoolean(ContentResolver.SYNC_EXTRAS_UPLOAD, true);
scheduleSync(account, userId, reason, authority, extras,
- LOCAL_SYNC_DELAY /* earliest run time */,
- 2 * LOCAL_SYNC_DELAY /* latest sync time. */,
- false /* onlyThoseWithUnkownSyncableState */);
+ AuthorityInfo.UNDEFINED);
}
public SyncAdapterType[] getSyncAdapterTypes(int userId) {
@@ -1421,8 +1546,7 @@
mContext.getOpPackageName());
for (Account account : accounts) {
scheduleSync(account, userId, SyncOperation.REASON_USER_START, null, null,
- 0 /* no delay */, 0 /* No flexMillis */,
- true /* onlyThoseWithUnknownSyncableState */);
+ AuthorityInfo.NOT_INITIALIZED);
}
}
@@ -2530,13 +2654,18 @@
}
}
- if (isOperationValid(op)) {
- if (!dispatchSyncOperation(op)) {
+ final int syncOpState = computeSyncOpState(op);
+ switch (syncOpState) {
+ case SYNC_OP_STATE_INVALID_NO_ACCOUNT_ACCESS:
+ case SYNC_OP_STATE_INVALID: {
mSyncJobService.callJobFinished(op.jobId, false);
- }
- } else {
+ } return;
+ }
+
+ if (!dispatchSyncOperation(op)) {
mSyncJobService.callJobFinished(op.jobId, false);
}
+
setAuthorityPendingState(op.target);
}
@@ -2596,8 +2725,8 @@
if (syncTargets != null) {
scheduleSync(syncTargets.account, syncTargets.userId,
- SyncOperation.REASON_ACCOUNTS_UPDATED, syncTargets.provider, null, 0, 0,
- true);
+ SyncOperation.REASON_ACCOUNTS_UPDATED, syncTargets.provider,
+ null, AuthorityInfo.NOT_INITIALIZED);
}
}
@@ -2665,6 +2794,26 @@
SyncStorageEngine.SOURCE_PERIODIC, extras,
syncAdapterInfo.type.allowParallelSyncs(), true, SyncOperation.NO_JOB_ID,
pollFrequencyMillis, flexMillis);
+
+ final int syncOpState = computeSyncOpState(op);
+ switch (syncOpState) {
+ case SYNC_OP_STATE_INVALID_NO_ACCOUNT_ACCESS: {
+ mAccountManagerInternal.requestAccountAccess(op.target.account,
+ op.owningPackage, UserHandle.getUserId(op.owningUid),
+ new RemoteCallback((Bundle result) -> {
+ if (result != null
+ && result.getBoolean(AccountManager.KEY_BOOLEAN_RESULT)) {
+ updateOrAddPeriodicSync(target, pollFrequency, flex, extras);
+ }
+ }
+ ));
+ } return;
+
+ case SYNC_OP_STATE_INVALID: {
+ return;
+ }
+ }
+
scheduleSyncOperationH(op);
mSyncStorageEngine.reportChange(ContentResolver.SYNC_OBSERVER_TYPE_SETTINGS);
}
@@ -2725,29 +2874,38 @@
/**
* Determine if a sync is no longer valid and should be dropped.
*/
- private boolean isOperationValid(SyncOperation op) {
+ private int computeSyncOpState(SyncOperation op) {
final boolean isLoggable = Log.isLoggable(TAG, Log.VERBOSE);
int state;
final EndPoint target = op.target;
- boolean syncEnabled = mSyncStorageEngine.getMasterSyncAutomatically(target.userId);
+
// Drop the sync if the account of this operation no longer exists.
AccountAndUser[] accounts = mRunningAccounts;
if (!containsAccountAndUser(accounts, target.account, target.userId)) {
if (isLoggable) {
Slog.v(TAG, " Dropping sync operation: account doesn't exist.");
}
- return false;
+ return SYNC_OP_STATE_INVALID;
}
// Drop this sync request if it isn't syncable.
- state = getIsSyncable(target.account, target.userId, target.provider);
- if (state == 0) {
+ state = computeSyncable(target.account, target.userId, target.provider);
+ if (state == AuthorityInfo.SYNCABLE_NO_ACCOUNT_ACCESS) {
if (isLoggable) {
- Slog.v(TAG, " Dropping sync operation: isSyncable == 0.");
+ Slog.v(TAG, " Dropping sync operation: "
+ + "isSyncable == SYNCABLE_NO_ACCOUNT_ACCESS");
}
- return false;
+ return SYNC_OP_STATE_INVALID_NO_ACCOUNT_ACCESS;
}
- syncEnabled = syncEnabled && mSyncStorageEngine.getSyncAutomatically(
- target.account, target.userId, target.provider);
+ if (state == AuthorityInfo.NOT_SYNCABLE) {
+ if (isLoggable) {
+ Slog.v(TAG, " Dropping sync operation: isSyncable == NOT_SYNCABLE");
+ }
+ return SYNC_OP_STATE_INVALID;
+ }
+
+ final boolean syncEnabled = mSyncStorageEngine.getMasterSyncAutomatically(target.userId)
+ && mSyncStorageEngine.getSyncAutomatically(target.account,
+ target.userId, target.provider);
// We ignore system settings that specify the sync is invalid if:
// 1) It's manual - we try it anyway. When/if it fails it will be rescheduled.
@@ -2760,9 +2918,9 @@
if (isLoggable) {
Slog.v(TAG, " Dropping sync operation: disallowed by settings/network.");
}
- return false;
+ return SYNC_OP_STATE_INVALID;
}
- return true;
+ return SYNC_OP_STATE_VALID;
}
private boolean dispatchSyncOperation(SyncOperation op) {
diff --git a/services/core/java/com/android/server/content/SyncStorageEngine.java b/services/core/java/com/android/server/content/SyncStorageEngine.java
index bc3fc6a..069ae73 100644
--- a/services/core/java/com/android/server/content/SyncStorageEngine.java
+++ b/services/core/java/com/android/server/content/SyncStorageEngine.java
@@ -137,7 +137,7 @@
private static final boolean SYNC_ENABLED_DEFAULT = false;
// the version of the accounts xml file format
- private static final int ACCOUNTS_VERSION = 2;
+ private static final int ACCOUNTS_VERSION = 3;
private static HashMap<String, String> sAuthorityRenames;
private static PeriodicSyncAddedListener mPeriodicSyncAddedListener;
@@ -211,6 +211,12 @@
public static class AuthorityInfo {
// Legal values of getIsSyncable
+
+ /**
+ * The syncable state is undefined.
+ */
+ public static final int UNDEFINED = -2;
+
/**
* Default state for a newly installed adapter. An uninitialized adapter will receive an
* initialization sync which are governed by a different set of rules to that of regular
@@ -234,6 +240,12 @@
*/
public static final int SYNCABLE_NOT_INITIALIZED = 2;
+ /**
+ * The adapter is syncable but does not have access to the synced account and needs a
+ * user access approval.
+ */
+ public static final int SYNCABLE_NO_ACCOUNT_ACCESS = 3;
+
final EndPoint target;
final int ident;
boolean enabled;
@@ -402,6 +414,8 @@
private OnSyncRequestListener mSyncRequestListener;
private OnAuthorityRemovedListener mAuthorityRemovedListener;
+ private boolean mGrantSyncAdaptersAccountAccess;
+
private SyncStorageEngine(Context context, File dataDir) {
mContext = context;
sSyncStorageEngine = this;
@@ -1404,6 +1418,10 @@
}
}
+ public boolean shouldGrantSyncAdaptersAccountAccess() {
+ return mGrantSyncAdaptersAccountAccess;
+ }
+
/**
* public for testing
*/
@@ -1458,6 +1476,11 @@
} catch (NumberFormatException e) {
version = 0;
}
+
+ if (version < 3) {
+ mGrantSyncAdaptersAccountAccess = true;
+ }
+
String nextIdString = parser.getAttributeValue(null, XML_ATTR_NEXT_AUTHORITY_ID);
try {
int id = (nextIdString == null) ? 0 : Integer.parseInt(nextIdString);
diff --git a/services/core/java/com/android/server/display/AutomaticBrightnessController.java b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
index 15ae846..a3febd6 100644
--- a/services/core/java/com/android/server/display/AutomaticBrightnessController.java
+++ b/services/core/java/com/android/server/display/AutomaticBrightnessController.java
@@ -50,13 +50,7 @@
// If true, enables the use of the screen auto-brightness adjustment setting.
private static final boolean USE_SCREEN_AUTO_BRIGHTNESS_ADJUSTMENT = true;
- // Hysteresis constraints for brightening or darkening.
- // The recent lux must have changed by at least this fraction relative to the
- // current ambient lux before a change will be considered.
- private static final float BRIGHTENING_LIGHT_HYSTERESIS = 0.10f;
- private static final float DARKENING_LIGHT_HYSTERESIS = 0.20f;
-
- // How long the current sensor reading is assumed to be valid beyond the current time.
+ // How long the current sensor reading is assumed to be valid beyond the current time.
// This provides a bit of prediction, as well as ensures that the weight for the last sample is
// non-zero, which in turn ensures that the total weight is non-zero.
private static final long AMBIENT_LIGHT_PREDICTION_TIME_MILLIS = 100;
@@ -71,7 +65,7 @@
private static final int MSG_UPDATE_AMBIENT_LUX = 1;
private static final int MSG_BRIGHTNESS_ADJUSTMENT_SAMPLE = 2;
- // Callbacks for requesting updates to the the display's power state
+ // Callbacks for requesting updates to the display's power state
private final Callbacks mCallbacks;
// The sensor manager.
@@ -115,6 +109,9 @@
// weighting values positive.
private final int mWeightingIntercept;
+ // accessor object for determining thresholds to change brightness dynamically
+ private final HysteresisLevels mDynamicHysteresis;
+
// Amount of time to delay auto-brightness after screen on while waiting for
// the light sensor to warm-up in milliseconds.
// May be 0 if no warm-up is required.
@@ -190,7 +187,8 @@
int brightnessMin, int brightnessMax, float dozeScaleFactor,
int lightSensorRate, long brighteningLightDebounceConfig,
long darkeningLightDebounceConfig, boolean resetAmbientLuxAfterWarmUpConfig,
- int ambientLightHorizon, float autoBrightnessAdjustmentMaxGamma ) {
+ int ambientLightHorizon, float autoBrightnessAdjustmentMaxGamma,
+ HysteresisLevels dynamicHysteresis) {
mCallbacks = callbacks;
mTwilight = LocalServices.getService(TwilightManager.class);
mSensorManager = sensorManager;
@@ -206,6 +204,7 @@
mAmbientLightHorizon = ambientLightHorizon;
mWeightingIntercept = ambientLightHorizon;
mScreenAutoBrightnessAdjustmentMaxGamma = autoBrightnessAdjustmentMaxGamma;
+ mDynamicHysteresis = dynamicHysteresis;
mHandler = new AutomaticBrightnessHandler(looper);
mAmbientLightRingBuffer =
@@ -344,8 +343,8 @@
private void setAmbientLux(float lux) {
mAmbientLux = lux;
- mBrighteningLuxThreshold = mAmbientLux * (1.0f + BRIGHTENING_LIGHT_HYSTERESIS);
- mDarkeningLuxThreshold = mAmbientLux * (1.0f - DARKENING_LIGHT_HYSTERESIS);
+ mBrighteningLuxThreshold = mDynamicHysteresis.getBrighteningThreshold(lux);
+ mDarkeningLuxThreshold = mDynamicHysteresis.getDarkeningThreshold(lux);
}
private float calculateAmbientLux(long now) {
diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/core/java/com/android/server/display/DisplayManagerService.java
index 0abd2e7..971989b 100644
--- a/services/core/java/com/android/server/display/DisplayManagerService.java
+++ b/services/core/java/com/android/server/display/DisplayManagerService.java
@@ -1402,6 +1402,9 @@
throw new IllegalArgumentException("width, height, and densityDpi must be "
+ "greater than 0");
}
+ if (surface != null && surface.isSingleBuffered()) {
+ throw new IllegalArgumentException("Surface can't be single-buffered");
+ }
if ((flags & DisplayManager.VIRTUAL_DISPLAY_FLAG_PUBLIC) != 0) {
flags |= DisplayManager.VIRTUAL_DISPLAY_FLAG_AUTO_MIRROR;
@@ -1460,6 +1463,9 @@
@Override // Binder call
public void setVirtualDisplaySurface(IVirtualDisplayCallback callback, Surface surface) {
+ if (surface != null && surface.isSingleBuffered()) {
+ throw new IllegalArgumentException("Surface can't be single-buffered");
+ }
final long token = Binder.clearCallingIdentity();
try {
setVirtualDisplaySurfaceInternal(callback.asBinder(), surface);
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 61af8ed..df5def9 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -72,7 +72,7 @@
private static final String TAG = "DisplayPowerController";
private static final String SCREEN_ON_BLOCKED_TRACE_NAME = "Screen on blocked";
- private static boolean DEBUG = false;
+ private static final boolean DEBUG = false;
private static final boolean DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT = false;
// If true, uses the color fade on animation.
@@ -102,9 +102,6 @@
// Trigger proximity if distance is less than 5 cm.
private static final float TYPICAL_PROXIMITY_THRESHOLD = 5.0f;
- // Brightness animation ramp rate in brightness units per second.
- private static final int BRIGHTNESS_RAMP_RATE_SLOW = 40;
-
private static final int REPORTED_TO_POLICY_SCREEN_OFF = 0;
private static final int REPORTED_TO_POLICY_SCREEN_TURNING_ON = 1;
private static final int REPORTED_TO_POLICY_SCREEN_ON = 2;
@@ -243,8 +240,9 @@
private boolean mAppliedDimming;
private boolean mAppliedLowPower;
- // Brightness ramp rate fast.
+ // Brightness animation ramp rates in brightness units per second
private final int mBrightnessRampRateFast;
+ private final int mBrightnessRampRateSlow;
// The controller for the automatic brightness level.
private AutomaticBrightnessController mAutomaticBrightnessController;
@@ -307,6 +305,8 @@
mBrightnessRampRateFast = resources.getInteger(
com.android.internal.R.integer.config_brightness_ramp_rate_fast);
+ mBrightnessRampRateSlow = resources.getInteger(
+ com.android.internal.R.integer.config_brightness_ramp_rate_slow);
int lightSensorRate = resources.getInteger(
com.android.internal.R.integer.config_autoBrightnessLightSensorRate);
@@ -322,6 +322,15 @@
com.android.internal.R.fraction.config_autoBrightnessAdjustmentMaxGamma,
1, 1);
+ int[] brightLevels = resources.getIntArray(
+ com.android.internal.R.array.config_dynamicHysteresisBrightLevels);
+ int[] darkLevels = resources.getIntArray(
+ com.android.internal.R.array.config_dynamicHysteresisDarkLevels);
+ int[] luxLevels = resources.getIntArray(
+ com.android.internal.R.array.config_dynamicHysteresisLuxLevels);
+ HysteresisLevels dynamicHysteresis = new HysteresisLevels(
+ brightLevels, darkLevels, luxLevels);
+
if (mUseSoftwareAutoBrightnessConfig) {
int[] lux = resources.getIntArray(
com.android.internal.R.array.config_autoBrightnessLevels);
@@ -358,8 +367,8 @@
lightSensorWarmUpTimeConfig, screenBrightnessRangeMinimum,
mScreenBrightnessRangeMaximum, dozeScaleFactor, lightSensorRate,
brighteningLightDebounce, darkeningLightDebounce,
- autoBrightnessResetAmbientLuxAfterWarmUp,
- ambientLightHorizon, autoBrightnessAdjustmentMaxGamma);
+ autoBrightnessResetAmbientLuxAfterWarmUp, ambientLightHorizon,
+ autoBrightnessAdjustmentMaxGamma, dynamicHysteresis);
}
}
@@ -703,7 +712,7 @@
if (!mPendingScreenOff) {
if (state == Display.STATE_ON || state == Display.STATE_DOZE) {
animateScreenBrightness(brightness,
- slowChange ? BRIGHTNESS_RAMP_RATE_SLOW : mBrightnessRampRateFast);
+ slowChange ? mBrightnessRampRateSlow : mBrightnessRampRateFast);
} else {
animateScreenBrightness(brightness, 0);
}
diff --git a/services/core/java/com/android/server/display/HysteresisLevels.java b/services/core/java/com/android/server/display/HysteresisLevels.java
new file mode 100644
index 0000000..b062225
--- /dev/null
+++ b/services/core/java/com/android/server/display/HysteresisLevels.java
@@ -0,0 +1,104 @@
+/*
+ * 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.display;
+
+import android.util.Slog;
+
+/**
+ * A helper class for handling access to illuminance hysteresis level values.
+ */
+final class HysteresisLevels {
+ private static final String TAG = "HysteresisLevels";
+
+ // Default hysteresis constraints for brightening or darkening.
+ // The recent lux must have changed by at least this fraction relative to the
+ // current ambient lux before a change will be considered.
+ private static final float DEFAULT_BRIGHTENING_HYSTERESIS = 0.10f;
+ private static final float DEFAULT_DARKENING_HYSTERESIS = 0.20f;
+
+ private static final boolean DEBUG = false;
+
+ private final float[] mBrightLevels;
+ private final float[] mDarkLevels;
+ private final float[] mLuxLevels;
+
+ /**
+ * Creates a {@code HysteresisLevels} object with the given equal-length
+ * integer arrays.
+ * @param brightLevels an array of brightening hysteresis constraint constants
+ * @param darkLevels an array of darkening hysteresis constraint constants
+ * @param luxLevels a monotonically increasing array of illuminance
+ * thresholds in units of lux
+ */
+ public HysteresisLevels(int[] brightLevels, int[] darkLevels, int[] luxLevels) {
+ if (brightLevels.length != darkLevels.length || darkLevels.length != luxLevels.length + 1) {
+ throw new IllegalArgumentException("Mismatch between hysteresis array lengths.");
+ }
+ mBrightLevels = setArrayFormat(brightLevels, 1000.0f);
+ mDarkLevels = setArrayFormat(darkLevels, 1000.0f);
+ mLuxLevels = setArrayFormat(luxLevels, 1.0f);
+ }
+
+ /**
+ * Return the brightening hysteresis threshold for the given lux level.
+ */
+ public float getBrighteningThreshold(float lux) {
+ float brightConstant = getReferenceLevel(lux, mBrightLevels);
+ float brightThreshold = lux * (1.0f + brightConstant);
+ if (DEBUG) {
+ Slog.d(TAG, "bright hysteresis constant=: " + brightConstant + ", threshold="
+ + brightThreshold + ", lux=" + lux);
+ }
+ return brightThreshold;
+ }
+
+ /**
+ * Return the darkening hysteresis threshold for the given lux level.
+ */
+ public float getDarkeningThreshold(float lux) {
+ float darkConstant = getReferenceLevel(lux, mDarkLevels);
+ float darkThreshold = lux * (1.0f - darkConstant);
+ if (DEBUG) {
+ Slog.d(TAG, "dark hysteresis constant=: " + darkConstant + ", threshold="
+ + darkThreshold + ", lux=" + lux);
+ }
+ return darkThreshold;
+ }
+
+ /**
+ * Return the hysteresis constant for the closest lux threshold value to the
+ * current illuminance from the given array.
+ */
+ private float getReferenceLevel(float lux, float[] referenceLevels) {
+ int index = 0;
+ while (mLuxLevels.length > index && lux >= mLuxLevels[index]) {
+ ++index;
+ }
+ return referenceLevels[index];
+ }
+
+ /**
+ * Return a float array where each i-th element equals {@code configArray[i]/divideFactor}.
+ */
+ private float[] setArrayFormat(int[] configArray, float divideFactor) {
+ float[] levelArray = new float[configArray.length];
+ for (int index = 0; levelArray.length > index; ++index) {
+ levelArray[index] = (float)configArray[index] / divideFactor;
+ }
+ return levelArray;
+ }
+}
diff --git a/services/core/java/com/android/server/display/NightDisplayService.java b/services/core/java/com/android/server/display/NightDisplayService.java
index 07fa2ce..0ec48b9 100644
--- a/services/core/java/com/android/server/display/NightDisplayService.java
+++ b/services/core/java/com/android/server/display/NightDisplayService.java
@@ -33,8 +33,11 @@
import android.opengl.Matrix;
import android.os.Handler;
import android.os.Looper;
+import android.os.RemoteException;
import android.os.UserHandle;
import android.provider.Settings.Secure;
+import android.service.vr.IVrManager;
+import android.service.vr.IVrStateCallbacks;
import android.util.MathUtils;
import android.util.Slog;
import android.view.animation.AnimationUtils;
@@ -44,7 +47,9 @@
import com.android.server.twilight.TwilightListener;
import com.android.server.twilight.TwilightManager;
import com.android.server.twilight.TwilightState;
+import com.android.server.vr.VrManagerService;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.Calendar;
import java.util.TimeZone;
@@ -83,6 +88,31 @@
private static final ColorMatrixEvaluator COLOR_MATRIX_EVALUATOR = new ColorMatrixEvaluator();
private final Handler mHandler;
+ private final AtomicBoolean mIgnoreAllColorMatrixChanges = new AtomicBoolean();
+ private final IVrStateCallbacks mVrStateCallbacks = new IVrStateCallbacks.Stub() {
+ @Override
+ public void onVrStateChanged(final boolean enabled) {
+ // Turn off all night mode display stuff while device is in VR mode.
+ mIgnoreAllColorMatrixChanges.set(enabled);
+ mHandler.post(new Runnable() {
+ @Override
+ public void run() {
+ // Cancel in-progress animations
+ if (mColorMatrixAnimator != null) {
+ mColorMatrixAnimator.cancel();
+ }
+
+ final DisplayTransformManager dtm =
+ getLocalService(DisplayTransformManager.class);
+ if (enabled) {
+ dtm.setColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, MATRIX_IDENTITY);
+ } else if (mController.isActivated()) {
+ dtm.setColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY, MATRIX_NIGHT);
+ }
+ }
+ });
+ }
+ };
private int mCurrentUser = UserHandle.USER_NULL;
private ContentObserver mUserSetupObserver;
@@ -105,7 +135,17 @@
@Override
public void onBootPhase(int phase) {
- if (phase == PHASE_BOOT_COMPLETED) {
+ if (phase == PHASE_SYSTEM_SERVICES_READY) {
+ IVrManager vrManager =
+ (IVrManager) getBinderService(VrManagerService.VR_MANAGER_BINDER_SERVICE);
+ if (vrManager != null) {
+ try {
+ vrManager.registerListener(mVrStateCallbacks);
+ } catch (RemoteException e) {
+ Slog.e(TAG, "Failed to register VR mode state listener: " + e);
+ }
+ }
+ } else if (phase == PHASE_BOOT_COMPLETED) {
mBootCompleted = true;
// Register listeners now that boot is complete.
@@ -182,6 +222,8 @@
}
private void setUp() {
+ Slog.d(TAG, "setUp: currentUser=" + mCurrentUser);
+
// Create a new controller for the current user and start listening for changes.
mController = new NightDisplayController(getContext(), mCurrentUser);
mController.setListener(this);
@@ -196,6 +238,8 @@
}
private void tearDown() {
+ Slog.d(TAG, "tearDown: currentUser=" + mCurrentUser);
+
if (mController != null) {
mController.setListener(null);
mController = null;
@@ -230,6 +274,11 @@
mColorMatrixAnimator.cancel();
}
+ // Don't do any color matrix change animations if we are ignoring them anyway.
+ if (mIgnoreAllColorMatrixChanges.get()) {
+ return;
+ }
+
final DisplayTransformManager dtm = getLocalService(DisplayTransformManager.class);
final float[] from = dtm.getColorMatrix(LEVEL_COLOR_MATRIX_NIGHT_DISPLAY);
final float[] to = mIsActivated ? MATRIX_NIGHT : null;
@@ -273,6 +322,8 @@
@Override
public void onAutoModeChanged(int autoMode) {
+ Slog.d(TAG, "onAutoModeChanged: autoMode=" + autoMode);
+
if (mAutoMode != null) {
mAutoMode.onStop();
mAutoMode = null;
@@ -291,6 +342,8 @@
@Override
public void onCustomStartTimeChanged(NightDisplayController.LocalTime startTime) {
+ Slog.d(TAG, "onCustomStartTimeChanged: startTime=" + startTime);
+
if (mAutoMode != null) {
mAutoMode.onCustomStartTimeChanged(startTime);
}
@@ -298,6 +351,8 @@
@Override
public void onCustomEndTimeChanged(NightDisplayController.LocalTime endTime) {
+ Slog.d(TAG, "onCustomEndTimeChanged: endTime=" + endTime);
+
if (mAutoMode != null) {
mAutoMode.onCustomEndTimeChanged(endTime);
}
@@ -419,7 +474,7 @@
@Override
public void onAlarm() {
- if (DEBUG) Slog.d(TAG, "onAlarm");
+ Slog.d(TAG, "onAlarm");
updateActivated();
}
}
@@ -477,7 +532,8 @@
@Override
public void onTwilightStateChanged(@Nullable TwilightState state) {
- if (DEBUG) Slog.d(TAG, "onTwilightStateChanged");
+ Slog.d(TAG, "onTwilightStateChanged: isNight="
+ + (state == null ? null : state.isNight()));
updateActivated(state);
}
}
diff --git a/services/core/java/com/android/server/location/GpsXtraDownloader.java b/services/core/java/com/android/server/location/GpsXtraDownloader.java
index c464371..bf779859 100644
--- a/services/core/java/com/android/server/location/GpsXtraDownloader.java
+++ b/services/core/java/com/android/server/location/GpsXtraDownloader.java
@@ -22,6 +22,10 @@
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.URL;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.IOException;
import java.util.Properties;
import java.util.Random;
import java.util.concurrent.TimeUnit;
@@ -37,6 +41,7 @@
private static final String TAG = "GpsXtraDownloader";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+ private static final long MAXIMUM_CONTENT_LENGTH_BYTES = 1000000; // 1MB.
private static final String DEFAULT_USER_AGENT = "Android";
private static final int CONNECTION_TIMEOUT_MS = (int) TimeUnit.SECONDS.toMillis(30);
@@ -124,7 +129,19 @@
return null;
}
- return Streams.readFully(connection.getInputStream());
+ try (InputStream in = connection.getInputStream()) {
+ ByteArrayOutputStream bytes = new ByteArrayOutputStream();
+ byte[] buffer = new byte[1024];
+ int count;
+ while ((count = in.read(buffer)) != -1) {
+ bytes.write(buffer, 0, count);
+ if (bytes.size() > MAXIMUM_CONTENT_LENGTH_BYTES) {
+ if (DEBUG) Log.d(TAG, "XTRA file too large");
+ return null;
+ }
+ }
+ return bytes.toByteArray();
+ }
} catch (IOException ioe) {
if (DEBUG) Log.d(TAG, "Error downloading gps XTRA: ", ioe);
} finally {
@@ -136,3 +153,4 @@
}
}
+
diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java
index 777eee8..697186e 100644
--- a/services/core/java/com/android/server/media/MediaSessionService.java
+++ b/services/core/java/com/android/server/media/MediaSessionService.java
@@ -78,6 +78,8 @@
public class MediaSessionService extends SystemService implements Monitor {
private static final String TAG = "MediaSessionService";
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
+ // Leave log for media key event always.
+ private static final boolean DEBUG_MEDIA_KEY_EVENT = DEBUG || true;
private static final int WAKELOCK_TIMEOUT = 5000;
@@ -302,7 +304,7 @@
*/
private void destroySessionLocked(MediaSessionRecord session) {
if (DEBUG) {
- Log.d(TAG, "Destroying session : " + session.toString());
+ Log.d(TAG, "Destroying " + session);
}
int userId = session.getUserId();
UserRecord user = mUserRecords.get(userId);
@@ -408,7 +410,7 @@
if (component != null) {
if (compName.equals(component)) {
if (DEBUG) {
- Log.d(TAG, "ok to get sessions: " + component +
+ Log.d(TAG, "ok to get sessions. " + component +
" is authorized notification listener");
}
return true;
@@ -417,7 +419,7 @@
}
}
if (DEBUG) {
- Log.d(TAG, "not ok to get sessions, " + compName +
+ Log.d(TAG, "not ok to get sessions. " + compName +
" is not in list of ENABLED_NOTIFICATION_LISTENERS for user " + userId);
}
}
@@ -462,7 +464,7 @@
mHandler.post(MessageHandler.MSG_SESSIONS_CHANGED, userId, 0);
if (DEBUG) {
- Log.d(TAG, "Created session for package " + callerPackageName + " with tag " + tag);
+ Log.d(TAG, "Created session for " + callerPackageName + " with tag " + tag);
}
return session;
}
@@ -881,17 +883,16 @@
private void dispatchAdjustVolumeLocked(int suggestedStream, int direction, int flags,
MediaSessionRecord session) {
- if (DEBUG) {
- String description = session == null ? null : session.toString();
- Log.d(TAG, "Adjusting session " + description + " by " + direction + ". flags="
- + flags + ", suggestedStream=" + suggestedStream);
-
- }
boolean preferSuggestedStream = false;
if (isValidLocalStreamType(suggestedStream)
&& AudioSystem.isStreamActive(suggestedStream, 0)) {
preferSuggestedStream = true;
}
+ if (DEBUG) {
+ Log.d(TAG, "Adjusting " + session + " by " + direction + ". flags="
+ + flags + ", suggestedStream=" + suggestedStream
+ + ", preferSuggestedStream=" + preferSuggestedStream);
+ }
if (session == null || preferSuggestedStream) {
if ((flags & AudioManager.FLAG_ACTIVE_MEDIA_ONLY) != 0
&& !AudioSystem.isStreamActive(AudioManager.STREAM_MUSIC, 0)) {
@@ -946,8 +947,8 @@
private void dispatchMediaKeyEventLocked(KeyEvent keyEvent, boolean needWakeLock,
MediaSessionRecord session) {
if (session != null) {
- if (DEBUG) {
- Log.d(TAG, "Sending media key to " + session.toString());
+ if (DEBUG_MEDIA_KEY_EVENT) {
+ Log.d(TAG, "Sending " + keyEvent + " to " + session);
}
if (needWakeLock) {
mKeyEventReceiver.aquireWakeLockLocked();
@@ -966,11 +967,6 @@
&& user.mRestoredMediaButtonReceiver == null) {
continue;
}
- if (DEBUG) {
- Log.d(TAG, "Sending media key to last known PendingIntent "
- + user.mLastMediaButtonReceiver + " or restored Intent "
- + user.mRestoredMediaButtonReceiver);
- }
if (needWakeLock) {
mKeyEventReceiver.aquireWakeLockLocked();
}
@@ -979,10 +975,19 @@
mediaButtonIntent.putExtra(Intent.EXTRA_KEY_EVENT, keyEvent);
try {
if (user.mLastMediaButtonReceiver != null) {
+ if (DEBUG_MEDIA_KEY_EVENT) {
+ Log.d(TAG, "Sending " + keyEvent
+ + " to the last known pendingIntent "
+ + user.mLastMediaButtonReceiver);
+ }
user.mLastMediaButtonReceiver.send(getContext(),
needWakeLock ? mKeyEventReceiver.mLastTimeoutId : -1,
mediaButtonIntent, mKeyEventReceiver, mHandler);
} else {
+ if (DEBUG_MEDIA_KEY_EVENT) {
+ Log.d(TAG, "Sending " + keyEvent + " to the restored intent "
+ + user.mRestoredMediaButtonReceiver);
+ }
mediaButtonIntent.setComponent(user.mRestoredMediaButtonReceiver);
getContext().sendBroadcastAsUser(mediaButtonIntent,
UserHandle.of(userId));
diff --git a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
index 8f9cc47..30e839d 100644
--- a/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
+++ b/services/core/java/com/android/server/net/NetworkPolicyManagerService.java
@@ -90,6 +90,7 @@
import android.Manifest;
import android.annotation.IntDef;
+import android.annotation.Nullable;
import android.app.ActivityManager;
import android.app.AppGlobals;
import android.app.AppOpsManager;
@@ -133,7 +134,6 @@
import android.os.HandlerThread;
import android.os.IDeviceIdleController;
import android.os.INetworkManagementService;
-import android.os.IPowerManager;
import android.os.Message;
import android.os.MessageQueue.IdleHandler;
import android.os.PowerManager;
@@ -142,6 +142,7 @@
import android.os.RemoteException;
import android.os.ResultReceiver;
import android.os.ServiceManager;
+import android.os.Trace;
import android.os.UserHandle;
import android.os.UserManager;
import android.provider.Settings;
@@ -286,15 +287,14 @@
private static final int MSG_LIMIT_REACHED = 5;
private static final int MSG_RESTRICT_BACKGROUND_CHANGED = 6;
private static final int MSG_ADVISE_PERSIST_THRESHOLD = 7;
- private static final int MSG_SCREEN_ON_CHANGED = 8;
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 static final int MSG_SET_FIREWALL_RULES = 13;
private final Context mContext;
private final IActivityManager mActivityManager;
- private final IPowerManager mPowerManager;
private final INetworkStatsService mNetworkStats;
private final INetworkManagementService mNetworkManager;
private UsageStatsManagerInternal mUsageStats;
@@ -312,7 +312,6 @@
@GuardedBy("allLocks") volatile boolean mSystemReady;
- @GuardedBy("mUidRulesFirstLock") volatile boolean mScreenOn;
@GuardedBy("mUidRulesFirstLock") volatile boolean mRestrictBackground;
@GuardedBy("mUidRulesFirstLock") volatile boolean mRestrictPower;
@GuardedBy("mUidRulesFirstLock") volatile boolean mDeviceIdleMode;
@@ -418,9 +417,8 @@
// TODO: migrate notifications to SystemUI
public NetworkPolicyManagerService(Context context, IActivityManager activityManager,
- IPowerManager powerManager, INetworkStatsService networkStats,
- INetworkManagementService networkManagement) {
- this(context, activityManager, powerManager, networkStats, networkManagement,
+ INetworkStatsService networkStats, INetworkManagementService networkManagement) {
+ this(context, activityManager, networkStats, networkManagement,
NtpTrustedTime.getInstance(context), getSystemDir(), false);
}
@@ -429,12 +427,10 @@
}
public NetworkPolicyManagerService(Context context, IActivityManager activityManager,
- IPowerManager powerManager, INetworkStatsService networkStats,
- INetworkManagementService networkManagement, TrustedTime time, File systemDir,
- boolean suppressDefaultPolicy) {
+ INetworkStatsService networkStats, INetworkManagementService networkManagement,
+ TrustedTime time, File systemDir, boolean suppressDefaultPolicy) {
mContext = checkNotNull(context, "missing context");
mActivityManager = checkNotNull(activityManager, "missing activityManager");
- mPowerManager = checkNotNull(powerManager, "missing powerManager");
mNetworkStats = checkNotNull(networkStats, "missing networkStats");
mNetworkManager = checkNotNull(networkManagement, "missing networkManagement");
mDeviceIdleController = IDeviceIdleController.Stub.asInterface(ServiceManager.getService(
@@ -520,12 +516,13 @@
try {
app = pm.getApplicationInfoAsUser(pkg, PackageManager.MATCH_SYSTEM_ONLY, userId);
} catch (PackageManager.NameNotFoundException e) {
- // Should not happen
- Slog.wtf(TAG, "No ApplicationInfo for package " + pkg);
+ if (LOGD) Slog.d(TAG, "No ApplicationInfo for package " + pkg);
+ // Ignore it - some apps on allow-in-data-usage-save are optional.
continue;
}
if (!app.isPrivilegedApp()) {
- Slog.wtf(TAG, "pm.getApplicationInfoAsUser() returned non-privileged app: " + pkg);
+ Slog.e(TAG, "addDefaultRestrictBackgroundWhitelistUidsUL(): "
+ + "skipping non-privileged app " + pkg);
continue;
}
final int uid = UserHandle.getUid(userId, app.uid);
@@ -535,8 +532,9 @@
+ "background whitelist. Revoked status: "
+ mRestrictBackgroundWhitelistRevokedUids.get(uid));
if (!mRestrictBackgroundWhitelistRevokedUids.get(uid)) {
- Slog.i(TAG, "adding default package " + pkg + " (uid " + uid + " for user "
- + userId + ") to restrict background whitelist");
+ if (LOGD)
+ Slog.d(TAG, "adding default package " + pkg + " (uid " + uid + " for user "
+ + userId + ") to restrict background whitelist");
mRestrictBackgroundWhitelistUids.append(uid, true);
changed = true;
}
@@ -575,127 +573,127 @@
}
public void systemReady() {
- if (!isBandwidthControlEnabled()) {
- Slog.w(TAG, "bandwidth controls disabled, unable to enforce policy");
- return;
- }
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "systemReady");
+ try {
+ if (!isBandwidthControlEnabled()) {
+ Slog.w(TAG, "bandwidth controls disabled, unable to enforce policy");
+ return;
+ }
- mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
+ mUsageStats = LocalServices.getService(UsageStatsManagerInternal.class);
- mPackageMonitor.register(mContext, mHandler.getLooper(), UserHandle.ALL, true);
+ mPackageMonitor.register(mContext, mHandler.getLooper(), UserHandle.ALL, true);
- synchronized (mUidRulesFirstLock) {
- synchronized (mNetworkPoliciesSecondLock) {
- updatePowerSaveWhitelistUL();
- mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);
- mPowerManagerInternal.registerLowPowerModeObserver(
- new PowerManagerInternal.LowPowerModeListener() {
- @Override
- public void onLowPowerModeChanged(boolean enabled) {
- if (LOGD) Slog.d(TAG, "onLowPowerModeChanged(" + enabled + ")");
- synchronized (mUidRulesFirstLock) {
- if (mRestrictPower != enabled) {
- mRestrictPower = enabled;
- updateRulesForRestrictPowerUL();
+ synchronized (mUidRulesFirstLock) {
+ synchronized (mNetworkPoliciesSecondLock) {
+ updatePowerSaveWhitelistUL();
+ mPowerManagerInternal = LocalServices.getService(PowerManagerInternal.class);
+ mPowerManagerInternal.registerLowPowerModeObserver(
+ new PowerManagerInternal.LowPowerModeListener() {
+ @Override
+ public void onLowPowerModeChanged(boolean enabled) {
+ if (LOGD) Slog.d(TAG, "onLowPowerModeChanged(" + enabled + ")");
+ synchronized (mUidRulesFirstLock) {
+ if (mRestrictPower != enabled) {
+ mRestrictPower = enabled;
+ updateRulesForRestrictPowerUL();
+ }
}
}
+ });
+ mRestrictPower = mPowerManagerInternal.getLowPowerModeEnabled();
+
+ mSystemReady = true;
+
+ // read policy from disk
+ readPolicyAL();
+
+ if (addDefaultRestrictBackgroundWhitelistUidsUL()) {
+ writePolicyAL();
}
- });
- mRestrictPower = mPowerManagerInternal.getLowPowerModeEnabled();
- mSystemReady = true;
-
- // read policy from disk
- readPolicyAL();
-
- if (addDefaultRestrictBackgroundWhitelistUidsUL()) {
- writePolicyAL();
+ setRestrictBackgroundUL(mRestrictBackground);
+ updateRulesForGlobalChangeAL(false);
+ updateNotificationsNL();
}
-
- setRestrictBackgroundUL(mRestrictBackground);
- updateRulesForGlobalChangeAL(false);
- updateNotificationsNL();
}
+
+ try {
+ mActivityManager.registerUidObserver(mUidObserver,
+ ActivityManager.UID_OBSERVER_PROCSTATE|ActivityManager.UID_OBSERVER_GONE);
+ mNetworkManager.registerObserver(mAlertObserver);
+ } catch (RemoteException e) {
+ // ignored; both services live in system_server
+ }
+
+ // listen for changes to power save whitelist
+ final IntentFilter whitelistFilter = new IntentFilter(
+ PowerManager.ACTION_POWER_SAVE_WHITELIST_CHANGED);
+ mContext.registerReceiver(mPowerSaveWhitelistReceiver, whitelistFilter, null, mHandler);
+
+ DeviceIdleController.LocalService deviceIdleService
+ = LocalServices.getService(DeviceIdleController.LocalService.class);
+ deviceIdleService.setNetworkPolicyTempWhitelistCallback(mTempPowerSaveChangedCallback);
+
+ // watch for network interfaces to be claimed
+ final IntentFilter connFilter = new IntentFilter(CONNECTIVITY_ACTION);
+ mContext.registerReceiver(mConnReceiver, connFilter, CONNECTIVITY_INTERNAL, mHandler);
+
+ // listen for package changes to update policy
+ final IntentFilter packageFilter = new IntentFilter();
+ packageFilter.addAction(ACTION_PACKAGE_ADDED);
+ packageFilter.addDataScheme("package");
+ mContext.registerReceiver(mPackageReceiver, packageFilter, null, mHandler);
+
+ // listen for UID changes to update policy
+ mContext.registerReceiver(
+ mUidRemovedReceiver, new IntentFilter(ACTION_UID_REMOVED), null, mHandler);
+
+ // listen for user changes to update policy
+ final IntentFilter userFilter = new IntentFilter();
+ userFilter.addAction(ACTION_USER_ADDED);
+ userFilter.addAction(ACTION_USER_REMOVED);
+ mContext.registerReceiver(mUserReceiver, userFilter, null, mHandler);
+
+ // listen for stats update events
+ final IntentFilter statsFilter = new IntentFilter(ACTION_NETWORK_STATS_UPDATED);
+ mContext.registerReceiver(
+ mStatsReceiver, statsFilter, READ_NETWORK_USAGE_HISTORY, mHandler);
+
+ // listen for restrict background changes from notifications
+ final IntentFilter allowFilter = new IntentFilter(ACTION_ALLOW_BACKGROUND);
+ mContext.registerReceiver(mAllowReceiver, allowFilter, MANAGE_NETWORK_POLICY, mHandler);
+
+ // listen for snooze warning from notifications
+ final IntentFilter snoozeWarningFilter = new IntentFilter(ACTION_SNOOZE_WARNING);
+ mContext.registerReceiver(mSnoozeWarningReceiver, snoozeWarningFilter,
+ MANAGE_NETWORK_POLICY, mHandler);
+
+ // listen for configured wifi networks to be removed
+ final IntentFilter wifiConfigFilter =
+ new IntentFilter(CONFIGURED_NETWORKS_CHANGED_ACTION);
+ mContext.registerReceiver(mWifiConfigReceiver, wifiConfigFilter, null, mHandler);
+
+ // listen for wifi state changes to catch metered hint
+ final IntentFilter wifiStateFilter = new IntentFilter(
+ WifiManager.NETWORK_STATE_CHANGED_ACTION);
+ mContext.registerReceiver(mWifiStateReceiver, wifiStateFilter, null, mHandler);
+
+ mUsageStats.addAppIdleStateChangeListener(new AppIdleStateChangeListener());
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
}
-
- updateScreenOn();
-
- try {
- mActivityManager.registerUidObserver(mUidObserver,
- ActivityManager.UID_OBSERVER_PROCSTATE|ActivityManager.UID_OBSERVER_GONE);
- mNetworkManager.registerObserver(mAlertObserver);
- } catch (RemoteException e) {
- // ignored; both services live in system_server
- }
-
- // TODO: traverse existing processes to know foreground state, or have
- // activitymanager dispatch current state when new observer attached.
-
- final IntentFilter screenFilter = new IntentFilter();
- screenFilter.addAction(Intent.ACTION_SCREEN_ON);
- screenFilter.addAction(Intent.ACTION_SCREEN_OFF);
- mContext.registerReceiver(mScreenReceiver, screenFilter);
-
- // listen for changes to power save whitelist
- final IntentFilter whitelistFilter = new IntentFilter(
- PowerManager.ACTION_POWER_SAVE_WHITELIST_CHANGED);
- mContext.registerReceiver(mPowerSaveWhitelistReceiver, whitelistFilter, null, mHandler);
-
- DeviceIdleController.LocalService deviceIdleService
- = LocalServices.getService(DeviceIdleController.LocalService.class);
- deviceIdleService.setNetworkPolicyTempWhitelistCallback(mTempPowerSaveChangedCallback);
-
- // watch for network interfaces to be claimed
- final IntentFilter connFilter = new IntentFilter(CONNECTIVITY_ACTION);
- mContext.registerReceiver(mConnReceiver, connFilter, CONNECTIVITY_INTERNAL, mHandler);
-
- // listen for package changes to update policy
- final IntentFilter packageFilter = new IntentFilter();
- packageFilter.addAction(ACTION_PACKAGE_ADDED);
- packageFilter.addDataScheme("package");
- mContext.registerReceiver(mPackageReceiver, packageFilter, null, mHandler);
-
- // listen for UID changes to update policy
- mContext.registerReceiver(
- mUidRemovedReceiver, new IntentFilter(ACTION_UID_REMOVED), null, mHandler);
-
- // listen for user changes to update policy
- final IntentFilter userFilter = new IntentFilter();
- userFilter.addAction(ACTION_USER_ADDED);
- userFilter.addAction(ACTION_USER_REMOVED);
- mContext.registerReceiver(mUserReceiver, userFilter, null, mHandler);
-
- // listen for stats update events
- final IntentFilter statsFilter = new IntentFilter(ACTION_NETWORK_STATS_UPDATED);
- mContext.registerReceiver(
- mStatsReceiver, statsFilter, READ_NETWORK_USAGE_HISTORY, mHandler);
-
- // listen for restrict background changes from notifications
- final IntentFilter allowFilter = new IntentFilter(ACTION_ALLOW_BACKGROUND);
- mContext.registerReceiver(mAllowReceiver, allowFilter, MANAGE_NETWORK_POLICY, mHandler);
-
- // listen for snooze warning from notifications
- final IntentFilter snoozeWarningFilter = new IntentFilter(ACTION_SNOOZE_WARNING);
- mContext.registerReceiver(mSnoozeWarningReceiver, snoozeWarningFilter,
- MANAGE_NETWORK_POLICY, mHandler);
-
- // listen for configured wifi networks to be removed
- final IntentFilter wifiConfigFilter = new IntentFilter(CONFIGURED_NETWORKS_CHANGED_ACTION);
- mContext.registerReceiver(mWifiConfigReceiver, wifiConfigFilter, null, mHandler);
-
- // listen for wifi state changes to catch metered hint
- final IntentFilter wifiStateFilter = new IntentFilter(
- WifiManager.NETWORK_STATE_CHANGED_ACTION);
- mContext.registerReceiver(mWifiStateReceiver, wifiStateFilter, null, mHandler);
-
- mUsageStats.addAppIdleStateChangeListener(new AppIdleStateChangeListener());
-
}
final private IUidObserver mUidObserver = new IUidObserver.Stub() {
@Override public void onUidStateChanged(int uid, int procState) throws RemoteException {
- synchronized (mUidRulesFirstLock) {
- updateUidStateUL(uid, procState);
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "onUidStateChanged");
+ try {
+ synchronized (mUidRulesFirstLock) {
+ updateUidStateUL(uid, procState);
+ }
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
}
}
@@ -719,6 +717,7 @@
synchronized (mUidRulesFirstLock) {
updatePowerSaveWhitelistUL();
updateRulesForRestrictPowerUL();
+ updateRulesForAppIdleUL();
}
}
};
@@ -734,15 +733,6 @@
}
};
- final private BroadcastReceiver mScreenReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- // screen-related broadcasts are protected by system, no need
- // for permissions check.
- mHandler.obtainMessage(MSG_SCREEN_ON_CHANGED).sendToTarget();
- }
- };
-
final private BroadcastReceiver mPackageReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
@@ -1035,7 +1025,7 @@
*/
private void notifyOverLimitNL(NetworkTemplate template) {
if (!mOverLimitNotified.contains(template)) {
- mContext.startActivity(buildNetworkOverLimitIntent(template));
+ mContext.startActivity(buildNetworkOverLimitIntent(mContext.getResources(), template));
mOverLimitNotified.add(template);
}
}
@@ -1074,12 +1064,14 @@
builder.setTicker(title);
builder.setContentTitle(title);
builder.setContentText(body);
+ builder.setDefaults(Notification.DEFAULT_ALL);
+ builder.setPriority(Notification.PRIORITY_HIGH);
final Intent snoozeIntent = buildSnoozeWarningIntent(policy.template);
builder.setDeleteIntent(PendingIntent.getBroadcast(
mContext, 0, snoozeIntent, PendingIntent.FLAG_UPDATE_CURRENT));
- final Intent viewIntent = buildViewDataUsageIntent(policy.template);
+ final Intent viewIntent = buildViewDataUsageIntent(res, policy.template);
builder.setContentIntent(PendingIntent.getActivity(
mContext, 0, viewIntent, PendingIntent.FLAG_UPDATE_CURRENT));
@@ -1115,7 +1107,7 @@
builder.setContentTitle(title);
builder.setContentText(body);
- final Intent intent = buildNetworkOverLimitIntent(policy.template);
+ final Intent intent = buildNetworkOverLimitIntent(res, policy.template);
builder.setContentIntent(PendingIntent.getActivity(
mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
break;
@@ -1150,7 +1142,7 @@
builder.setContentTitle(title);
builder.setContentText(body);
- final Intent intent = buildViewDataUsageIntent(policy.template);
+ final Intent intent = buildViewDataUsageIntent(res, policy.template);
builder.setContentIntent(PendingIntent.getActivity(
mContext, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT));
break;
@@ -2068,7 +2060,7 @@
// Must whitelist foreground apps before turning data saver mode on.
// TODO: there is no need to iterate through all apps here, just those in the foreground,
// so it could call AM to get the UIDs of such apps, and iterate through them instead.
- updateRulesForAllAppsUL(TYPE_RESTRICT_BACKGROUND);
+ updateRulesForRestrictBackgroundUL();
try {
if (!mNetworkManager.setDataSaverModeEnabled(mRestrictBackground)) {
Slog.e(TAG, "Could not change Data Saver Mode on NMS to " + mRestrictBackground);
@@ -2225,21 +2217,26 @@
@Override
public void setDeviceIdleMode(boolean enabled) {
mContext.enforceCallingOrSelfPermission(MANAGE_NETWORK_POLICY, TAG);
-
- synchronized (mUidRulesFirstLock) {
- if (mDeviceIdleMode != enabled) {
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "setDeviceIdleMode");
+ try {
+ synchronized (mUidRulesFirstLock) {
+ if (mDeviceIdleMode == enabled) {
+ return;
+ }
mDeviceIdleMode = enabled;
if (mSystemReady) {
// Device idle change means we need to rebuild rules for all
// known apps, so do a global refresh.
updateRulesForRestrictPowerUL();
}
- if (enabled) {
- EventLogTags.writeDeviceIdleOnPhase("net");
- } else {
- EventLogTags.writeDeviceIdleOffPhase("net");
- }
}
+ if (enabled) {
+ EventLogTags.writeDeviceIdleOnPhase("net");
+ } else {
+ EventLogTags.writeDeviceIdleOffPhase("net");
+ }
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
}
}
@@ -2518,7 +2515,7 @@
private boolean isUidStateForegroundUL(int state) {
// only really in foreground when screen is also on
- return mScreenOn && state <= ActivityManager.PROCESS_STATE_TOP;
+ return state <= ActivityManager.PROCESS_STATE_TOP;
}
/**
@@ -2527,25 +2524,30 @@
* {@link #updateRulesForPowerRestrictionsUL(int)}
*/
private void updateUidStateUL(int uid, int uidState) {
- final int oldUidState = mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
- if (oldUidState != uidState) {
- // state changed, push updated rules
- mUidState.put(uid, uidState);
- updateRestrictBackgroundRulesOnUidStatusChangedUL(uid, oldUidState, uidState);
- if (isProcStateAllowedWhileIdleOrPowerSaveMode(oldUidState)
- != isProcStateAllowedWhileIdleOrPowerSaveMode(uidState) ) {
- if (isUidIdle(uid)) {
- updateRuleForAppIdleUL(uid);
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "updateUidStateUL");
+ try {
+ final int oldUidState = mUidState.get(uid, ActivityManager.PROCESS_STATE_CACHED_EMPTY);
+ if (oldUidState != uidState) {
+ // state changed, push updated rules
+ mUidState.put(uid, uidState);
+ updateRestrictBackgroundRulesOnUidStatusChangedUL(uid, oldUidState, uidState);
+ if (isProcStateAllowedWhileIdleOrPowerSaveMode(oldUidState)
+ != isProcStateAllowedWhileIdleOrPowerSaveMode(uidState) ) {
+ if (isUidIdle(uid)) {
+ updateRuleForAppIdleUL(uid);
+ }
+ if (mDeviceIdleMode) {
+ updateRuleForDeviceIdleUL(uid);
+ }
+ if (mRestrictPower) {
+ updateRuleForRestrictPowerUL(uid);
+ }
+ updateRulesForPowerRestrictionsUL(uid);
}
- if (mDeviceIdleMode) {
- updateRuleForDeviceIdleUL(uid);
- }
- if (mRestrictPower) {
- updateRuleForRestrictPowerUL(uid);
- }
- updateRulesForPowerRestrictionsUL(uid);
+ updateNetworkStats(uid, isUidStateForegroundUL(uidState));
}
- updateNetworkStats(uid, isUidStateForegroundUL(uidState));
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
}
}
@@ -2589,31 +2591,6 @@
}
}
- private void updateScreenOn() {
- synchronized (mUidRulesFirstLock) {
- try {
- mScreenOn = mPowerManager.isInteractive();
- } catch (RemoteException e) {
- // ignored; service lives in system_server
- }
- updateRulesForScreenUL();
- }
- }
-
- /**
- * Update rules that might be changed by {@link #mScreenOn} value.
- */
- private void updateRulesForScreenUL() {
- // only update rules for anyone with foreground activities
- final int size = mUidState.size();
- for (int i = 0; i < size; i++) {
- if (mUidState.valueAt(i) <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE) {
- final int uid = mUidState.keyAt(i);
- updateRestrictionRulesForUidUL(uid);
- }
- }
- }
-
static boolean isProcStateAllowedWhileIdleOrPowerSaveMode(int procState) {
return procState <= ActivityManager.PROCESS_STATE_FOREGROUND_SERVICE;
}
@@ -2623,8 +2600,13 @@
}
void updateRulesForPowerSaveUL() {
- updateRulesForWhitelistedPowerSaveUL(mRestrictPower, FIREWALL_CHAIN_POWERSAVE,
- mUidFirewallPowerSaveRules);
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "updateRulesForPowerSaveUL");
+ try {
+ updateRulesForWhitelistedPowerSaveUL(mRestrictPower, FIREWALL_CHAIN_POWERSAVE,
+ mUidFirewallPowerSaveRules);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
+ }
}
void updateRuleForRestrictPowerUL(int uid) {
@@ -2632,8 +2614,13 @@
}
void updateRulesForDeviceIdleUL() {
- updateRulesForWhitelistedPowerSaveUL(mDeviceIdleMode, FIREWALL_CHAIN_DOZABLE,
- mUidFirewallDozableRules);
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "updateRulesForDeviceIdleUL");
+ try {
+ updateRulesForWhitelistedPowerSaveUL(mDeviceIdleMode, FIREWALL_CHAIN_DOZABLE,
+ mUidFirewallDozableRules);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
+ }
}
void updateRuleForDeviceIdleUL(int uid) {
@@ -2670,10 +2657,10 @@
uidRules.put(mUidState.keyAt(i), FIREWALL_RULE_ALLOW);
}
}
- setUidFirewallRules(chain, uidRules);
+ setUidFirewallRulesAsync(chain, uidRules, CHAIN_TOGGLE_ENABLE);
+ } else {
+ setUidFirewallRulesAsync(chain, null, CHAIN_TOGGLE_DISABLE);
}
-
- enableFirewallChainUL(chain, enabled);
}
private boolean isWhitelistedBatterySaverUL(int uid) {
@@ -2695,27 +2682,32 @@
}
void updateRulesForAppIdleUL() {
- final SparseIntArray uidRules = mUidFirewallStandbyRules;
- uidRules.clear();
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "updateRulesForAppIdleUL");
+ try {
+ final SparseIntArray uidRules = mUidFirewallStandbyRules;
+ uidRules.clear();
- // Fully update the app idle firewall chain.
- final List<UserInfo> users = mUserManager.getUsers();
- for (int ui = users.size() - 1; ui >= 0; ui--) {
- UserInfo user = users.get(ui);
- int[] idleUids = mUsageStats.getIdleUidsForUser(user.id);
- for (int uid : idleUids) {
- if (!mPowerSaveTempWhitelistAppIds.get(UserHandle.getAppId(uid), false)) {
- // quick check: if this uid doesn't have INTERNET permission, it
- // doesn't have network access anyway, so it is a waste to mess
- // with it here.
- if (hasInternetPermissions(uid)) {
- uidRules.put(uid, FIREWALL_RULE_DENY);
+ // Fully update the app idle firewall chain.
+ final List<UserInfo> users = mUserManager.getUsers();
+ for (int ui = users.size() - 1; ui >= 0; ui--) {
+ UserInfo user = users.get(ui);
+ int[] idleUids = mUsageStats.getIdleUidsForUser(user.id);
+ for (int uid : idleUids) {
+ if (!mPowerSaveTempWhitelistAppIds.get(UserHandle.getAppId(uid), false)) {
+ // quick check: if this uid doesn't have INTERNET permission, it
+ // doesn't have network access anyway, so it is a waste to mess
+ // with it here.
+ if (hasInternetPermissions(uid)) {
+ uidRules.put(uid, FIREWALL_RULE_DENY);
+ }
}
}
}
- }
- setUidFirewallRules(FIREWALL_CHAIN_STANDBY, uidRules);
+ setUidFirewallRulesAsync(FIREWALL_CHAIN_STANDBY, uidRules, CHAIN_TOGGLE_NONE);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
+ }
}
void updateRuleForAppIdleUL(int uid) {
@@ -2740,33 +2732,41 @@
* {@link #mRestrictPower}, or {@link #mDeviceIdleMode} value.
*/
private void updateRulesForGlobalChangeAL(boolean restrictedNetworksChanged) {
- long start;
- if (LOGD) start = System.currentTimeMillis();
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "updateRulesForGlobalChangeAL");
+ try {
+ updateRulesForAppIdleUL();
+ updateRulesForRestrictPowerUL();
+ updateRulesForRestrictBackgroundUL();
- updateRulesForRestrictPowerUL();
- updateRulesForRestrictBackgroundUL();
-
- // If the set of restricted networks may have changed, re-evaluate those.
- if (restrictedNetworksChanged) {
- normalizePoliciesNL();
- updateNetworkRulesNL();
- }
- if (LOGD) {
- final long delta = System.currentTimeMillis() - start;
- Slog.d(TAG, "updateRulesForGlobalChangeAL(" + restrictedNetworksChanged + ") took "
- + delta + "ms");
+ // If the set of restricted networks may have changed, re-evaluate those.
+ if (restrictedNetworksChanged) {
+ normalizePoliciesNL();
+ updateNetworkRulesNL();
+ }
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
}
}
+ // TODO: rename / document to make it clear these are global (not app-specific) rules
private void updateRulesForRestrictPowerUL() {
- updateRulesForDeviceIdleUL();
- updateRulesForAppIdleUL();
- updateRulesForPowerSaveUL();
- updateRulesForAllAppsUL(TYPE_RESTRICT_POWER);
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "updateRulesForRestrictPowerUL");
+ try {
+ updateRulesForDeviceIdleUL();
+ updateRulesForPowerSaveUL();
+ updateRulesForAllAppsUL(TYPE_RESTRICT_POWER);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
+ }
}
private void updateRulesForRestrictBackgroundUL() {
- updateRulesForAllAppsUL(TYPE_RESTRICT_BACKGROUND);
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "updateRulesForRestrictBackgroundUL");
+ try {
+ updateRulesForAllAppsUL(TYPE_RESTRICT_BACKGROUND);
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
+ }
}
private static final int TYPE_RESTRICT_BACKGROUND = 1;
@@ -2781,33 +2781,42 @@
// TODO: refactor / consolidate all those updateXyz methods, there are way too many of them...
private void updateRulesForAllAppsUL(@RestrictType int type) {
- final PackageManager pm = mContext.getPackageManager();
+ if (Trace.isTagEnabled(Trace.TRACE_TAG_NETWORK)) {
+ Trace.traceBegin(Trace.TRACE_TAG_NETWORK, "updateRulesForRestrictPowerUL-" + type);
+ }
+ try {
+ final PackageManager pm = mContext.getPackageManager();
- // update rules for all installed applications
- final List<UserInfo> users = mUserManager.getUsers();
- final List<ApplicationInfo> apps = pm.getInstalledApplications(
- PackageManager.MATCH_UNINSTALLED_PACKAGES | PackageManager.MATCH_DISABLED_COMPONENTS
- | PackageManager.MATCH_DIRECT_BOOT_AWARE
- | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
+ // update rules for all installed applications
+ final List<UserInfo> users = mUserManager.getUsers();
+ final List<ApplicationInfo> apps = pm.getInstalledApplications(
+ PackageManager.MATCH_UNINSTALLED_PACKAGES | PackageManager.MATCH_DISABLED_COMPONENTS
+ | PackageManager.MATCH_DIRECT_BOOT_AWARE
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE);
- final int usersSize = users.size();
- final int appsSize = apps.size();
- for (int i = 0; i < usersSize; i++) {
- final UserInfo user = users.get(i);
- for (int j = 0; j < appsSize; j++) {
- final ApplicationInfo app = apps.get(j);
- final int uid = UserHandle.getUid(user.id, app.uid);
- switch (type) {
- case TYPE_RESTRICT_BACKGROUND:
- updateRulesForDataUsageRestrictionsUL(uid);
- break;
- case TYPE_RESTRICT_POWER:
- updateRulesForPowerRestrictionsUL(uid);
- break;
- default:
- Slog.w(TAG, "Invalid type for updateRulesForAllApps: " + type);
+ final int usersSize = users.size();
+ final int appsSize = apps.size();
+ for (int i = 0; i < usersSize; i++) {
+ final UserInfo user = users.get(i);
+ for (int j = 0; j < appsSize; j++) {
+ final ApplicationInfo app = apps.get(j);
+ final int uid = UserHandle.getUid(user.id, app.uid);
+ switch (type) {
+ case TYPE_RESTRICT_BACKGROUND:
+ updateRulesForDataUsageRestrictionsUL(uid);
+ break;
+ case TYPE_RESTRICT_POWER:
+ updateRulesForPowerRestrictionsUL(uid);
+ break;
+ default:
+ Slog.w(TAG, "Invalid type for updateRulesForAllApps: " + type);
+ }
}
}
+ } finally {
+ if (Trace.isTagEnabled(Trace.TRACE_TAG_NETWORK)) {
+ Trace.traceEnd(Trace.TRACE_TAG_NETWORK);
+ }
}
}
@@ -2995,12 +3004,8 @@
mUidRules.put(uid, newUidRules);
}
- boolean changed = false;
-
// Second step: apply bw changes based on change of state.
if (newRule != oldRule) {
- changed = true;
-
if ((newRule & RULE_TEMPORARY_ALLOW_METERED) != 0) {
// Temporarily whitelist foreground app, removing from blacklist if necessary
// (since bw_penalty_box prevails over bw_happy_box).
@@ -3080,7 +3085,6 @@
final boolean isIdle = isUidIdle(uid);
final boolean restrictMode = isIdle || mRestrictPower || mDeviceIdleMode;
- final int uidPolicy = mUidPolicy.get(uid, POLICY_NONE);
final int oldUidRules = mUidRules.get(uid, RULE_NONE);
final boolean isForeground = isUidForegroundOnRestrictPowerUL(uid);
@@ -3103,7 +3107,7 @@
final int newUidRules = (oldUidRules & MASK_METERED_NETWORKS) | newRule;
if (LOGV) {
- Log.v(TAG, "updateRulesForNonMeteredNetworksUL(" + uid + ")"
+ Log.v(TAG, "updateRulesForPowerRestrictionsUL(" + uid + ")"
+ ", isIdle: " + isIdle
+ ", mRestrictPower: " + mRestrictPower
+ ", mDeviceIdleMode: " + mDeviceIdleMode
@@ -3345,10 +3349,6 @@
}
return true;
}
- case MSG_SCREEN_ON_CHANGED: {
- updateScreenOn();
- return true;
- }
case MSG_UPDATE_INTERFACE_QUOTA: {
removeInterfaceQuota((String) msg.obj);
// int params need to be stitched back into a long
@@ -3360,6 +3360,18 @@
removeInterfaceQuota((String) msg.obj);
return true;
}
+ case MSG_SET_FIREWALL_RULES: {
+ final int chain = msg.arg1;
+ final int toggle = msg.arg2;
+ final SparseIntArray uidRules = (SparseIntArray) msg.obj;
+ if (uidRules != null) {
+ setUidFirewallRules(chain, uidRules);
+ }
+ if (toggle != CHAIN_TOGGLE_NONE) {
+ enableFirewallChainUL(chain, toggle == CHAIN_TOGGLE_ENABLE);
+ }
+ return true;
+ }
default: {
return false;
}
@@ -3409,6 +3421,31 @@
}
}
+ private static final int CHAIN_TOGGLE_NONE = 0;
+ private static final int CHAIN_TOGGLE_ENABLE = 1;
+ private static final int CHAIN_TOGGLE_DISABLE = 2;
+ @Retention(RetentionPolicy.SOURCE)
+ @IntDef(flag = false, value = {
+ CHAIN_TOGGLE_NONE,
+ CHAIN_TOGGLE_ENABLE,
+ CHAIN_TOGGLE_DISABLE
+ })
+ public @interface ChainToggleType {
+ }
+
+ /**
+ * Calls {@link #setUidFirewallRules(int, SparseIntArray)} and
+ * {@link #enableFirewallChainUL(int, boolean)} asynchronously.
+ *
+ * @param chain firewall chain.
+ * @param uidRules new UID rules; if {@code null}, only toggles chain state.
+ * @param toggle whether the chain should be enabled, disabled, or not changed.
+ */
+ private void setUidFirewallRulesAsync(int chain, @Nullable SparseIntArray uidRules,
+ @ChainToggleType int toggle) {
+ mHandler.obtainMessage(MSG_SET_FIREWALL_RULES, chain, toggle, uidRules).sendToTarget();
+ }
+
/**
* Set uid rules on a particular firewall chain. This is going to synchronize the rules given
* here to netd. It will clean up dead rules and make sure the target chain only contains rules
@@ -3518,19 +3555,19 @@
return intent;
}
- private static Intent buildNetworkOverLimitIntent(NetworkTemplate template) {
+ private static Intent buildNetworkOverLimitIntent(Resources res, NetworkTemplate template) {
final Intent intent = new Intent();
- intent.setComponent(new ComponentName(
- "com.android.systemui", "com.android.systemui.net.NetworkOverLimitActivity"));
+ intent.setComponent(ComponentName.unflattenFromString(
+ res.getString(R.string.config_networkOverLimitComponent)));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(EXTRA_NETWORK_TEMPLATE, template);
return intent;
}
- private static Intent buildViewDataUsageIntent(NetworkTemplate template) {
+ private static Intent buildViewDataUsageIntent(Resources res, NetworkTemplate template) {
final Intent intent = new Intent();
- intent.setComponent(new ComponentName(
- "com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity"));
+ intent.setComponent(ComponentName.unflattenFromString(
+ res.getString(R.string.config_dataUsageSummaryComponent)));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.putExtra(EXTRA_NETWORK_TEMPLATE, template);
return intent;
diff --git a/services/core/java/com/android/server/notification/NotificationManagerService.java b/services/core/java/com/android/server/notification/NotificationManagerService.java
index bb55240..eb85f19 100644
--- a/services/core/java/com/android/server/notification/NotificationManagerService.java
+++ b/services/core/java/com/android/server/notification/NotificationManagerService.java
@@ -58,7 +58,6 @@
import android.app.NotificationManager;
import android.app.NotificationManager.Policy;
import android.app.PendingIntent;
-import android.app.RemoteInput;
import android.app.StatusBarManager;
import android.app.backup.BackupManager;
import android.app.usage.UsageEvents;
@@ -93,7 +92,6 @@
import android.os.IInterface;
import android.os.Looper;
import android.os.Message;
-import android.os.Parcelable;
import android.os.Process;
import android.os.RemoteException;
import android.os.SystemClock;
@@ -122,6 +120,8 @@
import android.util.Slog;
import android.util.SparseArray;
import android.util.Xml;
+import android.view.WindowManager;
+import android.view.WindowManagerInternal;
import android.view.accessibility.AccessibilityEvent;
import android.view.accessibility.AccessibilityManager;
import android.widget.Toast;
@@ -138,6 +138,7 @@
import com.android.server.lights.Light;
import com.android.server.lights.LightsManager;
import com.android.server.notification.ManagedServices.ManagedServiceInfo;
+import com.android.server.policy.PhoneWindowManager;
import com.android.server.statusbar.StatusBarManagerInternal;
import com.android.server.vr.VrManagerInternal;
import com.android.server.notification.ManagedServices.UserProfiles;
@@ -193,7 +194,7 @@
private static final int MESSAGE_RECONSIDER_RANKING = 1000;
private static final int MESSAGE_RANKING_SORT = 1001;
- static final int LONG_DELAY = 3500; // 3.5 seconds
+ static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT;
static final int SHORT_DELAY = 2000; // 2 seconds
static final long[] DEFAULT_VIBRATE_PATTERN = {0, 250, 250, 250};
@@ -232,6 +233,7 @@
@Nullable StatusBarManagerInternal mStatusBar;
Vibrator mVibrator;
private VrManagerInternal mVrManagerInternal;
+ private WindowManagerInternal mWindowManagerInternal;
final IBinder mForegroundToken = new Binder();
private Handler mHandler;
@@ -452,13 +454,15 @@
final String pkg;
final ITransientNotification callback;
int duration;
+ Binder token;
- ToastRecord(int pid, String pkg, ITransientNotification callback, int duration)
- {
+ ToastRecord(int pid, String pkg, ITransientNotification callback, int duration,
+ Binder token) {
this.pid = pid;
this.pkg = pkg;
this.callback = callback;
this.duration = duration;
+ this.token = token;
}
void update(int duration) {
@@ -1125,6 +1129,7 @@
mAudioManager = (AudioManager) getContext().getSystemService(Context.AUDIO_SERVICE);
mAudioManagerInternal = getLocalService(AudioManagerInternal.class);
mVrManagerInternal = getLocalService(VrManagerInternal.class);
+ mWindowManagerInternal = LocalServices.getService(WindowManagerInternal.class);
mZenModeHelper.onSystemReady();
} else if (phase == SystemService.PHASE_THIRD_PARTY_APPS_CAN_START) {
// This observer will force an update when observe is called, causing us to
@@ -1325,10 +1330,13 @@
}
}
- record = new ToastRecord(callingPid, pkg, callback, duration);
+ Binder token = new Binder();
+ mWindowManagerInternal.addWindowToken(token,
+ WindowManager.LayoutParams.TYPE_TOAST);
+ record = new ToastRecord(callingPid, pkg, callback, duration, token);
mToastQueue.add(record);
index = mToastQueue.size() - 1;
- keepProcessAliveLocked(callingPid);
+ keepProcessAliveIfNeededLocked(callingPid);
}
// If it's at index 0, it's the current toast. It doesn't matter if it's
// new or just been updated. Call back and tell it to show itself.
@@ -2991,7 +2999,7 @@
while (record != null) {
if (DBG) Slog.d(TAG, "Show pkg=" + record.pkg + " callback=" + record.callback);
try {
- record.callback.show();
+ record.callback.show(record.token);
scheduleTimeoutLocked(record);
return;
} catch (RemoteException e) {
@@ -3002,7 +3010,7 @@
if (index >= 0) {
mToastQueue.remove(index);
}
- keepProcessAliveLocked(record.pid);
+ keepProcessAliveIfNeededLocked(record.pid);
if (mToastQueue.size() > 0) {
record = mToastQueue.get(0);
} else {
@@ -3022,8 +3030,11 @@
// don't worry about this, we're about to remove it from
// the list anyway
}
- mToastQueue.remove(index);
- keepProcessAliveLocked(record.pid);
+
+ ToastRecord lastToast = mToastQueue.remove(index);
+ mWindowManagerInternal.removeWindowToken(lastToast.token, true);
+
+ keepProcessAliveIfNeededLocked(record.pid);
if (mToastQueue.size() > 0) {
// Show the next one. If the callback fails, this will remove
// it from the list, so don't assume that the list hasn't changed
@@ -3067,7 +3078,7 @@
}
// lock on mToastQueue
- void keepProcessAliveLocked(int pid)
+ void keepProcessAliveIfNeededLocked(int pid)
{
int toastCount = 0; // toasts from this pid
ArrayList<ToastRecord> list = mToastQueue;
diff --git a/services/core/java/com/android/server/os/SchedulingPolicyService.java b/services/core/java/com/android/server/os/SchedulingPolicyService.java
index f98012b..62c9f4c 100644
--- a/services/core/java/com/android/server/os/SchedulingPolicyService.java
+++ b/services/core/java/com/android/server/os/SchedulingPolicyService.java
@@ -55,7 +55,8 @@
Process.setThreadGroup(tid, Binder.getCallingPid() == pid ?
Process.THREAD_GROUP_AUDIO_SYS : Process.THREAD_GROUP_AUDIO_APP);
// must be in this order or it fails the schedulability constraint
- Process.setThreadScheduler(tid, Process.SCHED_FIFO, prio);
+ Process.setThreadScheduler(tid, Process.SCHED_FIFO | Process.SCHED_RESET_ON_FORK,
+ prio);
} catch (RuntimeException e) {
return PackageManager.PERMISSION_DENIED;
}
diff --git a/services/core/java/com/android/server/pm/BackgroundDexOptService.java b/services/core/java/com/android/server/pm/BackgroundDexOptService.java
index 87f0581..cec1058 100644
--- a/services/core/java/com/android/server/pm/BackgroundDexOptService.java
+++ b/services/core/java/com/android/server/pm/BackgroundDexOptService.java
@@ -28,10 +28,13 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.os.BatteryManager;
+import android.os.Environment;
import android.os.ServiceManager;
+import android.os.storage.StorageManager;
import android.util.ArraySet;
import android.util.Log;
+import java.io.File;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.TimeUnit;
@@ -66,6 +69,8 @@
*/
final AtomicBoolean mExitPostBootUpdate = new AtomicBoolean(false);
+ private final File dataDir = Environment.getDataDirectory();
+
public static void schedule(Context context) {
JobScheduler js = (JobScheduler) context.getSystemService(Context.JOB_SCHEDULER_SERVICE);
@@ -113,6 +118,16 @@
return (100 * level / scale);
}
+ private long getLowStorageThreshold() {
+ @SuppressWarnings("deprecation")
+ final long lowThreshold = StorageManager.from(this).getStorageLowBytes(dataDir);
+ if (lowThreshold == 0) {
+ Log.e(TAG, "Invalid low storage threshold");
+ }
+
+ return lowThreshold;
+ }
+
private boolean runPostBootUpdate(final JobParameters jobParams,
final PackageManagerService pm, final ArraySet<String> pkgs) {
if (mExitPostBootUpdate.get()) {
@@ -124,6 +139,8 @@
final int lowBatteryThreshold = getResources().getInteger(
com.android.internal.R.integer.config_lowBatteryWarningLevel);
+ final long lowThreshold = getLowStorageThreshold();
+
mAbortPostBootUpdate.set(false);
new Thread("BackgroundDexOptService_PostBootUpdate") {
@Override
@@ -141,6 +158,14 @@
// Rather bail than completely drain the battery.
break;
}
+ long usableSpace = dataDir.getUsableSpace();
+ if (usableSpace < lowThreshold) {
+ // Rather bail than completely fill up the disk.
+ Log.w(TAG, "Aborting background dex opt job due to low storage: " +
+ usableSpace);
+ break;
+ }
+
if (DEBUG_DEXOPT) {
Log.i(TAG, "Updating package " + pkg);
}
@@ -171,6 +196,9 @@
mExitPostBootUpdate.set(true);
mAbortIdleOptimization.set(false);
+
+ final long lowThreshold = getLowStorageThreshold();
+
new Thread("BackgroundDexOptService_IdleOptimization") {
@Override
public void run() {
@@ -183,6 +211,15 @@
// Skip previously failing package
continue;
}
+
+ long usableSpace = dataDir.getUsableSpace();
+ if (usableSpace < lowThreshold) {
+ // Rather bail than completely fill up the disk.
+ Log.w(TAG, "Aborting background dex opt job due to low storage: " +
+ usableSpace);
+ break;
+ }
+
// Conservatively add package to the list of failing ones in case performDexOpt
// never returns.
synchronized (sFailedPackageNames) {
@@ -213,6 +250,9 @@
Log.i(TAG, "onStartJob");
}
+ // NOTE: PackageManagerService.isStorageLow uses a different set of criteria from
+ // the checks above. This check is not "live" - the value is determined by a background
+ // restart with a period of ~1 minute.
PackageManagerService pm = (PackageManagerService)ServiceManager.getService("package");
if (pm.isStorageLow()) {
if (DEBUG_DEXOPT) {
diff --git a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
index 9c9e97e..8e44570 100644
--- a/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
+++ b/services/core/java/com/android/server/pm/DefaultPermissionGrantPolicy.java
@@ -17,6 +17,7 @@
package com.android.server.pm;
import android.Manifest;
+import android.annotation.NonNull;
import android.app.DownloadManager;
import android.app.admin.DevicePolicyManager;
import android.content.Intent;
@@ -30,6 +31,9 @@
import android.content.pm.ResolveInfo;
import android.net.Uri;
import android.os.Build;
+import android.os.Environment;
+import android.os.Handler;
+import android.os.Message;
import android.os.UserHandle;
import android.os.storage.StorageManager;
import android.print.PrintManager;
@@ -39,12 +43,23 @@
import android.provider.Telephony.Sms.Intents;
import android.telephony.TelephonyManager;
import android.security.Credentials;
+import android.util.ArrayMap;
import android.util.ArraySet;
import android.util.Log;
+import android.util.Slog;
+import android.util.Xml;
+import com.android.internal.util.XmlUtils;
+import org.xmlpull.v1.XmlPullParser;
+import org.xmlpull.v1.XmlPullParserException;
+import java.io.BufferedInputStream;
import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
+import java.util.Map;
import java.util.Set;
import static android.os.Process.FIRST_APPLICATION_UID;
@@ -65,6 +80,13 @@
private static final String AUDIO_MIME_TYPE = "audio/mpeg";
+ private static final String TAG_EXCEPTIONS = "exceptions";
+ private static final String TAG_EXCEPTION = "exception";
+ private static final String TAG_PERMISSION = "permission";
+ private static final String ATTR_PACKAGE = "package";
+ private static final String ATTR_NAME = "name";
+ private static final String ATTR_FIXED = "fixed";
+
private static final Set<String> PHONE_PERMISSIONS = new ArraySet<>();
static {
PHONE_PERMISSIONS.add(Manifest.permission.READ_PHONE_STATE);
@@ -126,7 +148,13 @@
STORAGE_PERMISSIONS.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
+ private static final int MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS = 1;
+
+ private static final String ACTION_TWINNING =
+ "com.google.android.clockwork.intent.TWINNING_SETTINGS";
+
private final PackageManagerService mService;
+ private final Handler mHandler;
private PackagesProvider mLocationPackagesProvider;
private PackagesProvider mVoiceInteractionPackagesProvider;
@@ -135,8 +163,22 @@
private PackagesProvider mSimCallManagerPackagesProvider;
private SyncAdapterPackagesProvider mSyncAdapterPackagesProvider;
+ private ArrayMap<String, List<DefaultPermissionGrant>> mGrantExceptions;
+
public DefaultPermissionGrantPolicy(PackageManagerService service) {
mService = service;
+ mHandler = new Handler(mService.mHandlerThread.getLooper()) {
+ @Override
+ public void handleMessage(Message msg) {
+ if (msg.what == MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS) {
+ synchronized (mService.mPackages) {
+ if (mGrantExceptions == null) {
+ mGrantExceptions = readDefaultPermissionExceptionsLPw();
+ }
+ }
+ }
+ }
+ };
}
public void setLocationPackagesProviderLPw(PackagesProvider provider) {
@@ -166,6 +208,11 @@
public void grantDefaultPermissions(int userId) {
grantPermissionsToSysComponentsAndPrivApps(userId);
grantDefaultSystemHandlerPermissions(userId);
+ grantDefaultPermissionExceptions(userId);
+ }
+
+ public void scheduleReadDefaultPermissionExceptions() {
+ mHandler.sendEmptyMessage(MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS);
}
private void grantPermissionsToSysComponentsAndPrivApps(int userId) {
@@ -559,8 +606,9 @@
grantRuntimePermissionsLPw(musicPackage, STORAGE_PERMISSIONS, userId);
}
- // Android Wear Home
+ // Android Wear
if (mService.hasSystemFeature(PackageManager.FEATURE_WATCH, 0)) {
+ // Android Wear Home
Intent homeIntent = new Intent(Intent.ACTION_MAIN);
homeIntent.addCategory(Intent.CATEGORY_HOME_MAIN);
@@ -577,6 +625,17 @@
grantRuntimePermissionsLPw(wearHomePackage, LOCATION_PERMISSIONS, false,
userId);
}
+
+ // Android Wear Twinning
+ Intent twinningIntent = new Intent(ACTION_TWINNING);
+ PackageParser.Package twinningPackage = getDefaultSystemHandlerActivityPackageLPr(
+ twinningIntent, userId);
+
+ if (twinningPackage != null
+ && doesPackageSupportRuntimePermissions(twinningPackage)) {
+ grantRuntimePermissionsLPw(twinningPackage, PHONE_PERMISSIONS, false, userId);
+ grantRuntimePermissionsLPw(twinningPackage, SMS_PERMISSIONS, false, userId);
+ }
}
// Print Spooler
@@ -916,7 +975,175 @@
pkg.mSignatures) == PackageManager.SIGNATURE_MATCH;
}
+ private void grantDefaultPermissionExceptions(int userId) {
+ synchronized (mService.mPackages) {
+ mHandler.removeMessages(MSG_READ_DEFAULT_PERMISSION_EXCEPTIONS);
+
+ if (mGrantExceptions == null) {
+ mGrantExceptions = readDefaultPermissionExceptionsLPw();
+ }
+
+ // mGrantExceptions is null only before the first read and then
+ // it serves as a cache of the default grants that should be
+ // performed for every user. If there is an entry then the app
+ // is on the system image and supports runtime permissions.
+ Set<String> permissions = null;
+ final int exceptionCount = mGrantExceptions.size();
+ for (int i = 0; i < exceptionCount; i++) {
+ String packageName = mGrantExceptions.keyAt(i);
+ PackageParser.Package pkg = getSystemPackageLPr(packageName);
+ List<DefaultPermissionGrant> permissionGrants = mGrantExceptions.valueAt(i);
+ final int permissionGrantCount = permissionGrants.size();
+ for (int j = 0; j < permissionGrantCount; j++) {
+ DefaultPermissionGrant permissionGrant = permissionGrants.get(j);
+ if (permissions == null) {
+ permissions = new ArraySet<>();
+ } else {
+ permissions.clear();
+ }
+ permissions.add(permissionGrant.name);
+ grantRuntimePermissionsLPw(pkg, permissions, false,
+ permissionGrant.fixed, userId);
+ }
+ }
+ }
+ }
+
+ private @NonNull ArrayMap<String, List<DefaultPermissionGrant>>
+ readDefaultPermissionExceptionsLPw() {
+ File dir = new File(Environment.getRootDirectory(), "etc/default-permissions");
+ if (!dir.exists() || !dir.isDirectory() || !dir.canRead()) {
+ return new ArrayMap<>(0);
+ }
+
+ File[] files = dir.listFiles();
+ if (files == null) {
+ return new ArrayMap<>(0);
+ }
+
+ ArrayMap<String, List<DefaultPermissionGrant>> grantExceptions = new ArrayMap<>();
+
+ // Iterate over the files in the directory and scan .xml files
+ for (File file : files) {
+ if (!file.getPath().endsWith(".xml")) {
+ Slog.i(TAG, "Non-xml file " + file + " in " + dir + " directory, ignoring");
+ continue;
+ }
+ if (!file.canRead()) {
+ Slog.w(TAG, "Default permissions file " + file + " cannot be read");
+ continue;
+ }
+ try (
+ InputStream str = new BufferedInputStream(new FileInputStream(file))
+ ) {
+ XmlPullParser parser = Xml.newPullParser();
+ parser.setInput(str, null);
+ parse(parser, grantExceptions);
+ } catch (XmlPullParserException | IOException e) {
+ Slog.w(TAG, "Error reading default permissions file " + file, e);
+ }
+ }
+
+ return grantExceptions;
+ }
+
+ private void parse(XmlPullParser parser, Map<String, List<DefaultPermissionGrant>>
+ outGrantExceptions) throws IOException, XmlPullParserException {
+ final int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+ continue;
+ }
+ if (TAG_EXCEPTIONS.equals(parser.getName())) {
+ parseExceptions(parser, outGrantExceptions);
+ } else {
+ Log.e(TAG, "Unknown tag " + parser.getName());
+ }
+ }
+ }
+
+ private void parseExceptions(XmlPullParser parser, Map<String, List<DefaultPermissionGrant>>
+ outGrantExceptions) throws IOException, XmlPullParserException {
+ final int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+ continue;
+ }
+ if (TAG_EXCEPTION.equals(parser.getName())) {
+ String packageName = parser.getAttributeValue(null, ATTR_PACKAGE);
+
+ List<DefaultPermissionGrant> packageExceptions =
+ outGrantExceptions.get(packageName);
+ if (packageExceptions == null) {
+ // The package must be on the system image
+ PackageParser.Package pkg = getSystemPackageLPr(packageName);
+ if (pkg == null) {
+ Log.w(TAG, "Unknown package:" + packageName);
+ XmlUtils.skipCurrentTag(parser);
+ return;
+ }
+
+ // The package must support runtime permissions
+ if (!doesPackageSupportRuntimePermissions(pkg)) {
+ Log.w(TAG, "Skipping non supporting runtime permissions package:"
+ + packageName);
+ XmlUtils.skipCurrentTag(parser);
+ return;
+ }
+ packageExceptions = new ArrayList<>();
+ outGrantExceptions.put(packageName, packageExceptions);
+ }
+
+ parsePermission(parser, packageExceptions);
+ } else {
+ Log.e(TAG, "Unknown tag " + parser.getName() + "under <exceptions>");
+ }
+ }
+ }
+
+ private void parsePermission(XmlPullParser parser, List<DefaultPermissionGrant>
+ outPackageExceptions) throws IOException, XmlPullParserException {
+ final int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
+ continue;
+ }
+
+ if (TAG_PERMISSION.contains(parser.getName())) {
+ String name = parser.getAttributeValue(null, ATTR_NAME);
+ if (name == null) {
+ Log.w(TAG, "Mandatory name attribute missing for permission tag");
+ XmlUtils.skipCurrentTag(parser);
+ continue;
+ }
+
+ final boolean fixed = XmlUtils.readBooleanAttribute(parser, ATTR_FIXED);
+
+ DefaultPermissionGrant exception = new DefaultPermissionGrant(name, fixed);
+ outPackageExceptions.add(exception);
+ } else {
+ Log.e(TAG, "Unknown tag " + parser.getName() + "under <exception>");
+ }
+ }
+ }
+
private static boolean doesPackageSupportRuntimePermissions(PackageParser.Package pkg) {
return pkg.applicationInfo.targetSdkVersion > Build.VERSION_CODES.LOLLIPOP_MR1;
}
+
+ private static final class DefaultPermissionGrant {
+ final String name;
+ final boolean fixed;
+
+ public DefaultPermissionGrant(String name, boolean fixed) {
+ this.name = name;
+ this.fixed = fixed;
+ }
+ }
}
diff --git a/services/core/java/com/android/server/pm/OtaDexoptService.java b/services/core/java/com/android/server/pm/OtaDexoptService.java
index 836b588..bff6d2d 100644
--- a/services/core/java/com/android/server/pm/OtaDexoptService.java
+++ b/services/core/java/com/android/server/pm/OtaDexoptService.java
@@ -93,38 +93,39 @@
if (mDexoptCommands != null) {
throw new IllegalStateException("already called prepare()");
}
+ final List<PackageParser.Package> important;
+ final List<PackageParser.Package> others;
synchronized (mPackageManagerService.mPackages) {
// Important: the packages we need to run with ab-ota compiler-reason.
- List<PackageParser.Package> important = PackageManagerServiceUtils.getPackagesForDexopt(
+ important = PackageManagerServiceUtils.getPackagesForDexopt(
mPackageManagerService.mPackages.values(), mPackageManagerService);
// Others: we should optimize this with the (first-)boot compiler-reason.
- List<PackageParser.Package> others =
- new ArrayList<>(mPackageManagerService.mPackages.values());
+ others = new ArrayList<>(mPackageManagerService.mPackages.values());
others.removeAll(important);
// Pre-size the array list by over-allocating by a factor of 1.5.
mDexoptCommands = new ArrayList<>(3 * mPackageManagerService.mPackages.size() / 2);
+ }
- for (PackageParser.Package p : important) {
- // Make sure that core apps are optimized according to their own "reason".
- // If the core apps are not preopted in the B OTA, and REASON_AB_OTA is not speed
- // (by default is speed-profile) they will be interepreted/JITed. This in itself is
- // not a problem as we will end up doing profile guided compilation. However, some
- // core apps may be loaded by system server which doesn't JIT and we need to make
- // sure we don't interpret-only
- int compilationReason = p.coreApp
- ? PackageManagerService.REASON_CORE_APP
- : PackageManagerService.REASON_AB_OTA;
- mDexoptCommands.addAll(generatePackageDexopts(p, compilationReason));
+ for (PackageParser.Package p : important) {
+ // Make sure that core apps are optimized according to their own "reason".
+ // If the core apps are not preopted in the B OTA, and REASON_AB_OTA is not speed
+ // (by default is speed-profile) they will be interepreted/JITed. This in itself is
+ // not a problem as we will end up doing profile guided compilation. However, some
+ // core apps may be loaded by system server which doesn't JIT and we need to make
+ // sure we don't interpret-only
+ int compilationReason = p.coreApp
+ ? PackageManagerService.REASON_CORE_APP
+ : PackageManagerService.REASON_AB_OTA;
+ mDexoptCommands.addAll(generatePackageDexopts(p, compilationReason));
+ }
+ for (PackageParser.Package p : others) {
+ // We assume here that there are no core apps left.
+ if (p.coreApp) {
+ throw new IllegalStateException("Found a core app that's not important");
}
- for (PackageParser.Package p : others) {
- // We assume here that there are no core apps left.
- if (p.coreApp) {
- throw new IllegalStateException("Found a core app that's not important");
- }
- mDexoptCommands.addAll(
- generatePackageDexopts(p, PackageManagerService.REASON_FIRST_BOOT));
- }
+ mDexoptCommands.addAll(
+ generatePackageDexopts(p, PackageManagerService.REASON_FIRST_BOOT));
}
completeSize = mDexoptCommands.size();
}
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index 6a56fa6..d25abbf 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -870,13 +870,8 @@
IntentSender statusReceiver, int userId) {
final int callingUid = Binder.getCallingUid();
mPm.enforceCrossUserPermission(callingUid, userId, true, true, "uninstall");
- boolean allowSilentUninstall = true;
if ((callingUid != Process.SHELL_UID) && (callingUid != Process.ROOT_UID)) {
mAppOps.checkPackage(callingUid, callerPackageName);
- final String installerPackageName = mPm.getInstallerPackageName(packageName);
- allowSilentUninstall = mPm.isOrphaned(packageName) ||
- (installerPackageName != null
- && installerPackageName.equals(callerPackageName));
}
// Check whether the caller is device owner, in which case we do it silently.
@@ -887,8 +882,8 @@
final PackageDeleteObserverAdapter adapter = new PackageDeleteObserverAdapter(mContext,
statusReceiver, packageName, isDeviceOwner, userId);
- if (allowSilentUninstall && mContext.checkCallingOrSelfPermission(
- android.Manifest.permission.DELETE_PACKAGES) == PackageManager.PERMISSION_GRANTED) {
+ if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DELETE_PACKAGES)
+ == PackageManager.PERMISSION_GRANTED) {
// Sweet, call straight through!
mPm.deletePackage(packageName, adapter.getBinder(), userId, flags);
} else if (isDeviceOwner) {
diff --git a/services/core/java/com/android/server/pm/PackageInstallerSession.java b/services/core/java/com/android/server/pm/PackageInstallerSession.java
index 6cdc40f..0b8a347 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerSession.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerSession.java
@@ -44,6 +44,7 @@
import android.content.pm.PackageParser.PackageLite;
import android.content.pm.PackageParser.PackageParserException;
import android.content.pm.Signature;
+import android.os.Binder;
import android.os.Bundle;
import android.os.FileBridge;
import android.os.FileUtils;
@@ -109,6 +110,7 @@
final int installerUid;
final SessionParams params;
final long createdMillis;
+ final int defaultContainerGid;
/** Staging location where client data is written. */
final File stageDir;
@@ -199,13 +201,19 @@
private final Handler.Callback mHandlerCallback = new Handler.Callback() {
@Override
public boolean handleMessage(Message msg) {
+ // Cache package manager data without the lock held
+ final PackageInfo pkgInfo = mPm.getPackageInfo(
+ params.appPackageName, PackageManager.GET_SIGNATURES /*flags*/, userId);
+ final ApplicationInfo appInfo = mPm.getApplicationInfo(
+ params.appPackageName, 0, userId);
+
synchronized (mLock) {
if (msg.obj != null) {
mRemoteObserver = (IPackageInstallObserver2) msg.obj;
}
try {
- commitLocked();
+ commitLocked(pkgInfo, appInfo);
} catch (PackageManagerException e) {
final String completeMsg = ExceptionUtils.getCompleteMessage(e);
Slog.e(TAG, "Commit of session " + sessionId + " failed: " + completeMsg);
@@ -264,6 +272,14 @@
} else {
mPermissionsAccepted = false;
}
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ final int uid = mPm.getPackageUid(PackageManagerService.DEFAULT_CONTAINER_PACKAGE,
+ PackageManager.MATCH_SYSTEM_ONLY, UserHandle.USER_SYSTEM);
+ defaultContainerGid = UserHandle.getSharedAppGid(uid);
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
public SessionInfo generateInfo() {
@@ -520,7 +536,8 @@
mHandler.obtainMessage(MSG_COMMIT, adapter.getBinder()).sendToTarget();
}
- private void commitLocked() throws PackageManagerException {
+ private void commitLocked(PackageInfo pkgInfo, ApplicationInfo appInfo)
+ throws PackageManagerException {
if (mDestroyed) {
throw new PackageManagerException(INSTALL_FAILED_INTERNAL_ERROR, "Session destroyed");
}
@@ -538,7 +555,7 @@
// Verify that stage looks sane with respect to existing application.
// This currently only ensures packageName, versionCode, and certificate
// consistency.
- validateInstallLocked();
+ validateInstallLocked(pkgInfo, appInfo);
Preconditions.checkNotNull(mPackageName);
Preconditions.checkNotNull(mSignatures);
@@ -650,7 +667,8 @@
* Note that upgrade compatibility is still performed by
* {@link PackageManagerService}.
*/
- private void validateInstallLocked() throws PackageManagerException {
+ private void validateInstallLocked(PackageInfo pkgInfo, ApplicationInfo appInfo)
+ throws PackageManagerException {
mPackageName = null;
mVersionCode = -1;
mSignatures = null;
@@ -729,10 +747,8 @@
if (removeSplitList.size() > 0) {
// validate split names marked for removal
- final int flags = mSignatures == null ? PackageManager.GET_SIGNATURES : 0;
- final PackageInfo pkg = mPm.getPackageInfo(params.appPackageName, flags, userId);
for (String splitName : removeSplitList) {
- if (!ArrayUtils.contains(pkg.splitNames, splitName)) {
+ if (!ArrayUtils.contains(pkgInfo.splitNames, splitName)) {
throw new PackageManagerException(INSTALL_FAILED_INVALID_APK,
"Split not found: " + splitName);
}
@@ -740,11 +756,11 @@
// ensure we've got appropriate package name, version code and signatures
if (mPackageName == null) {
- mPackageName = pkg.packageName;
- mVersionCode = pkg.versionCode;
+ mPackageName = pkgInfo.packageName;
+ mVersionCode = pkgInfo.versionCode;
}
if (mSignatures == null) {
- mSignatures = pkg.signatures;
+ mSignatures = pkgInfo.signatures;
}
}
@@ -757,8 +773,7 @@
} else {
// Partial installs must be consistent with existing install
- final ApplicationInfo app = mPm.getApplicationInfo(mPackageName, 0, userId);
- if (app == null) {
+ if (appInfo == null) {
throw new PackageManagerException(INSTALL_FAILED_INVALID_APK,
"Missing existing base package for " + mPackageName);
}
@@ -766,8 +781,8 @@
final PackageLite existing;
final ApkLite existingBase;
try {
- existing = PackageParser.parsePackageLite(new File(app.getCodePath()), 0);
- existingBase = PackageParser.parseApkLite(new File(app.getBaseCodePath()),
+ existing = PackageParser.parsePackageLite(new File(appInfo.getCodePath()), 0);
+ existingBase = PackageParser.parseApkLite(new File(appInfo.getBaseCodePath()),
PackageParser.PARSE_COLLECT_CERTIFICATES);
} catch (PackageParserException e) {
throw PackageManagerException.from(e);
@@ -777,7 +792,7 @@
// Inherit base if not overridden
if (mResolvedBaseFile == null) {
- mResolvedBaseFile = new File(app.getBaseCodePath());
+ mResolvedBaseFile = new File(appInfo.getBaseCodePath());
mResolvedInheritedFiles.add(mResolvedBaseFile);
}
@@ -794,7 +809,7 @@
}
// Inherit compiled oat directory.
- final File packageInstallDir = (new File(app.getBaseCodePath())).getParentFile();
+ final File packageInstallDir = (new File(appInfo.getBaseCodePath())).getParentFile();
mInheritedFilesBase = packageInstallDir;
final File oatDir = new File(packageInstallDir, "oat");
if (oatDir.exists()) {
@@ -822,7 +837,8 @@
}
}
- private void assertApkConsistent(String tag, ApkLite apk) throws PackageManagerException {
+ private void assertApkConsistent(String tag, ApkLite apk)
+ throws PackageManagerException {
if (!mPackageName.equals(apk.packageName)) {
throw new PackageManagerException(INSTALL_FAILED_INVALID_APK, tag + " package "
+ apk.packageName + " inconsistent with " + mPackageName);
@@ -1035,10 +1051,7 @@
"Failed to finalize container " + cid);
}
- final int uid = mPm.getPackageUid(PackageManagerService.DEFAULT_CONTAINER_PACKAGE,
- PackageManager.MATCH_SYSTEM_ONLY, UserHandle.USER_SYSTEM);
- final int gid = UserHandle.getSharedAppGid(uid);
- if (!PackageHelper.fixSdPermissions(cid, gid, null)) {
+ if (!PackageHelper.fixSdPermissions(cid, defaultContainerGid, null)) {
throw new PackageManagerException(INSTALL_FAILED_CONTAINER_ERROR,
"Failed to fix permissions on container " + cid);
}
diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java
index 2ed64f1..419e4ad 100644
--- a/services/core/java/com/android/server/pm/PackageManagerService.java
+++ b/services/core/java/com/android/server/pm/PackageManagerService.java
@@ -35,7 +35,6 @@
import static android.content.pm.PackageManager.INSTALL_EXTERNAL;
import static android.content.pm.PackageManager.INSTALL_FAILED_ALREADY_EXISTS;
import static android.content.pm.PackageManager.INSTALL_FAILED_CONFLICTING_PROVIDER;
-import static android.content.pm.PackageManager.INSTALL_FAILED_DEXOPT;
import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PACKAGE;
import static android.content.pm.PackageManager.INSTALL_FAILED_DUPLICATE_PERMISSION;
import static android.content.pm.PackageManager.INSTALL_FAILED_EPHEMERAL_INVALID;
@@ -101,7 +100,6 @@
import android.Manifest;
import android.annotation.NonNull;
import android.annotation.Nullable;
-import android.annotation.UserIdInt;
import android.app.ActivityManager;
import android.app.ActivityManagerNative;
import android.app.IActivityManager;
@@ -179,6 +177,7 @@
import android.os.Message;
import android.os.Parcel;
import android.os.ParcelFileDescriptor;
+import android.os.PatternMatcher;
import android.os.Process;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
@@ -198,6 +197,7 @@
import android.os.storage.VolumeInfo;
import android.os.storage.VolumeRecord;
import android.provider.Settings.Global;
+import android.provider.Settings.Secure;
import android.security.KeyStore;
import android.security.SystemKeyStore;
import android.system.ErrnoException;
@@ -365,6 +365,7 @@
static final boolean CLEAR_RUNTIME_PERMISSIONS_ON_UPGRADE = false;
+ // STOPSHIP; b/30256615
private static final boolean DISABLE_EPHEMERAL_APPS = !Build.IS_DEBUGGABLE;
private static final int RADIO_UID = Process.PHONE_UID;
@@ -457,6 +458,8 @@
private static final String PACKAGE_MIME_TYPE = "application/vnd.android.package-archive";
+ private static final String PACKAGE_SCHEME = "package";
+
private static final String VENDOR_OVERLAY_DIR = "/vendor/overlay";
private static int DEFAULT_EPHEMERAL_HASH_PREFIX_MASK = 0xFFFFF000;
@@ -533,6 +536,10 @@
final String[] mSeparateProcesses;
final boolean mIsUpgrade;
final boolean mIsPreNUpgrade;
+ final boolean mIsPreNMR1Upgrade;
+
+ @GuardedBy("mPackages")
+ private boolean mDexOptDialogShown;
/** The location for ASEC container files on internal storage. */
final String mAsecInternalPath;
@@ -737,8 +744,7 @@
final SparseArray<IntentFilterVerificationState> mIntentFilterVerificationStates
= new SparseArray<IntentFilterVerificationState>();
- final DefaultPermissionGrantPolicy mDefaultPermissionPolicy =
- new DefaultPermissionGrantPolicy(this);
+ final DefaultPermissionGrantPolicy mDefaultPermissionPolicy;
// List of packages names to keep cached, even if they are uninstalled for all users
private List<String> mKeepUninstalledPackages;
@@ -1120,6 +1126,7 @@
final @Nullable String mRequiredVerifierPackage;
final @NonNull String mRequiredInstallerPackage;
+ final @NonNull String mRequiredUninstallerPackage;
final @Nullable String mSetupWizardPackage;
final @NonNull String mServicesSystemSharedLibraryPackageName;
final @NonNull String mSharedSystemSharedLibraryPackageName;
@@ -2115,6 +2122,8 @@
mProcessLoggingHandler = new ProcessLoggingHandler();
Watchdog.getInstance().addThread(mHandler, WATCHDOG_TIMEOUT);
+ mDefaultPermissionPolicy = new DefaultPermissionGrantPolicy(this);
+
File dataDir = Environment.getDataDirectory();
mAppInstallDir = new File(dataDir, "app");
mAppLib32InstallDir = new File(dataDir, "app-lib");
@@ -2239,6 +2248,8 @@
// as there is no profiling data available.
mIsPreNUpgrade = mIsUpgrade && ver.sdkVersion < Build.VERSION_CODES.N;
+ mIsPreNMR1Upgrade = mIsUpgrade && ver.sdkVersion < Build.VERSION_CODES.N_MR1;
+
// save off the names of pre-existing system packages prior to scanning; we don't
// want to automatically grant runtime permissions for new system apps
if (mPromoteSystemApps) {
@@ -2621,6 +2632,7 @@
if (!mOnlyCore) {
mRequiredVerifierPackage = getRequiredButNotReallyRequiredVerifierLPr();
mRequiredInstallerPackage = getRequiredInstallerLPr();
+ mRequiredUninstallerPackage = getRequiredUninstallerLPr();
mIntentFilterVerifierComponent = getIntentFilterVerifierComponentNameLPr();
mIntentFilterVerifier = new IntentVerifierProxy(mContext,
mIntentFilterVerifierComponent);
@@ -2631,6 +2643,7 @@
} else {
mRequiredVerifierPackage = null;
mRequiredInstallerPackage = null;
+ mRequiredUninstallerPackage = null;
mIntentFilterVerifierComponent = null;
mIntentFilterVerifier = null;
mServicesSystemSharedLibraryPackageName = null;
@@ -2708,10 +2721,11 @@
UserHandle.USER_SYSTEM);
if (matches.size() == 1) {
return matches.get(0).getComponentInfo().packageName;
- } else {
- Log.e(TAG, "There should probably be exactly one verifier; found " + matches);
+ } else if (matches.size() == 0) {
+ Log.e(TAG, "There should probably be a verifier, but, none were found");
return null;
}
+ throw new RuntimeException("There must be exactly one verifier; found " + matches);
}
private @NonNull String getRequiredSharedLibraryLPr(String libraryName) {
@@ -2743,6 +2757,22 @@
}
}
+ private @NonNull String getRequiredUninstallerLPr() {
+ final Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
+ intent.addCategory(Intent.CATEGORY_DEFAULT);
+ intent.setData(Uri.fromParts(PACKAGE_SCHEME, "foo.bar", null));
+
+ final ResolveInfo resolveInfo = resolveIntent(intent, null,
+ MATCH_SYSTEM_ONLY | MATCH_DIRECT_BOOT_AWARE | MATCH_DIRECT_BOOT_UNAWARE,
+ UserHandle.USER_SYSTEM);
+ if (resolveInfo == null ||
+ mResolveActivity.name.equals(resolveInfo.getComponentInfo().name)) {
+ throw new RuntimeException("There must be exactly one uninstaller; found "
+ + resolveInfo);
+ }
+ return resolveInfo.getComponentInfo().packageName;
+ }
+
private @NonNull ComponentName getIntentFilterVerifierComponentNameLPr() {
final Intent intent = new Intent(Intent.ACTION_INTENT_FILTER_NEEDS_VERIFICATION);
@@ -4723,20 +4753,6 @@
final ResolveInfo bestChoice =
chooseBestActivity(intent, resolvedType, flags, query, userId);
-
- if (isEphemeralAllowed(intent, query, userId)) {
- Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "resolveEphemeral");
- final EphemeralResolveInfo ai =
- getEphemeralResolveInfo(intent, resolvedType, userId);
- if (ai != null) {
- if (DEBUG_EPHEMERAL) {
- Slog.v(TAG, "Returning an EphemeralResolveInfo");
- }
- bestChoice.ephemeralInstaller = mEphemeralInstallerInfo;
- bestChoice.ephemeralResolveInfo = ai;
- }
- Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
- }
return bestChoice;
} finally {
Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
@@ -4777,11 +4793,23 @@
false, false, false, userId);
}
+ private boolean isEphemeralDisabled() {
+ // ephemeral apps have been disabled across the board
+ if (DISABLE_EPHEMERAL_APPS) {
+ return true;
+ }
+ // system isn't up yet; can't read settings, so, assume no ephemeral apps
+ if (!mSystemReady) {
+ return true;
+ }
+ return Secure.getInt(mContext.getContentResolver(), Secure.WEB_ACTION_ENABLED, 1) == 0;
+ }
private boolean isEphemeralAllowed(
- Intent intent, List<ResolveInfo> resolvedActivites, int userId) {
+ Intent intent, List<ResolveInfo> resolvedActivities, int userId,
+ boolean skipPackageCheck) {
// Short circuit and return early if possible.
- if (DISABLE_EPHEMERAL_APPS) {
+ if (isEphemeralDisabled()) {
return false;
}
final int callingUser = UserHandle.getCallingUserId();
@@ -4794,18 +4822,21 @@
if (intent.getComponent() != null) {
return false;
}
- if (intent.getPackage() != null) {
+ if ((intent.getFlags() & Intent.FLAG_IGNORE_EPHEMERAL) != 0) {
+ return false;
+ }
+ if (!skipPackageCheck && intent.getPackage() != null) {
return false;
}
final boolean isWebUri = hasWebURI(intent);
- if (!isWebUri) {
+ if (!isWebUri || intent.getData().getHost() == null) {
return false;
}
// Deny ephemeral apps if the user chose _ALWAYS or _ALWAYS_ASK for intent resolution.
synchronized (mPackages) {
- final int count = resolvedActivites.size();
+ final int count = (resolvedActivities == null ? 0 : resolvedActivities.size());
for (int n = 0; n < count; n++) {
- ResolveInfo info = resolvedActivites.get(n);
+ ResolveInfo info = resolvedActivities.get(n);
String packageName = info.activityInfo.packageName;
PackageSetting ps = mSettings.mPackages.get(packageName);
if (ps != null) {
@@ -4827,19 +4858,19 @@
return true;
}
- private EphemeralResolveInfo getEphemeralResolveInfo(Intent intent, String resolvedType,
- int userId) {
- final int ephemeralPrefixMask = Global.getInt(mContext.getContentResolver(),
+ private static EphemeralResolveInfo getEphemeralResolveInfo(
+ Context context, EphemeralResolverConnection resolverConnection, Intent intent,
+ String resolvedType, int userId, String packageName) {
+ final int ephemeralPrefixMask = Global.getInt(context.getContentResolver(),
Global.EPHEMERAL_HASH_PREFIX_MASK, DEFAULT_EPHEMERAL_HASH_PREFIX_MASK);
- final int ephemeralPrefixCount = Global.getInt(mContext.getContentResolver(),
+ final int ephemeralPrefixCount = Global.getInt(context.getContentResolver(),
Global.EPHEMERAL_HASH_PREFIX_COUNT, DEFAULT_EPHEMERAL_HASH_PREFIX_COUNT);
final EphemeralDigest digest = new EphemeralDigest(intent.getData(), ephemeralPrefixMask,
ephemeralPrefixCount);
final int[] shaPrefix = digest.getDigestPrefix();
final byte[][] digestBytes = digest.getDigestBytes();
final List<EphemeralResolveInfo> ephemeralResolveInfoList =
- mEphemeralResolverConnection.getEphemeralResolveInfoList(
- shaPrefix, ephemeralPrefixMask);
+ resolverConnection.getEphemeralResolveInfoList(shaPrefix, ephemeralPrefixMask);
if (ephemeralResolveInfoList == null || ephemeralResolveInfoList.size() == 0) {
// No hash prefix match; there are no ephemeral apps for this domain.
return null;
@@ -4856,6 +4887,10 @@
if (filters.isEmpty()) {
continue;
}
+ if (packageName != null
+ && !packageName.equals(ephemeralApplication.getPackageName())) {
+ continue;
+ }
// We have a domain match; resolve the filters to see if anything matches.
final EphemeralIntentResolver ephemeralResolver = new EphemeralIntentResolver();
for (int j = filters.size() - 1; j >= 0; --j) {
@@ -5259,8 +5294,12 @@
}
// reader
+ boolean sortResult = false;
+ boolean addEphemeral = false;
+ boolean matchEphemeralPackage = false;
+ List<ResolveInfo> result;
+ final String pkgName = intent.getPackage();
synchronized (mPackages) {
- final String pkgName = intent.getPackage();
if (pkgName == null) {
List<CrossProfileIntentFilter> matchingFilters =
getMatchingCrossProfileIntentFilters(intent, resolvedType, userId);
@@ -5268,15 +5307,16 @@
ResolveInfo xpResolveInfo = querySkipCurrentProfileIntents(matchingFilters, intent,
resolvedType, flags, userId);
if (xpResolveInfo != null) {
- List<ResolveInfo> result = new ArrayList<ResolveInfo>(1);
- result.add(xpResolveInfo);
- return filterIfNotSystemUser(result, userId);
+ List<ResolveInfo> xpResult = new ArrayList<ResolveInfo>(1);
+ xpResult.add(xpResolveInfo);
+ return filterIfNotSystemUser(xpResult, userId);
}
// Check for results in the current profile.
- List<ResolveInfo> result = mActivities.queryIntent(
- intent, resolvedType, flags, userId);
- result = filterIfNotSystemUser(result, userId);
+ result = filterIfNotSystemUser(mActivities.queryIntent(
+ intent, resolvedType, flags, userId), userId);
+ addEphemeral =
+ isEphemeralAllowed(intent, result, userId, false /*skipPackageCheck*/);
// Check for cross profile results.
boolean hasNonNegativePriorityResult = hasNonNegativePriority(result);
@@ -5288,7 +5328,7 @@
Collections.singletonList(xpResolveInfo), userId).size() > 0;
if (isVisibleToUser) {
result.add(xpResolveInfo);
- Collections.sort(result, mResolvePrioritySorter);
+ sortResult = true;
}
}
if (hasWebURI(intent)) {
@@ -5304,28 +5344,61 @@
// in the result.
result.remove(xpResolveInfo);
}
- if (result.size() == 0) {
+ if (result.size() == 0 && !addEphemeral) {
result.add(xpDomainInfo.resolveInfo);
return result;
}
- } else if (result.size() <= 1) {
- return result;
}
- result = filterCandidatesWithDomainPreferredActivitiesLPr(intent, flags, result,
- xpDomainInfo, userId);
- Collections.sort(result, mResolvePrioritySorter);
+ if (result.size() > 1 || addEphemeral) {
+ result = filterCandidatesWithDomainPreferredActivitiesLPr(
+ intent, flags, result, xpDomainInfo, userId);
+ sortResult = true;
+ }
}
- return result;
+ } else {
+ final PackageParser.Package pkg = mPackages.get(pkgName);
+ if (pkg != null) {
+ result = filterIfNotSystemUser(
+ mActivities.queryIntentForPackage(
+ intent, resolvedType, flags, pkg.activities, userId),
+ userId);
+ } else {
+ // the caller wants to resolve for a particular package; however, there
+ // were no installed results, so, try to find an ephemeral result
+ addEphemeral = isEphemeralAllowed(
+ intent, null /*result*/, userId, true /*skipPackageCheck*/);
+ matchEphemeralPackage = true;
+ result = new ArrayList<ResolveInfo>();
+ }
}
- final PackageParser.Package pkg = mPackages.get(pkgName);
- if (pkg != null) {
- return filterIfNotSystemUser(
- mActivities.queryIntentForPackage(
- intent, resolvedType, flags, pkg.activities, userId),
- userId);
- }
- return new ArrayList<ResolveInfo>();
}
+ if (addEphemeral) {
+ Trace.traceBegin(TRACE_TAG_PACKAGE_MANAGER, "resolveEphemeral");
+ final EphemeralResolveInfo ai = getEphemeralResolveInfo(
+ mContext, mEphemeralResolverConnection, intent, resolvedType, userId,
+ matchEphemeralPackage ? pkgName : null);
+ if (ai != null) {
+ if (DEBUG_EPHEMERAL) {
+ Slog.v(TAG, "Adding ephemeral installer to the ResolveInfo list");
+ }
+ final ResolveInfo ephemeralInstaller = new ResolveInfo(mEphemeralInstallerInfo);
+ ephemeralInstaller.ephemeralResolveInfo = ai;
+ // make sure this resolver is the default
+ ephemeralInstaller.isDefault = true;
+ ephemeralInstaller.match = IntentFilter.MATCH_CATEGORY_SCHEME_SPECIFIC_PART
+ | IntentFilter.MATCH_ADJUSTMENT_NORMAL;
+ // add a non-generic filter
+ ephemeralInstaller.filter = new IntentFilter(intent.getAction());
+ ephemeralInstaller.filter.addDataPath(
+ intent.getData().getPath(), PatternMatcher.PATTERN_LITERAL);
+ result.add(ephemeralInstaller);
+ }
+ Trace.traceEnd(TRACE_TAG_PACKAGE_MANAGER);
+ }
+ if (sortResult) {
+ Collections.sort(result, mResolvePrioritySorter);
+ }
+ return result;
}
private static class CrossProfileDomainInfo {
@@ -6205,7 +6278,7 @@
@Override
public ParceledListSlice<EphemeralApplicationInfo> getEphemeralApplications(int userId) {
- if (DISABLE_EPHEMERAL_APPS) {
+ if (isEphemeralDisabled()) {
return null;
}
@@ -6229,7 +6302,7 @@
enforceCrossUserPermission(Binder.getCallingUid(), userId,
true /* requireFullPermission */, false /* checkShell */,
"isEphemeral");
- if (DISABLE_EPHEMERAL_APPS) {
+ if (isEphemeralDisabled()) {
return false;
}
@@ -6247,7 +6320,7 @@
@Override
public byte[] getEphemeralApplicationCookie(String packageName, int userId) {
- if (DISABLE_EPHEMERAL_APPS) {
+ if (isEphemeralDisabled()) {
return null;
}
@@ -6265,7 +6338,7 @@
@Override
public boolean setEphemeralApplicationCookie(String packageName, byte[] cookie, int userId) {
- if (DISABLE_EPHEMERAL_APPS) {
+ if (isEphemeralDisabled()) {
return true;
}
@@ -6283,7 +6356,7 @@
@Override
public Bitmap getEphemeralApplicationIcon(String packageName, int userId) {
- if (DISABLE_EPHEMERAL_APPS) {
+ if (isEphemeralDisabled()) {
return null;
}
@@ -6613,9 +6686,13 @@
private void collectCertificatesLI(PackageSetting ps, PackageParser.Package pkg, File srcFile,
final int policyFlags) throws PackageManagerException {
+ // When upgrading from pre-N MR1, verify the package time stamp using the package
+ // directory and not the APK file.
+ final long lastModifiedTime = mIsPreNMR1Upgrade
+ ? new File(pkg.codePath).lastModified() : getLastModifiedTime(pkg, srcFile);
if (ps != null
&& ps.codePath.equals(srcFile)
- && ps.timeStamp == getLastModifiedTime(pkg, srcFile)
+ && ps.timeStamp == lastModifiedTime
&& !isCompatSignatureUpdateNeeded(pkg)
&& !isRecoverSignatureUpdateNeeded(pkg)) {
long mSigningKeySetId = ps.keySetData.getProperSigningKeySet();
@@ -6637,7 +6714,7 @@
Slog.w(TAG, "PackageSetting for " + ps.name
+ " is missing signatures. Collecting certs again to recover them.");
} else {
- Log.i(TAG, srcFile.toString() + " changed; collecting certs");
+ Slog.i(TAG, srcFile.toString() + " changed; collecting certs");
}
try {
@@ -7076,7 +7153,11 @@
}
}
if (doTrim) {
- if (!isFirstBoot()) {
+ final boolean dexOptDialogShown;
+ synchronized (mPackages) {
+ dexOptDialogShown = mDexOptDialogShown;
+ }
+ if (!isFirstBoot() && dexOptDialogShown) {
try {
ActivityManagerNative.getDefault().showBootMessage(
mContext.getResources().getString(
@@ -7170,6 +7251,9 @@
numberOfPackagesVisited, numberOfPackagesToDexopt), true);
} catch (RemoteException e) {
}
+ synchronized (mPackages) {
+ mDexOptDialogShown = true;
+ }
}
// If the OTA updates a system app which was previously preopted to a non-preopted state
@@ -8367,6 +8451,10 @@
pkg.applicationInfo.flags |= ApplicationInfo.FLAG_FACTORY_TEST;
}
+ if (isSystemApp(pkg)) {
+ pkgSetting.isOrphaned = true;
+ }
+
ArrayList<PackageParser.Package> clientLibPkgs = null;
if ((scanFlags & SCAN_CHECK_ONLY) != 0) {
@@ -8650,7 +8738,9 @@
for (i=0; i<N; i++) {
PackageParser.PermissionGroup pg = pkg.permissionGroups.get(i);
PackageParser.PermissionGroup cur = mPermissionGroups.get(pg.info.name);
- if (cur == null) {
+ final String curPackageName = cur == null ? null : cur.info.packageName;
+ final boolean isPackageUpdate = pg.info.packageName.equals(curPackageName);
+ if (cur == null || isPackageUpdate) {
mPermissionGroups.put(pg.info.name, pg);
if ((policyFlags&PackageParser.PARSE_CHATTY) != 0) {
if (r == null) {
@@ -8658,6 +8748,9 @@
} else {
r.append(' ');
}
+ if (isPackageUpdate) {
+ r.append("UPD:");
+ }
r.append(pg.info.name);
}
} else {
@@ -9190,15 +9283,17 @@
mEphemeralInstallerActivity.packageName = pkg.applicationInfo.packageName;
mEphemeralInstallerActivity.processName = pkg.applicationInfo.packageName;
mEphemeralInstallerActivity.launchMode = ActivityInfo.LAUNCH_MULTIPLE;
- mEphemeralInstallerActivity.flags = ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS |
- ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS;
+ mEphemeralInstallerActivity.flags = ActivityInfo.FLAG_EXCLUDE_FROM_RECENTS
+ | ActivityInfo.FLAG_FINISH_ON_CLOSE_SYSTEM_DIALOGS;
mEphemeralInstallerActivity.theme = 0;
mEphemeralInstallerActivity.exported = true;
mEphemeralInstallerActivity.enabled = true;
mEphemeralInstallerInfo.activityInfo = mEphemeralInstallerActivity;
mEphemeralInstallerInfo.priority = 0;
- mEphemeralInstallerInfo.preferredOrder = 0;
- mEphemeralInstallerInfo.match = 0;
+ mEphemeralInstallerInfo.preferredOrder = 1;
+ mEphemeralInstallerInfo.isDefault = true;
+ mEphemeralInstallerInfo.match = IntentFilter.MATCH_CATEGORY_SCHEME_SPECIFIC_PART
+ | IntentFilter.MATCH_ADJUSTMENT_NORMAL;
if (DEBUG_EPHEMERAL) {
Slog.d(TAG, "Set ephemeral installer activity: " + mEphemeralInstallerComponent);
@@ -11251,7 +11346,7 @@
}
for (int id : resolvedUserIds) {
final Intent intent = new Intent(action,
- pkg != null ? Uri.fromParts("package", pkg, null) : null);
+ pkg != null ? Uri.fromParts(PACKAGE_SCHEME, pkg, null) : null);
if (extras != null) {
intent.putExtras(extras);
}
@@ -11747,6 +11842,12 @@
return false;
}
+ if (packageName.equals(mRequiredUninstallerPackage)) {
+ Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName
+ + "\": required for package uninstallation");
+ return false;
+ }
+
if (packageName.equals(mRequiredVerifierPackage)) {
Slog.w(TAG, "Cannot suspend/un-suspend package \"" + packageName
+ "\": required for package verification");
@@ -15311,6 +15412,17 @@
Preconditions.checkNotNull(packageName);
Preconditions.checkNotNull(observer);
final int uid = Binder.getCallingUid();
+ if (!isOrphaned(packageName)
+ && !isCallerAllowedToSilentlyUninstall(uid, packageName)) {
+ try {
+ final Intent intent = new Intent(Intent.ACTION_UNINSTALL_PACKAGE);
+ intent.setData(Uri.fromParts(PACKAGE_SCHEME, packageName, null));
+ intent.putExtra(PackageInstaller.EXTRA_CALLBACK, observer.asBinder());
+ observer.onUserActionRequired(intent);
+ } catch (RemoteException re) {
+ }
+ return;
+ }
final boolean deleteAllUsers = (deleteFlags & PackageManager.DELETE_ALL_USERS) != 0;
final int[] users = deleteAllUsers ? sUserManager.getUserIds() : new int[]{ userId };
if (UserHandle.getUserId(uid) != userId || (deleteAllUsers && users.length > 1)) {
@@ -15379,6 +15491,31 @@
});
}
+ private boolean isCallerAllowedToSilentlyUninstall(int callingUid, String pkgName) {
+ if (callingUid == Process.SHELL_UID || callingUid == Process.ROOT_UID
+ || callingUid == Process.SYSTEM_UID) {
+ return true;
+ }
+ final int callingUserId = UserHandle.getUserId(callingUid);
+ // If the caller installed the pkgName, then allow it to silently uninstall.
+ if (callingUid == getPackageUid(getInstallerPackageName(pkgName), 0, callingUserId)) {
+ return true;
+ }
+
+ // Allow package verifier to silently uninstall.
+ if (mRequiredVerifierPackage != null &&
+ callingUid == getPackageUid(mRequiredVerifierPackage, 0, callingUserId)) {
+ return true;
+ }
+
+ // Allow package uninstaller to silently uninstall.
+ if (mRequiredUninstallerPackage != null &&
+ callingUid == getPackageUid(mRequiredUninstallerPackage, 0, callingUserId)) {
+ return true;
+ }
+ return false;
+ }
+
private int[] getBlockUninstallForUsers(String packageName, int[] userIds) {
int[] result = EMPTY_INT_ARRAY;
for (int userId : userIds) {
@@ -17937,6 +18074,13 @@
mDefaultPermissionPolicy.grantDefaultPermissions(userId);
}
+ // If we did not grant default permissions, we preload from this the
+ // default permission exceptions lazily to ensure we don't hit the
+ // disk on a new user creation.
+ if (grantPermissionsUserIds == EMPTY_INT_ARRAY) {
+ mDefaultPermissionPolicy.scheduleReadDefaultPermissionExceptions();
+ }
+
// Kick off any messages waiting for system ready
if (mPostSystemReadyMessages != null) {
for (Message msg : mPostSystemReadyMessages) {
diff --git a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
index 751c585..9a8ebed 100644
--- a/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
+++ b/services/core/java/com/android/server/pm/PackageManagerServiceUtils.java
@@ -19,6 +19,7 @@
import static com.android.server.pm.PackageManagerService.DEBUG_DEXOPT;
import static com.android.server.pm.PackageManagerService.TAG;
+import android.annotation.NonNull;
import android.app.AppGlobals;
import android.content.Intent;
import android.content.pm.PackageParser;
@@ -35,13 +36,9 @@
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
-import java.util.Comparator;
-import java.util.Date;
-import java.util.HashSet;
-import java.util.Iterator;
import java.util.LinkedList;
import java.util.List;
-import java.util.Set;
+import java.util.function.Predicate;
/**
* Class containing helper methods for the PackageManagerService.
@@ -67,34 +64,51 @@
return pkgNames;
}
- private static void filterRecentlyUsedApps(Collection<PackageParser.Package> pkgs,
- long estimatedPreviousSystemUseTime,
- long dexOptLRUThresholdInMills) {
- // Filter out packages that aren't recently used.
- int total = pkgs.size();
- int skipped = 0;
- for (Iterator<PackageParser.Package> i = pkgs.iterator(); i.hasNext();) {
- PackageParser.Package pkg = i.next();
- long then = pkg.getLatestForegroundPackageUseTimeInMills();
- if (then < estimatedPreviousSystemUseTime - dexOptLRUThresholdInMills) {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Skipping dexopt of " + pkg.packageName +
- " last used in foreground: " +
- ((then == 0) ? "never" : new Date(then)));
- }
- i.remove();
- skipped++;
- } else {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Will dexopt " + pkg.packageName +
- " last used in foreground: " +
- ((then == 0) ? "never" : new Date(then)));
- }
+ // Sort a list of apps by their last usage, most recently used apps first. The order of
+ // packages without usage data is undefined (but they will be sorted after the packages
+ // that do have usage data).
+ public static void sortPackagesByUsageDate(List<PackageParser.Package> pkgs,
+ PackageManagerService packageManagerService) {
+ if (!packageManagerService.isHistoricalPackageUsageAvailable()) {
+ return;
+ }
+
+ Collections.sort(pkgs, (pkg1, pkg2) ->
+ Long.compare(pkg2.getLatestForegroundPackageUseTimeInMills(),
+ pkg1.getLatestForegroundPackageUseTimeInMills()));
+ }
+
+ // Apply the given {@code filter} to all packages in {@code packages}. If tested positive, the
+ // package will be removed from {@code packages} and added to {@code result} with its
+ // dependencies. If usage data is available, the positive packages will be sorted by usage
+ // data (with {@code sortTemp} as temporary storage).
+ private static void applyPackageFilter(Predicate<PackageParser.Package> filter,
+ Collection<PackageParser.Package> result,
+ Collection<PackageParser.Package> packages,
+ @NonNull List<PackageParser.Package> sortTemp,
+ PackageManagerService packageManagerService) {
+ for (PackageParser.Package pkg : packages) {
+ if (filter.test(pkg)) {
+ sortTemp.add(pkg);
}
}
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Skipped dexopt " + skipped + " of " + total);
+
+ sortPackagesByUsageDate(sortTemp, packageManagerService);
+ packages.removeAll(sortTemp);
+
+ for (PackageParser.Package pkg : sortTemp) {
+ result.add(pkg);
+
+ Collection<PackageParser.Package> deps =
+ packageManagerService.findSharedNonSystemLibraries(pkg);
+ if (!deps.isEmpty()) {
+ deps.removeAll(result);
+ result.addAll(deps);
+ packages.removeAll(deps);
+ }
}
+
+ sortTemp.clear();
}
// Sort apps by importance for dexopt ordering. Important apps are given
@@ -104,46 +118,25 @@
PackageManagerService packageManagerService) {
ArrayList<PackageParser.Package> remainingPkgs = new ArrayList<>(packages);
LinkedList<PackageParser.Package> result = new LinkedList<>();
+ ArrayList<PackageParser.Package> sortTemp = new ArrayList<>(remainingPkgs.size());
// Give priority to core apps.
- for (PackageParser.Package pkg : remainingPkgs) {
- if (pkg.coreApp) {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Adding core app " + result.size() + ": " + pkg.packageName);
- }
- result.add(pkg);
- }
- }
- remainingPkgs.removeAll(result);
+ applyPackageFilter((pkg) -> pkg.coreApp, result, remainingPkgs, sortTemp,
+ packageManagerService);
// Give priority to system apps that listen for pre boot complete.
Intent intent = new Intent(Intent.ACTION_PRE_BOOT_COMPLETED);
- ArraySet<String> pkgNames = getPackageNamesForIntent(intent, UserHandle.USER_SYSTEM);
- for (PackageParser.Package pkg : remainingPkgs) {
- if (pkgNames.contains(pkg.packageName)) {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Adding pre boot system app " + result.size() + ": " +
- pkg.packageName);
- }
- result.add(pkg);
- }
- }
- remainingPkgs.removeAll(result);
+ final ArraySet<String> pkgNames = getPackageNamesForIntent(intent, UserHandle.USER_SYSTEM);
+ applyPackageFilter((pkg) -> pkgNames.contains(pkg.packageName), result, remainingPkgs,
+ sortTemp, packageManagerService);
// Give priority to apps used by other apps.
- for (PackageParser.Package pkg : remainingPkgs) {
- if (PackageDexOptimizer.isUsedByOtherApps(pkg)) {
- if (DEBUG_DEXOPT) {
- Log.i(TAG, "Adding app used by other apps " + result.size() + ": " +
- pkg.packageName);
- }
- result.add(pkg);
- }
- }
- remainingPkgs.removeAll(result);
+ applyPackageFilter((pkg) -> PackageDexOptimizer.isUsedByOtherApps(pkg), result,
+ remainingPkgs, sortTemp, packageManagerService);
// Filter out packages that aren't recently used, add all remaining apps.
// TODO: add a property to control this?
+ Predicate<PackageParser.Package> remainingPredicate;
if (!remainingPkgs.isEmpty() && packageManagerService.isHistoricalPackageUsageAvailable()) {
if (DEBUG_DEXOPT) {
Log.i(TAG, "Looking at historical package use");
@@ -159,24 +152,20 @@
lastUsed.getLatestForegroundPackageUseTimeInMills();
// Be defensive if for some reason package usage has bogus data.
if (estimatedPreviousSystemUseTime != 0) {
- filterRecentlyUsedApps(remainingPkgs, estimatedPreviousSystemUseTime,
- SEVEN_DAYS_IN_MILLISECONDS);
+ final long cutoffTime = estimatedPreviousSystemUseTime - SEVEN_DAYS_IN_MILLISECONDS;
+ remainingPredicate =
+ (pkg) -> pkg.getLatestForegroundPackageUseTimeInMills() >= cutoffTime;
+ } else {
+ // No meaningful historical info. Take all.
+ remainingPredicate = (pkg) -> true;
}
+ sortPackagesByUsageDate(remainingPkgs, packageManagerService);
+ } else {
+ // No historical info. Take all.
+ remainingPredicate = (pkg) -> true;
}
- result.addAll(remainingPkgs);
-
- // Now go ahead and also add the libraries required for these packages.
- // TODO: Think about interleaving things.
- Set<PackageParser.Package> dependencies = new HashSet<>();
- for (PackageParser.Package p : result) {
- dependencies.addAll(packageManagerService.findSharedNonSystemLibraries(p));
- }
- if (!dependencies.isEmpty()) {
- // We might have packages already in `result` that are dependencies
- // of other packages. Make sure we don't add those to the list twice.
- dependencies.removeAll(result);
- }
- result.addAll(dependencies);
+ applyPackageFilter(remainingPredicate, result, remainingPkgs, sortTemp,
+ packageManagerService);
if (DEBUG_DEXOPT) {
StringBuilder sb = new StringBuilder();
@@ -187,6 +176,15 @@
sb.append(pkg.packageName);
}
Log.i(TAG, "Packages to be dexopted: " + sb.toString());
+
+ sb.setLength(0);
+ for (PackageParser.Package pkg : remainingPkgs) {
+ if (sb.length() > 0) {
+ sb.append(", ");
+ }
+ sb.append(pkg.packageName);
+ }
+ Log.i(TAG, "Packages skipped from dexopt: " + sb.toString());
}
return result;
diff --git a/services/core/java/com/android/server/pm/SELinuxMMAC.java b/services/core/java/com/android/server/pm/SELinuxMMAC.java
index a6350fe..8970556 100644
--- a/services/core/java/com/android/server/pm/SELinuxMMAC.java
+++ b/services/core/java/com/android/server/pm/SELinuxMMAC.java
@@ -19,6 +19,7 @@
import android.content.pm.PackageParser;
import android.content.pm.Signature;
import android.os.Environment;
+import android.os.SystemProperties;
import android.system.ErrnoException;
import android.system.Os;
import android.system.OsConstants;
@@ -64,6 +65,8 @@
// to synchronize access during policy load and access attempts.
private static List<Policy> sPolicies = new ArrayList<>();
+ private static final String PROP_FORCE_RESTORECON = "sys.force_restorecon";
+
/** Path to version on rootfs */
private static final File VERSION_FILE = new File("/selinux_version");
@@ -322,6 +325,11 @@
* @return Returns true if the restorecon should occur or false otherwise.
*/
public static boolean isRestoreconNeeded(File file) {
+ // To investigate boot timing, allow a property to always force restorecon
+ if (SystemProperties.getBoolean(PROP_FORCE_RESTORECON, false)) {
+ return true;
+ }
+
try {
final byte[] buf = new byte[20];
final int len = Os.getxattr(file.getAbsolutePath(), XATTR_SEAPP_HASH, buf);
diff --git a/services/core/java/com/android/server/pm/ShortcutPackage.java b/services/core/java/com/android/server/pm/ShortcutPackage.java
index 827b88a..1acc955 100644
--- a/services/core/java/com/android/server/pm/ShortcutPackage.java
+++ b/services/core/java/com/android/server/pm/ShortcutPackage.java
@@ -667,6 +667,12 @@
// - version code hasn't change
// - lastUpdateTime hasn't change
// - all target activities are still enabled.
+
+ // Note, system apps timestamps do *not* change after OTAs. (But they do
+ // after an adb sync or a local flash.)
+ // This means if a system app's version code doesn't change on an OTA,
+ // we don't notice it's updated. But that's fine since their version code *should*
+ // really change on OTAs.
if ((getPackageInfo().getVersionCode() == pi.versionCode)
&& (getPackageInfo().getLastUpdateTime() == pi.lastUpdateTime)
&& areAllActivitiesStillEnabled()) {
@@ -1145,6 +1151,17 @@
}
}
+ /** @return true if there's any shortcuts that are not manifest shortcuts. */
+ public boolean hasNonManifestShortcuts() {
+ for (int i = mShortcuts.size() - 1; i >= 0; i--) {
+ final ShortcutInfo si = mShortcuts.valueAt(i);
+ if (!si.isDeclaredInManifest()) {
+ return true;
+ }
+ }
+ return false;
+ }
+
public void dump(@NonNull PrintWriter pw, @NonNull String prefix) {
pw.println();
diff --git a/services/core/java/com/android/server/pm/ShortcutPackageItem.java b/services/core/java/com/android/server/pm/ShortcutPackageItem.java
index 79b5c4e..1780058 100644
--- a/services/core/java/com/android/server/pm/ShortcutPackageItem.java
+++ b/services/core/java/com/android/server/pm/ShortcutPackageItem.java
@@ -40,7 +40,7 @@
private final ShortcutPackageInfo mPackageInfo;
- protected final ShortcutUser mShortcutUser;
+ protected ShortcutUser mShortcutUser;
protected ShortcutPackageItem(@NonNull ShortcutUser shortcutUser,
int packageUserId, @NonNull String packageName,
@@ -51,6 +51,13 @@
mPackageInfo = Preconditions.checkNotNull(packageInfo);
}
+ /**
+ * Change the parent {@link ShortcutUser}. Need it in the restore code.
+ */
+ public void replaceUser(ShortcutUser user) {
+ mShortcutUser = user;
+ }
+
public ShortcutUser getUser() {
return mShortcutUser;
}
diff --git a/services/core/java/com/android/server/pm/ShortcutService.java b/services/core/java/com/android/server/pm/ShortcutService.java
index c1fc7f1..2c61f75 100644
--- a/services/core/java/com/android/server/pm/ShortcutService.java
+++ b/services/core/java/com/android/server/pm/ShortcutService.java
@@ -54,6 +54,7 @@
import android.graphics.drawable.Icon;
import android.net.Uri;
import android.os.Binder;
+import android.os.Build;
import android.os.Environment;
import android.os.FileUtils;
import android.os.Handler;
@@ -324,10 +325,30 @@
int CHECK_LAUNCHER_ACTIVITY = 12;
int IS_ACTIVITY_ENABLED = 13;
int PACKAGE_UPDATE_CHECK = 14;
+ int ASYNC_PRELOAD_USER_DELAY = 15;
- int COUNT = PACKAGE_UPDATE_CHECK + 1;
+ int COUNT = ASYNC_PRELOAD_USER_DELAY + 1;
}
+ private static final String[] STAT_LABELS = {
+ "getHomeActivities()",
+ "Launcher permission check",
+ "getPackageInfo()",
+ "getPackageInfo(SIG)",
+ "getApplicationInfo",
+ "cleanupDanglingBitmaps",
+ "getActivity+metadata",
+ "getInstalledPackages",
+ "checkPackageChanges",
+ "getApplicationResources",
+ "resourceNameLookup",
+ "getLauncherActivity",
+ "checkLauncherActivity",
+ "isActivityEnabled",
+ "packageUpdateCheck",
+ "asyncPreloadUserDelay"
+ };
+
final Object mStatLock = new Object();
@GuardedBy("mStatLock")
@@ -359,6 +380,12 @@
@GuardedBy("mLock")
private Exception mLastWtfStacktrace;
+ static class InvalidFileFormatException extends Exception {
+ public InvalidFileFormatException(String message, Throwable cause) {
+ super(message, cause);
+ }
+ }
+
public ShortcutService(Context context) {
this(context, BackgroundThread.get().getLooper(), /*onyForPackgeManagerApis*/ false);
}
@@ -533,19 +560,26 @@
/** lifecycle event */
void handleUnlockUser(int userId) {
if (DEBUG) {
- Slog.d(TAG, "handleUnlockUser: user=" + userId);
+ Slog.d(TAG, "handleUnlockUser: user=" + userId);
}
synchronized (mLock) {
mUnlockedUsers.put(userId, true);
-
- // Preload the user's shortcuts.
- // Also see if the locale has changed.
- // Note as of nyc, the locale is per-user, so the locale shouldn't change
- // when the user is locked. However due to b/30119489 it still happens.
- getUserShortcutsLocked(userId).detectLocaleChange();
-
- checkPackageChanges(userId);
}
+
+ // Preload the user data.
+ // Note, we don't use mHandler here but instead just start a new thread.
+ // This is because mHandler (which uses com.android.internal.os.BackgroundThread) is very
+ // busy at this point and this could take hundreds of milliseconds, which would be too
+ // late since the launcher would already have started.
+ // So we just create a new thread. This code runs rarely, so we don't use a thread pool
+ // or anything.
+ final long start = injectElapsedRealtime();
+ injectRunOnNewThread(() -> {
+ synchronized (mLock) {
+ logDurationStat(Stats.ASYNC_PRELOAD_USER_DELAY, start);
+ getUserShortcutsLocked(userId);
+ }
+ });
}
/** lifecycle event */
@@ -933,7 +967,7 @@
try {
final ShortcutUser ret = loadUserInternal(userId, in, /* forBackup= */ false);
return ret;
- } catch (IOException | XmlPullParserException e) {
+ } catch (IOException | XmlPullParserException | InvalidFileFormatException e) {
Slog.e(TAG, "Failed to read file " + file.getBaseFile(), e);
return null;
} finally {
@@ -942,7 +976,8 @@
}
private ShortcutUser loadUserInternal(@UserIdInt int userId, InputStream is,
- boolean fromBackup) throws XmlPullParserException, IOException {
+ boolean fromBackup) throws XmlPullParserException, IOException,
+ InvalidFileFormatException {
final BufferedInputStream bis = new BufferedInputStream(is);
@@ -1110,6 +1145,9 @@
userPackages = new ShortcutUser(this, userId);
}
mUsers.put(userId, userPackages);
+
+ // Also when a user's data is first accessed, scan all packages.
+ checkPackageChanges(userId);
}
return userPackages;
}
@@ -1468,6 +1506,10 @@
mHandler.post(r);
}
+ void injectRunOnNewThread(Runnable r) {
+ new Thread(r).start();
+ }
+
/**
* @throws IllegalArgumentException if {@code numShortcuts} is bigger than
* {@link #getMaxActivityShortcuts()}.
@@ -2625,10 +2667,14 @@
boolean forceRescan) {
final ShortcutUser user = getUserShortcutsLocked(userId);
+ // Note after each OTA, we'll need to rescan all system apps, as their lastUpdateTime
+ // is not reliable.
final long now = injectCurrentTimeMillis();
+ final boolean afterOta =
+ !injectBuildFingerprint().equals(user.getLastAppScanOsFingerprint());
// Then for each installed app, publish manifest shortcuts when needed.
- forUpdatedPackages(userId, lastScanTime, ai -> {
+ forUpdatedPackages(userId, lastScanTime, afterOta, ai -> {
user.attemptToRestoreIfNeededAndSave(this, ai.packageName, userId);
user.rescanPackageIfNeeded(ai.packageName, forceRescan);
});
@@ -2636,6 +2682,7 @@
// Write the time just before the scan, because there may be apps that have just
// been updated, and we want to catch them in the next time.
user.setLastAppScanTime(now);
+ user.setLastAppScanOsFingerprint(injectBuildFingerprint());
scheduleSaveUser(userId);
}
@@ -2874,7 +2921,7 @@
return parceledList.getList();
}
- private void forUpdatedPackages(@UserIdInt int userId, long lastScanTime,
+ private void forUpdatedPackages(@UserIdInt int userId, long lastScanTime, boolean afterOta,
Consumer<ApplicationInfo> callback) {
if (DEBUG) {
Slog.d(TAG, "forUpdatedPackages for user " + userId + ", lastScanTime=" + lastScanTime);
@@ -2886,7 +2933,8 @@
// If the package has been updated since the last scan time, then scan it.
// Also if it's a system app with no update, lastUpdateTime is not reliable, so
// just scan it.
- if (pi.lastUpdateTime >= lastScanTime || isPureSystemApp(pi.applicationInfo)) {
+ if (pi.lastUpdateTime >= lastScanTime
+ || (afterOta && isPureSystemApp(pi.applicationInfo))) {
if (DEBUG) {
Slog.d(TAG, "Found updated package " + pi.packageName);
}
@@ -3129,15 +3177,16 @@
wtf("Can't restore: user " + userId + " is locked or not running");
return;
}
- final ShortcutUser user;
+ // Actually do restore.
+ final ShortcutUser restored;
final ByteArrayInputStream is = new ByteArrayInputStream(payload);
try {
- user = loadUserInternal(userId, is, /* fromBackup */ true);
- } catch (XmlPullParserException | IOException e) {
+ restored = loadUserInternal(userId, is, /* fromBackup */ true);
+ } catch (XmlPullParserException | IOException | InvalidFileFormatException e) {
Slog.w(TAG, "Restoration failed.", e);
return;
}
- mUsers.put(userId, user);
+ getUserShortcutsLocked(userId).mergeRestoredFile(restored);
// Rescan all packages to re-publish manifest shortcuts and do other checks.
rescanUpdatedPackagesLocked(userId,
@@ -3218,23 +3267,9 @@
pw.println(" Stats:");
synchronized (mStatLock) {
- final String p = " ";
- dumpStatLS(pw, p, Stats.GET_DEFAULT_HOME, "getHomeActivities()");
- dumpStatLS(pw, p, Stats.LAUNCHER_PERMISSION_CHECK, "Launcher permission check");
-
- dumpStatLS(pw, p, Stats.GET_PACKAGE_INFO, "getPackageInfo()");
- dumpStatLS(pw, p, Stats.GET_PACKAGE_INFO_WITH_SIG, "getPackageInfo(SIG)");
- dumpStatLS(pw, p, Stats.GET_APPLICATION_INFO, "getApplicationInfo");
- dumpStatLS(pw, p, Stats.CLEANUP_DANGLING_BITMAPS, "cleanupDanglingBitmaps");
- dumpStatLS(pw, p, Stats.GET_ACTIVITY_WITH_METADATA, "getActivity+metadata");
- dumpStatLS(pw, p, Stats.GET_INSTALLED_PACKAGES, "getInstalledPackages");
- dumpStatLS(pw, p, Stats.CHECK_PACKAGE_CHANGES, "checkPackageChanges");
- dumpStatLS(pw, p, Stats.GET_APPLICATION_RESOURCES, "getApplicationResources");
- dumpStatLS(pw, p, Stats.RESOURCE_NAME_LOOKUP, "resourceNameLookup");
- dumpStatLS(pw, p, Stats.GET_LAUNCHER_ACTIVITY, "getLauncherActivity");
- dumpStatLS(pw, p, Stats.CHECK_LAUNCHER_ACTIVITY, "checkLauncherActivity");
- dumpStatLS(pw, p, Stats.IS_ACTIVITY_ENABLED, "isActivityEnabled");
- dumpStatLS(pw, p, Stats.PACKAGE_UPDATE_CHECK, "packageUpdateCheck");
+ for (int i = 0; i < Stats.COUNT; i++) {
+ dumpStatLS(pw, " ", i);
+ }
}
pw.println();
@@ -3277,12 +3312,12 @@
return tobj.format("%Y-%m-%d %H:%M:%S");
}
- private void dumpStatLS(PrintWriter pw, String prefix, int statId, String label) {
+ private void dumpStatLS(PrintWriter pw, String prefix, int statId) {
pw.print(prefix);
final int count = mCountStats[statId];
final long dur = mDurationStats[statId];
pw.println(String.format("%s: count=%d, total=%dms, avg=%.1fms",
- label, count, dur,
+ STAT_LABELS[statId], count, dur,
(count == 0 ? 0 : ((double) dur) / count)));
}
@@ -3578,6 +3613,12 @@
Binder.restoreCallingIdentity(token);
}
+ // Injection point.
+ @VisibleForTesting
+ String injectBuildFingerprint() {
+ return Build.FINGERPRINT;
+ }
+
final void wtf(String message) {
wtf(message, /* exception= */ null);
}
diff --git a/services/core/java/com/android/server/pm/ShortcutUser.java b/services/core/java/com/android/server/pm/ShortcutUser.java
index ce3ed9c..5d4bfa4 100644
--- a/services/core/java/com/android/server/pm/ShortcutUser.java
+++ b/services/core/java/com/android/server/pm/ShortcutUser.java
@@ -23,12 +23,14 @@
import android.text.TextUtils;
import android.text.format.Formatter;
import android.util.ArrayMap;
+import android.util.Log;
import android.util.Slog;
import android.util.SparseArray;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.Preconditions;
+import com.android.server.pm.ShortcutService.InvalidFileFormatException;
import libcore.util.Objects;
@@ -60,6 +62,7 @@
// Suffix "2" was added to force rescan all packages after the next OTA.
private static final String ATTR_LAST_APP_SCAN_TIME = "last-app-scan-time2";
+ private static final String ATTR_LAST_APP_SCAN_OS_FINGERPRINT = "last-app-scan-fp";
private static final String KEY_USER_ID = "userId";
private static final String KEY_LAUNCHERS = "launchers";
private static final String KEY_PACKAGES = "packages";
@@ -125,6 +128,8 @@
private long mLastAppScanTime;
+ private String mLastAppScanOsFingerprint;
+
public ShortcutUser(ShortcutService service, int userId) {
mService = service;
mUserId = userId;
@@ -142,6 +147,14 @@
mLastAppScanTime = lastAppScanTime;
}
+ public String getLastAppScanOsFingerprint() {
+ return mLastAppScanOsFingerprint;
+ }
+
+ public void setLastAppScanOsFingerprint(String lastAppScanOsFingerprint) {
+ mLastAppScanOsFingerprint = lastAppScanOsFingerprint;
+ }
+
// We don't expose this directly to non-test code because only ShortcutUser should add to/
// remove from it.
@VisibleForTesting
@@ -153,6 +166,11 @@
return mPackages.containsKey(packageName);
}
+ private void addPackage(@NonNull ShortcutPackage p) {
+ p.replaceUser(this);
+ mPackages.put(p.getPackageName(), p);
+ }
+
public ShortcutPackage removePackage(@NonNull String packageName) {
final ShortcutPackage removed = mPackages.remove(packageName);
@@ -168,7 +186,8 @@
return mLaunchers;
}
- public void addLauncher(ShortcutLauncher launcher) {
+ private void addLauncher(ShortcutLauncher launcher) {
+ launcher.replaceUser(this);
mLaunchers.put(PackageWithUser.of(launcher.getPackageUserId(),
launcher.getPackageName()), launcher);
}
@@ -315,11 +334,16 @@
throws IOException, XmlPullParserException {
out.startTag(null, TAG_ROOT);
- ShortcutService.writeAttr(out, ATTR_KNOWN_LOCALES, mKnownLocales);
- ShortcutService.writeAttr(out, ATTR_LAST_APP_SCAN_TIME,
- mLastAppScanTime);
+ if (!forBackup) {
+ // Don't have to back them up.
+ ShortcutService.writeAttr(out, ATTR_KNOWN_LOCALES, mKnownLocales);
+ ShortcutService.writeAttr(out, ATTR_LAST_APP_SCAN_TIME,
+ mLastAppScanTime);
+ ShortcutService.writeAttr(out, ATTR_LAST_APP_SCAN_OS_FINGERPRINT,
+ mLastAppScanOsFingerprint);
- ShortcutService.writeTagValue(out, TAG_LAUNCHER, mLastKnownLauncher);
+ ShortcutService.writeTagValue(out, TAG_LAUNCHER, mLastKnownLauncher);
+ }
// Can't use forEachPackageItem due to the checked exceptions.
{
@@ -352,53 +376,59 @@
}
public static ShortcutUser loadFromXml(ShortcutService s, XmlPullParser parser, int userId,
- boolean fromBackup) throws IOException, XmlPullParserException {
+ boolean fromBackup) throws IOException, XmlPullParserException, InvalidFileFormatException {
final ShortcutUser ret = new ShortcutUser(s, userId);
- ret.mKnownLocales = ShortcutService.parseStringAttribute(parser,
- ATTR_KNOWN_LOCALES);
+ try {
+ ret.mKnownLocales = ShortcutService.parseStringAttribute(parser,
+ ATTR_KNOWN_LOCALES);
- // If lastAppScanTime is in the future, that means the clock went backwards.
- // Just scan all apps again.
- final long lastAppScanTime = ShortcutService.parseLongAttribute(parser,
- ATTR_LAST_APP_SCAN_TIME);
- final long currentTime = s.injectCurrentTimeMillis();
- ret.mLastAppScanTime = lastAppScanTime < currentTime ? lastAppScanTime : 0;
+ // If lastAppScanTime is in the future, that means the clock went backwards.
+ // Just scan all apps again.
+ final long lastAppScanTime = ShortcutService.parseLongAttribute(parser,
+ ATTR_LAST_APP_SCAN_TIME);
+ final long currentTime = s.injectCurrentTimeMillis();
+ ret.mLastAppScanTime = lastAppScanTime < currentTime ? lastAppScanTime : 0;
+ ret.mLastAppScanOsFingerprint = ShortcutService.parseStringAttribute(parser,
+ ATTR_LAST_APP_SCAN_OS_FINGERPRINT);
+ final int outerDepth = parser.getDepth();
+ int type;
+ while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
+ && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
+ if (type != XmlPullParser.START_TAG) {
+ continue;
+ }
+ final int depth = parser.getDepth();
+ final String tag = parser.getName();
- final int outerDepth = parser.getDepth();
- int type;
- while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
- && (type != XmlPullParser.END_TAG || parser.getDepth() > outerDepth)) {
- if (type != XmlPullParser.START_TAG) {
- continue;
- }
- final int depth = parser.getDepth();
- final String tag = parser.getName();
+ if (depth == outerDepth + 1) {
+ switch (tag) {
+ case TAG_LAUNCHER: {
+ ret.mLastKnownLauncher = ShortcutService.parseComponentNameAttribute(
+ parser, ATTR_VALUE);
+ continue;
+ }
+ case ShortcutPackage.TAG_ROOT: {
+ final ShortcutPackage shortcuts = ShortcutPackage.loadFromXml(
+ s, ret, parser, fromBackup);
- if (depth == outerDepth + 1) {
- switch (tag) {
- case TAG_LAUNCHER: {
- ret.mLastKnownLauncher = ShortcutService.parseComponentNameAttribute(
- parser, ATTR_VALUE);
- continue;
- }
- case ShortcutPackage.TAG_ROOT: {
- final ShortcutPackage shortcuts = ShortcutPackage.loadFromXml(
- s, ret, parser, fromBackup);
+ // Don't use addShortcut(), we don't need to save the icon.
+ ret.mPackages.put(shortcuts.getPackageName(), shortcuts);
+ continue;
+ }
- // Don't use addShortcut(), we don't need to save the icon.
- ret.mPackages.put(shortcuts.getPackageName(), shortcuts);
- continue;
- }
-
- case ShortcutLauncher.TAG_ROOT: {
- ret.addLauncher(
- ShortcutLauncher.loadFromXml(parser, ret, userId, fromBackup));
- continue;
+ case ShortcutLauncher.TAG_ROOT: {
+ ret.addLauncher(
+ ShortcutLauncher.loadFromXml(parser, ret, userId, fromBackup));
+ continue;
+ }
}
}
+ ShortcutService.warnForInvalidTag(depth, tag);
}
- ShortcutService.warnForInvalidTag(depth, tag);
+ } catch (RuntimeException e) {
+ throw new ShortcutService.InvalidFileFormatException(
+ "Unable to parse file", e);
}
return ret;
}
@@ -447,6 +477,51 @@
}
}
+ public void mergeRestoredFile(ShortcutUser restored) {
+ final ShortcutService s = mService;
+ // Note, a restore happens only at the end of setup wizard. At this point, no apps are
+ // installed from Play Store yet, but it's still possible that system apps have already
+ // published dynamic shortcuts, since some apps do so on BOOT_COMPLETED.
+ // When such a system app has allowbackup=true, then we go ahead and replace all existing
+ // shortcuts with the restored shortcuts. (Then we'll re-publish manifest shortcuts later
+ // in the call site.)
+ // When such a system app has allowbackup=false, then we'll keep the shortcuts that have
+ // already been published. So we selectively add restored ShortcutPackages here.
+ //
+ // The same logic applies to launchers, but since launchers shouldn't pin shortcuts
+ // without users interaction it's really not a big deal, so we just clear existing
+ // ShortcutLauncher instances in mLaunchers and add all the restored ones here.
+
+ mLaunchers.clear();
+ restored.forAllLaunchers(sl -> {
+ // If the app is already installed and allowbackup = false, then ignore the restored
+ // data.
+ if (s.isPackageInstalled(sl.getPackageName(), getUserId())
+ && !s.shouldBackupApp(sl.getPackageName(), getUserId())) {
+ return;
+ }
+ addLauncher(sl);
+ });
+ restored.forAllPackages(sp -> {
+ // If the app is already installed and allowbackup = false, then ignore the restored
+ // data.
+ if (s.isPackageInstalled(sp.getPackageName(), getUserId())
+ && !s.shouldBackupApp(sp.getPackageName(), getUserId())) {
+ return;
+ }
+
+ final ShortcutPackage previous = getPackageShortcutsIfExists(sp.getPackageName());
+ if (previous != null && previous.hasNonManifestShortcuts()) {
+ Log.w(TAG, "Shortcuts for package " + sp.getPackageName() + " are being restored."
+ + " Existing non-manifeset shortcuts will be overwritten.");
+ }
+ addPackage(sp);
+ });
+ // Empty the launchers and packages in restored to avoid accidentally using them.
+ restored.mLaunchers.clear();
+ restored.mPackages.clear();
+ }
+
public void dump(@NonNull PrintWriter pw, @NonNull String prefix) {
pw.print(prefix);
pw.print("User: ");
@@ -457,6 +532,8 @@
pw.print(mLastAppScanTime);
pw.print("] ");
pw.print(ShortcutService.formatTime(mLastAppScanTime));
+ pw.print(" Last app scan FP: ");
+ pw.print(mLastAppScanOsFingerprint);
pw.println();
prefix += prefix + " ";
diff --git a/services/core/java/com/android/server/pm/UserManagerService.java b/services/core/java/com/android/server/pm/UserManagerService.java
index c9ad49a..af055da 100644
--- a/services/core/java/com/android/server/pm/UserManagerService.java
+++ b/services/core/java/com/android/server/pm/UserManagerService.java
@@ -180,7 +180,8 @@
UserInfo.FLAG_MANAGED_PROFILE
| UserInfo.FLAG_EPHEMERAL
| UserInfo.FLAG_RESTRICTED
- | UserInfo.FLAG_GUEST;
+ | UserInfo.FLAG_GUEST
+ | UserInfo.FLAG_DEMO;
private static final int MIN_USER_ID = 10;
// We need to keep process uid within Integer.MAX_VALUE.
diff --git a/services/core/java/com/android/server/policy/GlobalActions.java b/services/core/java/com/android/server/policy/GlobalActions.java
index 6fc15f0..bb91f76 100644
--- a/services/core/java/com/android/server/policy/GlobalActions.java
+++ b/services/core/java/com/android/server/policy/GlobalActions.java
@@ -103,6 +103,7 @@
private static final String GLOBAL_ACTION_KEY_LOCKDOWN = "lockdown";
private static final String GLOBAL_ACTION_KEY_VOICEASSIST = "voiceassist";
private static final String GLOBAL_ACTION_KEY_ASSIST = "assist";
+ private static final String GLOBAL_ACTION_KEY_RESTART = "restart";
private final Context mContext;
private final WindowManagerFuncs mWindowManagerFuncs;
@@ -298,6 +299,8 @@
mItems.add(getVoiceAssistAction());
} else if (GLOBAL_ACTION_KEY_ASSIST.equals(actionKey)) {
mItems.add(getAssistAction());
+ } else if (GLOBAL_ACTION_KEY_RESTART.equals(actionKey)) {
+ mItems.add(new RestartAction());
} else {
Log.e(TAG, "Invalid global action key " + actionKey);
}
@@ -369,6 +372,38 @@
}
}
+ private final class RestartAction extends SinglePressAction implements LongPressAction {
+ private RestartAction() {
+ super(R.drawable.ic_restart, R.string.global_action_restart);
+ }
+
+ @Override
+ public boolean onLongPress() {
+ UserManager um = (UserManager) mContext.getSystemService(Context.USER_SERVICE);
+ if (!um.hasUserRestriction(UserManager.DISALLOW_SAFE_BOOT)) {
+ mWindowManagerFuncs.rebootSafeMode(true);
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public boolean showDuringKeyguard() {
+ return true;
+ }
+
+ @Override
+ public boolean showBeforeProvisioning() {
+ return true;
+ }
+
+ @Override
+ public void onPress() {
+ mWindowManagerFuncs.reboot(false /* confirm */);
+ }
+ }
+
+
private class BugReportAction extends SinglePressAction implements LongPressAction {
public BugReportAction() {
diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/android/server/policy/PhoneWindowManager.java
index f7454a3..422c00f 100644
--- a/services/core/java/com/android/server/policy/PhoneWindowManager.java
+++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java
@@ -200,6 +200,11 @@
static final int MULTI_PRESS_POWER_THEATER_MODE = 1;
static final int MULTI_PRESS_POWER_BRIGHTNESS_BOOST = 2;
+ // Number of presses needed before we induce panic press behavior on the back button
+ static final int PANIC_PRESS_BACK_COUNT = 4;
+ static final int PANIC_PRESS_BACK_NOTHING = 0;
+ static final int PANIC_PRESS_BACK_HOME = 1;
+
// These need to match the documentation/constant in
// core/res/res/values/config.xml
static final int LONG_PRESS_HOME_NOTHING = 0;
@@ -301,6 +306,9 @@
/** Amount of time (in milliseconds) to wait for windows drawn before powering on. */
static final int WAITING_FOR_DRAWN_TIMEOUT = 1000;
+ /** Amount of time (in milliseconds) a toast window can be shown. */
+ public static final int TOAST_WINDOW_TIMEOUT = 3500; // 3.5 seconds
+
/**
* Lock protecting internal state. Must not call out into window
* manager with lock held. (This lock will be acquired in places
@@ -406,6 +414,7 @@
volatile boolean mBackKeyHandled;
volatile boolean mBeganFromNonInteractive;
volatile int mPowerKeyPressCounter;
+ volatile int mBackKeyPressCounter;
volatile boolean mEndCallKeyHandled;
volatile boolean mCameraGestureTriggeredDuringGoingToSleep;
volatile boolean mGoingToSleep;
@@ -464,6 +473,7 @@
int mDoublePressOnPowerBehavior;
int mTriplePressOnPowerBehavior;
int mLongPressOnBackBehavior;
+ int mPanicPressOnBackBehavior;
int mShortPressOnSleepBehavior;
int mShortPressWindowBehavior;
boolean mAwake;
@@ -726,6 +736,7 @@
private static final int MSG_SHOW_TV_PICTURE_IN_PICTURE_MENU = 17;
private static final int MSG_BACK_LONG_PRESS = 18;
private static final int MSG_DISPOSE_INPUT_CONSUMER = 19;
+ private static final int MSG_BACK_DELAYED_PRESS = 20;
private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_STATUS = 0;
private static final int MSG_REQUEST_TRANSIENT_BARS_ARG_NAVIGATION = 1;
@@ -792,10 +803,15 @@
break;
case MSG_BACK_LONG_PRESS:
backLongPress();
+ finishBackKeyPress();
break;
case MSG_DISPOSE_INPUT_CONSUMER:
disposeInputConsumer((InputConsumer) msg.obj);
break;
+ case MSG_BACK_DELAYED_PRESS:
+ backMultiPressAction((Long) msg.obj, msg.arg1);
+ finishBackKeyPress();
+ break;
}
}
}
@@ -1010,6 +1026,52 @@
}
}
+ private void interceptBackKeyDown() {
+ // Reset back key state for long press
+ mBackKeyHandled = false;
+
+ // Cancel multi-press detection timeout.
+ if (hasPanicPressOnBackBehavior()) {
+ if (mBackKeyPressCounter != 0
+ && mBackKeyPressCounter < PANIC_PRESS_BACK_COUNT) {
+ mHandler.removeMessages(MSG_BACK_DELAYED_PRESS);
+ }
+ }
+
+ if (hasLongPressOnBackBehavior()) {
+ Message msg = mHandler.obtainMessage(MSG_BACK_LONG_PRESS);
+ msg.setAsynchronous(true);
+ mHandler.sendMessageDelayed(msg,
+ ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());
+ }
+ }
+
+ // returns true if the key was handled and should not be passed to the user
+ private boolean interceptBackKeyUp(KeyEvent event) {
+ // Cache handled state
+ boolean handled = mBackKeyHandled;
+
+ if (hasPanicPressOnBackBehavior()) {
+ // Check for back key panic press
+ ++mBackKeyPressCounter;
+
+ final long eventTime = event.getDownTime();
+
+ if (mBackKeyPressCounter <= PANIC_PRESS_BACK_COUNT) {
+ // This could be a multi-press. Wait a little bit longer to confirm.
+ Message msg = mHandler.obtainMessage(MSG_BACK_DELAYED_PRESS,
+ mBackKeyPressCounter, 0, eventTime);
+ msg.setAsynchronous(true);
+ mHandler.sendMessageDelayed(msg, ViewConfiguration.getMultiPressTimeout());
+ }
+ }
+
+ // Reset back long press state
+ cancelPendingBackKeyAction();
+
+ return handled;
+ }
+
private void interceptPowerKeyDown(KeyEvent event, boolean interactive) {
// Hold a wake lock until the power key is released.
if (!mPowerKeyWakeLock.isHeld()) {
@@ -1140,6 +1202,10 @@
}
}
+ private void finishBackKeyPress() {
+ mBackKeyPressCounter = 0;
+ }
+
private void cancelPendingPowerKeyAction() {
if (!mPowerKeyHandled) {
mPowerKeyHandled = true;
@@ -1154,6 +1220,18 @@
}
}
+ private void backMultiPressAction(long eventTime, int count) {
+ if (count >= PANIC_PRESS_BACK_COUNT) {
+ switch (mPanicPressOnBackBehavior) {
+ case PANIC_PRESS_BACK_NOTHING:
+ break;
+ case PANIC_PRESS_BACK_HOME:
+ launchHomeFromHotKey();
+ break;
+ }
+ }
+ }
+
private void powerPress(long eventTime, boolean interactive, int count) {
if (mScreenOnEarly && !mScreenOnFully) {
Slog.i(TAG, "Suppressed redundant power key press while "
@@ -1312,6 +1390,10 @@
return mLongPressOnBackBehavior != LONG_PRESS_BACK_NOTHING;
}
+ private boolean hasPanicPressOnBackBehavior() {
+ return mPanicPressOnBackBehavior != PANIC_PRESS_BACK_NOTHING;
+ }
+
private void interceptScreenshotChord() {
if (mScreenshotChordEnabled
&& mScreenshotChordVolumeDownKeyTriggered && mScreenshotChordPowerKeyTriggered
@@ -1639,6 +1721,8 @@
mLongPressOnBackBehavior = mContext.getResources().getInteger(
com.android.internal.R.integer.config_longPressOnBackBehavior);
+ mPanicPressOnBackBehavior = mContext.getResources().getInteger(
+ com.android.internal.R.integer.config_backPanicBehavior);
mShortPressOnPowerBehavior = mContext.getResources().getInteger(
com.android.internal.R.integer.config_shortPressOnPowerBehavior);
@@ -2229,9 +2313,22 @@
attrs.privateFlags &= ~WindowManager.LayoutParams.PRIVATE_FLAG_KEYGUARD;
}
break;
+
case TYPE_SCREENSHOT:
attrs.flags |= WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
break;
+
+ case TYPE_TOAST:
+ // While apps should use the dedicated toast APIs to add such windows
+ // it possible legacy apps to add the window directly. Therefore, we
+ // make windows added directly by the app behave as a toast as much
+ // as possible in terms of timeout and animation.
+ if (attrs.hideTimeoutMilliseconds < 0
+ || attrs.hideTimeoutMilliseconds > TOAST_WINDOW_TIMEOUT) {
+ attrs.hideTimeoutMilliseconds = TOAST_WINDOW_TIMEOUT;
+ }
+ attrs.windowAnimations = com.android.internal.R.style.Animation_Toast;
+ break;
}
if (attrs.type != TYPE_STATUS_BAR) {
@@ -2805,7 +2902,11 @@
if (mNavigationBarPosition == NAV_BAR_BOTTOM) {
if (transit == TRANSIT_EXIT
|| transit == TRANSIT_HIDE) {
- return R.anim.dock_bottom_exit;
+ if (isKeyguardShowingAndNotOccluded()) {
+ return R.anim.dock_bottom_exit_keyguard;
+ } else {
+ return R.anim.dock_bottom_exit;
+ }
} else if (transit == TRANSIT_ENTER
|| transit == TRANSIT_SHOW) {
return R.anim.dock_bottom_enter;
@@ -2891,6 +2992,7 @@
}
switch (animationHint) {
case ROTATION_ANIMATION_CROSSFADE:
+ case ROTATION_ANIMATION_SEAMLESS: // Crossfade is fallback for seamless.
anim[0] = R.anim.rotation_animation_xfade_exit;
anim[1] = R.anim.rotation_animation_enter;
break;
@@ -5317,12 +5419,18 @@
boolean showing = mKeyguardDelegate.isShowing();
if (wasOccluded && !isOccluded && showing) {
mKeyguardOccluded = false;
- mKeyguardDelegate.setOccluded(false);
+ mKeyguardDelegate.setOccluded(false, true /* animate */);
mStatusBar.getAttrs().privateFlags |= PRIVATE_FLAG_KEYGUARD;
+ if (!mKeyguardDelegate.hasLockscreenWallpaper()) {
+ mStatusBar.getAttrs().flags |= FLAG_SHOW_WALLPAPER;
+ }
+ Animation anim = AnimationUtils.loadAnimation(mContext,
+ com.android.internal.R.anim.wallpaper_open_exit);
+ mWindowManagerFuncs.overridePlayingAppAnimationsLw(anim);
return true;
} else if (!wasOccluded && isOccluded && showing) {
mKeyguardOccluded = true;
- mKeyguardDelegate.setOccluded(true);
+ mKeyguardDelegate.setOccluded(true, false /* animate */);
mStatusBar.getAttrs().privateFlags &= ~PRIVATE_FLAG_KEYGUARD;
mStatusBar.getAttrs().flags &= ~FLAG_SHOW_WALLPAPER;
return true;
@@ -5621,20 +5729,11 @@
switch (keyCode) {
case KeyEvent.KEYCODE_BACK: {
if (down) {
- mBackKeyHandled = false;
- if (hasLongPressOnBackBehavior()) {
- Message msg = mHandler.obtainMessage(MSG_BACK_LONG_PRESS);
- msg.setAsynchronous(true);
- mHandler.sendMessageDelayed(msg,
- ViewConfiguration.get(mContext).getDeviceGlobalActionKeyTimeout());
- }
+ interceptBackKeyDown();
} else {
- boolean handled = mBackKeyHandled;
+ boolean handled = interceptBackKeyUp(event);
- // Reset back key state
- cancelPendingBackKeyAction();
-
- // Don't pass back press to app if we've already handled it
+ // Don't pass back press to app if we've already handled it via long press
if (handled) {
result &= ~ACTION_PASS_TO_USER;
}
@@ -7751,14 +7850,18 @@
return false;
}
+ final WindowState w = mTopFullscreenOpaqueWindowState;
+ if (w != mFocusedWindow) {
+ return false;
+ }
+
// We only enable seamless rotation if the top window has requested
// it and is in the fullscreen opaque state. Seamless rotation
// requires freezing various Surface states and won't work well
// with animations, so we disable it in the animation case for now.
- if (mTopFullscreenOpaqueWindowState != null && mTopIsFullscreen &&
- !mTopFullscreenOpaqueWindowState.isAnimatingLw() &&
- mTopFullscreenOpaqueWindowState.getAttrs().rotationAnimation ==
- ROTATION_ANIMATION_JUMPCUT) {
+ if (w != null && !w.isAnimatingLw() &&
+ ((w.getAttrs().rotationAnimation == ROTATION_ANIMATION_JUMPCUT) ||
+ (w.getAttrs().rotationAnimation == ROTATION_ANIMATION_SEAMLESS))) {
return true;
}
return false;
diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
index d3c592d..2af4c9b 100644
--- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
+++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceDelegate.java
@@ -180,7 +180,7 @@
mKeyguardService.onBootCompleted();
}
if (mKeyguardState.occluded) {
- mKeyguardService.setOccluded(mKeyguardState.occluded);
+ mKeyguardService.setOccluded(mKeyguardState.occluded, false /* animate */);
}
}
@@ -206,6 +206,13 @@
return false;
}
+ public boolean hasLockscreenWallpaper() {
+ if (mKeyguardService != null) {
+ return mKeyguardService.hasLockscreenWallpaper();
+ }
+ return false;
+ }
+
public boolean isInputRestricted() {
if (mKeyguardService != null) {
mKeyguardState.inputRestricted = mKeyguardService.isInputRestricted();
@@ -225,10 +232,10 @@
}
}
- public void setOccluded(boolean isOccluded) {
+ public void setOccluded(boolean isOccluded, boolean animate) {
if (mKeyguardService != null) {
- if (DEBUG) Log.v(TAG, "setOccluded(" + isOccluded + ")");
- mKeyguardService.setOccluded(isOccluded);
+ if (DEBUG) Log.v(TAG, "setOccluded(" + isOccluded + ") animate=" + animate);
+ mKeyguardService.setOccluded(isOccluded, animate);
}
mKeyguardState.occluded = isOccluded;
}
diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java
index bea3167..2169927 100644
--- a/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java
+++ b/services/core/java/com/android/server/policy/keyguard/KeyguardServiceWrapper.java
@@ -63,9 +63,9 @@
}
@Override // Binder interface
- public void setOccluded(boolean isOccluded) {
+ public void setOccluded(boolean isOccluded, boolean animate) {
try {
- mService.setOccluded(isOccluded);
+ mService.setOccluded(isOccluded, animate);
} catch (RemoteException e) {
Slog.w(TAG , "Remote Exception", e);
}
@@ -238,6 +238,10 @@
return mKeyguardStateMonitor.isTrusted();
}
+ public boolean hasLockscreenWallpaper() {
+ return mKeyguardStateMonitor.hasLockscreenWallpaper();
+ }
+
public boolean isSecure(int userId) {
return mKeyguardStateMonitor.isSecure(userId);
}
diff --git a/services/core/java/com/android/server/policy/keyguard/KeyguardStateMonitor.java b/services/core/java/com/android/server/policy/keyguard/KeyguardStateMonitor.java
index f3238c8..08eaaa9 100644
--- a/services/core/java/com/android/server/policy/keyguard/KeyguardStateMonitor.java
+++ b/services/core/java/com/android/server/policy/keyguard/KeyguardStateMonitor.java
@@ -44,6 +44,7 @@
private volatile boolean mSimSecure = true;
private volatile boolean mInputRestricted = true;
private volatile boolean mTrusted = false;
+ private volatile boolean mHasLockscreenWallpaper = false;
private int mCurrentUserId;
@@ -75,6 +76,10 @@
return mTrusted;
}
+ public boolean hasLockscreenWallpaper() {
+ return mHasLockscreenWallpaper;
+ }
+
@Override // Binder interface
public void onShowingStateChanged(boolean showing) {
mIsShowing = showing;
@@ -103,6 +108,11 @@
mTrusted = trusted;
}
+ @Override // Binder interface
+ public void onHasLockscreenWallpaperChanged(boolean hasLockscreenWallpaper) {
+ mHasLockscreenWallpaper = hasLockscreenWallpaper;
+ }
+
public void dump(String prefix, PrintWriter pw) {
pw.println(prefix + TAG);
prefix += " ";
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 2824e6e..570b93c 100644
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -2538,18 +2538,18 @@
boolean setDeviceIdleModeInternal(boolean enabled) {
synchronized (mLock) {
- if (mDeviceIdleMode != enabled) {
- mDeviceIdleMode = enabled;
- updateWakeLockDisabledStatesLocked();
- if (enabled) {
- EventLogTags.writeDeviceIdleOnPhase("power");
- } else {
- EventLogTags.writeDeviceIdleOffPhase("power");
- }
- return true;
+ if (mDeviceIdleMode == enabled) {
+ return false;
}
- return false;
+ mDeviceIdleMode = enabled;
+ updateWakeLockDisabledStatesLocked();
}
+ if (enabled) {
+ EventLogTags.writeDeviceIdleOnPhase("power");
+ } else {
+ EventLogTags.writeDeviceIdleOffPhase("power");
+ }
+ return true;
}
boolean setLightDeviceIdleModeInternal(boolean enabled) {
diff --git a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
index 0ae1717..90c711a 100644
--- a/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
+++ b/services/core/java/com/android/server/storage/DeviceStorageMonitorService.java
@@ -87,6 +87,11 @@
private static final long DEFAULT_DISK_FREE_CHANGE_REPORTING_THRESHOLD = 2 * 1024 * 1024; // 2MB
private static final long DEFAULT_CHECK_INTERVAL = MONITOR_INTERVAL*60*1000;
+ // com.android.internal.R.string.low_internal_storage_view_text_no_boot
+ // hard codes 250MB in the message as the storage space required for the
+ // boot image.
+ private static final long BOOT_IMAGE_STORAGE_REQUIREMENT = 250 * 1024 * 1024;
+
private long mFreeMem; // on /data
private long mFreeMemAfterLastCacheClear; // on /data
private long mLastReportedFreeMem;
@@ -290,9 +295,10 @@
mLowMemFlag = false;
}
}
- if (!mLowMemFlag && !mIsBootImageOnDisk) {
+ if (!mLowMemFlag && !mIsBootImageOnDisk && mFreeMem < BOOT_IMAGE_STORAGE_REQUIREMENT) {
Slog.i(TAG, "No boot image on disk due to lack of space. Sending notification");
sendNotification();
+ mLowMemFlag = true;
}
if (mFreeMem < mMemFullThreshold) {
if (!mMemFullFlag) {
@@ -383,7 +389,7 @@
@Override
public boolean isMemoryLow() {
- return mLowMemFlag || !mIsBootImageOnDisk;
+ return mLowMemFlag;
}
@Override
diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java
index d9c4254..a7b9cf4 100644
--- a/services/core/java/com/android/server/trust/TrustManagerService.java
+++ b/services/core/java/com/android/server/trust/TrustManagerService.java
@@ -102,9 +102,8 @@
private static final int MSG_START_USER = 7;
private static final int MSG_CLEANUP_USER = 8;
private static final int MSG_SWITCH_USER = 9;
- private static final int MSG_SET_DEVICE_LOCKED = 10;
- private static final int MSG_FLUSH_TRUST_USUALLY_MANAGED = 11;
- private static final int MSG_UNLOCK_USER = 12;
+ private static final int MSG_FLUSH_TRUST_USUALLY_MANAGED = 10;
+ private static final int MSG_UNLOCK_USER = 11;
private static final int TRUST_USUALLY_MANAGED_FLUSH_DELAY = 2 * 60 * 1000;
@@ -317,20 +316,6 @@
}
}
- public void setDeviceLockedForUser(int userId, boolean locked) {
- if (mLockPatternUtils.isSeparateProfileChallengeEnabled(userId)) {
- synchronized (mDeviceLockedForUser) {
- mDeviceLockedForUser.put(userId, locked);
- }
- if (locked) {
- try {
- ActivityManagerNative.getDefault().notifyLockedProfile(userId);
- } catch (RemoteException e) {
- }
- }
- }
- }
-
boolean isDeviceLockedInner(int userId) {
synchronized (mDeviceLockedForUser) {
return mDeviceLockedForUser.get(userId, true);
@@ -838,10 +823,24 @@
}
@Override
- public void setDeviceLockedForUser(int userId, boolean value) {
+ public void setDeviceLockedForUser(int userId, boolean locked) {
enforceReportPermission();
- mHandler.obtainMessage(MSG_SET_DEVICE_LOCKED, value ? 1 : 0, userId)
- .sendToTarget();
+ final long identity = Binder.clearCallingIdentity();
+ try {
+ if (mLockPatternUtils.isSeparateProfileChallengeEnabled(userId)) {
+ synchronized (mDeviceLockedForUser) {
+ mDeviceLockedForUser.put(userId, locked);
+ }
+ if (locked) {
+ try {
+ ActivityManagerNative.getDefault().notifyLockedProfile(userId);
+ } catch (RemoteException e) {
+ }
+ }
+ }
+ } finally {
+ Binder.restoreCallingIdentity(identity);
+ }
}
@Override
@@ -917,9 +916,6 @@
mCurrentUser = msg.arg1;
refreshDeviceLockedForUser(UserHandle.USER_ALL);
break;
- case MSG_SET_DEVICE_LOCKED:
- setDeviceLockedForUser(msg.arg2, msg.arg1 != 0);
- break;
case MSG_FLUSH_TRUST_USUALLY_MANAGED:
SparseBooleanArray usuallyManaged;
synchronized (mTrustUsuallyManagedForUser) {
diff --git a/services/core/java/com/android/server/twilight/TwilightService.java b/services/core/java/com/android/server/twilight/TwilightService.java
index acd6587..db7df25 100644
--- a/services/core/java/com/android/server/twilight/TwilightService.java
+++ b/services/core/java/com/android/server/twilight/TwilightService.java
@@ -151,7 +151,7 @@
}
private void startListening() {
- if (DEBUG) Slog.d(TAG, "startListening");
+ Slog.d(TAG, "startListening");
// Start listening for location updates (default: low power, max 1h, min 10m).
mLocationManager.requestLocationUpdates(
@@ -173,7 +173,7 @@
mTimeChangedReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
- if (DEBUG) Slog.d(TAG, "onReceive: " + intent);
+ Slog.d(TAG, "onReceive: " + intent);
updateTwilightState();
}
};
@@ -188,7 +188,7 @@
}
private void stopListening() {
- if (DEBUG) Slog.d(TAG, "stopListening");
+ Slog.d(TAG, "stopListening");
if (mTimeChangedReceiver != null) {
getContext().unregisterReceiver(mTimeChangedReceiver);
@@ -241,15 +241,20 @@
@Override
public void onAlarm() {
- if (DEBUG) Slog.d(TAG, "onAlarm");
+ Slog.d(TAG, "onAlarm");
updateTwilightState();
}
@Override
public void onLocationChanged(Location location) {
- if (DEBUG) Slog.d(TAG, "onLocationChanged: " + location);
- mLastLocation = location;
- updateTwilightState();
+ if (location != null) {
+ Slog.d(TAG, "onLocationChanged:"
+ + " provider=" + location.getProvider()
+ + " accuracy=" + location.getAccuracy()
+ + " time=" + location.getTime());
+ mLastLocation = location;
+ updateTwilightState();
+ }
}
@Override
diff --git a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
index 74a6131..536e646 100644
--- a/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
+++ b/services/core/java/com/android/server/wallpaper/WallpaperManagerService.java
@@ -352,9 +352,17 @@
(cropHint.right > options.outWidth ? options.outWidth - cropHint.right : 0),
(cropHint.bottom > options.outHeight ? options.outHeight - cropHint.bottom : 0));
+ // If the crop hint was larger than the image we just overshot. Patch things up.
+ if (cropHint.left < 0) {
+ cropHint.left = 0;
+ }
+ if (cropHint.top < 0) {
+ cropHint.top = 0;
+ }
+
// Don't bother cropping if what we're left with is identity
needCrop = (options.outHeight > cropHint.height()
- && options.outWidth > cropHint.width());
+ || options.outWidth > cropHint.width());
}
// scale if the crop height winds up not matching the recommended metrics
@@ -1350,7 +1358,9 @@
@Override
public ParcelFileDescriptor setWallpaper(String name, String callingPackage,
Rect cropHint, boolean allowBackup, Bundle extras, int which,
- IWallpaperManagerCallback completion) {
+ IWallpaperManagerCallback completion, int userId) {
+ userId = ActivityManager.handleIncomingUser(getCallingPid(), getCallingUid(), userId,
+ false /* all */, true /* full */, "changing wallpaper", null /* pkg */);
checkPermission(android.Manifest.permission.SET_WALLPAPER);
if ((which & (FLAG_LOCK|FLAG_SYSTEM)) == 0) {
@@ -1374,8 +1384,6 @@
}
}
- final int userId = UserHandle.getCallingUserId();
-
synchronized (mLock) {
if (DEBUG) Slog.v(TAG, "setWallpaper which=0x" + Integer.toHexString(which));
WallpaperData wallpaper;
@@ -1400,9 +1408,7 @@
wallpaper.whichPending = which;
wallpaper.setComplete = completion;
wallpaper.cropHint.set(cropHint);
- if ((which & FLAG_SYSTEM) != 0) {
- wallpaper.allowBackup = allowBackup;
- }
+ wallpaper.allowBackup = allowBackup;
}
return pfd;
} finally {
@@ -1753,12 +1759,14 @@
}
@Override
- public boolean isWallpaperBackupEligible(int userId) {
+ public boolean isWallpaperBackupEligible(int which, int userId) {
if (Binder.getCallingUid() != Process.SYSTEM_UID) {
throw new SecurityException("Only the system may call isWallpaperBackupEligible");
}
- WallpaperData wallpaper = getWallpaperSafeLocked(userId, FLAG_SYSTEM);
+ WallpaperData wallpaper = (which == FLAG_LOCK)
+ ? mLockWallpaperMap.get(userId)
+ : mWallpaperMap.get(userId);
return (wallpaper != null) ? wallpaper.allowBackup : false;
}
diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java
index d2d5c28..e5e2175 100644
--- a/services/core/java/com/android/server/wm/AccessibilityController.java
+++ b/services/core/java/com/android/server/wm/AccessibilityController.java
@@ -348,6 +348,7 @@
}
switch (type) {
case WindowManager.LayoutParams.TYPE_APPLICATION:
+ case WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION:
case WindowManager.LayoutParams.TYPE_APPLICATION_PANEL:
case WindowManager.LayoutParams.TYPE_APPLICATION_MEDIA:
case WindowManager.LayoutParams.TYPE_APPLICATION_SUB_PANEL:
diff --git a/services/core/java/com/android/server/wm/AppTransition.java b/services/core/java/com/android/server/wm/AppTransition.java
index 3aefc08..e4ec295 100644
--- a/services/core/java/com/android/server/wm/AppTransition.java
+++ b/services/core/java/com/android/server/wm/AppTransition.java
@@ -162,6 +162,9 @@
private final WindowManagerService mService;
private int mNextAppTransition = TRANSIT_UNSET;
+ private int mLastUsedAppTransition = TRANSIT_UNSET;
+ private String mLastOpeningApp;
+ private String mLastClosingApp;
private static final int NEXT_TRANSIT_TYPE_NONE = 0;
private static final int NEXT_TRANSIT_TYPE_CUSTOM = 1;
@@ -285,6 +288,13 @@
private void setAppTransition(int transit) {
mNextAppTransition = transit;
+ setLastAppTransition(TRANSIT_UNSET, null, null);
+ }
+
+ void setLastAppTransition(int transit, AppWindowToken openingApp, AppWindowToken closingApp) {
+ mLastUsedAppTransition = transit;
+ mLastOpeningApp = "" + openingApp;
+ mLastClosingApp = "" + closingApp;
}
boolean isReady() {
@@ -372,7 +382,7 @@
topOpeningAppAnimator != null ? topOpeningAppAnimator.animation : null,
topClosingAppAnimator != null ? topClosingAppAnimator.animation : null);
mService.getDefaultDisplayContentLocked().getDockedDividerController()
- .notifyAppTransitionStarting();
+ .notifyAppTransitionStarting(openingApps);
// Prolong the start for the transition when docking a task from recents, unless recents
// ended it already then we don't need to wait.
@@ -1904,6 +1914,14 @@
pw.print(prefix); pw.print("mNextAppTransitionCallback=");
pw.println(mNextAppTransitionCallback);
}
+ if (mLastUsedAppTransition != TRANSIT_NONE) {
+ pw.print(prefix); pw.print("mLastUsedAppTransition=");
+ pw.println(appTransitionToString(mLastUsedAppTransition));
+ pw.print(prefix); pw.print("mLastOpeningApp=");
+ pw.println(mLastOpeningApp);
+ pw.print(prefix); pw.print("mLastClosingApp=");
+ pw.println(mLastClosingApp);
+ }
}
public void setCurrentUser(int newUserId) {
diff --git a/services/core/java/com/android/server/wm/AppWindowToken.java b/services/core/java/com/android/server/wm/AppWindowToken.java
index a9624cf..a8a0b0e 100644
--- a/services/core/java/com/android/server/wm/AppWindowToken.java
+++ b/services/core/java/com/android/server/wm/AppWindowToken.java
@@ -17,7 +17,9 @@
package com.android.server.wm;
import static android.app.ActivityManager.StackId;
+import static android.view.WindowManager.LayoutParams.FLAG_SHOW_WALLPAPER;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
+import static android.view.WindowManagerPolicy.FINISH_LAYOUT_REDO_WALLPAPER;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ANIM;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_APP_TRANSITIONS;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_ADD_REMOVE;
@@ -28,6 +30,7 @@
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowManagerService.WINDOW_REPLACEMENT_TIMEOUT_DURATION;
import static com.android.server.wm.WindowManagerService.H.NOTIFY_ACTIVITY_DRAWN;
+import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE;
import com.android.server.input.InputApplicationHandle;
import com.android.server.wm.WindowManagerService.H;
@@ -42,6 +45,7 @@
import android.view.IApplicationToken;
import android.view.View;
import android.view.WindowManager;
+import android.view.animation.Animation;
import java.io.PrintWriter;
import java.util.ArrayDeque;
@@ -338,6 +342,7 @@
}
void clearAnimatingFlags() {
+ boolean wallpaperMightChange = false;
for (int i = allAppWindows.size() - 1; i >= 0; i--) {
final WindowState win = allAppWindows.get(i);
// We don't want to clear it out for windows that get replaced, because the
@@ -348,7 +353,6 @@
// by the client. We should let animation proceed and not clear this flag or
// they won't eventually be removed by WindowStateAnimator#finishExit.
if (!win.mWillReplaceWindow && !win.mRemoveOnExit) {
- win.mAnimatingExit = false;
// Clear mAnimating flag together with mAnimatingExit. When animation
// changes from exiting to entering, we need to clear this flag until the
// new animation gets applied, so that isAnimationStarting() becomes true
@@ -356,9 +360,24 @@
// Otherwise applySurfaceChangesTransaction will faill to skip surface
// placement for this window during this period, one or more frame will
// show up with wrong position or scale.
- win.mWinAnimator.mAnimating = false;
+ if (win.mAnimatingExit) {
+ win.mAnimatingExit = false;
+ wallpaperMightChange = true;
+ }
+ if (win.mWinAnimator.mAnimating) {
+ win.mWinAnimator.mAnimating = false;
+ wallpaperMightChange = true;
+ }
+ if (win.mDestroying) {
+ win.mDestroying = false;
+ service.mDestroySurface.remove(win);
+ wallpaperMightChange = true;
+ }
}
}
+ if (wallpaperMightChange) {
+ requestUpdateWallpaperIfNeeded();
+ }
}
void destroySurfaces() {
@@ -406,6 +425,9 @@
if (displayContent != null && !displayList.contains(displayContent)) {
displayList.add(displayContent);
}
+ if (cleanupOnResume) {
+ win.requestUpdateWallpaperIfNeeded();
+ }
win.mDestroying = false;
}
for (int i = 0; i < displayList.size(); i++) {
@@ -419,12 +441,16 @@
* Notify that the app is now resumed, and it was not stopped before, perform a clean
* up of the surfaces
*/
- void notifyAppResumed(boolean wasStopped) {
- if (DEBUG_ADD_REMOVE) Slog.v(TAG, "notifyAppResumed: wasStopped=" + wasStopped + " " + this);
+ void notifyAppResumed(boolean wasStopped, boolean allowSavedSurface) {
+ if (DEBUG_ADD_REMOVE) Slog.v(TAG, "notifyAppResumed: wasStopped=" + wasStopped
+ + " allowSavedSurface=" + allowSavedSurface + " " + this);
mAppStopped = false;
if (!wasStopped) {
destroySurfaces(true /*cleanupOnResume*/);
}
+ if (!allowSavedSurface) {
+ destroySavedSurfaces();
+ }
}
/**
@@ -814,6 +840,18 @@
}
}
+ /**
+ * See {@link WindowManagerService#overridePlayingAppAnimationsLw}
+ */
+ void overridePlayingAppAnimations(Animation a) {
+ if (mAppAnimator.isAnimating()) {
+ final WindowState win = findMainWindow();
+ final int width = win.mContainingFrame.width();
+ final int height = win.mContainingFrame.height();
+ mAppAnimator.setAnimation(a, width, height, false, STACK_CLIP_NONE);
+ }
+ }
+
@Override
void dump(PrintWriter pw, String prefix) {
super.dump(pw, prefix);
diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java
index 1d57872..b90b8643 100644
--- a/services/core/java/com/android/server/wm/DisplayContent.java
+++ b/services/core/java/com/android/server/wm/DisplayContent.java
@@ -22,19 +22,25 @@
import static android.view.WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE;
import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE;
import static android.view.WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL;
+import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static com.android.server.wm.WindowManagerDebugConfig.DEBUG_VISIBILITY;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowState.RESIZE_HANDLE_WIDTH_IN_DP;
import android.app.ActivityManager.StackId;
+import android.content.pm.ApplicationInfo;
+import android.content.pm.PackageManager;
import android.graphics.Rect;
import android.graphics.Region;
import android.graphics.Region.Op;
+import android.os.Build;
+import android.os.UserHandle;
import android.util.DisplayMetrics;
import android.util.Slog;
import android.view.Display;
import android.view.DisplayInfo;
import android.view.Surface;
+import android.view.animation.Animation;
import java.io.PrintWriter;
import java.util.ArrayList;
@@ -637,7 +643,7 @@
*/
TaskStack getDockedStackVisibleForUserLocked() {
final TaskStack stack = mService.mStackIdToStack.get(DOCKED_STACK_ID);
- return (stack != null && stack.isVisibleForUserLocked()) ? stack : null;
+ return (stack != null && stack.isVisibleLocked(true /* ignoreKeyguard */)) ? stack : null;
}
/**
@@ -674,4 +680,48 @@
return touchedWin;
}
+
+ /**
+ * See {@link WindowManagerService#overridePlayingAppAnimationsLw}.
+ */
+ void overridePlayingAppAnimationsLw(Animation a) {
+ for (int i = mStacks.size() - 1; i >= 0; i--) {
+ mStacks.get(i).overridePlayingAppAnimations(a);
+ }
+ }
+
+ boolean canAddToastWindowForUid(int uid) {
+ // We allow one toast window per UID being shown at a time.
+ WindowList windows = getWindowList();
+ final int windowCount = windows.size();
+ for (int i = 0; i < windowCount; i++) {
+ WindowState window = windows.get(i);
+ if (window.mAttrs.type == TYPE_TOAST && window.mOwnerUid == uid
+ && !window.mPermanentlyHidden && !window.mAnimatingExit) {
+ return false;
+ }
+ }
+ return true;
+ }
+
+ void scheduleToastWindowsTimeoutIfNeededLocked(WindowState oldFocus,
+ WindowState newFocus) {
+ if (oldFocus == null || (newFocus != null && newFocus.mOwnerUid == oldFocus.mOwnerUid)) {
+ return;
+ }
+ final int lostFocusUid = oldFocus.mOwnerUid;
+ WindowList windows = getWindowList();
+ final int windowCount = windows.size();
+ for (int i = 0; i < windowCount; i++) {
+ WindowState window = windows.get(i);
+ if (window.mAttrs.type == TYPE_TOAST && window.mOwnerUid == lostFocusUid) {
+ if (!mService.mH.hasMessages(WindowManagerService.H.WINDOW_HIDE_TIMEOUT, window)) {
+ mService.mH.sendMessageDelayed(
+ mService.mH.obtainMessage(
+ WindowManagerService.H.WINDOW_HIDE_TIMEOUT, window),
+ window.mAttrs.hideTimeoutMilliseconds);
+ }
+ }
+ }
+ }
}
diff --git a/services/core/java/com/android/server/wm/DockedStackDividerController.java b/services/core/java/com/android/server/wm/DockedStackDividerController.java
index f93e2ff..f8d2ee9 100644
--- a/services/core/java/com/android/server/wm/DockedStackDividerController.java
+++ b/services/core/java/com/android/server/wm/DockedStackDividerController.java
@@ -38,6 +38,7 @@
import android.graphics.Rect;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
+import android.util.ArraySet;
import android.util.Slog;
import android.view.DisplayInfo;
import android.view.IDockedStackListener;
@@ -492,8 +493,31 @@
checkMinimizeChanged(false /* animate */);
}
- void notifyAppTransitionStarting() {
+ void notifyAppTransitionStarting(ArraySet<AppWindowToken> openingApps) {
+ final boolean wasMinimized = mMinimizedDock;
checkMinimizeChanged(true /* animate */);
+
+ // We were minimized, and now we are still minimized, but somebody is trying to launch an
+ // app in docked stack, better show recent apps so we actually get unminimized! This catches
+ // any case that was missed in ActivityStarter.postStartActivityUncheckedProcessing because
+ // we couldn't retrace the launch of the app in the docked stack to the launch from
+ // homescreen.
+ if (wasMinimized && mMinimizedDock && containsAppInDockedStack(openingApps)) {
+ mService.showRecentApps(true /* fromHome */);
+ }
+ }
+
+ /**
+ * @return true if {@param apps} contains an activity in the docked stack, false otherwise.
+ */
+ private boolean containsAppInDockedStack(ArraySet<AppWindowToken> apps) {
+ for (int i = apps.size() - 1; i >= 0; i--) {
+ final AppWindowToken token = apps.valueAt(i);
+ if (token.mTask != null && token.mTask.mStack.mStackId == DOCKED_STACK_ID) {
+ return true;
+ }
+ }
+ return false;
}
boolean isMinimizedDock() {
diff --git a/services/core/java/com/android/server/wm/Task.java b/services/core/java/com/android/server/wm/Task.java
index b4387b9..ca183010 100644
--- a/services/core/java/com/android/server/wm/Task.java
+++ b/services/core/java/com/android/server/wm/Task.java
@@ -38,6 +38,7 @@
import android.util.Slog;
import android.view.DisplayInfo;
import android.view.Surface;
+import android.view.animation.Animation;
import com.android.server.EventLogTags;
@@ -624,8 +625,8 @@
//
// As we use this flag as a hint to freeze surface boundary updates,
// we'd like to only apply this to TYPE_BASE_APPLICATION,
- // windows of TYPE_APPLICATION like dialogs, could appear
- // to not be drag resizing while they resize, but we'd
+ // windows of TYPE_APPLICATION (or TYPE_DRAWN_APPLICATION) like dialogs,
+ // could appear to not be drag resizing while they resize, but we'd
// still like to manipulate their frame to update crop, etc...
//
// Anyway we don't need to synchronize position and content updates for these
@@ -677,19 +678,6 @@
return (tokensCount != 0) && mAppTokens.get(tokensCount - 1).showForAllUsers;
}
- boolean isVisibleForUser() {
- for (int i = mAppTokens.size() - 1; i >= 0; i--) {
- final AppWindowToken appToken = mAppTokens.get(i);
- for (int j = appToken.allAppWindows.size() - 1; j >= 0; j--) {
- WindowState window = appToken.allAppWindows.get(j);
- if (!window.isHiddenFromUserLocked()) {
- return true;
- }
- }
- }
- return false;
- }
-
boolean isVisible() {
for (int i = mAppTokens.size() - 1; i >= 0; i--) {
final AppWindowToken appToken = mAppTokens.get(i);
@@ -778,6 +766,15 @@
return mStack.getDisplayContent().getDisplayInfo();
}
+ /**
+ * See {@link WindowManagerService#overridePlayingAppAnimationsLw}
+ */
+ void overridePlayingAppAnimations(Animation a) {
+ for (int i = mAppTokens.size() - 1; i >= 0; i--) {
+ mAppTokens.get(i).overridePlayingAppAnimations(a);
+ }
+ }
+
@Override
public String toString() {
return "{taskId=" + mTaskId + " appTokens=" + mAppTokens + " mdr=" + mDeferRemoval + "}";
diff --git a/services/core/java/com/android/server/wm/TaskStack.java b/services/core/java/com/android/server/wm/TaskStack.java
index 8be5b19..8f8f642 100644
--- a/services/core/java/com/android/server/wm/TaskStack.java
+++ b/services/core/java/com/android/server/wm/TaskStack.java
@@ -44,6 +44,7 @@
import android.view.DisplayInfo;
import android.view.Surface;
import android.view.SurfaceControl;
+import android.view.animation.Animation;
import com.android.internal.policy.DividerSnapAlgorithm;
import com.android.internal.policy.DividerSnapAlgorithm.SnapTarget;
@@ -398,23 +399,21 @@
return false;
}
- final int oldDockSide = mStackId == DOCKED_STACK_ID ? getDockSide() : DOCKED_INVALID;
mTmpRect2.set(mBounds);
mDisplayContent.rotateBounds(mRotation, newRotation, mTmpRect2);
if (mStackId == DOCKED_STACK_ID) {
repositionDockedStackAfterRotation(mTmpRect2);
snapDockedStackAfterRotation(mTmpRect2);
final int newDockSide = getDockSide(mTmpRect2);
- if (oldDockSide != newDockSide) {
- // Update the dock create mode and clear the dock create bounds, these
- // might change after a rotation and the original values will be invalid.
- mService.setDockedStackCreateStateLocked(
- (newDockSide == DOCKED_LEFT || newDockSide == DOCKED_TOP)
- ? DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT
- : DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT,
- null);
- mDisplayContent.getDockedDividerController().notifyDockSideChanged(newDockSide);
- }
+
+ // Update the dock create mode and clear the dock create bounds, these
+ // might change after a rotation and the original values will be invalid.
+ mService.setDockedStackCreateStateLocked(
+ (newDockSide == DOCKED_LEFT || newDockSide == DOCKED_TOP)
+ ? DOCKED_STACK_CREATE_MODE_TOP_OR_LEFT
+ : DOCKED_STACK_CREATE_MODE_BOTTOM_OR_RIGHT,
+ null);
+ mDisplayContent.getDockedDividerController().notifyDockSideChanged(newDockSide);
}
mBoundsAfterRotation.set(mTmpRect2);
@@ -890,7 +889,7 @@
mAdjustImeAmount = adjustAmount;
mAdjustDividerAmount = adjustDividerAmount;
updateAdjustedBounds();
- return isVisibleForUserLocked();
+ return isVisibleLocked(true /* ignoreKeyguard */);
} else {
return false;
}
@@ -926,7 +925,7 @@
if (minimizeAmount != mMinimizeAmount) {
mMinimizeAmount = minimizeAmount;
updateAdjustedBounds();
- return isVisibleForUserLocked();
+ return isVisibleLocked(true /* ignoreKeyguard*/);
} else {
return false;
}
@@ -943,7 +942,7 @@
void beginImeAdjustAnimation() {
for (int j = mTasks.size() - 1; j >= 0; j--) {
final Task task = mTasks.get(j);
- if (task.isVisibleForUser()) {
+ if (task.isVisible()) {
task.setDragResizing(true, DRAG_RESIZE_MODE_DOCKED_DIVIDER);
task.addWindowsWaitingForDrawnIfResizingChanged();
}
@@ -1233,9 +1232,13 @@
}
boolean isVisibleLocked() {
+ return isVisibleLocked(false /* ignoreKeyguard */);
+ }
+
+ boolean isVisibleLocked(boolean ignoreKeyguard) {
final boolean keyguardOn = mService.mPolicy.isKeyguardShowingOrOccluded()
&& !mService.mAnimator.mKeyguardGoingAway;
- if (keyguardOn && !StackId.isAllowedOverLockscreen(mStackId)) {
+ if (!ignoreKeyguard && keyguardOn && !StackId.isAllowedOverLockscreen(mStackId)) {
// The keyguard is showing and the stack shouldn't show on top of the keyguard.
return false;
}
@@ -1252,20 +1255,6 @@
return false;
}
- /**
- * @return true if a the stack is visible for the current in user, ignoring any other visibility
- * aspects, and false otherwise
- */
- boolean isVisibleForUserLocked() {
- for (int i = mTasks.size() - 1; i >= 0; i--) {
- final Task task = mTasks.get(i);
- if (task.isVisibleForUser()) {
- return true;
- }
- }
- return false;
- }
-
boolean isDragResizing() {
return mDragResizing;
}
@@ -1379,4 +1368,13 @@
public boolean getBoundsAnimating() {
return mBoundsAnimating;
}
+
+ /**
+ * See {@link WindowManagerService#overridePlayingAppAnimationsLw}
+ */
+ void overridePlayingAppAnimations(Animation a) {
+ for (int i = mTasks.size() - 1; i >= 0; --i) {
+ mTasks.get(i).overridePlayingAppAnimations(a);
+ }
+ }
}
diff --git a/services/core/java/com/android/server/wm/WallpaperController.java b/services/core/java/com/android/server/wm/WallpaperController.java
index a976b36..e7ceba9 100644
--- a/services/core/java/com/android/server/wm/WallpaperController.java
+++ b/services/core/java/com/android/server/wm/WallpaperController.java
@@ -586,27 +586,24 @@
if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG,
"New i: " + wallpaperTargetIndex + " old i: " + oldI);
if (oldI >= 0) {
- if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG,
- "Animating wallpapers: old#" + oldI + "=" + oldW + "; new#"
- + wallpaperTargetIndex + "=" + wallpaperTarget);
+ final boolean newTargetHidden =
+ wallpaperTarget.mAppToken != null && wallpaperTarget.mAppToken.hiddenRequested;
+ final boolean oldTargetHidden =
+ oldW.mAppToken != null && oldW.mAppToken.hiddenRequested;
+ if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG, "Animating wallpapers:"
+ + " old#" + oldI + "=" + oldW + " hidden=" + oldTargetHidden
+ + " new#" + wallpaperTargetIndex + "=" + wallpaperTarget
+ + " hidden=" + newTargetHidden);
- // Set the new target correctly.
- if (wallpaperTarget.mAppToken != null
- && wallpaperTarget.mAppToken.hiddenRequested) {
- if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG,
- "Old wallpaper still the target.");
- mWallpaperTarget = oldW;
- wallpaperTarget = oldW;
- wallpaperTargetIndex = oldI;
- }
- // Now set the upper and lower wallpaper targets correctly,
+ // Set the upper and lower wallpaper targets correctly,
// and make sure that we are positioning the wallpaper below the lower.
- else if (wallpaperTargetIndex > oldI) {
+ if (wallpaperTargetIndex > oldI) {
// The new target is on top of the old one.
if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG,
"Found target above old target.");
mUpperWallpaperTarget = wallpaperTarget;
mLowerWallpaperTarget = oldW;
+
wallpaperTarget = oldW;
wallpaperTargetIndex = oldI;
} else {
@@ -616,6 +613,22 @@
mUpperWallpaperTarget = oldW;
mLowerWallpaperTarget = wallpaperTarget;
}
+ if (newTargetHidden && !oldTargetHidden) {
+ if (DEBUG_WALLPAPER_LIGHT) Slog.v(TAG,
+ "Old wallpaper still the target.");
+ // Use the old target if new target is hidden but old target
+ // is not. If they're both hidden, still use the new target.
+ mWallpaperTarget = oldW;
+ } else if (newTargetHidden == oldTargetHidden
+ && !mService.mOpeningApps.contains(wallpaperTarget.mAppToken)
+ && (mService.mOpeningApps.contains(oldW.mAppToken)
+ || mService.mClosingApps.contains(oldW.mAppToken))) {
+ // If they're both hidden (or both not hidden), prefer the one that's
+ // currently in opening or closing app list, this allows transition
+ // selection logic to better determine the wallpaper status of
+ // opening/closing apps.
+ mWallpaperTarget = oldW;
+ }
}
}
}
@@ -744,14 +757,16 @@
}
// Now stick it in. For apps over wallpaper keep the wallpaper at the bottommost
- // layer. For keyguard over wallpaper put the wallpaper under the keyguard.
+ // layer. For keyguard over wallpaper put the wallpaper under the lowest window that
+ // is currently on screen, i.e. not hidden by policy.
int insertionIndex = 0;
if (visible && wallpaperTarget != null) {
final int type = wallpaperTarget.mAttrs.type;
final int privateFlags = wallpaperTarget.mAttrs.privateFlags;
if ((privateFlags & PRIVATE_FLAG_KEYGUARD) != 0
|| type == TYPE_KEYGUARD_SCRIM) {
- insertionIndex = windows.indexOf(wallpaperTarget);
+ insertionIndex = Math.min(windows.indexOf(wallpaperTarget),
+ findLowestWindowOnScreen(windows));
}
}
if (DEBUG_WALLPAPER_LIGHT || DEBUG_WINDOW_MOVEMENT
@@ -768,6 +783,21 @@
return changed;
}
+ /**
+ * @return The index in {@param windows} of the lowest window that is currently on screen and
+ * not hidden by the policy.
+ */
+ private int findLowestWindowOnScreen(WindowList windows) {
+ final int size = windows.size();
+ for (int index = 0; index < size; index++) {
+ final WindowState win = windows.get(index);
+ if (win.isOnScreen()) {
+ return index;
+ }
+ }
+ return Integer.MAX_VALUE;
+ }
+
boolean adjustWallpaperWindows() {
mService.mWindowPlacerLocked.mWallpaperMayChange = false;
diff --git a/services/core/java/com/android/server/wm/WindowAnimator.java b/services/core/java/com/android/server/wm/WindowAnimator.java
index e5eda05..1ee5a22 100644
--- a/services/core/java/com/android/server/wm/WindowAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowAnimator.java
@@ -119,6 +119,11 @@
// check if some got replaced and can be removed.
private boolean mRemoveReplacedWindows = false;
+ private final AppTokenList mTmpExitingAppTokens = new AppTokenList();
+
+ /** The window that was previously hiding the Keyguard. */
+ private WindowState mLastShowWinWhenLocked;
+
private String forceHidingToString() {
switch (mForceHiding) {
case KEYGUARD_NOT_SHOWN: return "KEYGUARD_NOT_SHOWN";
@@ -189,10 +194,19 @@
}
}
- final AppTokenList exitingAppTokens = stack.mExitingAppTokens;
- final int exitingCount = exitingAppTokens.size();
+ mTmpExitingAppTokens.clear();
+ mTmpExitingAppTokens.addAll(stack.mExitingAppTokens);
+
+ final int exitingCount = mTmpExitingAppTokens.size();
for (int i = 0; i < exitingCount; i++) {
- final AppWindowAnimator appAnimator = exitingAppTokens.get(i).mAppAnimator;
+ final AppWindowAnimator appAnimator = mTmpExitingAppTokens.get(i).mAppAnimator;
+ // stepAnimation can trigger finishExit->removeWindowInnerLocked
+ // ->performSurfacePlacement
+ // performSurfacePlacement will directly manipulate the mExitingAppTokens list
+ // so we need to iterate over a copy and check for modifications.
+ if (!stack.mExitingAppTokens.contains(appAnimator)) {
+ continue;
+ }
appAnimator.wasAnimating = appAnimator.animating;
if (appAnimator.stepAnimationLocked(mCurrentTime, displayId)) {
setAnimating(true);
@@ -210,13 +224,30 @@
}
}
+ /**
+ * @return The window that is currently hiding the Keyguard, or if it was hiding the Keyguard,
+ * and it's still animating.
+ */
+ private WindowState getWinShowWhenLockedOrAnimating() {
+ final WindowState winShowWhenLocked = (WindowState) mPolicy.getWinShowWhenLockedLw();
+ if (winShowWhenLocked != null) {
+ return winShowWhenLocked;
+ }
+ if (mLastShowWinWhenLocked != null && mLastShowWinWhenLocked.isOnScreen()
+ && mLastShowWinWhenLocked.isAnimatingLw()
+ && (mLastShowWinWhenLocked.mAttrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0) {
+ return mLastShowWinWhenLocked;
+ }
+ return null;
+ }
+
private boolean shouldForceHide(WindowState win) {
final WindowState imeTarget = mService.mInputMethodTarget;
final boolean showImeOverKeyguard = imeTarget != null && imeTarget.isVisibleNow() &&
((imeTarget.getAttrs().flags & FLAG_SHOW_WHEN_LOCKED) != 0
|| !mPolicy.canBeForceHidden(imeTarget, imeTarget.mAttrs));
- final WindowState winShowWhenLocked = (WindowState) mPolicy.getWinShowWhenLockedLw();
+ final WindowState winShowWhenLocked = getWinShowWhenLockedOrAnimating();
final AppWindowToken appShowWhenLocked = winShowWhenLocked == null ?
null : winShowWhenLocked.mAppToken;
@@ -230,7 +261,7 @@
allowWhenLocked |= appShowWhenLocked == win.mAppToken
// Show all SHOW_WHEN_LOCKED windows if some apps are shown over lockscreen
|| (win.mAttrs.flags & FLAG_SHOW_WHEN_LOCKED) != 0
- // Show error dialogs over apps that dismiss keyguard.
+ // Show error dialogs over apps that are shown on lockscreen
|| (win.mAttrs.privateFlags & PRIVATE_FLAG_SYSTEM_ERROR) != 0;
}
@@ -544,6 +575,11 @@
mPostKeyguardExitAnimation = null;
}
}
+
+ final WindowState winShowWhenLocked = (WindowState) mPolicy.getWinShowWhenLockedLw();
+ if (winShowWhenLocked != null) {
+ mLastShowWinWhenLocked = winShowWhenLocked;
+ }
}
private void updateWallpaperLocked(int displayId) {
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index c66f09c..707b137 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -21,6 +21,7 @@
import android.annotation.IntDef;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.ActivityManager;
import android.app.ActivityManagerInternal;
import android.app.ActivityManagerNative;
import android.app.AppOpsManager;
@@ -35,6 +36,7 @@
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.ActivityInfo;
+import android.content.pm.ApplicationInfo;
import android.content.pm.PackageManager;
import android.content.res.CompatibilityInfo;
import android.content.res.Configuration;
@@ -191,6 +193,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_BOOT_PROGRESS;
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.LayoutParams.TYPE_DREAM;
@@ -200,6 +203,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_PRIVATE_PRESENTATION;
import static android.view.WindowManager.LayoutParams.TYPE_QS_DIALOG;
import static android.view.WindowManager.LayoutParams.TYPE_STATUS_BAR;
+import static android.view.WindowManager.LayoutParams.TYPE_TOAST;
import static android.view.WindowManager.LayoutParams.TYPE_VOICE_INTERACTION;
import static android.view.WindowManager.LayoutParams.TYPE_WALLPAPER;
import static android.view.WindowManagerGlobal.RELAYOUT_DEFER_SURFACE_DESTROY;
@@ -248,6 +252,7 @@
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WITH_CLASS_NAME;
import static com.android.server.wm.WindowManagerDebugConfig.TAG_WM;
import static com.android.server.wm.WindowStateAnimator.DRAW_PENDING;
+import static com.android.server.wm.WindowStateAnimator.STACK_CLIP_NONE;
/** {@hide} */
public class WindowManagerService extends IWindowManager.Stub
@@ -1867,6 +1872,7 @@
boolean reportNewConfig = false;
WindowState attachedWindow = null;
long origId;
+ final int callingUid = Binder.getCallingUid();
final int type = attrs.type;
synchronized(mWindowMap) {
@@ -1914,6 +1920,8 @@
boolean addToken = false;
WindowToken token = mTokenMap.get(attrs.token);
AppWindowToken atoken = null;
+ boolean addToastWindowRequiresToken = false;
+
if (token == null) {
if (type >= FIRST_APPLICATION_WINDOW && type <= LAST_APPLICATION_WINDOW) {
Slog.w(TAG_WM, "Attempted to add application window with unknown token "
@@ -1950,6 +1958,15 @@
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
+ if (type == TYPE_TOAST) {
+ // Apps targeting SDK above N MR1 cannot arbitrary add toast windows.
+ if (doesAddToastWindowRequireToken(attrs.packageName, callingUid,
+ attachedWindow)) {
+ Slog.w(TAG_WM, "Attempted to add a toast window with unknown token "
+ + attrs.token + ". Aborting.");
+ return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
+ }
+ }
token = new WindowToken(this, attrs.token, -1, false);
addToken = true;
} else if (type >= FIRST_APPLICATION_WINDOW && type <= LAST_APPLICATION_WINDOW) {
@@ -1999,6 +2016,15 @@
+ attrs.token + ". Aborting.");
return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
}
+ } else if (type == TYPE_TOAST) {
+ // Apps targeting SDK above N MR1 cannot arbitrary add toast windows.
+ addToastWindowRequiresToken = doesAddToastWindowRequireToken(attrs.packageName,
+ callingUid, attachedWindow);
+ if (addToastWindowRequiresToken && token.windowType != TYPE_TOAST) {
+ Slog.w(TAG_WM, "Attempted to add a toast window with bad token "
+ + attrs.token + ". Aborting.");
+ return WindowManagerGlobal.ADD_BAD_APP_TOKEN;
+ }
} else if (type == TYPE_QS_DIALOG) {
if (token.windowType != TYPE_QS_DIALOG) {
Slog.w(TAG_WM, "Attempted to add QS dialog window with bad token "
@@ -2043,6 +2069,36 @@
win.openInputChannel(outInputChannel);
}
+ // If adding a toast requires a token for this app we always schedule hiding
+ // toast windows to make sure they don't stick around longer then necessary.
+ // We hide instead of remove such windows as apps aren't prepared to handle
+ // windows being removed under them.
+ //
+ // If the app is older it can add toasts without a token and hence overlay
+ // other apps. To be maximally compatible with these apps we will hide the
+ // window after the toast timeout only if the focused window is from another
+ // UID, otherwise we allow unlimited duration. When a UID looses focus we
+ // schedule hiding all of its toast windows.
+ if (type == TYPE_TOAST) {
+ if (!getDefaultDisplayContentLocked().canAddToastWindowForUid(callingUid)) {
+ Slog.w(TAG_WM, "Adding more than one toast window for UID at a time.");
+ return WindowManagerGlobal.ADD_DUPLICATE_ADD;
+ }
+ // Make sure this happens before we moved focus as one can make the
+ // toast focusable to force it not being hidden after the timeout.
+ // Focusable toasts are always timed out to prevent a focused app to
+ // show a focusable toasts while it has focus which will be kept on
+ // the screen after the activity goes away.
+ if (addToastWindowRequiresToken
+ || (attrs.flags & LayoutParams.FLAG_NOT_FOCUSABLE) == 0
+ || mCurrentFocus == null
+ || mCurrentFocus.mOwnerUid != callingUid) {
+ mH.sendMessageDelayed(
+ mH.obtainMessage(H.WINDOW_HIDE_TIMEOUT, win),
+ win.mAttrs.hideTimeoutMilliseconds);
+ }
+ }
+
// From now on, no exceptions or errors allowed!
res = WindowManagerGlobal.ADD_OKAY;
@@ -2181,11 +2237,6 @@
if (win.isVisibleOrAdding() && updateOrientationFromAppTokensLocked(false)) {
reportNewConfig = true;
}
- if (attrs.removeTimeoutMilliseconds > 0) {
- mH.sendMessageDelayed(
- mH.obtainMessage(H.WINDOW_REMOVE_TIMEOUT, win),
- attrs.removeTimeoutMilliseconds);
- }
}
if (reportNewConfig) {
@@ -2197,6 +2248,32 @@
return res;
}
+ private boolean doesAddToastWindowRequireToken(String packageName, int callingUid,
+ WindowState attachedWindow) {
+ // Try using the target SDK of the root window
+ if (attachedWindow != null) {
+ return attachedWindow.mAppToken != null
+ && attachedWindow.mAppToken.targetSdk > Build.VERSION_CODES.N_MR1;
+ } else {
+ // Otherwise, look at the package
+ try {
+ ApplicationInfo appInfo = mContext.getPackageManager()
+ .getApplicationInfoAsUser(packageName, 0,
+ UserHandle.getUserId(callingUid));
+ if (appInfo.uid != callingUid) {
+ throw new SecurityException("Package " + packageName + " not in UID "
+ + callingUid);
+ }
+ if (appInfo.targetSdkVersion > Build.VERSION_CODES.N_MR1) {
+ return true;
+ }
+ } catch (PackageManager.NameNotFoundException e) {
+ /* ignore */
+ }
+ }
+ return false;
+ }
+
/**
* Returns true if we're done setting up any transitions.
*/
@@ -2907,12 +2984,11 @@
}
result |= RELAYOUT_RES_SURFACE_CHANGED;
}
- final WindowSurfaceController surfaceController = winAnimator.mSurfaceController;
- if (viewVisibility == View.VISIBLE && surfaceController != null) {
+ if (viewVisibility == View.VISIBLE && winAnimator.hasSurface()) {
// We already told the client to go invisible, but the message may not be
// handled yet, or it might want to draw a last frame. If we already have a
// surface, let the client use that, but don't create new surface at this point.
- surfaceController.getSurface(outSurface);
+ winAnimator.mSurfaceController.getSurface(outSurface);
} else {
if (DEBUG_VISIBILITY) Slog.i(TAG_WM, "Releasing surface in: " + win);
@@ -4479,7 +4555,7 @@
}
@Override
- public void notifyAppResumed(IBinder token, boolean wasStopped) {
+ public void notifyAppResumed(IBinder token, boolean wasStopped, boolean allowSavedSurface) {
if (!checkCallingPermission(android.Manifest.permission.MANAGE_APP_TOKENS,
"notifyAppResumed()")) {
throw new SecurityException("Requires MANAGE_APP_TOKENS permission");
@@ -4492,7 +4568,7 @@
Slog.w(TAG_WM, "Attempted to notify resumed of non-existing app token: " + token);
return;
}
- wtoken.notifyAppResumed(wasStopped);
+ wtoken.notifyAppResumed(wasStopped, allowSavedSurface);
}
}
@@ -5211,6 +5287,11 @@
}
}
+ @Override
+ public void overridePlayingAppAnimationsLw(Animation a) {
+ getDefaultDisplayContentLocked().overridePlayingAppAnimationsLw(a);
+ }
+
/**
* Re-sizes a stack and its containing tasks.
* @param stackId Id of stack to resize.
@@ -5723,6 +5804,12 @@
// Called by window manager policy. Not exposed externally.
@Override
+ public void reboot(boolean confirm) {
+ ShutdownThread.reboot(mContext, PowerManager.SHUTDOWN_USER_REQUESTED, confirm);
+ }
+
+ // Called by window manager policy. Not exposed externally.
+ @Override
public void rebootSafeMode(boolean confirm) {
ShutdownThread.rebootSafeMode(mContext, confirm);
}
@@ -5880,7 +5967,8 @@
if (w.isDrawnLw()) {
if (w.mAttrs.type == TYPE_BOOT_PROGRESS) {
haveBootMsg = true;
- } else if (w.mAttrs.type == TYPE_APPLICATION) {
+ } else if (w.mAttrs.type == TYPE_APPLICATION
+ || w.mAttrs.type == TYPE_DRAWN_APPLICATION) {
haveApp = true;
} else if (w.mAttrs.type == TYPE_WALLPAPER) {
haveWallpaper = true;
@@ -6766,6 +6854,20 @@
rotateSeamlessly = false;
break;
}
+ // In what can only be called an unfortunate workaround we require
+ // seamlessly rotated child windows to have the TRANSFORM_TO_DISPLAY_INVERSE
+ // flag. Due to limitations in the client API, there is no way for
+ // the client to set this flag in a race free fashion. If we seamlessly rotate
+ // a window which does not have this flag, but then gains it, we will get
+ // an incorrect visual result (rotated viewfinder). This means if we want to
+ // support seamlessly rotating windows which could gain this flag, we can't
+ // rotate windows without it. This limits seamless rotation in N to camera framework
+ // users, windows without children, and native code. This is unfortunate but
+ // having the camera work is our primary goal.
+ if (w.isChildWindow() & w.isVisibleNow() &&
+ !w.mWinAnimator.mSurfaceController.getTransformToDisplayInverse()) {
+ rotateSeamlessly = false;
+ }
}
}
@@ -8138,7 +8240,7 @@
public static final int NOTIFY_APP_TRANSITION_FINISHED = 49;
public static final int NOTIFY_STARTING_WINDOW_DRAWN = 50;
public static final int UPDATE_ANIMATION_SCALE = 51;
- public static final int WINDOW_REMOVE_TIMEOUT = 52;
+ public static final int WINDOW_HIDE_TIMEOUT = 52;
public static final int NOTIFY_DOCKED_STACK_MINIMIZED_CHANGED = 53;
public static final int SEAMLESS_ROTATION_TIMEOUT = 54;
@@ -8758,7 +8860,7 @@
mAmInternal.notifyStartingWindowDrawn();
}
break;
- case WINDOW_REMOVE_TIMEOUT: {
+ case WINDOW_HIDE_TIMEOUT: {
final WindowState window = (WindowState) msg.obj;
synchronized(mWindowMap) {
// TODO: This is all about fixing b/21693547
@@ -8769,8 +8871,11 @@
// running under debugger) to crash (b/29105388). The windows will
// eventually be removed when the client process finishes.
// The best we can do for now is remove the FLAG_KEEP_SCREEN_ON
- // and prevent the symptoms of b/21693547.
+ // and prevent the symptoms of b/21693547. Since apps don't
+ // support windows being removed under them we hide the window
+ // and it will be removed when the app dies.
window.mAttrs.flags &= ~FLAG_KEEP_SCREEN_ON;
+ window.hidePermanentlyLw();
window.setDisplayLayoutNeeded();
mWindowPlacerLocked.performSurfacePlacement();
}
@@ -9088,7 +9193,7 @@
}
@Override
- public void setForcedDisplayDensity(int displayId, int density) {
+ public void setForcedDisplayDensityForUser(int displayId, int density, int userId) {
if (mContext.checkCallingOrSelfPermission(
android.Manifest.permission.WRITE_SECURE_SETTINGS) !=
PackageManager.PERMISSION_GRANTED) {
@@ -9098,16 +9203,20 @@
if (displayId != Display.DEFAULT_DISPLAY) {
throw new IllegalArgumentException("Can only set the default display");
}
+
+ final int targetUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
+ Binder.getCallingUid(), userId, false, true, "setForcedDisplayDensityForUser",
+ null);
final long ident = Binder.clearCallingIdentity();
try {
synchronized(mWindowMap) {
final DisplayContent displayContent = getDisplayContentLocked(displayId);
- if (displayContent != null) {
+ if (displayContent != null && mCurrentUserId == targetUserId) {
setForcedDisplayDensityLocked(displayContent, density);
- Settings.Secure.putStringForUser(mContext.getContentResolver(),
- Settings.Secure.DISPLAY_DENSITY_FORCED,
- Integer.toString(density), mCurrentUserId);
}
+ Settings.Secure.putStringForUser(mContext.getContentResolver(),
+ Settings.Secure.DISPLAY_DENSITY_FORCED,
+ Integer.toString(density), targetUserId);
}
} finally {
Binder.restoreCallingIdentity(ident);
@@ -9115,7 +9224,7 @@
}
@Override
- public void clearForcedDisplayDensity(int displayId) {
+ public void clearForcedDisplayDensityForUser(int displayId, int userId) {
if (mContext.checkCallingOrSelfPermission(
android.Manifest.permission.WRITE_SECURE_SETTINGS) !=
PackageManager.PERMISSION_GRANTED) {
@@ -9125,16 +9234,20 @@
if (displayId != Display.DEFAULT_DISPLAY) {
throw new IllegalArgumentException("Can only set the default display");
}
+
+ final int callingUserId = ActivityManager.handleIncomingUser(Binder.getCallingPid(),
+ Binder.getCallingUid(), userId, false, true, "clearForcedDisplayDensityForUser",
+ null);
final long ident = Binder.clearCallingIdentity();
try {
synchronized(mWindowMap) {
final DisplayContent displayContent = getDisplayContentLocked(displayId);
- if (displayContent != null) {
+ if (displayContent != null && mCurrentUserId == callingUserId) {
setForcedDisplayDensityLocked(displayContent,
displayContent.mInitialDisplayDensity);
- Settings.Secure.putStringForUser(mContext.getContentResolver(),
- Settings.Secure.DISPLAY_DENSITY_FORCED, "", mCurrentUserId);
}
+ Settings.Secure.putStringForUser(mContext.getContentResolver(),
+ Settings.Secure.DISPLAY_DENSITY_FORCED, "", callingUserId);
}
} finally {
Binder.restoreCallingIdentity(ident);
@@ -9806,6 +9919,12 @@
adjustForImeIfNeeded(displayContent);
+ // We may need to schedule some toast windows to be removed. The
+ // toasts for an app that does not have input focus are removed
+ // within a timeout to prevent apps to redress other apps' UI.
+ getDefaultDisplayContentLocked().scheduleToastWindowsTimeoutIfNeededLocked(
+ oldFocus, newFocus);
+
Trace.traceEnd(Trace.TRACE_TAG_WINDOW_MANAGER);
return true;
}
diff --git a/services/core/java/com/android/server/wm/WindowState.java b/services/core/java/com/android/server/wm/WindowState.java
index a00ac5d..1fa0783 100644
--- a/services/core/java/com/android/server/wm/WindowState.java
+++ b/services/core/java/com/android/server/wm/WindowState.java
@@ -87,6 +87,7 @@
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_STARTING;
import static android.view.WindowManager.LayoutParams.TYPE_BASE_APPLICATION;
+import static android.view.WindowManager.LayoutParams.TYPE_DRAWN_APPLICATION;
import static android.view.WindowManager.LayoutParams.TYPE_DOCK_DIVIDER;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD;
import static android.view.WindowManager.LayoutParams.TYPE_INPUT_METHOD_DIALOG;
@@ -165,6 +166,7 @@
boolean mPolicyVisibility = true;
boolean mPolicyVisibilityAfterAnim = true;
boolean mAppOpVisibility = true;
+ boolean mPermanentlyHidden; // the window should never be shown again
boolean mAppFreezing;
boolean mAttachedHidden; // is our parent window hidden?
boolean mWallpaperVisible; // for wallpaper, what was last vis report?
@@ -1289,7 +1291,8 @@
final boolean isViewVisible = (mAppToken == null || !mAppToken.clientHidden)
&& (mViewVisibility == View.VISIBLE) && !mWindowRemovalAllowed;
return (isOnScreenIgnoringKeyguard() && (!visibleOnly || isViewVisible)
- || mWinAnimator.mAttrType == TYPE_BASE_APPLICATION)
+ || mWinAnimator.mAttrType == TYPE_BASE_APPLICATION
+ || mWinAnimator.mAttrType == TYPE_DRAWN_APPLICATION)
&& !mAnimatingExit && !mDestroying;
}
@@ -1334,7 +1337,8 @@
&& ((!mAttachedHidden && mViewVisibility == View.VISIBLE && !mRootToken.hidden)
|| mWinAnimator.mAnimation != null
|| ((atoken != null) && (atoken.mAppAnimator.animation != null)
- && !mWinAnimator.isDummyAnimation()));
+ && !mWinAnimator.isDummyAnimation())
+ || isAnimatingWithSavedSurface());
}
/**
@@ -1873,6 +1877,11 @@
// Being hidden due to app op request.
return false;
}
+ if (mPermanentlyHidden) {
+ // Permanently hidden until the app exists as apps aren't prepared
+ // to handle their windows being removed from under them.
+ return false;
+ }
if (mPolicyVisibility && mPolicyVisibilityAfterAnim) {
// Already showing.
return false;
@@ -1963,6 +1972,13 @@
}
}
+ public void hidePermanentlyLw() {
+ if (!mPermanentlyHidden) {
+ mPermanentlyHidden = true;
+ hideLw(true, true);
+ }
+ }
+
public void pokeDrawLockLw(long timeout) {
if (isVisibleOrAdding()) {
if (mDrawLock == null) {
@@ -2612,7 +2628,7 @@
pw.println(Integer.toHexString(mSystemUiVisibility));
}
if (!mPolicyVisibility || !mPolicyVisibilityAfterAnim || !mAppOpVisibility
- || mAttachedHidden) {
+ || mAttachedHidden || mPermanentlyHidden) {
pw.print(prefix); pw.print("mPolicyVisibility=");
pw.print(mPolicyVisibility);
pw.print(" mPolicyVisibilityAfterAnim=");
@@ -2620,6 +2636,7 @@
pw.print(" mAppOpVisibility=");
pw.print(mAppOpVisibility);
pw.print(" mAttachedHidden="); pw.println(mAttachedHidden);
+ pw.print(" mPermanentlyHidden="); pw.println(mPermanentlyHidden);
}
if (!mRelayoutCalled || mLayoutNeeded) {
pw.print(prefix); pw.print("mRelayoutCalled="); pw.print(mRelayoutCalled);
@@ -2924,12 +2941,13 @@
// for only child windows (as the main window is handled by window preservation)
// and the big surface.
//
- // Though windows of TYPE_APPLICATION (as opposed to TYPE_BASE_APPLICATION)
- // are not children in the sense of an attached window, we also want to replace
- // them at such phases, as they won't be covered by window preservation,
- // and in general we expect them to return following relaunch.
+ // Though windows of TYPE_APPLICATION or TYPE_DRAWN_APPLICATION (as opposed to
+ // TYPE_BASE_APPLICATION) are not children in the sense of an attached window,
+ // we also want to replace them at such phases, as they won't be covered by window
+ // preservation, and in general we expect them to return following relaunch.
boolean shouldBeReplacedWithChildren() {
- return isChildWindow() || mAttrs.type == TYPE_APPLICATION;
+ return isChildWindow() || mAttrs.type == TYPE_APPLICATION
+ || mAttrs.type == TYPE_DRAWN_APPLICATION;
}
public int getRotationAnimationHint() {
diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/android/server/wm/WindowStateAnimator.java
index e374ee9..0285f70 100644
--- a/services/core/java/com/android/server/wm/WindowStateAnimator.java
+++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java
@@ -228,8 +228,6 @@
int mAttrType;
static final long PENDING_TRANSACTION_FINISH_WAIT_TIME = 100;
- long mDeferTransactionUntilFrame = -1;
- long mDeferTransactionTime = -1;
boolean mForceScaleUntilResize;
@@ -926,6 +924,22 @@
mPendingDestroySurface = null;
}
+ void applyMagnificationSpec(MagnificationSpec spec, Matrix transform) {
+ final int surfaceInsetLeft = mWin.mAttrs.surfaceInsets.left;
+ final int surfaceInsetTop = mWin.mAttrs.surfaceInsets.top;
+
+ if (spec != null && !spec.isNop()) {
+ float scale = spec.scale;
+ transform.postScale(scale, scale);
+ transform.postTranslate(spec.offsetX, spec.offsetY);
+
+ // As we are scaling the whole surface, to keep the content
+ // in the same position we will also have to scale the surfaceInsets.
+ transform.postTranslate(-(surfaceInsetLeft*scale - surfaceInsetLeft),
+ -(surfaceInsetTop*scale - surfaceInsetTop));
+ }
+ }
+
void computeShownFrameLocked() {
final boolean selfTransformation = mHasLocalTransformation;
Transformation attachedTransformation =
@@ -1016,10 +1030,7 @@
if (mService.mAccessibilityController != null && displayId == DEFAULT_DISPLAY) {
MagnificationSpec spec = mService.mAccessibilityController
.getMagnificationSpecForWindowLocked(mWin);
- if (spec != null && !spec.isNop()) {
- tmpMatrix.postScale(spec.scale, spec.scale);
- tmpMatrix.postTranslate(spec.offsetX, spec.offsetY);
- }
+ applyMagnificationSpec(spec, tmpMatrix);
}
// "convert" it into SurfaceFlinger's format
@@ -1118,10 +1129,7 @@
tmpMatrix.setScale(mWin.mGlobalScale, mWin.mGlobalScale);
tmpMatrix.postTranslate(frame.left + mWin.mXOffset, frame.top + mWin.mYOffset);
- if (spec != null && !spec.isNop()) {
- tmpMatrix.postScale(spec.scale, spec.scale);
- tmpMatrix.postTranslate(spec.offsetX, spec.offsetY);
- }
+ applyMagnificationSpec(spec, tmpMatrix);
tmpMatrix.getValues(tmpFloats);
@@ -2045,34 +2053,11 @@
if (!mWin.isChildWindow()) {
return;
}
- mDeferTransactionUntilFrame = frameNumber;
- mDeferTransactionTime = System.currentTimeMillis();
mSurfaceController.deferTransactionUntil(
mWin.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(),
frameNumber);
}
- // Defer the current transaction to the frame number of the last saved transaction.
- // We do this to avoid shooting through an unsynchronized transaction while something is
- // pending. This is generally fine, as either we will get in on the synchronization,
- // or SurfaceFlinger will see that the frame has already occured. The only
- // potential problem is in frame number resets so we reset things with a timeout
- // every so often to be careful.
- void deferToPendingTransaction() {
- if (mDeferTransactionUntilFrame < 0) {
- return;
- }
- long time = System.currentTimeMillis();
- if (time > mDeferTransactionTime + PENDING_TRANSACTION_FINISH_WAIT_TIME) {
- mDeferTransactionTime = -1;
- mDeferTransactionUntilFrame = -1;
- } else {
- mSurfaceController.deferTransactionUntil(
- mWin.mAttachedWindow.mWinAnimator.mSurfaceController.getHandle(),
- mDeferTransactionUntilFrame);
- }
- }
-
/**
* Sometimes we need to synchronize the first frame of animation with some external event.
* To achieve this, we prolong the start of the animation and keep producing the first frame of
diff --git a/services/core/java/com/android/server/wm/WindowSurfaceController.java b/services/core/java/com/android/server/wm/WindowSurfaceController.java
index c77e572..f5ed9d1 100644
--- a/services/core/java/com/android/server/wm/WindowSurfaceController.java
+++ b/services/core/java/com/android/server/wm/WindowSurfaceController.java
@@ -153,9 +153,9 @@
}
void destroyInTransaction() {
- // if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) {
- Slog.i(TAG, "Destroying surface " + this + " called by " + Debug.getCallers(8));
- // }
+ if (SHOW_TRANSACTIONS || SHOW_SURFACE_ALLOC) {
+ Slog.i(TAG, "Destroying surface " + this + " called by " + Debug.getCallers(8));
+ }
try {
if (mSurfaceControl != null) {
mSurfaceControl.destroy();
diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
index ee4a9a4..5a79da9 100644
--- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
+++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java
@@ -742,10 +742,6 @@
// Moved from updateWindowsAndWallpaperLocked().
if (w.mHasSurface) {
- // If we have recently synchronized a previous transaction for this
- // window ensure we don't push through an unsynchronized one now.
- winAnimator.deferToPendingTransaction();
-
// Take care of the window being ready to display.
final boolean committed = winAnimator.commitFinishDrawingLocked();
if (isDefaultDisplay && committed) {
@@ -1097,6 +1093,26 @@
boolean fullscreenAnim = false;
boolean voiceInteraction = false;
+ int i;
+ for (i = 0; i < appsCount; i++) {
+ final AppWindowToken wtoken = mService.mOpeningApps.valueAt(i);
+ // Clearing the mAnimatingExit flag before entering animation. It's set to
+ // true if app window is removed, or window relayout to invisible.
+ // This also affects window visibility. We need to clear it *before*
+ // maybeUpdateTransitToWallpaper() as the transition selection depends on
+ // wallpaper target visibility.
+ wtoken.clearAnimatingFlags();
+
+ }
+ // Adjust wallpaper before we pull the lower/upper target, since pending changes
+ // (like the clearAnimatingFlags() above) might affect wallpaper target result.
+ final DisplayContent displayContent = mService.getDefaultDisplayContentLocked();
+ if ((displayContent.pendingLayoutChanges & FINISH_LAYOUT_REDO_WALLPAPER) != 0 &&
+ mWallpaperControllerLocked.adjustWallpaperWindows()) {
+ mService.mLayersController.assignLayersLocked(windows);
+ displayContent.layoutNeeded = true;
+ }
+
final WindowState lowerWallpaperTarget =
mWallpaperControllerLocked.getLowerWallpaperTarget();
final WindowState upperWallpaperTarget =
@@ -1113,7 +1129,6 @@
upperWallpaperAppToken = upperWallpaperTarget.mAppToken;
}
- int i;
// Do a first pass through the tokens for two
// things:
// (1) Determine if both the closing and opening
@@ -1138,12 +1153,6 @@
if (wtoken == lowerWallpaperAppToken || wtoken == upperWallpaperAppToken) {
openingAppHasWallpaper = true;
}
- // Clearing the mAnimatingExit flag before entering animation. It's set to
- // true if app window is removed, or window relayout to invisible.
- // This also affects window visibility. We need to clear it *before*
- // maybeUpdateTransitToWallpaper() as the transition selection depends on
- // wallpaper target visibility.
- wtoken.clearAnimatingFlags();
}
voiceInteraction |= wtoken.voiceInteraction;
@@ -1189,6 +1198,8 @@
final AppWindowToken topOpeningApp = handleOpeningApps(transit,
animLp, voiceInteraction, topClosingLayer);
+ mService.mAppTransition.setLastAppTransition(transit, topOpeningApp, topClosingApp);
+
final AppWindowAnimator openingAppAnimator = (topOpeningApp == null) ? null :
topOpeningApp.mAppAnimator;
final AppWindowAnimator closingAppAnimator = (topClosingApp == null) ? null :
@@ -1204,7 +1215,7 @@
// This has changed the visibility of windows, so perform
// a new layout to get them all up-to-date.
- mService.getDefaultDisplayContentLocked().layoutNeeded = true;
+ displayContent.layoutNeeded = true;
// TODO(multidisplay): IMEs are only supported on the default display.
if (windows == mService.getDefaultWindowListLocked()
@@ -1468,7 +1479,7 @@
mObscured = true;
}
- if (w.mHasSurface) {
+ if (w.mHasSurface && canBeSeen) {
if ((attrFlags&FLAG_KEEP_SCREEN_ON) != 0) {
mHoldScreen = w.mSession;
mHoldScreenWindow = w;
@@ -1491,43 +1502,39 @@
}
final int type = attrs.type;
- if (canBeSeen
- && (type == TYPE_SYSTEM_DIALOG
- || type == TYPE_SYSTEM_ERROR
- || (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0)) {
+ if (type == TYPE_SYSTEM_DIALOG || type == TYPE_SYSTEM_ERROR
+ || (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
mSyswin = true;
}
- if (canBeSeen) {
- // This function assumes that the contents of the default display are
- // processed first before secondary displays.
- final DisplayContent displayContent = w.getDisplayContent();
- if (displayContent != null && displayContent.isDefaultDisplay) {
- // While a dream or keyguard is showing, obscure ordinary application
- // content on secondary displays (by forcibly enabling mirroring unless
- // there is other content we want to show) but still allow opaque
- // keyguard dialogs to be shown.
- if (type == TYPE_DREAM || (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
- mObscureApplicationContentOnSecondaryDisplays = true;
- }
- mDisplayHasContent = true;
- } else if (displayContent != null &&
- (!mObscureApplicationContentOnSecondaryDisplays
- || (mObscured && type == TYPE_KEYGUARD_DIALOG))) {
- // Allow full screen keyguard presentation dialogs to be seen.
- mDisplayHasContent = true;
+ // This function assumes that the contents of the default display are
+ // processed first before secondary displays.
+ final DisplayContent displayContent = w.getDisplayContent();
+ if (displayContent != null && displayContent.isDefaultDisplay) {
+ // While a dream or keyguard is showing, obscure ordinary application
+ // content on secondary displays (by forcibly enabling mirroring unless
+ // there is other content we want to show) but still allow opaque
+ // keyguard dialogs to be shown.
+ if (type == TYPE_DREAM || (attrs.privateFlags & PRIVATE_FLAG_KEYGUARD) != 0) {
+ mObscureApplicationContentOnSecondaryDisplays = true;
}
- if (mPreferredRefreshRate == 0
- && w.mAttrs.preferredRefreshRate != 0) {
- mPreferredRefreshRate = w.mAttrs.preferredRefreshRate;
- }
- if (mPreferredModeId == 0
- && w.mAttrs.preferredDisplayModeId != 0) {
- mPreferredModeId = w.mAttrs.preferredDisplayModeId;
- }
- if ((privateflags & PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE) != 0) {
- mSustainedPerformanceModeCurrent = true;
- }
+ mDisplayHasContent = true;
+ } else if (displayContent != null &&
+ (!mObscureApplicationContentOnSecondaryDisplays
+ || (mObscured && type == TYPE_KEYGUARD_DIALOG))) {
+ // Allow full screen keyguard presentation dialogs to be seen.
+ mDisplayHasContent = true;
+ }
+ if (mPreferredRefreshRate == 0
+ && w.mAttrs.preferredRefreshRate != 0) {
+ mPreferredRefreshRate = w.mAttrs.preferredRefreshRate;
+ }
+ if (mPreferredModeId == 0
+ && w.mAttrs.preferredDisplayModeId != 0) {
+ mPreferredModeId = w.mAttrs.preferredDisplayModeId;
+ }
+ if ((privateflags & PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE) != 0) {
+ mSustainedPerformanceModeCurrent = true;
}
}
}
diff --git a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
index e828650..8c034c6 100644
--- a/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
+++ b/services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
@@ -29,6 +29,7 @@
import android.Manifest.permission;
import android.accessibilityservice.AccessibilityServiceInfo;
+import android.accounts.Account;
import android.accounts.AccountManager;
import android.annotation.IntDef;
import android.annotation.NonNull;
@@ -53,6 +54,7 @@
import android.app.admin.SecurityLog.SecurityEvent;
import android.app.admin.SystemUpdatePolicy;
import android.app.backup.IBackupManager;
+import android.app.trust.TrustManager;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
@@ -1370,6 +1372,10 @@
return TelephonyManager.from(mContext);
}
+ TrustManager getTrustManager() {
+ return (TrustManager) mContext.getSystemService(Context.TRUST_SERVICE);
+ }
+
IWindowManager getIWindowManager() {
return IWindowManager.Stub
.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE));
@@ -2943,19 +2949,8 @@
enforceShell("forceRemoveActiveAdmin");
long ident = mInjector.binderClearCallingIdentity();
try {
- final ApplicationInfo ai;
- try {
- ai = mIPackageManager.getApplicationInfo(adminReceiver.getPackageName(),
- 0, userHandle);
- } catch (RemoteException e) {
- throw new IllegalStateException(e);
- }
- if (ai == null) {
- throw new IllegalStateException("Couldn't find package to remove admin "
- + adminReceiver.getPackageName() + " " + userHandle);
- }
- if ((ai.flags & ApplicationInfo.FLAG_TEST_ONLY) == 0) {
- throw new SecurityException("Attempt to remove non-test admin " + adminReceiver
+ if (!isPackageTestOnly(adminReceiver.getPackageName(), userHandle)) {
+ throw new SecurityException("Attempt to remove non-test admin "
+ adminReceiver + " " + userHandle);
}
// If admin is a device or profile owner tidy that up first.
@@ -2971,11 +2966,28 @@
}
// Remove the admin skipping sending the broadcast.
removeAdminArtifacts(adminReceiver, userHandle);
+ Slog.i(LOG_TAG, "Admin " + adminReceiver + " removed from user " + userHandle);
} finally {
mInjector.binderRestoreCallingIdentity(ident);
}
}
+ private boolean isPackageTestOnly(String packageName, int userHandle) {
+ final ApplicationInfo ai;
+ try {
+ ai = mIPackageManager.getApplicationInfo(packageName,
+ (PackageManager.MATCH_DIRECT_BOOT_AWARE
+ | PackageManager.MATCH_DIRECT_BOOT_UNAWARE), userHandle);
+ } catch (RemoteException e) {
+ throw new IllegalStateException(e);
+ }
+ if (ai == null) {
+ throw new IllegalStateException("Couldn't find package to remove admin "
+ + packageName + " " + userHandle);
+ }
+ return (ai.flags & ApplicationInfo.FLAG_TEST_ONLY) != 0;
+ }
+
private void enforceShell(String method) {
final int callingUid = Binder.getCallingUid();
if (callingUid != Process.SHELL_UID && callingUid != Process.ROOT_UID) {
@@ -3673,12 +3685,16 @@
private boolean isActivePasswordSufficientForUserLocked(
DevicePolicyData policy, int userHandle, boolean parent) {
- if (policy.mActivePasswordQuality < getPasswordQuality(null, userHandle, parent)
- || policy.mActivePasswordLength < getPasswordMinimumLength(
+ final int requiredPasswordQuality = getPasswordQuality(null, userHandle, parent);
+ if (policy.mActivePasswordQuality < requiredPasswordQuality) {
+ return false;
+ }
+ if (requiredPasswordQuality >= DevicePolicyManager.PASSWORD_QUALITY_NUMERIC
+ && policy.mActivePasswordLength < getPasswordMinimumLength(
null, userHandle, parent)) {
return false;
}
- if (policy.mActivePasswordQuality != DevicePolicyManager.PASSWORD_QUALITY_COMPLEX) {
+ if (requiredPasswordQuality != DevicePolicyManager.PASSWORD_QUALITY_COMPLEX) {
return true;
}
return policy.mActivePasswordUpperCase >= getPasswordMinimumUpperCase(
@@ -4196,6 +4212,8 @@
mInjector.powerManagerGoToSleep(SystemClock.uptimeMillis(),
PowerManager.GO_TO_SLEEP_REASON_DEVICE_ADMIN, 0);
mInjector.getIWindowManager().lockNow(null);
+ } else {
+ mInjector.getTrustManager().setDeviceLockedForUser(userToLock, true);
}
} catch (RemoteException e) {
} finally {
@@ -4510,7 +4528,7 @@
* not installed and therefore not available.
*
* @throws SecurityException if the caller is not a profile or device owner.
- * @throws UnsupportedException if the package does not support being set as always-on.
+ * @throws UnsupportedOperationException if the package does not support being set as always-on.
*/
@Override
public boolean setAlwaysOnVpnPackage(ComponentName admin, String vpnPackage, boolean lockdown)
@@ -5706,7 +5724,7 @@
+ " for device owner");
}
synchronized (this) {
- enforceCanSetDeviceOwnerLocked(userId);
+ enforceCanSetDeviceOwnerLocked(admin, userId);
if (getActiveAdminUncheckedLocked(admin, userId) == null
|| getUserData(userId).mRemovingAdmins.contains(admin)) {
throw new IllegalArgumentException("Not active admin: " + admin);
@@ -5738,6 +5756,7 @@
} finally {
mInjector.binderRestoreCallingIdentity(ident);
}
+ Slog.i(LOG_TAG, "Device owner set: " + admin + " on user " + userId);
return true;
}
}
@@ -5859,6 +5878,7 @@
} finally {
mInjector.binderRestoreCallingIdentity(ident);
}
+ Slog.i(LOG_TAG, "Device owner removed: " + deviceOwnerComponent);
}
}
@@ -5876,8 +5896,10 @@
updateDeviceOwnerLocked();
disableSecurityLoggingIfNotCompliant();
try {
- // Reactivate backup service.
- mInjector.getIBackupManager().setBackupServiceActive(UserHandle.USER_SYSTEM, true);
+ if (mInjector.getIBackupManager() != null) {
+ // Reactivate backup service.
+ mInjector.getIBackupManager().setBackupServiceActive(UserHandle.USER_SYSTEM, true);
+ }
} catch (RemoteException e) {
throw new IllegalStateException("Failed reactivating backup service.", e);
}
@@ -5894,7 +5916,7 @@
+ " not installed for userId:" + userHandle);
}
synchronized (this) {
- enforceCanSetProfileOwnerLocked(userHandle);
+ enforceCanSetProfileOwnerLocked(who, userHandle);
if (getActiveAdminUncheckedLocked(who, userHandle) == null
|| getUserData(userHandle).mRemovingAdmins.contains(who)) {
@@ -5903,6 +5925,7 @@
mOwners.setProfileOwner(who, ownerName, userHandle);
mOwners.writeProfileOwner(userHandle);
+ Slog.i(LOG_TAG, "Profile owner set: " + who + " on user " + userHandle);
return true;
}
}
@@ -5927,6 +5950,7 @@
} finally {
mInjector.binderRestoreCallingIdentity(ident);
}
+ Slog.i(LOG_TAG, "Profile owner " + who + " removed from user " + userId);
}
}
@@ -6203,9 +6227,9 @@
* The profile owner can only be set before the user setup phase has completed,
* except for:
* - SYSTEM_UID
- * - adb if there are not accounts.
+ * - adb if there are no accounts. (But see {@link #hasIncompatibleAccounts})
*/
- private void enforceCanSetProfileOwnerLocked(int userHandle) {
+ private void enforceCanSetProfileOwnerLocked(@Nullable ComponentName owner, int userHandle) {
UserInfo info = getUserInfo(userHandle);
if (info == null) {
// User doesn't exist.
@@ -6225,8 +6249,8 @@
}
int callingUid = mInjector.binderGetCallingUid();
if (callingUid == Process.SHELL_UID || callingUid == Process.ROOT_UID) {
- if (hasUserSetupCompleted(userHandle) &&
- AccountManager.get(mContext).getAccountsAsUser(userHandle).length > 0) {
+ if (hasUserSetupCompleted(userHandle)
+ && hasIncompatibleAccounts(userHandle, owner)) {
throw new IllegalStateException("Not allowed to set the profile owner because "
+ "there are already some accounts on the profile");
}
@@ -6243,14 +6267,14 @@
* The Device owner can only be set by adb or an app with the MANAGE_PROFILE_AND_DEVICE_OWNERS
* permission.
*/
- private void enforceCanSetDeviceOwnerLocked(int userId) {
+ private void enforceCanSetDeviceOwnerLocked(@Nullable ComponentName owner, int userId) {
int callingUid = mInjector.binderGetCallingUid();
boolean isAdb = callingUid == Process.SHELL_UID || callingUid == Process.ROOT_UID;
if (!isAdb) {
enforceCanManageProfileAndDeviceOwners();
}
- final int code = checkSetDeviceOwnerPreCondition(userId, isAdb);
+ final int code = checkSetDeviceOwnerPreCondition(owner, userId, isAdb);
switch (code) {
case CODE_OK:
return;
@@ -8468,7 +8492,7 @@
* except for adb command if no accounts or additional users are present on the device.
*/
private synchronized @DeviceOwnerPreConditionCode int checkSetDeviceOwnerPreCondition(
- int deviceOwnerUserId, boolean isAdb) {
+ @Nullable ComponentName owner, int deviceOwnerUserId, boolean isAdb) {
if (mOwners.hasDeviceOwner()) {
return CODE_HAS_DEVICE_OWNER;
}
@@ -8485,7 +8509,7 @@
if (mUserManager.getUserCount() > 1) {
return CODE_NONSYSTEM_USER_EXISTS;
}
- if (AccountManager.get(mContext).getAccounts().length > 0) {
+ if (hasIncompatibleAccounts(UserHandle.USER_SYSTEM, owner)) {
return CODE_ACCOUNTS_NOT_EMPTY;
}
} else {
@@ -8511,7 +8535,8 @@
}
private boolean isDeviceOwnerProvisioningAllowed(int deviceOwnerUserId) {
- return CODE_OK == checkSetDeviceOwnerPreCondition(deviceOwnerUserId, /* isAdb */ false);
+ return CODE_OK == checkSetDeviceOwnerPreCondition(
+ /* owner unknown */ null, deviceOwnerUserId, /* isAdb */ false);
}
private boolean hasFeatureManagedUsers() {
@@ -9044,6 +9069,8 @@
saveSettingsLocked(userHandle);
updateMaximumTimeToLockLocked(userHandle);
policy.mRemovingAdmins.remove(adminReceiver);
+
+ Slog.i(LOG_TAG, "Device admin " + adminReceiver + " removed from user " + userHandle);
}
// The removed admin might have disabled camera, so update user
// restrictions.
@@ -9068,4 +9095,81 @@
return policy.mDeviceProvisioningConfigApplied;
}
}
+
+ /**
+ * Return true if a given user has any accounts that'll prevent installing a device or profile
+ * owner {@code owner}.
+ * - If the user has no accounts, then return false.
+ * - Otherwise, if the owner is unknown (== null), or is not test-only, then return true.
+ * - Otherwise, if there's any account that does not have ..._ALLOWED, or does have
+ * ..._DISALLOWED, return true.
+ * - Otherwise return false.
+ */
+ private boolean hasIncompatibleAccounts(int userId, @Nullable ComponentName owner) {
+ final long token = mInjector.binderClearCallingIdentity();
+ try {
+ final AccountManager am = AccountManager.get(mContext);
+ final Account accounts[] = am.getAccountsAsUser(userId);
+ if (accounts.length == 0) {
+ return false;
+ }
+ final String[] feature_allow =
+ { DevicePolicyManager.ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_ALLOWED };
+ final String[] feature_disallow =
+ { DevicePolicyManager.ACCOUNT_FEATURE_DEVICE_OR_PROFILE_OWNER_DISALLOWED };
+
+ // Even if we find incompatible accounts along the way, we still check all accounts
+ // for logging.
+ boolean compatible = true;
+ for (Account account : accounts) {
+ if (hasAccountFeatures(am, account, feature_disallow)) {
+ Log.e(LOG_TAG, account + " has " + feature_disallow[0]);
+ compatible = false;
+ }
+ if (!hasAccountFeatures(am, account, feature_allow)) {
+ Log.e(LOG_TAG, account + " doesn't have " + feature_allow[0]);
+ compatible = false;
+ }
+ }
+ if (compatible) {
+ Log.w(LOG_TAG, "All accounts are compatible");
+ } else {
+ Log.e(LOG_TAG, "Found incompatible accounts");
+ }
+
+ // Then check if the owner is test-only.
+ String log;
+ if (owner == null) {
+ // Owner is unknown. Suppose it's not test-only
+ compatible = false;
+ log = "Only test-only device/profile owner can be installed with accounts";
+ } else if (isPackageTestOnly(owner.getPackageName(), userId)) {
+ if (compatible) {
+ log = "Installing test-only owner " + owner;
+ } else {
+ log = "Can't install test-only owner " + owner + " with incompatible accounts";
+ }
+ } else {
+ compatible = false;
+ log = "Can't install non test-only owner " + owner + " with accounts";
+ }
+ if (compatible) {
+ Log.w(LOG_TAG, log);
+ } else {
+ Log.e(LOG_TAG, log);
+ }
+ return !compatible;
+ } finally {
+ mInjector.binderRestoreCallingIdentity(token);
+ }
+ }
+
+ private boolean hasAccountFeatures(AccountManager am, Account account, String[] features) {
+ try {
+ return am.hasFeatures(account, features, null, null).getResult();
+ } catch (Exception e) {
+ Log.w(LOG_TAG, "Failed to get account feature", e);
+ return false;
+ }
+ }
}
diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java
index a839373..8a59648 100644
--- a/services/java/com/android/server/SystemServer.java
+++ b/services/java/com/android/server/SystemServer.java
@@ -551,6 +551,9 @@
boolean disableTextServices = SystemProperties.getBoolean("config.disable_textservices", false);
boolean disableSamplingProfiler = SystemProperties.getBoolean("config.disable_samplingprof",
false);
+
+ boolean disableConsumerIr = SystemProperties.getBoolean("config.disable_consumerir", false);
+
boolean isEmulator = SystemProperties.get("ro.kernel.qemu").equals("1");
try {
@@ -595,10 +598,12 @@
ServiceManager.addService("vibrator", vibrator);
Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
- traceBeginAndSlog("StartConsumerIrService");
- consumerIr = new ConsumerIrService(context);
- ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr);
- Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+ if (!disableConsumerIr) {
+ traceBeginAndSlog("StartConsumerIrService");
+ consumerIr = new ConsumerIrService(context);
+ ServiceManager.addService(Context.CONSUMER_IR_SERVICE, consumerIr);
+ Trace.traceEnd(Trace.TRACE_TAG_SYSTEM_SERVER);
+ }
traceBeginAndSlog("StartAlarmManagerService");
mSystemServiceManager.startService(AlarmManagerService.class);
@@ -809,10 +814,8 @@
traceBeginAndSlog("StartNetworkPolicyManagerService");
try {
- networkPolicy = new NetworkPolicyManagerService(
- context, mActivityManagerService,
- (IPowerManager)ServiceManager.getService(Context.POWER_SERVICE),
- networkStats, networkManagement);
+ networkPolicy = new NetworkPolicyManagerService(context,
+ mActivityManagerService, networkStats, networkManagement);
ServiceManager.addService(Context.NETWORK_POLICY_SERVICE, networkPolicy);
} catch (Throwable e) {
reportWtf("starting NetworkPolicy Service", e);
diff --git a/services/net/Android.mk b/services/net/Android.mk
index 336bc45..408794e 100644
--- a/services/net/Android.mk
+++ b/services/net/Android.mk
@@ -7,4 +7,7 @@
LOCAL_SRC_FILES += \
$(call all-java-files-under,java)
+LOCAL_AIDL_INCLUDES += \
+ system/netd/server/binder
+
include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/services/net/java/android/net/ip/IpManager.java b/services/net/java/android/net/ip/IpManager.java
index 654ef18..6d90203 100644
--- a/services/net/java/android/net/ip/IpManager.java
+++ b/services/net/java/android/net/ip/IpManager.java
@@ -382,6 +382,7 @@
private final State mStoppedState = new StoppedState();
private final State mStoppingState = new StoppingState();
private final State mStartedState = new StartedState();
+ private final State mRunningState = new RunningState();
private final String mTag;
private final Context mContext;
@@ -476,6 +477,7 @@
// Super simple StateMachine.
addState(mStoppedState);
addState(mStartedState);
+ addState(mRunningState, mStartedState);
addState(mStoppingState);
setInitialState(mStoppedState);
@@ -570,7 +572,7 @@
pw.decreaseIndent();
pw.println();
- pw.println("StateMachine dump:");
+ pw.println(mTag + " StateMachine dump:");
pw.increaseIndent();
mLocalLog.readOnlyLocalLog().dump(fd, pw, args);
pw.decreaseIndent();
@@ -768,6 +770,11 @@
// - IPv6 addresses
// - IPv6 routes
// - IPv6 DNS servers
+ //
+ // N.B.: this is fundamentally race-prone and should be fixed by
+ // changing NetlinkTracker from a hybrid edge/level model to an
+ // edge-only model, or by giving IpManager its own netlink socket(s)
+ // so as to track all required information directly.
LinkProperties netlinkLinkProperties = mNetlinkTracker.getLinkProperties();
newLp.setLinkAddresses(netlinkLinkProperties.getLinkAddresses());
for (RouteInfo route : netlinkLinkProperties.getRoutes()) {
@@ -939,16 +946,30 @@
return true;
}
+ private void stopAllIP() {
+ // We don't need to worry about routes, just addresses, because:
+ // - disableIpv6() will clear autoconf IPv6 routes as well, and
+ // - we don't get IPv4 routes from netlink
+ // so we neither react to nor need to wait for changes in either.
+
+ try {
+ mNwService.disableIpv6(mInterfaceName);
+ } catch (Exception e) {
+ Log.e(mTag, "Failed to disable IPv6" + e);
+ }
+
+ try {
+ mNwService.clearInterfaceAddresses(mInterfaceName);
+ } catch (Exception e) {
+ Log.e(mTag, "Failed to clear addresses " + e);
+ }
+ }
+
class StoppedState extends State {
@Override
public void enter() {
- try {
- mNwService.disableIpv6(mInterfaceName);
- mNwService.clearInterfaceAddresses(mInterfaceName);
- } catch (Exception e) {
- Log.e(mTag, "Failed to clear addresses or disable IPv6" + e);
- }
+ stopAllIP();
resetLinkProperties();
if (mStartTimeMillis > 0) {
@@ -1023,12 +1044,71 @@
}
class StartedState extends State {
- private boolean mDhcpActionInFlight;
-
@Override
public void enter() {
mStartTimeMillis = SystemClock.elapsedRealtime();
+ if (mConfiguration.mProvisioningTimeoutMs > 0) {
+ final long alarmTime = SystemClock.elapsedRealtime() +
+ mConfiguration.mProvisioningTimeoutMs;
+ mProvisioningTimeoutAlarm.schedule(alarmTime);
+ }
+
+ if (readyToProceed()) {
+ transitionTo(mRunningState);
+ } else {
+ // Clear all IPv4 and IPv6 before proceeding to RunningState.
+ // Clean up any leftover state from an abnormal exit from
+ // tethering or during an IpManager restart.
+ stopAllIP();
+ }
+ }
+
+ @Override
+ public void exit() {
+ mProvisioningTimeoutAlarm.cancel();
+ }
+
+ @Override
+ public boolean processMessage(Message msg) {
+ switch (msg.what) {
+ case CMD_STOP:
+ transitionTo(mStoppingState);
+ break;
+
+ case EVENT_NETLINK_LINKPROPERTIES_CHANGED:
+ handleLinkPropertiesUpdate(NO_CALLBACKS);
+ if (readyToProceed()) {
+ transitionTo(mRunningState);
+ }
+ break;
+
+ case EVENT_PROVISIONING_TIMEOUT:
+ handleProvisioningFailure();
+ break;
+
+ default:
+ // It's safe to process messages out of order because the
+ // only message that can both
+ // a) be received at this time and
+ // b) affect provisioning state
+ // is EVENT_NETLINK_LINKPROPERTIES_CHANGED (handled above).
+ deferMessage(msg);
+ }
+ return HANDLED;
+ }
+
+ boolean readyToProceed() {
+ return (!mLinkProperties.hasIPv4Address() &&
+ !mLinkProperties.hasGlobalIPv6Address());
+ }
+ }
+
+ class RunningState extends State {
+ private boolean mDhcpActionInFlight;
+
+ @Override
+ public void enter() {
mApfFilter = ApfFilter.maybeCreate(mConfiguration.mApfCapabilities, mNetworkInterface,
mCallback, mMulticastFiltering);
// TODO: investigate the effects of any multicast filtering racing/interfering with the
@@ -1037,12 +1117,6 @@
mCallback.setFallbackMulticastFilter(mMulticastFiltering);
}
- if (mConfiguration.mProvisioningTimeoutMs > 0) {
- final long alarmTime = SystemClock.elapsedRealtime() +
- mConfiguration.mProvisioningTimeoutMs;
- mProvisioningTimeoutAlarm.schedule(alarmTime);
- }
-
if (mConfiguration.mEnableIPv6) {
// TODO: Consider transitionTo(mStoppingState) if this fails.
startIPv6();
@@ -1070,7 +1144,6 @@
@Override
public void exit() {
- mProvisioningTimeoutAlarm.cancel();
stopDhcpAction();
if (mIpReachabilityMonitor != null) {
@@ -1167,10 +1240,6 @@
break;
}
- case EVENT_PROVISIONING_TIMEOUT:
- handleProvisioningFailure();
- break;
-
case EVENT_DHCPACTION_TIMEOUT:
stopDhcpAction();
break;
diff --git a/services/net/java/android/net/util/NetdService.java b/services/net/java/android/net/util/NetdService.java
new file mode 100644
index 0000000..153cb50
--- /dev/null
+++ b/services/net/java/android/net/util/NetdService.java
@@ -0,0 +1,46 @@
+/*
+ * 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 android.net.util;
+
+import android.net.INetd;
+import android.os.ServiceManager;
+import android.util.Log;
+
+
+/**
+ * @hide
+ */
+public class NetdService {
+ private static final String TAG = NetdService.class.getSimpleName();
+ private static final String NETD_SERVICE_NAME = "netd";
+
+ /**
+ * It is the caller's responsibility to check for a null return value
+ * and to handle RemoteException errors from invocations on the returned
+ * interface if, for example, netd dies and is restarted.
+ *
+ * @return an INetd instance or null.
+ */
+ public static INetd getInstance() {
+ final INetd netdInstance = INetd.Stub.asInterface(
+ ServiceManager.getService(NETD_SERVICE_NAME));
+ if (netdInstance == null) {
+ Log.w(TAG, "WARNING: returning null INetd instance.");
+ }
+ return netdInstance;
+ }
+}
diff --git a/services/print/java/com/android/server/print/RemotePrintSpooler.java b/services/print/java/com/android/server/print/RemotePrintSpooler.java
index 07cc9c0..07b26e8 100644
--- a/services/print/java/com/android/server/print/RemotePrintSpooler.java
+++ b/services/print/java/com/android/server/print/RemotePrintSpooler.java
@@ -57,6 +57,9 @@
* spooler if needed, to make the timed remote calls, to handle
* remote exceptions, and to bind/unbind to the remote instance as
* needed.
+ *
+ * The calls might be blocking and need the main thread of to be unblocked to finish. Hence do not
+ * call this while holding any monitors that might need to be acquired the main thread.
*/
final class RemotePrintSpooler {
diff --git a/services/print/java/com/android/server/print/UserState.java b/services/print/java/com/android/server/print/UserState.java
index 05301c1..a91cdb3 100644
--- a/services/print/java/com/android/server/print/UserState.java
+++ b/services/print/java/com/android/server/print/UserState.java
@@ -434,12 +434,12 @@
}
public void createPrinterDiscoverySession(@NonNull IPrinterDiscoveryObserver observer) {
+ mSpooler.clearCustomPrinterIconCache();
+
synchronized (mLock) {
throwIfDestroyedLocked();
if (mPrinterDiscoverySession == null) {
- mSpooler.clearCustomPrinterIconCache();
-
// If we do not have a session, tell all service to create one.
mPrinterDiscoverySession = new PrinterDiscoverySessionMediator(mContext) {
@Override
@@ -731,6 +731,8 @@
@Override
public void onCustomPrinterIconLoaded(PrinterId printerId, Icon icon) {
+ mSpooler.onCustomPrinterIconLoaded(printerId, icon);
+
synchronized (mLock) {
throwIfDestroyedLocked();
@@ -738,7 +740,6 @@
if (mPrinterDiscoverySession == null) {
return;
}
- mSpooler.onCustomPrinterIconLoaded(printerId, icon);
mPrinterDiscoverySession.onCustomPrinterIconLoadedLocked(printerId);
}
}
@@ -979,18 +980,21 @@
* Prune persistent state if a print service was uninstalled
*/
public void prunePrintServices() {
+ ArrayList<ComponentName> installedComponents;
+
synchronized (mLock) {
- ArrayList<ComponentName> installedComponents = getInstalledComponents();
+ installedComponents = getInstalledComponents();
// Remove unnecessary entries from persistent state "disabled services"
boolean disabledServicesUninstalled = mDisabledServices.retainAll(installedComponents);
if (disabledServicesUninstalled) {
writeDisabledPrintServicesLocked(mDisabledServices);
}
-
- // Remove unnecessary entries from persistent state "approved services"
- mSpooler.pruneApprovedPrintServices(installedComponents);
}
+
+ // Remove unnecessary entries from persistent state "approved services"
+ mSpooler.pruneApprovedPrintServices(installedComponents);
+
}
private void onConfigurationChangedLocked() {
diff --git a/services/retaildemo/java/com/android/server/retaildemo/PreloadAppsInstaller.java b/services/retaildemo/java/com/android/server/retaildemo/PreloadAppsInstaller.java
index daaa4f5..2038c9e 100644
--- a/services/retaildemo/java/com/android/server/retaildemo/PreloadAppsInstaller.java
+++ b/services/retaildemo/java/com/android/server/retaildemo/PreloadAppsInstaller.java
@@ -136,6 +136,10 @@
mApkToPackageMap.put(apkName, basePackageName);
}
installExistingPackage(basePackageName, userId, counter);
+ } else {
+ Log.e(TAG, "Package " + basePackageName + " cannot be installed from "
+ + apkName + ": " + msg + " (returnCode " + returnCode + ")");
+ counter.appInstallFinished();
}
}
}.getBinder(), 0, SYSTEM_SERVER_PACKAGE_NAME, userId);
diff --git a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java
index 7525e87..6b273210 100644
--- a/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java
+++ b/services/retaildemo/java/com/android/server/retaildemo/RetailDemoModeService.java
@@ -89,8 +89,8 @@
private static final long SCREEN_WAKEUP_DELAY = 2500;
private static final long USER_INACTIVITY_TIMEOUT_MIN = 10000;
- private static final long USER_INACTIVITY_TIMEOUT_DEFAULT = 30000;
- private static final long WARNING_DIALOG_TIMEOUT_DEFAULT = 6000;
+ private static final long USER_INACTIVITY_TIMEOUT_DEFAULT = 90000;
+ private static final long WARNING_DIALOG_TIMEOUT_DEFAULT = 0;
private static final long MILLIS_PER_SECOND = 1000;
private static final int[] VOLUME_STREAMS_TO_MUTE = {
diff --git a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
index 979f160..541be3d 100644
--- a/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/NetworkPolicyManagerServiceTest.java
@@ -69,7 +69,6 @@
import android.net.NetworkTemplate;
import android.os.Binder;
import android.os.INetworkManagementService;
-import android.os.IPowerManager;
import android.os.MessageQueue.IdleHandler;
import android.os.UserHandle;
import android.test.AndroidTestCase;
@@ -115,7 +114,6 @@
private File mPolicyDir;
private IActivityManager mActivityManager;
- private IPowerManager mPowerManager;
private INetworkStatsService mStatsService;
private INetworkManagementService mNetworkManager;
private INetworkPolicyListener mPolicyListener;
@@ -187,7 +185,6 @@
}
mActivityManager = createMock(IActivityManager.class);
- mPowerManager = createMock(IPowerManager.class);
mStatsService = createMock(INetworkStatsService.class);
mNetworkManager = createMock(INetworkManagementService.class);
mPolicyListener = createMock(INetworkPolicyListener.class);
@@ -195,7 +192,7 @@
mConnManager = createMock(IConnectivityManager.class);
mNotifManager = createMock(INotificationManager.class);
- mService = new NetworkPolicyManagerService(mServiceContext, mActivityManager, mPowerManager,
+ mService = new NetworkPolicyManagerService(mServiceContext, mActivityManager,
mStatsService, mNetworkManager, mTime, mPolicyDir, true);
mService.bindConnectivityManager(mConnManager);
mService.bindNotificationManager(mNotifManager);
@@ -217,8 +214,6 @@
mNetworkManager.registerObserver(capture(networkObserver));
expectLastCall().atLeastOnce();
- // expect to answer screen status during systemReady()
- expect(mPowerManager.isInteractive()).andReturn(true).atLeastOnce();
expect(mNetworkManager.isBandwidthControlEnabled()).andReturn(true).atLeastOnce();
expectCurrentTime();
@@ -240,7 +235,6 @@
mPolicyDir = null;
mActivityManager = null;
- mPowerManager = null;
mStatsService = null;
mPolicyListener = null;
mTime = null;
@@ -313,48 +307,6 @@
}
@Suppress
- public void testScreenChangesRules() throws Exception {
- Future<Void> future;
-
- expectSetUidMeteredNetworkBlacklist(UID_A, false);
- expectSetUidForeground(UID_A, true);
- future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
- replay();
- mProcessObserver.onForegroundActivitiesChanged(PID_1, UID_A, true);
- future.get();
- verifyAndReset();
-
- // push strict policy for foreground uid, verify ALLOW rule
- expectSetUidMeteredNetworkBlacklist(UID_A, false);
- expectSetUidForeground(UID_A, true);
- future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
- replay();
- mService.setUidPolicy(APP_ID_A, POLICY_REJECT_METERED_BACKGROUND);
- future.get();
- verifyAndReset();
-
- // now turn screen off and verify REJECT rule
- expect(mPowerManager.isInteractive()).andReturn(false).atLeastOnce();
- expectSetUidMeteredNetworkBlacklist(UID_A, true);
- expectSetUidForeground(UID_A, false);
- future = expectRulesChanged(UID_A, RULE_REJECT_METERED);
- replay();
- mServiceContext.sendBroadcast(new Intent(Intent.ACTION_SCREEN_OFF));
- future.get();
- verifyAndReset();
-
- // and turn screen back on, verify ALLOW rule restored
- expect(mPowerManager.isInteractive()).andReturn(true).atLeastOnce();
- expectSetUidMeteredNetworkBlacklist(UID_A, false);
- expectSetUidForeground(UID_A, true);
- future = expectRulesChanged(UID_A, RULE_ALLOW_ALL);
- replay();
- mServiceContext.sendBroadcast(new Intent(Intent.ACTION_SCREEN_ON));
- future.get();
- verifyAndReset();
- }
-
- @Suppress
public void testPolicyNone() throws Exception {
Future<Void> future;
@@ -1049,14 +1001,14 @@
}
private void replay() {
- EasyMock.replay(mActivityManager, mPowerManager, mStatsService, mPolicyListener,
- mNetworkManager, mTime, mConnManager, mNotifManager);
+ EasyMock.replay(mActivityManager, mStatsService, mPolicyListener, mNetworkManager, mTime,
+ mConnManager, mNotifManager);
}
private void verifyAndReset() {
- EasyMock.verify(mActivityManager, mPowerManager, mStatsService, mPolicyListener,
- mNetworkManager, mTime, mConnManager, mNotifManager);
- EasyMock.reset(mActivityManager, mPowerManager, mStatsService, mPolicyListener,
- mNetworkManager, mTime, mConnManager, mNotifManager);
+ EasyMock.verify(mActivityManager, mStatsService, mPolicyListener, mNetworkManager, mTime,
+ mConnManager, mNotifManager);
+ EasyMock.reset(mActivityManager, mStatsService, mPolicyListener, mNetworkManager, mTime,
+ mConnManager, mNotifManager);
}
}
diff --git a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
index ef9739d..a3d0afa 100644
--- a/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
+++ b/services/tests/servicestests/src/com/android/server/accounts/AccountManagerServiceTest.java
@@ -21,6 +21,7 @@
import static org.mockito.Mockito.when;
import android.accounts.Account;
+import android.accounts.AccountManagerInternal;
import android.accounts.AuthenticatorDescription;
import android.app.AppOpsManager;
import android.app.Notification;
@@ -44,6 +45,8 @@
import android.test.mock.MockPackageManager;
import android.util.Log;
+import com.android.server.LocalServices;
+
import java.io.File;
import java.io.FileDescriptor;
import java.io.PrintWriter;
@@ -73,6 +76,7 @@
SQLiteDatabase.deleteDatabase(new File(mAms.getCeDatabaseName(UserHandle.USER_SYSTEM)));
SQLiteDatabase.deleteDatabase(new File(mAms.getDeDatabaseName(UserHandle.USER_SYSTEM)));
SQLiteDatabase.deleteDatabase(new File(mAms.getPreNDatabaseName(UserHandle.USER_SYSTEM)));
+ LocalServices.removeServiceForTest(AccountManagerInternal.class);
super.tearDown();
}
@@ -282,6 +286,7 @@
private AccountManagerService createAccountManagerService(Context mockContext,
Context realContext) {
+ LocalServices.removeServiceForTest(AccountManagerInternal.class);
return new MyAccountManagerService(mockContext,
new MyMockPackageManager(), new MockAccountAuthenticatorCache(), realContext);
}
@@ -337,6 +342,10 @@
@Override
public void invalidateCache(int userId) {
}
+
+ @Override
+ public void updateServices(int userId) {
+ }
}
static public class MyMockContext extends MockContext {
@@ -416,6 +425,11 @@
public int checkSignatures(final int uid1, final int uid2) {
return PackageManager.SIGNATURE_MATCH;
}
+
+ @Override
+ public void addOnPermissionsChangeListener(
+ OnPermissionsChangedListener listener) {
+ }
}
static public class MyAccountManagerService extends AccountManagerService {
diff --git a/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java b/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java
index e440a0d..984a484 100644
--- a/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java
+++ b/services/tests/servicestests/src/com/android/server/am/TaskPersisterTest.java
@@ -62,7 +62,7 @@
for (int i = 0; i < 100; i++) {
taskIdsOnFile.put(getRandomTaskIdForUser(testUserId), true);
}
- mTaskPersister.maybeWritePersistedTaskIdsForUser(taskIdsOnFile, testUserId);
+ mTaskPersister.writePersistedTaskIdsForUser(taskIdsOnFile, testUserId);
SparseBooleanArray newTaskIdsOnFile = mTaskPersister
.loadPersistedTaskIdsForUser(testUserId);
assertTrue("TaskIds written differ from TaskIds read back from file",
diff --git a/services/tests/servicestests/src/com/android/server/connectivity/LingerMonitorTest.java b/services/tests/servicestests/src/com/android/server/connectivity/LingerMonitorTest.java
new file mode 100644
index 0000000..bce5787e
--- /dev/null
+++ b/services/tests/servicestests/src/com/android/server/connectivity/LingerMonitorTest.java
@@ -0,0 +1,349 @@
+/*
+ * 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 android.app.PendingIntent;
+import android.content.Context;
+import android.content.res.Resources;
+import android.net.ConnectivityManager;
+import android.net.Network;
+import android.net.NetworkCapabilities;
+import android.net.NetworkInfo;
+import android.net.NetworkMisc;
+import android.text.format.DateUtils;
+import com.android.internal.R;
+import com.android.server.ConnectivityService;
+import com.android.server.connectivity.NetworkNotificationManager;
+import com.android.server.connectivity.NetworkNotificationManager.NotificationType;
+import junit.framework.TestCase;
+import org.mockito.Mock;
+import org.mockito.MockitoAnnotations;
+
+import static org.mockito.Mockito.any;
+import static org.mockito.Mockito.anyBoolean;
+import static org.mockito.Mockito.anyInt;
+import static org.mockito.Mockito.eq;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.times;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+import static org.mockito.Mockito.reset;
+
+public class LingerMonitorTest extends TestCase {
+ static final String CELLULAR = "CELLULAR";
+ static final String WIFI = "WIFI";
+
+ static final long LOW_RATE_LIMIT = DateUtils.MINUTE_IN_MILLIS;
+ static final long HIGH_RATE_LIMIT = 0;
+
+ static final int LOW_DAILY_LIMIT = 2;
+ static final int HIGH_DAILY_LIMIT = 1000;
+
+ LingerMonitor mMonitor;
+
+ @Mock ConnectivityService mConnService;
+ @Mock Context mCtx;
+ @Mock NetworkMisc mMisc;
+ @Mock NetworkNotificationManager mNotifier;
+ @Mock Resources mResources;
+
+ public void setUp() {
+ MockitoAnnotations.initMocks(this);
+ when(mCtx.getResources()).thenReturn(mResources);
+ when(mCtx.getPackageName()).thenReturn("com.android.server.connectivity");
+ when(mConnService.createNetworkMonitor(any(), any(), any(), any())).thenReturn(null);
+
+ mMonitor = new TestableLingerMonitor(mCtx, mNotifier, HIGH_DAILY_LIMIT, HIGH_RATE_LIMIT);
+ }
+
+ public void testTransitions() {
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ NetworkAgentInfo nai1 = wifiNai(100);
+ NetworkAgentInfo nai2 = cellNai(101);
+
+ assertTrue(mMonitor.isNotificationEnabled(nai1, nai2));
+ assertFalse(mMonitor.isNotificationEnabled(nai2, nai1));
+ }
+
+ public void testNotificationOnLinger() {
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_NOTIFICATION);
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNotification(from, to);
+ }
+
+ public void testToastOnLinger() {
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_TOAST);
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyToast(from, to);
+ }
+
+ public void testNotificationClearedAfterDisconnect() {
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_NOTIFICATION);
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNotification(from, to);
+
+ mMonitor.noteDisconnect(to);
+ verify(mNotifier, times(1)).clearNotification(100);
+ }
+
+ public void testNotificationClearedAfterSwitchingBack() {
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_NOTIFICATION);
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNotification(from, to);
+
+ mMonitor.noteLingerDefaultNetwork(to, from);
+ verify(mNotifier, times(1)).clearNotification(100);
+ }
+
+ public void testUniqueToast() {
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_TOAST);
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyToast(from, to);
+
+ mMonitor.noteLingerDefaultNetwork(to, from);
+ verify(mNotifier, times(1)).clearNotification(100);
+
+ reset(mNotifier);
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNoNotifications();
+ }
+
+ public void testMultipleNotifications() {
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_NOTIFICATION);
+ NetworkAgentInfo wifi1 = wifiNai(100);
+ NetworkAgentInfo wifi2 = wifiNai(101);
+ NetworkAgentInfo cell = cellNai(102);
+
+ mMonitor.noteLingerDefaultNetwork(wifi1, cell);
+ verifyNotification(wifi1, cell);
+
+ mMonitor.noteLingerDefaultNetwork(cell, wifi2);
+ verify(mNotifier, times(1)).clearNotification(100);
+
+ reset(mNotifier);
+ mMonitor.noteLingerDefaultNetwork(wifi2, cell);
+ verifyNotification(wifi2, cell);
+ }
+
+ public void testRateLimiting() throws InterruptedException {
+ mMonitor = new TestableLingerMonitor(mCtx, mNotifier, HIGH_DAILY_LIMIT, LOW_RATE_LIMIT);
+
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_NOTIFICATION);
+ NetworkAgentInfo wifi1 = wifiNai(100);
+ NetworkAgentInfo wifi2 = wifiNai(101);
+ NetworkAgentInfo wifi3 = wifiNai(102);
+ NetworkAgentInfo cell = cellNai(103);
+
+ mMonitor.noteLingerDefaultNetwork(wifi1, cell);
+ verifyNotification(wifi1, cell);
+ reset(mNotifier);
+
+ Thread.sleep(50);
+ mMonitor.noteLingerDefaultNetwork(cell, wifi2);
+ mMonitor.noteLingerDefaultNetwork(wifi2, cell);
+ verifyNoNotifications();
+
+ Thread.sleep(50);
+ mMonitor.noteLingerDefaultNetwork(cell, wifi3);
+ mMonitor.noteLingerDefaultNetwork(wifi3, cell);
+ verifyNoNotifications();
+ }
+
+ public void testDailyLimiting() throws InterruptedException {
+ mMonitor = new TestableLingerMonitor(mCtx, mNotifier, LOW_DAILY_LIMIT, HIGH_RATE_LIMIT);
+
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_NOTIFICATION);
+ NetworkAgentInfo wifi1 = wifiNai(100);
+ NetworkAgentInfo wifi2 = wifiNai(101);
+ NetworkAgentInfo wifi3 = wifiNai(102);
+ NetworkAgentInfo cell = cellNai(103);
+
+ mMonitor.noteLingerDefaultNetwork(wifi1, cell);
+ verifyNotification(wifi1, cell);
+ reset(mNotifier);
+
+ Thread.sleep(50);
+ mMonitor.noteLingerDefaultNetwork(cell, wifi2);
+ mMonitor.noteLingerDefaultNetwork(wifi2, cell);
+ verifyNotification(wifi2, cell);
+ reset(mNotifier);
+
+ Thread.sleep(50);
+ mMonitor.noteLingerDefaultNetwork(cell, wifi3);
+ mMonitor.noteLingerDefaultNetwork(wifi3, cell);
+ verifyNoNotifications();
+ }
+
+ public void testUniqueNotification() {
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_NOTIFICATION);
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNotification(from, to);
+
+ mMonitor.noteLingerDefaultNetwork(to, from);
+ verify(mNotifier, times(1)).clearNotification(100);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNotification(from, to);
+ }
+
+ public void testIgnoreNeverValidatedNetworks() {
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_TOAST);
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+ from.everValidated = false;
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNoNotifications();
+ }
+
+ public void testIgnoreCurrentlyValidatedNetworks() {
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_TOAST);
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+ from.lastValidated = true;
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNoNotifications();
+ }
+
+ public void testNoNotificationType() {
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_TOAST);
+ setNotificationSwitch();
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNoNotifications();
+ }
+
+ public void testNoTransitionToNotify() {
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_NONE);
+ setNotificationSwitch(transition(WIFI, CELLULAR));
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNoNotifications();
+ }
+
+ public void testDifferentTransitionToNotify() {
+ setNotificationType(LingerMonitor.NOTIFY_TYPE_TOAST);
+ setNotificationSwitch(transition(CELLULAR, WIFI));
+ NetworkAgentInfo from = wifiNai(100);
+ NetworkAgentInfo to = cellNai(101);
+
+ mMonitor.noteLingerDefaultNetwork(from, to);
+ verifyNoNotifications();
+ }
+
+ void setNotificationSwitch(String... transitions) {
+ when(mResources.getStringArray(R.array.config_networkNotifySwitches))
+ .thenReturn(transitions);
+ }
+
+ String transition(String from, String to) {
+ return from + "-" + to;
+ }
+
+ void setNotificationType(int type) {
+ when(mResources.getInteger(R.integer.config_networkNotifySwitchType)).thenReturn(type);
+ }
+
+ void verifyNoToast() {
+ verify(mNotifier, never()).showToast(any(), any());
+ }
+
+ void verifyNoNotification() {
+ verify(mNotifier, never())
+ .showNotification(anyInt(), any(), any(), any(), any(), anyBoolean());
+ }
+
+ void verifyNoNotifications() {
+ verifyNoToast();
+ verifyNoNotification();
+ }
+
+ void verifyToast(NetworkAgentInfo from, NetworkAgentInfo to) {
+ verifyNoNotification();
+ verify(mNotifier, times(1)).showToast(from, to);
+ }
+
+ void verifyNotification(NetworkAgentInfo from, NetworkAgentInfo to) {
+ verifyNoToast();
+ verify(mNotifier, times(1)).showNotification(eq(from.network.netId),
+ eq(NotificationType.NETWORK_SWITCH), eq(from), eq(to), any(), eq(true));
+ }
+
+ NetworkAgentInfo nai(int netId, int transport, int networkType, String networkTypeName) {
+ NetworkInfo info = new NetworkInfo(networkType, 0, networkTypeName, "");
+ NetworkCapabilities caps = new NetworkCapabilities();
+ caps.addCapability(0);
+ caps.addTransportType(transport);
+ NetworkAgentInfo nai = new NetworkAgentInfo(null, null, new Network(netId), info, null,
+ caps, 50, mCtx, null, mMisc, null, mConnService);
+ nai.everValidated = true;
+ return nai;
+ }
+
+ NetworkAgentInfo wifiNai(int netId) {
+ return nai(netId, NetworkCapabilities.TRANSPORT_WIFI,
+ ConnectivityManager.TYPE_WIFI, WIFI);
+ }
+
+ NetworkAgentInfo cellNai(int netId) {
+ return nai(netId, NetworkCapabilities.TRANSPORT_CELLULAR,
+ ConnectivityManager.TYPE_MOBILE, CELLULAR);
+ }
+
+ public static class TestableLingerMonitor extends LingerMonitor {
+ public TestableLingerMonitor(Context c, NetworkNotificationManager n, int l, long r) {
+ super(c, n, l, r);
+ }
+ @Override protected PendingIntent createNotificationIntent() {
+ return null;
+ }
+ }
+}
diff --git a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
index 1c7a138..792f300 100644
--- a/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
+++ b/services/tests/servicestests/src/com/android/server/pm/BaseShortcutManagerTest.java
@@ -390,6 +390,11 @@
}
@Override
+ void injectRunOnNewThread(Runnable r) {
+ runOnHandler(r);
+ }
+
+ @Override
void injectEnforceCallingPermission(String permission, String message) {
if (!mCallerPermissions.contains(permission)) {
throw new SecurityException("Missing permission: " + permission);
@@ -402,6 +407,11 @@
}
@Override
+ String injectBuildFingerprint() {
+ return mInjectedBuildFingerprint;
+ }
+
+ @Override
void wtf(String message, Throwable th) {
// During tests, WTF is fatal.
fail(message + " exception: " + th + "\n" + Log.getStackTraceString(th));
@@ -523,6 +533,7 @@
protected Map<String, PackageInfo> mInjectedPackages;
protected Set<PackageWithUser> mUninstalledPackages;
+ protected Set<String> mSystemPackages;
protected PackageManager mMockPackageManager;
protected PackageManagerInternal mMockPackageManagerInternal;
@@ -623,6 +634,8 @@
protected static final String PACKAGE_FALLBACK_LAUNCHER_NAME = "fallback";
protected static final int PACKAGE_FALLBACK_LAUNCHER_PRIORITY = -999;
+ protected String mInjectedBuildFingerprint = "build1";
+
static {
QUERY_ALL.setQueryFlags(
ShortcutQuery.FLAG_GET_ALL_KINDS);
@@ -672,6 +685,7 @@
pi -> pi.applicationInfo.flags &= ~ApplicationInfo.FLAG_ALLOW_BACKUP);
mUninstalledPackages = new HashSet<>();
+ mSystemPackages = new HashSet<>();
mInjectedFilePathRoot = new File(getTestContext().getCacheDir(), "test-files");
@@ -921,6 +935,12 @@
});
}
+ protected void setPackageLastUpdateTime(String packageName, long value) {
+ updatePackageInfo(packageName, pi -> {
+ pi.lastUpdateTime = value;
+ });
+ }
+
protected void uninstallPackage(int userId, String packageName) {
if (ENABLE_DUMP) {
Log.v(TAG, "Unnstall package " + packageName + " / " + userId);
@@ -952,6 +972,9 @@
if (mUninstalledPackages.contains(PackageWithUser.of(userId, packageName))) {
ret.applicationInfo.flags &= ~ApplicationInfo.FLAG_INSTALLED;
}
+ if (mSystemPackages.contains(packageName)) {
+ ret.applicationInfo.flags |= ApplicationInfo.FLAG_SYSTEM;
+ }
if (getSignatures) {
ret.signatures = pi.signatures;
diff --git a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
index 253334e..143398f 100644
--- a/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
+++ b/services/tests/servicestests/src/com/android/server/pm/ShortcutManagerTest1.java
@@ -3945,11 +3945,11 @@
mInjectedPackages.remove(CALLING_PACKAGE_1);
mInjectedPackages.remove(CALLING_PACKAGE_3);
- mService.handleUnlockUser(USER_0);
+ mService.checkPackageChanges(USER_0);
assertNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_1, "s1", USER_0));
assertNotNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_2, "s1", USER_0));
- assertNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_3, "s1", USER_0));
+ assertNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_3, "s1", USER_0)); // ---------------
assertNotNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_1, "s1", USER_10));
assertNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_2, "s1", USER_10));
assertNotNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_3, "s1", USER_10));
@@ -3961,7 +3961,7 @@
assertFalse(bitmapDirectoryExists(CALLING_PACKAGE_2, USER_10));
assertTrue(bitmapDirectoryExists(CALLING_PACKAGE_3, USER_10));
- mService.handleUnlockUser(USER_10);
+ mService.checkPackageChanges(USER_10);
assertNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_1, "s1", USER_0));
assertNotNull(mService.getPackageShortcutForTest(CALLING_PACKAGE_2, "s1", USER_0));
@@ -4154,7 +4154,7 @@
updatePackageVersion(CALLING_PACKAGE_1, 1);
// Then send the broadcast, to only user-0.
- mService.mPackageMonitor.onReceive(getTestContext(),
+ mService.mPackageMonitor.onReceive(getTestContext(),
genPackageUpdateIntent(CALLING_PACKAGE_1, USER_0));
waitOnMainThread();
@@ -4186,10 +4186,13 @@
mInjectedCurrentTimeMillis = START_TIME + 200;
mRunningUsers.put(USER_10, true);
+ mUnlockedUsers.put(USER_10, true);
reset(c0);
reset(c10);
+ setPackageLastUpdateTime(CALLING_PACKAGE_1, mInjectedCurrentTimeMillis);
mService.handleUnlockUser(USER_10);
+ mService.checkPackageChanges(USER_10);
waitOnMainThread();
@@ -4221,7 +4224,7 @@
// Then send the broadcast, to only user-0.
mService.mPackageMonitor.onReceive(getTestContext(),
genPackageUpdateIntent(CALLING_PACKAGE_2, USER_0));
- mService.handleUnlockUser(USER_10);
+ mService.checkPackageChanges(USER_10);
waitOnMainThread();
@@ -4243,9 +4246,9 @@
updatePackageVersion(CALLING_PACKAGE_3, 100);
// Then send the broadcast, to only user-0.
- mService.mPackageMonitor.onReceive(getTestContext(),
+ mService.mPackageMonitor.onReceive(getTestContext(),
genPackageUpdateIntent(CALLING_PACKAGE_3, USER_0));
- mService.handleUnlockUser(USER_10);
+ mService.checkPackageChanges(USER_10);
waitOnMainThread();
@@ -4344,6 +4347,128 @@
});
}
+ public void testHandlePackageUpdate_systemAppUpdate() {
+
+ // Package1 is a system app. Package 2 is not a system app, so it's not scanned
+ // in this test at all.
+ mSystemPackages.add(CALLING_PACKAGE_1);
+
+ // Initial state: no shortcuts.
+ mService.checkPackageChanges(USER_0);
+
+ assertEquals(mInjectedCurrentTimeMillis,
+ mService.getUserShortcutsLocked(USER_0).getLastAppScanTime());
+ assertEquals(mInjectedBuildFingerprint,
+ mService.getUserShortcutsLocked(USER_0).getLastAppScanOsFingerprint());
+
+ // They have no shortcuts.
+ runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+
+ runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+
+ // Next.
+ // Update the packages -- now they have 1 manifest shortcut.
+ // But checkPackageChanges() don't notice it, since their version code / timestamp haven't
+ // changed.
+ addManifestShortcutResource(
+ new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()),
+ R.xml.shortcut_1);
+ addManifestShortcutResource(
+ new ComponentName(CALLING_PACKAGE_2, ShortcutActivity.class.getName()),
+ R.xml.shortcut_1);
+ mInjectedCurrentTimeMillis += 1000;
+ mService.checkPackageChanges(USER_0);
+
+ runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+ runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+
+ // Next.
+ // Update the build finger print. All system apps will be scanned now.
+ mInjectedBuildFingerprint = "update1";
+ mInjectedCurrentTimeMillis += 1000;
+ mService.checkPackageChanges(USER_0);
+
+ runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("ms1");
+ });
+ runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+
+ // Next.
+ // Update manifest shortcuts.
+ mInjectedBuildFingerprint = "update2";
+ addManifestShortcutResource(
+ new ComponentName(CALLING_PACKAGE_1, ShortcutActivity.class.getName()),
+ R.xml.shortcut_2);
+ addManifestShortcutResource(
+ new ComponentName(CALLING_PACKAGE_2, ShortcutActivity.class.getName()),
+ R.xml.shortcut_2);
+ mInjectedCurrentTimeMillis += 1000;
+ mService.checkPackageChanges(USER_0);
+
+ // Fingerprint hasn't changed, so CALLING_PACKAGE_1 wasn't scanned.
+ runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("ms1");
+ });
+ runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+
+ // Update the fingerprint, but CALLING_PACKAGE_1's version code hasn't changed, so
+ // still not scanned.
+ mInjectedBuildFingerprint = "update2";
+ mInjectedCurrentTimeMillis += 1000;
+ mService.checkPackageChanges(USER_0);
+
+ runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("ms1");
+ });
+ runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+
+ // Now update the version code, so CALLING_PACKAGE_1 is scanned again.
+ mInjectedBuildFingerprint = "update3";
+ mInjectedCurrentTimeMillis += 1000;
+ updatePackageVersion(CALLING_PACKAGE_1, 1);
+ mService.checkPackageChanges(USER_0);
+
+ runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("ms1", "ms2");
+ });
+ runWithCaller(CALLING_PACKAGE_2, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .isEmpty();
+ });
+
+ // Make sure getLastAppScanTime / getLastAppScanOsFingerprint are persisted.
+ initService();
+ assertEquals(mInjectedCurrentTimeMillis,
+ mService.getUserShortcutsLocked(USER_0).getLastAppScanTime());
+ assertEquals(mInjectedBuildFingerprint,
+ mService.getUserShortcutsLocked(USER_0).getLastAppScanOsFingerprint());
+ }
+
public void testHandlePackageChanged() {
final ComponentName ACTIVITY1 = new ComponentName(CALLING_PACKAGE_1, "act1");
final ComponentName ACTIVITY2 = new ComponentName(CALLING_PACKAGE_1, "act2");
@@ -5234,6 +5359,12 @@
/**
* It's the case with preintalled apps -- when applyRestore() is called, the system
* apps are already installed, so manifest shortcuts need to be re-published.
+ *
+ * Also, when a restore target app is already installed, and
+ * - if it has allowBackup=true, we'll restore normally, so all existing shortcuts will be
+ * replaced. (but manifest shortcuts will be re-published anyway.) We log a warning on
+ * logcat.
+ * - if it has allowBackup=false, we don't touch any of the existing shortcuts.
*/
public void testBackupAndRestore_appAlreadyInstalledWhenRestored() {
// Pre-backup. Same as testBackupAndRestore_manifestRePublished().
@@ -5265,6 +5396,19 @@
mService.mPackageMonitor.onReceive(mServiceContext,
genPackageAddIntent(CALLING_PACKAGE_1, USER_0));
+ // Set up shortcuts for package 3, which won't be backed up / restored.
+ addManifestShortcutResource(
+ new ComponentName(CALLING_PACKAGE_3, ShortcutActivity.class.getName()),
+ R.xml.shortcut_1);
+ updatePackageVersion(CALLING_PACKAGE_3, 1);
+ mService.mPackageMonitor.onReceive(mServiceContext,
+ genPackageAddIntent(CALLING_PACKAGE_3, USER_0));
+
+ runWithCaller(CALLING_PACKAGE_3, USER_0, () -> {
+ assertTrue(getManager().setDynamicShortcuts(list(
+ makeShortcut("s1"))));
+ });
+
// Make sure the manifest shortcuts have been published.
runWithCaller(CALLING_PACKAGE_1, USER_0, () -> {
assertWith(getCallerShortcuts())
@@ -5290,6 +5434,11 @@
.areAllDisabled();
});
+ runWithCaller(CALLING_PACKAGE_3, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("s1", "ms1");
+ });
+
// Backup and *without restarting the service, just call applyRestore()*.
{
int prevUid = mInjectedCallingUid;
@@ -5329,6 +5478,12 @@
.areAllNotDynamic()
;
});
+
+ // Package 3 still has the same shortcuts.
+ runWithCaller(CALLING_PACKAGE_3, USER_0, () -> {
+ assertWith(getCallerShortcuts())
+ .haveIds("s1", "ms1");
+ });
}
public void testSaveAndLoad_crossProfile() {
diff --git a/services/tests/servicestests/src/com/android/server/usage/AppIdleHistoryTests.java b/services/tests/servicestests/src/com/android/server/usage/AppIdleHistoryTests.java
index 9ccb1a6..0bd014c 100644
--- a/services/tests/servicestests/src/com/android/server/usage/AppIdleHistoryTests.java
+++ b/services/tests/servicestests/src/com/android/server/usage/AppIdleHistoryTests.java
@@ -67,7 +67,7 @@
// Screen on time should not keep progressing with screen is off
assertEquals(aih.getScreenOnTimeLocked(7000), 3000);
assertEquals(aih.getScreenOnTimeLocked(8000), 3000);
- aih.writeElapsedTimeLocked();
+ aih.writeAppIdleDurationsLocked();
// Check if the screen on time is persisted across instantiations
AppIdleHistory aih2 = new AppIdleHistory(mStorageDir, 0);
diff --git a/services/tests/shortcutmanagerutils/Android.mk b/services/tests/shortcutmanagerutils/Android.mk
index 701e058..2818457 100644
--- a/services/tests/shortcutmanagerutils/Android.mk
+++ b/services/tests/shortcutmanagerutils/Android.mk
@@ -26,6 +26,6 @@
LOCAL_MODULE := ShortcutManagerTestUtils
-LOCAL_SDK_VERSION := current
+LOCAL_SDK_VERSION := test_current
include $(BUILD_STATIC_JAVA_LIBRARY)
diff --git a/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java b/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java
index 78f95c4..1fe5cb7 100644
--- a/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java
+++ b/services/tests/shortcutmanagerutils/src/com/android/server/pm/shortcutmanagertest/ShortcutManagerTestUtils.java
@@ -156,10 +156,10 @@
return result;
}
- private static List<String> runCommand(Instrumentation instrumentation, String command) {
+ public static List<String> runCommand(Instrumentation instrumentation, String command) {
return runCommand(instrumentation, command, null);
}
- private static List<String> runCommand(Instrumentation instrumentation, String command,
+ public static List<String> runCommand(Instrumentation instrumentation, String command,
Predicate<List<String>> resultAsserter) {
Log.d(TAG, "Running command: " + command);
final List<String> result;
@@ -175,11 +175,11 @@
return result;
}
- private static void runCommandForNoOutput(Instrumentation instrumentation, String command) {
+ public static void runCommandForNoOutput(Instrumentation instrumentation, String command) {
runCommand(instrumentation, command, result -> result.size() == 0);
}
- private static List<String> runShortcutCommand(Instrumentation instrumentation, String command,
+ public static List<String> runShortcutCommand(Instrumentation instrumentation, String command,
Predicate<List<String>> resultAsserter) {
return runCommand(instrumentation, "cmd shortcut " + command, resultAsserter);
}
@@ -204,7 +204,8 @@
}
public static void setDefaultLauncher(Instrumentation instrumentation, String component) {
- runCommand(instrumentation, "cmd package set-home-activity " + component,
+ runCommand(instrumentation, "cmd package set-home-activity --user "
+ + instrumentation.getContext().getUserId() + " " + component,
result -> result.contains("Success"));
}
@@ -1053,7 +1054,11 @@
}
public static void retryUntil(BooleanSupplier checker, String message) {
- final long timeOut = System.currentTimeMillis() + 30 * 1000; // wait for 30 seconds.
+ retryUntil(checker, message, 30);
+ }
+
+ public static void retryUntil(BooleanSupplier checker, String message, long timeoutSeconds) {
+ final long timeOut = System.currentTimeMillis() + timeoutSeconds * 1000;
while (!checker.getAsBoolean()) {
if (System.currentTimeMillis() > timeOut) {
break;
diff --git a/services/usage/java/com/android/server/usage/AppIdleHistory.java b/services/usage/java/com/android/server/usage/AppIdleHistory.java
index a3313c9..f69dae4 100644
--- a/services/usage/java/com/android/server/usage/AppIdleHistory.java
+++ b/services/usage/java/com/android/server/usage/AppIdleHistory.java
@@ -118,7 +118,6 @@
} else {
mScreenOnDuration += elapsedRealtime - mScreenOnSnapshot;
mElapsedDuration += elapsedRealtime - mElapsedSnapshot;
- writeScreenOnTimeLocked();
mElapsedSnapshot = elapsedRealtime;
}
}
@@ -167,7 +166,7 @@
/**
* To be called periodically to keep track of elapsed time when app idle times are written
*/
- public void writeElapsedTimeLocked() {
+ public void writeAppIdleDurationsLocked() {
final long elapsedRealtime = SystemClock.elapsedRealtime();
// Only bump up and snapshot the elapsed time. Don't change screen on duration.
mElapsedDuration += elapsedRealtime - mElapsedSnapshot;
diff --git a/services/usage/java/com/android/server/usage/UsageStatsService.java b/services/usage/java/com/android/server/usage/UsageStatsService.java
index 69cf1a2..8284773 100644
--- a/services/usage/java/com/android/server/usage/UsageStatsService.java
+++ b/services/usage/java/com/android/server/usage/UsageStatsService.java
@@ -304,9 +304,9 @@
@Override public void onDisplayChanged(int displayId) {
if (displayId == Display.DEFAULT_DISPLAY) {
+ final boolean displayOn = isDisplayOn();
synchronized (UsageStatsService.this.mLock) {
- mAppIdleHistory.updateDisplayLocked(isDisplayOn(),
- SystemClock.elapsedRealtime());
+ mAppIdleHistory.updateDisplayLocked(displayOn, SystemClock.elapsedRealtime());
}
}
}
@@ -1005,9 +1005,9 @@
service.persistActiveStats();
mAppIdleHistory.writeAppIdleTimesLocked(mUserState.keyAt(i));
}
- // Persist elapsed time periodically, in case screen doesn't get toggled
- // until the next boot
- mAppIdleHistory.writeElapsedTimeLocked();
+ // Persist elapsed and screen on time. If this fails for whatever reason, the apps will be
+ // considered not-idle, which is the safest outcome in such an event.
+ mAppIdleHistory.writeAppIdleDurationsLocked();
mHandler.removeMessages(MSG_FLUSH_TO_DISK);
}
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
index 43d2a1f..a04034e 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionManagerService.java
@@ -535,6 +535,18 @@
+ " user=" + userHandle);
}
+ ComponentName getCurAssistant(int userHandle) {
+ String curAssistant = Settings.Secure.getStringForUser(
+ mContext.getContentResolver(),
+ Settings.Secure.ASSISTANT, userHandle);
+ if (TextUtils.isEmpty(curAssistant)) {
+ return null;
+ }
+ if (DEBUG) Slog.d(TAG, "getCurAssistant curAssistant=" + curAssistant
+ + " user=" + userHandle);
+ return ComponentName.unflattenFromString(curAssistant);
+ }
+
void resetCurAssistant(int userHandle) {
Settings.Secure.putStringForUser(mContext.getContentResolver(),
Settings.Secure.ASSISTANT, null, userHandle);
@@ -1178,6 +1190,7 @@
synchronized (VoiceInteractionManagerServiceStub.this) {
ComponentName curInteractor = getCurInteractor(userHandle);
ComponentName curRecognizer = getCurRecognizer(userHandle);
+ ComponentName curAssistant = getCurAssistant(userHandle);
if (curRecognizer == null) {
// Could a new recognizer appear when we don't have one pre-installed?
if (anyPackagesAppearing()) {
@@ -1196,6 +1209,7 @@
// the default config.
setCurInteractor(null, userHandle);
setCurRecognizer(null, userHandle);
+ resetCurAssistant(userHandle);
initForUser(userHandle);
return;
}
@@ -1212,6 +1226,20 @@
return;
}
+ if (curAssistant != null) {
+ int change = isPackageDisappearing(curAssistant.getPackageName());
+ if (change == PACKAGE_PERMANENT_CHANGE) {
+ // If the currently set assistant is being removed, then we should
+ // reset back to the default state (which is probably that we prefer
+ // to have the default full voice interactor enabled).
+ setCurInteractor(null, userHandle);
+ setCurRecognizer(null, userHandle);
+ resetCurAssistant(userHandle);
+ initForUser(userHandle);
+ return;
+ }
+ }
+
// There is no interactor, so just deal with a simple recognizer.
int change = isPackageDisappearing(curRecognizer.getPackageName());
if (change == PACKAGE_PERMANENT_CHANGE
diff --git a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
index b0cc2ac..c3075b3 100644
--- a/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
+++ b/services/voiceinteraction/java/com/android/server/voiceinteraction/VoiceInteractionSessionConnection.java
@@ -46,6 +46,7 @@
import android.view.IWindowManager;
import android.view.WindowManager;
+import com.android.internal.app.AssistUtils;
import com.android.internal.app.IAssistScreenshotReceiver;
import com.android.internal.app.IVoiceInteractionSessionShowCallback;
import com.android.internal.app.IVoiceInteractor;
@@ -301,7 +302,7 @@
} else {
mScreenshot = null;
}
- if (needDisclosure) {
+ if (needDisclosure && AssistUtils.shouldDisclose(mContext, mSessionComponentName)) {
mHandler.post(mShowAssistDisclosureRunnable);
}
if (mSession != null) {
diff --git a/telecomm/java/android/telecom/Connection.java b/telecomm/java/android/telecom/Connection.java
index 4da5ff2..c006185 100644
--- a/telecomm/java/android/telecom/Connection.java
+++ b/telecomm/java/android/telecom/Connection.java
@@ -327,7 +327,7 @@
*
* @hide
*/
- public static final int PROPERTY_SHOW_CALLBACK_NUMBER = 1<<0;
+ public static final int PROPERTY_EMERGENCY_CALLBACK_MODE = 1<<0;
/**
* Whether the call is a generic conference, where we do not know the precise state of
@@ -461,6 +461,32 @@
*/
public static final String EVENT_CALL_MERGE_FAILED = "android.telecom.event.CALL_MERGE_FAILED";
+ /**
+ * Connection event used to inform {@link InCallService}s when a call has been put on hold by
+ * the remote party.
+ * <p>
+ * This is different than the {@link Connection#STATE_HOLDING} state which indicates that the
+ * call is being held locally on the device. When a capable {@link ConnectionService} receives
+ * signalling to indicate that the remote party has put the call on hold, it can send this
+ * connection event.
+ * @hide
+ */
+ public static final String EVENT_CALL_REMOTELY_HELD =
+ "android.telecom.event.CALL_REMOTELY_HELD";
+
+ /**
+ * Connection event used to inform {@link InCallService}s when a call which was remotely held
+ * (see {@link #EVENT_CALL_REMOTELY_HELD}) has been un-held by the remote party.
+ * <p>
+ * This is different than the {@link Connection#STATE_HOLDING} state which indicates that the
+ * call is being held locally on the device. When a capable {@link ConnectionService} receives
+ * signalling to indicate that the remote party has taken the call off hold, it can send this
+ * connection event.
+ * @hide
+ */
+ public static final String EVENT_CALL_REMOTELY_UNHELD =
+ "android.telecom.event.CALL_REMOTELY_UNHELD";
+
// Flag controlling whether PII is emitted into the logs
private static final boolean PII_DEBUG = Log.isLoggable(android.util.Log.DEBUG);
@@ -629,8 +655,8 @@
builder.append("Properties:");
}
- if (can(properties, PROPERTY_SHOW_CALLBACK_NUMBER)) {
- builder.append(isLong ? " PROPERTY_SHOW_CALLBACK_NUMBER" : " clbk");
+ if (can(properties, PROPERTY_EMERGENCY_CALLBACK_MODE)) {
+ builder.append(isLong ? " PROPERTY_EMERGENCY_CALLBACK_MODE" : " ecbm");
}
if (can(properties, PROPERTY_HIGH_DEF_AUDIO)) {
@@ -707,7 +733,6 @@
* {@link android.telecom.InCallService.VideoCall}.
*/
public static abstract class VideoProvider {
-
/**
* Video is not being received (no protocol pause was issued).
* @see #handleCallSessionEvent(int)
@@ -792,6 +817,14 @@
private static final int MSG_SET_PAUSE_IMAGE = 11;
private static final int MSG_REMOVE_VIDEO_CALLBACK = 12;
+ private static final String SESSION_EVENT_RX_PAUSE_STR = "RX_PAUSE";
+ private static final String SESSION_EVENT_RX_RESUME_STR = "RX_RESUME";
+ private static final String SESSION_EVENT_TX_START_STR = "TX_START";
+ private static final String SESSION_EVENT_TX_STOP_STR = "TX_STOP";
+ private static final String SESSION_EVENT_CAMERA_FAILURE_STR = "CAMERA_FAIL";
+ private static final String SESSION_EVENT_CAMERA_READY_STR = "CAMERA_READY";
+ private static final String SESSION_EVENT_UNKNOWN_STR = "UNKNOWN";
+
private VideoProvider.VideoProviderHandler mMessageHandler;
private final VideoProvider.VideoProviderBinder mBinder;
@@ -1302,6 +1335,32 @@
}
}
}
+
+ /**
+ * Returns a string representation of a call session event.
+ *
+ * @param event A call session event passed to {@link #handleCallSessionEvent(int)}.
+ * @return String representation of the call session event.
+ * @hide
+ */
+ public static String sessionEventToString(int event) {
+ switch (event) {
+ case SESSION_EVENT_CAMERA_FAILURE:
+ return SESSION_EVENT_CAMERA_FAILURE_STR;
+ case SESSION_EVENT_CAMERA_READY:
+ return SESSION_EVENT_CAMERA_READY_STR;
+ case SESSION_EVENT_RX_PAUSE:
+ return SESSION_EVENT_RX_PAUSE_STR;
+ case SESSION_EVENT_RX_RESUME:
+ return SESSION_EVENT_RX_RESUME_STR;
+ case SESSION_EVENT_TX_START:
+ return SESSION_EVENT_TX_START_STR;
+ case SESSION_EVENT_TX_STOP:
+ return SESSION_EVENT_TX_STOP_STR;
+ default:
+ return SESSION_EVENT_UNKNOWN_STR + " " + event;
+ }
+ }
}
private final Listener mConnectionDeathListener = new Listener() {
diff --git a/telecomm/java/android/telecom/InCallService.java b/telecomm/java/android/telecom/InCallService.java
index df6715d..69de89d 100644
--- a/telecomm/java/android/telecom/InCallService.java
+++ b/telecomm/java/android/telecom/InCallService.java
@@ -449,8 +449,8 @@
}
/**
- * Called when a {@link Call} has received a connection event issued by the
- * {@link ConnectionService}.
+ * Unused; to handle connection events issued by a {@link ConnectionService}, implement the
+ * {@link android.telecom.Call.Callback#onConnectionEvent(Call, String, Bundle)} callback.
* <p>
* See {@link Connection#sendConnectionEvent(String, Bundle)}.
*
diff --git a/telecomm/java/android/telecom/RemoteConnectionService.java b/telecomm/java/android/telecom/RemoteConnectionService.java
index 306b3c1..c4739ff 100644
--- a/telecomm/java/android/telecom/RemoteConnectionService.java
+++ b/telecomm/java/android/telecom/RemoteConnectionService.java
@@ -224,6 +224,7 @@
conference.setState(parcel.getState());
conference.setConnectionCapabilities(parcel.getConnectionCapabilities());
+ conference.setConnectionProperties(parcel.getConnectionProperties());
mConferenceById.put(callId, conference);
conference.registerCallback(new RemoteConference.Callback() {
@Override
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index a171d9d..d6a2ee3 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -246,6 +246,29 @@
public static final String KEY_CARRIER_VT_AVAILABLE_BOOL = "carrier_vt_available_bool";
/**
+ * Flag specifying whether the carrier wants to notify the user when a VT call has been handed
+ * over from WIFI to LTE.
+ * <p>
+ * The handover notification is sent as a
+ * {@link TelephonyManager#EVENT_HANDOVER_VIDEO_FROM_WIFI_TO_LTE}
+ * {@link android.telecom.Connection} event, which an {@link android.telecom.InCallService}
+ * should use to trigger the display of a user-facing message.
+ * <p>
+ * The Connection event is sent to the InCallService only once, the first time it occurs.
+ * @hide
+ */
+ public static final String KEY_NOTIFY_HANDOVER_VIDEO_FROM_WIFI_TO_LTE_BOOL =
+ "notify_handover_video_from_wifi_to_lte_bool";
+
+ /**
+ * Flag specifying whether the carrier supports downgrading a video call (tx, rx or tx/rx)
+ * directly to an audio call.
+ * @hide
+ */
+ public static final String KEY_SUPPORT_DOWNGRADE_VT_TO_AUDIO_BOOL =
+ "support_downgrade_vt_to_audio_bool";
+
+ /**
* Flag specifying whether WFC over IMS should be available for carrier: independent of
* carrier provisioning. If false: hard disabled. If true: then depends on carrier
* provisioning, availability etc.
@@ -847,6 +870,11 @@
/**
* Flag indicating whether the carrier supports the Hold command while in an IMS call.
+ * <p>
+ * The device configuration value {@code config_device_respects_hold_carrier_config} ultimately
+ * controls whether this carrier configuration option is used. Where
+ * {@code config_device_respects_hold_carrier_config} is false, the value of the
+ * {@link #KEY_ALLOW_HOLD_IN_IMS_CALL_BOOL} carrier configuration option is ignored.
* @hide
*/
public static final String KEY_ALLOW_HOLD_IN_IMS_CALL_BOOL = "allow_hold_in_ims_call";
@@ -913,6 +941,15 @@
public static final String KEY_NOTIFY_VT_HANDOVER_TO_WIFI_FAILURE_BOOL =
"notify_vt_handover_to_wifi_failure_bool";
+ /**
+ * A upper case list of CNAP names that are unhelpful to the user for distinguising calls and
+ * should be filtered out of the CNAP information. This includes CNAP names such as "WIRELESS
+ * CALLER" or "UNKNOWN NAME". By default, if there are no filtered names for this carrier, null
+ * is returned.
+ * @hide
+ */
+ public static final String FILTERED_CNAP_NAMES_STRING_ARRAY = "filtered_cnap_names_string_array";
+
/** The default value for every variable. */
private final static PersistableBundle sDefaults;
@@ -927,6 +964,8 @@
sDefaults.putBoolean(KEY_CARRIER_SETTINGS_ENABLE_BOOL, false);
sDefaults.putBoolean(KEY_CARRIER_VOLTE_AVAILABLE_BOOL, false);
sDefaults.putBoolean(KEY_CARRIER_VT_AVAILABLE_BOOL, false);
+ sDefaults.putBoolean(KEY_NOTIFY_HANDOVER_VIDEO_FROM_WIFI_TO_LTE_BOOL, false);
+ sDefaults.putBoolean(KEY_SUPPORT_DOWNGRADE_VT_TO_AUDIO_BOOL, true);
sDefaults.putBoolean(KEY_CARRIER_WFC_IMS_AVAILABLE_BOOL, false);
sDefaults.putBoolean(KEY_CARRIER_WFC_SUPPORTS_WIFI_ONLY_BOOL, false);
sDefaults.putBoolean(KEY_CARRIER_DEFAULT_WFC_IMS_ENABLED_BOOL, false);
@@ -1079,6 +1118,7 @@
sDefaults.putStringArray(KEY_IMS_REASONINFO_MAPPING_STRING_ARRAY, null);
sDefaults.putBoolean(KEY_ENHANCED_4G_LTE_TITLE_VARIANT_BOOL, false);
sDefaults.putBoolean(KEY_NOTIFY_VT_HANDOVER_TO_WIFI_FAILURE_BOOL, false);
+ sDefaults.putStringArray(FILTERED_CNAP_NAMES_STRING_ARRAY, null);
}
/**
diff --git a/telephony/java/android/telephony/DisconnectCause.java b/telephony/java/android/telephony/DisconnectCause.java
index d7d4e84..f5e422d 100644
--- a/telephony/java/android/telephony/DisconnectCause.java
+++ b/telephony/java/android/telephony/DisconnectCause.java
@@ -212,6 +212,20 @@
*/
public static final int MAXIMUM_NUMBER_OF_CALLS_REACHED = 53;
+ /**
+ * The call was terminated because cellular data has been disabled.
+ * Used when in a video call and the user disables cellular data via the settings.
+ * {@hide}
+ */
+ public static final int DATA_DISABLED = 54;
+
+ /**
+ * The call was terminated because the data policy has disabled cellular data.
+ * Used when in a video call and the user has exceeded the device data limit.
+ * {@hide}
+ */
+ public static final int DATA_LIMIT_REACHED = 55;
+
//*********************************************************************************************
// When adding a disconnect type:
// 1) Please assign the new type the next id value below.
@@ -220,14 +234,14 @@
// 4) Update toString() with the newly added disconnect type.
// 5) Update android.telecom.DisconnectCauseUtil with any mappings to a telecom.DisconnectCause.
//
- // NextId: 54
+ // NextId: 56
//*********************************************************************************************
/** Smallest valid value for call disconnect codes. */
public static final int MINIMUM_VALID_VALUE = NOT_DISCONNECTED;
/** Largest valid value for call disconnect codes. */
- public static final int MAXIMUM_VALID_VALUE = MAXIMUM_NUMBER_OF_CALLS_REACHED;
+ public static final int MAXIMUM_VALID_VALUE = DATA_LIMIT_REACHED;
/** Private constructor to avoid class instantiation. */
private DisconnectCause() {
@@ -343,6 +357,10 @@
return "ANSWERED_ELSEWHERE";
case MAXIMUM_NUMBER_OF_CALLS_REACHED:
return "MAXIMUM_NUMER_OF_CALLS_REACHED";
+ case DATA_DISABLED:
+ return "DATA_DISABLED";
+ case DATA_LIMIT_REACHED:
+ return "DATA_LIMIT_REACHED";
default:
return "INVALID: " + cause;
}
diff --git a/telephony/java/android/telephony/Rlog.java b/telephony/java/android/telephony/Rlog.java
index b4f400f..cd0a012 100644
--- a/telephony/java/android/telephony/Rlog.java
+++ b/telephony/java/android/telephony/Rlog.java
@@ -16,8 +16,15 @@
package android.telephony;
+import android.text.TextUtils;
import android.util.Log;
+import android.util.Base64;
+
+import java.security.MessageDigest;
+import java.security.NoSuchAlgorithmException;
+
+
/**
* A class to log strings to the RADIO LOG.
*
@@ -87,11 +94,52 @@
/**
* Redact personally identifiable information for production users.
- * If log tag is loggable in verbose mode, return the original string, otherwise return XXX.
+ * @param tag used to identify the source of a log message
+ * @param pii the personally identifiable information we want to apply secure hash on.
+ * @return If tag is loggable in verbose mode or pii is null, return the original input.
+ * otherwise return a secure Hash of input pii
*/
public static String pii(String tag, Object pii) {
- return (isLoggable(tag, Log.VERBOSE) ? String.valueOf(pii) : "XXX");
+ String val = String.valueOf(pii);
+ if (pii == null || TextUtils.isEmpty(val) || isLoggable(tag, Log.VERBOSE)) {
+ return val;
+ }
+ return "[" + secureHash(val.getBytes()) + "]";
}
+ /**
+ * Redact personally identifiable information for production users.
+ * @param enablePiiLogging set when caller explicitly want to enable sensitive logging.
+ * @param pii the personally identifiable information we want to apply secure hash on.
+ * @return If enablePiiLogging is set to true or pii is null, return the original input.
+ * otherwise return a secure Hash of input pii
+ */
+ public static String pii(boolean enablePiiLogging, Object pii) {
+ String val = String.valueOf(pii);
+ if (pii == null || TextUtils.isEmpty(val) || enablePiiLogging) {
+ return val;
+ }
+ return "[" + secureHash(val.getBytes()) + "]";
+ }
+
+ /**
+ * Returns a secure hash (using the SHA1 algorithm) of the provided input.
+ *
+ * @return the hash
+ * @param input the bytes for which the secure hash should be computed.
+ */
+ private static String secureHash(byte[] input) {
+ MessageDigest messageDigest;
+
+ try {
+ messageDigest = MessageDigest.getInstance("SHA-1");
+ } catch (NoSuchAlgorithmException e) {
+ return "####";
+ }
+
+ byte[] result = messageDigest.digest(input);
+ return Base64.encodeToString(
+ result, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP);
+ }
}
diff --git a/telephony/java/android/telephony/SubscriptionInfo.java b/telephony/java/android/telephony/SubscriptionInfo.java
index 6229ed9..cf2d27e 100644
--- a/telephony/java/android/telephony/SubscriptionInfo.java
+++ b/telephony/java/android/telephony/SubscriptionInfo.java
@@ -340,7 +340,7 @@
String iccIdToPrint = null;
if (iccId != null) {
if (iccId.length() > 9 && !Build.IS_DEBUGGABLE) {
- iccIdToPrint = iccId.substring(0, 9) + "XXXXXXXXXXX";
+ iccIdToPrint = iccId.substring(0, 9) + Rlog.pii(false, iccId.substring(9));
} else {
iccIdToPrint = iccId;
}
diff --git a/telephony/java/android/telephony/TelephonyManager.java b/telephony/java/android/telephony/TelephonyManager.java
index 759ea1d..6e504d1 100644
--- a/telephony/java/android/telephony/TelephonyManager.java
+++ b/telephony/java/android/telephony/TelephonyManager.java
@@ -705,6 +705,17 @@
"android.telephony.extra.LAUNCH_VOICEMAIL_SETTINGS_INTENT";
/**
+ * {@link android.telecom.Connection} event used to indicate that an IMS call has be
+ * successfully handed over from WIFI to LTE.
+ * <p>
+ * Sent via {@link android.telecom.Connection#sendConnectionEvent(String, Bundle)}.
+ * The {@link Bundle} parameter is expected to be null when this connection event is used.
+ * @hide
+ */
+ public static final String EVENT_HANDOVER_VIDEO_FROM_WIFI_TO_LTE =
+ "android.telephony.event.EVENT_HANDOVER_VIDEO_FROM_WIFI_TO_LTE";
+
+ /**
* {@link android.telecom.Connection} event used to indicate that an IMS call failed to be
* handed over from LTE to WIFI.
* <p>
@@ -716,6 +727,28 @@
"android.telephony.event.EVENT_HANDOVER_TO_WIFI_FAILED";
/**
+ * {@link android.telecom.Connection} event used to indicate that a video call was downgraded to
+ * audio because the data limit was reached.
+ * <p>
+ * Sent via {@link android.telecom.Connection#sendConnectionEvent(String, Bundle)}.
+ * The {@link Bundle} parameter is expected to be null when this connection event is used.
+ * @hide
+ */
+ public static final String EVENT_DOWNGRADE_DATA_LIMIT_REACHED =
+ "android.telephony.event.EVENT_DOWNGRADE_DATA_LIMIT_REACHED";
+
+ /**
+ * {@link android.telecom.Connection} event used to indicate that a video call was downgraded to
+ * audio because the data was disabled.
+ * <p>
+ * Sent via {@link android.telecom.Connection#sendConnectionEvent(String, Bundle)}.
+ * The {@link Bundle} parameter is expected to be null when this connection event is used.
+ * @hide
+ */
+ public static final String EVENT_DOWNGRADE_DATA_DISABLED =
+ "android.telephony.event.EVENT_DOWNGRADE_DATA_DISABLED";
+
+ /**
* Response codes for sim activation. Activation completed successfully.
* @hide
*/
diff --git a/telephony/java/com/android/ims/ImsReasonInfo.java b/telephony/java/com/android/ims/ImsReasonInfo.java
index 408ad31..56b8822 100644
--- a/telephony/java/com/android/ims/ImsReasonInfo.java
+++ b/telephony/java/com/android/ims/ImsReasonInfo.java
@@ -298,6 +298,16 @@
public static final int CODE_REMOTE_CALL_DECLINE = 1404;
/**
+ * Indicates the call was disconnected due to the user reaching their data limit.
+ */
+ public static final int CODE_DATA_LIMIT_REACHED = 1405;
+
+ /**
+ * Indicates the call was disconnected due to the user disabling cellular data.
+ */
+ public static final int CODE_DATA_DISABLED = 1406;
+
+ /**
* Network string error messages.
* mExtraMessage may have these values.
*/
diff --git a/tests/Assist/res/drawable/assistant.xml b/tests/Assist/res/drawable/assistant.xml
index 2a89dda..56fe2de 100644
--- a/tests/Assist/res/drawable/assistant.xml
+++ b/tests/Assist/res/drawable/assistant.xml
@@ -19,9 +19,6 @@
android:viewportWidth="48.0"
android:viewportHeight="48.0">
<path
- android:pathData="M0 0h48v48H0z"
- android:fillColor="#00000000"/>
- <path
android:fillColor="#FF000000"
android:pathData="M38.0,4.0L10.0,4.0C7.79,4.0 6.0,5.79 6.0,8.0l0.0,28.0c0.0,2.21 1.79,4.0 4.0,4.0l8.0,0.0l6.0,6.0 6.0,-6.0l8.0,0.0c2.21,0.0 4.0,-1.79 4.0,-4.0L36.0,8.0c0.0,-2.21 -1.79,-4.0 -4.0,-4.0zM27.75,25.75L24.0,34.0l-3.75,-8.25L12.0,22.0l8.25,-3.75L24.0,10.0l3.75,8.25L36.0,22.0l-8.25,3.75z"/>
</vector>
diff --git a/tools/aapt/Resource.cpp b/tools/aapt/Resource.cpp
index a7878d1..5f91f17 100644
--- a/tools/aapt/Resource.cpp
+++ b/tools/aapt/Resource.cpp
@@ -1033,7 +1033,6 @@
return NO_ERROR;
}
- ResXMLTree tree;
Asset* asset = assets.openNonAsset(cookie, "AndroidManifest.xml", Asset::ACCESS_STREAMING);
if (asset == NULL) {
fprintf(stderr, "ERROR: Platform AndroidManifest.xml not found\n");
@@ -1041,11 +1040,17 @@
}
ssize_t result = NO_ERROR;
- if (tree.setTo(asset->getBuffer(true), asset->getLength()) != NO_ERROR) {
- fprintf(stderr, "ERROR: Platform AndroidManifest.xml is corrupt\n");
- result = UNKNOWN_ERROR;
- } else {
- result = extractPlatformBuildVersion(tree, bundle);
+
+ // Create a new scope so that ResXMLTree is destroyed before we delete the memory over
+ // which it iterates (asset).
+ {
+ ResXMLTree tree;
+ if (tree.setTo(asset->getBuffer(true), asset->getLength()) != NO_ERROR) {
+ fprintf(stderr, "ERROR: Platform AndroidManifest.xml is corrupt\n");
+ result = UNKNOWN_ERROR;
+ } else {
+ result = extractPlatformBuildVersion(tree, bundle);
+ }
}
delete asset;
diff --git a/tools/aapt/ResourceTable.cpp b/tools/aapt/ResourceTable.cpp
index 4d5bb31..9cae00f 100644
--- a/tools/aapt/ResourceTable.cpp
+++ b/tools/aapt/ResourceTable.cpp
@@ -4860,24 +4860,39 @@
const Vector<sp<Type> >& types = mOrderedPackages[p]->getOrderedTypes();
const size_t typeCount = types.size();
for (size_t t = 0; t < typeCount; t++) {
- const Vector<sp<ConfigList> >& configs = types[t]->getOrderedConfigs();
+ const sp<Type>& type = types[t];
+ if (type == NULL) {
+ continue;
+ }
+
+ const Vector<sp<ConfigList> >& configs = type->getOrderedConfigs();
const size_t configCount = configs.size();
for (size_t c = 0; c < configCount; c++) {
+ const sp<ConfigList>& configList = configs[c];
+ if (configList == NULL) {
+ continue;
+ }
+
const DefaultKeyedVector<ConfigDescription, sp<Entry> >& configEntries
- = configs[c]->getEntries();
+ = configList->getEntries();
const size_t configEntryCount = configEntries.size();
for (size_t ce = 0; ce < configEntryCount; ce++) {
+ const sp<Entry>& entry = configEntries.valueAt(ce);
+ if (entry == NULL) {
+ continue;
+ }
+
const ConfigDescription& config = configEntries.keyAt(ce);
if (AaptConfig::isDensityOnly(config)) {
// This configuration only varies with regards to density.
const Symbol symbol(
mOrderedPackages[p]->getName(),
- types[t]->getName(),
- configs[c]->getName(),
+ type->getName(),
+ configList->getName(),
getResId(mOrderedPackages[p], types[t],
- configs[c]->getEntryIndex()));
+ configList->getEntryIndex()));
- const sp<Entry>& entry = configEntries.valueAt(ce);
+
AaptUtil::appendValue(resources, symbol,
SymbolDefinition(symbol, config, entry->getPos()));
}
diff --git a/tools/fonts/fontchain_lint.py b/tools/fonts/fontchain_lint.py
index 2956d87..7ec46a3e 100755
--- a/tools/fonts/fontchain_lint.py
+++ b/tools/fonts/fontchain_lint.py
@@ -256,8 +256,8 @@
def check_emoji_coverage(all_emoji, equivalent_emoji):
- emoji_font = get_emoji_font()
- check_emoji_font_coverage(emoji_font, all_emoji, equivalent_emoji)
+ emoji_font = get_emoji_font()
+ check_emoji_font_coverage(emoji_font, all_emoji, equivalent_emoji)
def get_emoji_font():
@@ -274,15 +274,12 @@
assert sequence in coverage, (
'%s is not supported in the emoji font.' % printable(sequence))
- # disable temporarily - we cover more than this
- """
for sequence in coverage:
if sequence in {0x0000, 0x000D, 0x0020}:
# The font needs to support a few extra characters, which is OK
continue
assert sequence in all_emoji, (
'Emoji font should not support %s.' % printable(sequence))
- """
for first, second in sorted(equivalent_emoji.items()):
assert coverage[first] == coverage[second], (
@@ -290,8 +287,6 @@
printable(first),
printable(second)))
- # disable temporarily - some equivalent sequences we don't even know about
- """
for glyph in set(coverage.values()):
maps_to_glyph = [seq for seq in coverage if coverage[seq] == glyph]
if len(maps_to_glyph) > 1:
@@ -307,7 +302,7 @@
'The sequences %s should not result in the same glyph %s' % (
printable(equivalent_seqs),
glyph))
- """
+
def check_emoji_defaults(default_emoji):
missing_text_chars = _emoji_properties['Emoji'] - default_emoji
@@ -334,15 +329,9 @@
# Noto does not have monochrome glyphs for Unicode 7.0 wingdings and
# webdings yet.
missing_text_chars -= _chars_by_age['7.0']
- # TODO: Remove these after b/26113320 is fixed
- missing_text_chars -= {
- 0x263A, # WHITE SMILING FACE
- 0x270C, # VICTORY HAND
- 0x2744, # SNOWFLAKE
- 0x2764, # HEAVY BLACK HEART
- }
assert missing_text_chars == set(), (
- 'Text style version of some emoji characters are missing: ' + repr(missing_text_chars))
+ 'Text style version of some emoji characters are missing: ' +
+ repr(missing_text_chars))
# Setting reverse to true returns a dictionary that maps the values to sets of
@@ -362,7 +351,7 @@
if not line:
continue
- chars, prop = line.split(';')
+ chars, prop = line.split(';')[:2]
chars = chars.strip()
prop = prop.strip()
@@ -423,26 +412,6 @@
_emoji_zwj_sequences = parse_unicode_datafile(
path.join(ucd_path, 'emoji-zwj-sequences.txt'))
- # filter modern pentathlon, as it seems likely to be removed from final spec
- # also filter rifle
- def is_excluded(n):
- return n in [0x1f93b, 0x1f946]
-
- def contains_excluded(t):
- if type(t) == int:
- return is_excluded(t)
- return any(is_excluded(cp) for cp in t)
-
- # filter modern pentathlon, as it seems likely to be removed from final spec
- _emoji_properties['Emoji'] = set(
- t for t in _emoji_properties['Emoji'] if not contains_excluded(t))
- _emoji_sequences = dict(
- (t, v) for (t, v) in _emoji_sequences.items() if not contains_excluded(t))
-
- # add in UN flag
- UN_seq = flag_sequence('UN')
- _emoji_sequences[UN_seq] = 'Emoji_Flag_Sequence'
-
def flag_sequence(territory_code):
return tuple(0x1F1E6 + ord(ch) - ord('A') for ch in territory_code)
@@ -454,7 +423,8 @@
flag_sequence('GF'), flag_sequence('GP'), flag_sequence('GS'),
flag_sequence('MF'), flag_sequence('MQ'), flag_sequence('NC'),
flag_sequence('PM'), flag_sequence('RE'), flag_sequence('TF'),
- flag_sequence('WF'), flag_sequence('XK'), flag_sequence('YT'),
+ flag_sequence('UN'), flag_sequence('WF'), flag_sequence('XK'),
+ flag_sequence('YT'),
})
EQUIVALENT_FLAGS = {
@@ -467,6 +437,22 @@
COMBINING_KEYCAP = 0x20E3
+# Characters that Android defaults to emoji style, different from the recommendations in UTR #51
+ANDROID_DEFAULT_EMOJI = frozenset({
+ 0x2600, # BLACK SUN WITH RAYS
+ 0x2601, # CLOUD
+ 0x260E, # BLACK TELEPHONE
+ 0x261D, # WHITE UP POINTING INDEX
+ 0x263A, # WHITE SMILING FACE
+ 0x2660, # BLACK SPADE SUIT
+ 0x2663, # BLACK CLUB SUIT
+ 0x2665, # BLACK HEART SUIT
+ 0x2666, # BLACK DIAMOND SUIT
+ 0x270C, # VICTORY HAND
+ 0x2744, # SNOWFLAKE
+ 0x2764, # HEAVY BLACK HEART
+})
+
LEGACY_ANDROID_EMOJI = {
0xFE4E5: flag_sequence('JP'),
0xFE4E6: flag_sequence('US'),
@@ -502,7 +488,17 @@
def is_fitzpatrick_modifier(cp):
- return 0x1f3fb <= cp <= 0x1f3ff
+ return 0x1F3FB <= cp <= 0x1F3FF
+
+
+def reverse_emoji(seq):
+ rev = list(reversed(seq))
+ # if there are fitzpatrick modifiers in the sequence, keep them after
+ # the emoji they modify
+ for i in xrange(1, len(rev)):
+ if is_fitzpatrick_modifier(rev[i-1]):
+ rev[i], rev[i-1] = rev[i-1], rev[i]
+ return tuple(rev)
def compute_expected_emoji():
@@ -511,26 +507,52 @@
all_sequences = set()
all_sequences.update(_emoji_variation_sequences)
+ # add zwj sequences not in the current emoji-zwj-sequences.txt
+ adjusted_emoji_zwj_sequences = dict(_emoji_zwj_sequences)
+ adjusted_emoji_zwj_sequences.update(_emoji_zwj_sequences)
+ # single parent families
+ additional_emoji_zwj = (
+ (0x1F468, 0x200D, 0x1F466),
+ (0x1F468, 0x200D, 0x1F467),
+ (0x1F468, 0x200D, 0x1F466, 0x200D, 0x1F466),
+ (0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F466),
+ (0x1F468, 0x200D, 0x1F467, 0x200D, 0x1F467),
+ (0x1F469, 0x200D, 0x1F466),
+ (0x1F469, 0x200D, 0x1F467),
+ (0x1F469, 0x200D, 0x1F466, 0x200D, 0x1F466),
+ (0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F466),
+ (0x1F469, 0x200D, 0x1F467, 0x200D, 0x1F467),
+ )
+ # sequences formed from man and woman and optional fitzpatrick modifier
+ modified_extensions = (
+ 0x2696,
+ 0x2708,
+ 0x1F3A8,
+ 0x1F680,
+ 0x1F692,
+ )
+ for seq in additional_emoji_zwj:
+ adjusted_emoji_zwj_sequences[seq] = 'Emoji_ZWJ_Sequence'
+ for ext in modified_extensions:
+ for base in (0x1F468, 0x1F469):
+ seq = (base, 0x200D, ext)
+ adjusted_emoji_zwj_sequences[seq] = 'Emoji_ZWJ_Sequence'
+ for modifier in range(0x1F3FB, 0x1F400):
+ seq = (base, modifier, 0x200D, ext)
+ adjusted_emoji_zwj_sequences[seq] = 'Emoji_ZWJ_Sequence'
+
for sequence in _emoji_sequences.keys():
sequence = tuple(ch for ch in sequence if ch != EMOJI_VS)
all_sequences.add(sequence)
sequence_pieces.update(sequence)
- for sequence in _emoji_zwj_sequences.keys():
+ for sequence in adjusted_emoji_zwj_sequences.keys():
sequence = tuple(ch for ch in sequence if ch != EMOJI_VS)
all_sequences.add(sequence)
sequence_pieces.update(sequence)
# Add reverse of all emoji ZWJ sequences, which are added to the fonts
# as a workaround to get the sequences work in RTL text.
- reversed_seq = list(reversed(sequence))
- # if there are fitzpatrick modifiers in the sequence, keep them after
- # the emoji they modify
- for i in xrange(1, len(reversed_seq)):
- if is_fitzpatrick_modifier(reversed_seq[i - 1]):
- tmp = reversed_seq[i]
- reversed_seq[i] = reversed_seq[i-1]
- reversed_seq[i-1] = tmp
- reversed_seq = tuple(reversed_seq)
+ reversed_seq = reverse_emoji(sequence)
all_sequences.add(reversed_seq)
equivalent_emoji[reversed_seq] = sequence
@@ -549,6 +571,7 @@
set(LEGACY_ANDROID_EMOJI.keys()))
default_emoji = (
_emoji_properties['Emoji_Presentation'] |
+ ANDROID_DEFAULT_EMOJI |
all_sequences |
set(LEGACY_ANDROID_EMOJI.keys()))
diff --git a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
index 5a9860d..76522f9 100644
--- a/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
+++ b/tools/layoutlib/bridge/src/android/view/IWindowManagerImpl.java
@@ -96,7 +96,7 @@
}
@Override
- public void clearForcedDisplayDensity(int displayId) throws RemoteException {
+ public void clearForcedDisplayDensityForUser(int displayId, int userId) throws RemoteException {
// TODO Auto-generated method stub
}
@@ -351,7 +351,8 @@
}
@Override
- public void notifyAppResumed(IBinder token, boolean wasStopped) throws RemoteException {
+ public void notifyAppResumed(IBinder token, boolean wasStopped, boolean allowSavedSurface)
+ throws RemoteException {
// TODO Auto-generated method stub
}
@@ -396,7 +397,8 @@
}
@Override
- public void setForcedDisplayDensity(int displayId, int density) throws RemoteException {
+ public void setForcedDisplayDensityForUser(int displayId, int density, int userId)
+ throws RemoteException {
// TODO Auto-generated method stub
}
diff --git a/wifi/java/android/net/wifi/WifiConfiguration.java b/wifi/java/android/net/wifi/WifiConfiguration.java
index 9d0c20c..d3d5ea0 100644
--- a/wifi/java/android/net/wifi/WifiConfiguration.java
+++ b/wifi/java/android/net/wifi/WifiConfiguration.java
@@ -817,6 +817,7 @@
*/
public static final int NETWORK_SELECTION_ENABLE = 0;
/**
+ * @deprecated it is not used any more.
* This network is disabled because higher layer (>2) network is bad
*/
public static final int DISABLED_BAD_LINK = 1;
@@ -862,7 +863,7 @@
*/
private static final String[] QUALITY_NETWORK_SELECTION_DISABLE_REASON = {
"NETWORK_SELECTION_ENABLE",
- "NETWORK_SELECTION_DISABLED_BAD_LINK",
+ "NETWORK_SELECTION_DISABLED_BAD_LINK", // deprecated
"NETWORK_SELECTION_DISABLED_ASSOCIATION_REJECTION ",
"NETWORK_SELECTION_DISABLED_AUTHENTICATION_FAILURE",
"NETWORK_SELECTION_DISABLED_DHCP_FAILURE",
diff --git a/wifi/java/android/net/wifi/WifiManager.java b/wifi/java/android/net/wifi/WifiManager.java
index bbc3d2f..1633bd9c9 100644
--- a/wifi/java/android/net/wifi/WifiManager.java
+++ b/wifi/java/android/net/wifi/WifiManager.java
@@ -49,6 +49,8 @@
* This class provides the primary API for managing all aspects of Wi-Fi
* connectivity. Get an instance of this class by calling
* {@link android.content.Context#getSystemService(String) Context.getSystemService(Context.WIFI_SERVICE)}.
+ * On releases before NYC, it should only be obtained from an application context, and not from
+ * any other derived context to avoid memory leaks within the calling process.
* It deals with several categories of items:
* <ul>